GitHub Actions在Pull Request场景下打标签仅标记master分支问题求助
问题修复方案
根因
标签打在master分支HEAD提交的问题由两个配置错误导致:
- PR触发场景下
github.sha取值不符合预期:Pull Request触发工作流时,github.sha指向的是GitHub自动生成的「当前PR与master分支的临时合并提交」,并非PR源分支的实际提交。如果合并测试提交生成后master有更新,这个临时合并提交的父提交就会是最新的master HEAD,直接给这个SHA打标签就会出现标签绑定到master HEAD的问题。 - checkout动作未适配PR事件拉取规则:旧版本
actions/checkout@v2在PR事件下默认只会浅拉取目标分支(master)的内容,没有拉取PR源分支的提交记录,即使指定了ref: ${{ github.sha }},最终操作的提交还是和master绑定。
修复后工作流配置
on: push: branches: - "master" pull_request: branches: [ master ] jobs: tag: runs-on: ubuntu-latest outputs: name: ${{ steps.generate_tag.outputs.name }} target_sha: ${{ steps.get_target_sha.outputs.sha }} steps: - name: 确定打标签的目标提交SHA id: get_target_sha run: | if [ "${{ github.event_name }}" = "pull_request" ]; then echo "::set-output name=sha::${{ github.event.pull_request.head.sha }}" else echo "::set-output name=sha::${{ github.sha }}" fi - uses: actions/checkout@v3 with: ref: ${{ steps.get_target_sha.outputs.sha }} fetch-depth: 0 - name: 生成标签名 id: generate_tag run: echo "::set-output name=name::v$(date -d "$(git show -s --format=%ci)" +'%Y.%-m.%-d-%-H%M%S')" go: runs-on: macos-latest needs: [tag] steps: - uses: actions/checkout@v3 with: ref: ${{ needs.tag.outputs.target_sha }} fetch-depth: 0 - name: 正式版本打标签(master推送触发) if: github.event_name == 'push' && github.ref == 'refs/heads/master' run: | git config user.name "GitHub Actions" git config user.email noreply@github.com git tag "${{ needs.tag.outputs.name }}" -m "Version: ${{ needs.tag.outputs.name }}" # 若需要同步标签到远程仓库,可新增:git push origin ${{ needs.tag.outputs.name }} - name: 预发布版本打标签(PR触发) if: github.event_name == 'pull_request' run: | git config user.name "GitHub Actions" git config user.email noreply@github.com git tag "${{ needs.tag.outputs.name }}" # 若需要同步标签到远程仓库,可新增:git push origin ${{ needs.tag.outputs.name }}
核心修改说明
- 新增
target_sha输出参数,PR事件下直接取github.event.pull_request.head.sha,该值为PR源分支的最新实际提交SHA,与master分支完全独立 - 替换原有的
contains(github.ref, 'master')判断逻辑,改为直接匹配事件类型和完整ref值,避免分支名包含master时出现匹配错误 - 给checkout动作添加
fetch-depth: 0参数,拉取全量提交记录,避免打标签时因提交记录不全出现异常 - 升级checkout到v3版本兼容性更好,若不需要升级保留原有v2.3.4版本也不影响逻辑运行
内容的提问来源于stack exchange,提问作者Peter Lind
相关产品推荐
相关产品推荐

