如何更可靠地从Renovate单提交PR中提取Git Trailer?
问题
我使用Renovate生成带有Git trailer的PR,这些PR始终仅包含单个提交。已配置Renovate将更新列表嵌入提交正文,现需在Github Actions步骤中获取该列表。当前通过设置GITHUB_SHA={{github.event.pull_request.head.sha}},并使用git log ${GITHUB_SHA}^1..${GITHUB_SHA}^2搭配格式化参数提取trailer,但该方法依赖合并提交的父提交顺序及合并提交的存在,不够健壮。希望步骤可复用,即使checkout使用替代ref也能正常工作,寻求更简洁可靠的提取方式。
当前的Github Actions步骤如下:
- name: Extract New-Versions git trailer from Renovate if: ${{ github.event_name == 'pull_request' }} env: GITHUB_SHA: "{{ github.event.pull_request.head.sha }}" run: | echo 'packages: .' > cabal.project for constraint in $(git log "--format=%(trailers:key=New-Versions,valueonly=true)" ${GITHUB_SHA}^1..${GITHUB_SHA}^2) do echo "constraints: $constraint" >> cabal.project done
优化方案
直接针对PR的head提交本身提取trailer,无需依赖合并提交的父节点,修改后的Github Actions步骤如下:
- name: Extract New-Versions git trailer from Renovate if: ${{ github.event_name == 'pull_request' }} env: PR_HEAD_SHA: "${{ github.event.pull_request.head.sha }}" run: | echo 'packages: .' > cabal.project # 直接从PR的head提交中提取New-Versions trailer for constraint in $(git log --format="%(trailers:key=New-Versions,valueonly=true)" -1 "$PR_HEAD_SHA") do echo "constraints: $constraint" >> cabal.project done
方案优势
- 无需依赖合并提交:直接操作PR的head提交,无论PR是否已合并,都能正常提取trailer
- 规避父提交顺序风险:彻底避免原方案中因父节点顺序变化导致的提取失败问题
- 兼容性更强:即使checkout时使用替代ref(如PR的head分支而非合并提交),只要能获取PR的head SHA即可正常工作
- 逻辑更简洁清晰:通过
-1参数指定仅获取目标提交的信息,命令逻辑直观易懂
内容的提问来源于stack exchange,提问作者Janus Troelsen
相关产品推荐
相关产品推荐

