如何实现仅针对已提交文件运行gherkin-lint校验?
gherkin-lint仅校验已提交文件的实现方案
gherkin-lint本身支持接收指定文件路径作为入参,只要过滤出目标已提交/待提交的.feature文件列表传入命令,就不会触发全量扫描,可按实际使用场景选择对应方案:
本地提交前自动校验(适配wdio/cucumber框架项目)
这是日常开发最常用的方案,搭配husky+lint-staged实现提交时自动校验,不会扫描全量文件:
- 安装开发依赖:
npm i husky lint-staged -D - 初始化husky git钩子:执行
npx husky install,然后新增pre-commit钩子,执行命令npx husky add .husky/pre-commit "npx lint-staged" - 在package.json中添加lint-staged规则,仅匹配暂存区的feature文件传给gherkin-lint:
{ "lint-staged": { "*.feature": "gherkin-lint" } }
配置完成后,每次git commit操作会自动触发校验,仅检查本次提交暂存的feature文件,不会扫描项目内其他未改动文件。
手动执行/CI流水线校验指定提交范围文件
如果需要手动执行校验,或者在CI环节校验某次PR、某次提交涉及的feature文件,可通过git命令筛选出目标文件列表后传入gherkin-lint:
- 校验本地暂存区待提交的feature文件:
gherkin-lint $(git diff --cached --name-only --diff-filter=ACM | grep '\.feature$') - 校验当前分支相对主分支的所有改动feature文件(PR场景常用):
gherkin-lint $(git diff --name-only --diff-filter=ACM origin/main...HEAD | grep '\.feature$') - 校验指定commit提交涉及的feature文件:
gherkin-lint $(git diff-tree --no-commit-id --name-only -r <替换为目标commit哈希值> | grep '\.feature$')
命令说明:
--diff-filter=ACM用于过滤掉已删除的文件,避免传入不存在的路径导致lint报错;grep规则仅保留后缀为.feature的gherkin文件,其余类型文件不会传入gherkin-lint。
默认命令全量扫描的原因
直接执行无参数的gherkin-lint命令时,工具会读取配置中声明的扫描路径,若未配置路径则递归扫描当前工作目录下所有.feature文件。只要在命令后追加指定的文件路径列表,工具就会仅校验传入的目标文件,不会触发全量扫描逻辑。
内容的提问来源于stack exchange,提问作者Manoj Rajan
相关产品推荐
相关产品推荐

