我的存储库中有 2 个 Github Actions 工作流程,其中一个步骤需要获取 PR 中已修改的所有文件(删除的文件除外)。我在第一个中使用这个:
on:
pull_request:
branches: [ main ]
jobs:
get_files:
name: run_on_pr
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@master
with:
fetch-depth: 0
- name: Modified files
run: |
git fetch origin main:main
git diff --name-only --diff-filter=d main~ main
这个工作正常,我可以获得所有已修改文件的列表。但是,在第二个工作流程中(应该在合并 PR 时运行),这不起作用。
on:
push:
branches: [ main ]
jobs:
get_files:
name: run_when_pr_is_merged
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@master
with:
fetch-depth: 0
- name: Modified files
run: |
git fetch origin main:main
git diff --name-only --diff-filter=d main~ main
我收到错误fatal: refusing to fetch into branch 'refs/heads/main' checked out at '/home/runner/....'
。我认为错误来自git fetch origin main:main
当工作流程运行时main
分支,我正在尝试在那里进行提取。我已经删除了它,但仍然没有得到我需要的列表。有什么帮助或更好的方法来获取两个工作流程中 PR 中已修改文件的列表吗?
比这更复杂一点。
对于 PR 的 GitHubaction/checkout
创建一个分离头,模拟 PR 合并到目标分支中。您可以在结帐操作本身的日志中看到它。您可以通过使用不同的引用来改变这种行为,但我不推荐它 - 它实际上使事情变得更容易,特别是对于分叉的 PR。
要获取 PR 中已更改文件的列表,您只需使用 fetch-depth: 2 签出即可获取以前的提交,然后获取通过合并修改的文件:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 2
- name: Get changes
run: git diff --name-only -r HEAD^1 HEAD
For push
事件,它也有点复杂,因为你可以在一次推送中进行多次提交,所以这里你必须获取深度:0,然后使用 GitHub 上下文值来找出push
:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Get changes
run: git diff --name-only ${{ github.event.before }} ${{ github.event.after }}
如果您想要一个工作流程来处理这两个问题,您可以执行以下操作:
- uses: actions/checkout@v3
with:
fetch-depth: ${{ github.event_name == 'pull_request' && 2 || 0 }}
- name: Get changed files
id: changed-files
run: |
if ${{ github.event_name == 'pull_request' }}; then
echo "changed_files=$(git diff --name-only -r HEAD^1 HEAD | xargs)" >> $GITHUB_OUTPUT
else
echo "changed_files=$(git diff --name-only ${{ github.event.before }} ${{ github.event.after }} | xargs)" >> $GITHUB_OUTPUT
fi
- name: List changed files
run: |
for file in ${{ steps.changed-files.outputs.changed_files }}; do
echo "$file was changed"
done
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)