如何在GitLab CI中仅对合并入master前的squash提交运行conventional commit检查
GitLab CI 针对squash commit执行commitizen检查的需求与实现思路
我需要在GitLab CI流水线中运行commitizen(用于强制校验conventional commit提交规范的Python工具)的lint检查命令cz check,要求仅对从feature分支合并入master之前的squash commit执行该检查,目前暂未找到可直接落地的实现方案。
现有前提假设
- 仅当合并策略为merge commit(非fast forward模式)时该需求可实现:需要有一个合并入master前可触发失败的提交节点,才能中止合并流程;如果采用fast forward策略,合并全程仅产生1个提交,等流水线失败时代码已经合入master,无法起到拦截效果。我目前可以接受使用merge commit策略,但也想了解fast forward场景下的解决方案。
- squash commit会在feature分支上生成并触发对应流水线。
- 如果squash commit对应的流水线运行失败,GitLab CI会自动终止后续的merge commit操作。
待解决的核心问题
若上述假设成立,需要在流水线中判断当前处理的提交是否为squash commit,目前暂未找到GitLab或Git原生提供的可直接用于该判断的标识字段。
初步实现规划
计划引入commitizen官方提供的pre-commit钩子,配置stages: [manual],之后按照pre-commit官方的阶段配置规则,在流水线中执行pre-commit run --hook-stage manual [hookid]命令触发检查。
内容的提问来源于stack exchange,提问作者adamcunnington
相关产品推荐
相关产品推荐

