从Travis CI迁移至GitHub Actions:如何替换$TRAVIS_COMMIT_RANGE变量以获取提交范围
替代Travis CI的
$TRAVIS_COMMIT_RANGE在GitHub Actions中的方案 好问题!在GitHub Actions环境中,并没有一个直接等同于Travis CI里$TRAVIS_COMMIT_RANGE的全局变量,但根据触发工作流的事件类型,我们可以用不同的内置变量组合来实现相同的提交范围对比效果:
1. 针对Pull Request(PR)事件
当工作流由PR触发时,GitHub会提供PR的基准分支和头部分支的SHA值,我们可以直接组合这两个值来生成提交范围:
git diff --name-only "${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }}"
这个命令会对比PR的目标分支(base)和当前PR分支(head)之间的所有变更文件,和Travis在PR场景下的$TRAVIS_COMMIT_RANGE行为完全一致。
2. 针对Push事件
如果工作流是由代码推送到分支触发的,可以使用推送前后的SHA值:
git diff --name-only "${{ github.event.before }}..${{ github.event.after }}"
注意:如果是该分支的第一次推送,github.event.before会是一串全0的SHA值(0000000000000000000000000000000000000000),这时候可以做个简单的兼容处理,比如对比上一次提交:
BEFORE_SHA="${{ github.event.before }}" if [ "$BEFORE_SHA" = "0000000000000000000000000000000000000000" ]; then BEFORE_SHA="HEAD~1" fi git diff --name-only "$BEFORE_SHA..${{ github.event.after }}"
3. 其他事件(如手动触发、定时任务等)
对于手动触发(workflow_dispatch)或定时任务这类没有明确提交范围的事件,你需要根据需求自行定义对比基准,比如对比当前提交和主分支的差异:
git diff --name-only origin/main..${{ github.sha }}
如果需要对比更早的提交,注意GitHub Actions默认是浅克隆仓库(depth=1),这时候需要先执行git fetch --depth=100(或更大的深度)来获取足够的提交历史,否则会找不到对应的SHA。
内容的提问来源于stack exchange,提问作者avnshrai
相关产品推荐
相关产品推荐

