在Github操作中,如何在关闭/合并后从Pull请求中获取文件的差异



我正试图在GitHub Action中运行一些代码,该操作依赖于合并到我们的develop分支中的文件。在合并后,我似乎找不到合适的环境变量或事件值来获得拉请求的diff。我已经尝试在pushdevelop分支上运行此操作,也尝试在具有type: closed的拉请求上运行该操作,并以拉请求是否合并为条件。

以下是我尝试过的两件事:

关闭拉取请求:

name: test_pr_action
on:
pull_request:
types: 
- closed
jobs:
job1:
if: github.event.pull_request.merged == 'true'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
ref: ${{ github.ref }}
- name: one step
run: |
git fetch origin $GITHUB_BASE_REF --depth=1
git diff --diff-filter=AM --name-only ${{ github.event.base.sha }} ${{ github.event.head.sha }}

对于pull请求,该步骤会运行,但不会拾取SHA,因此不会输出任何内容。

推送:

name: test_pr_action
on:
push:
branches:
- main
jobs:
job1:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
ref: ${{ github.ref }}
- name: one step
run: |
git fetch origin $GITHUB_BASE_REF --depth=1
git diff --diff-filter=AM --name-only ${{ github.event.before }} ${{ github.event.after }}

对于推送,步骤失败是因为它不喜欢第一个SHA。

在合并之前,我已经在pushpull request上运行了一些操作,所以我以前使用过这些值,但无法使其适用于这种情况。

任何建议都有帮助!谢谢

多亏了@GuiFalourd,我才能够处理更改文件操作。

我的代码最终看起来像这样:

name: action1
on:
push:
branches: [ develop ]
jobs:
job1:
runs-on: machine1
steps:
- uses: actions/checkout@v2
with:
ref: ${{ github.ref }}
- name: Get changed files
id: changed-files
uses: tj-actions/changed-files@v14.4
with:
since_last_remote_commit: 'true'
- name: get_modified_files
id: diff
working-directory: './diff_files'
run: |
git config diff.renameLimit 99000
git fetch origin $GITHUB_BASE_REF --depth=1
touch files.txt
for file in ${{ steps.changed-files.outputs.all_changed_files }}; do
echo $file >> files.txt
done
cat files.txt | split -l 100 -a 8
rm files.txt
export filename_string=""
for i in `ls`; do export filename_string=$filename_string"file!"$i; done
echo "::set-output name=filenames::$filename_string"

对于那些想知道额外的东西是什么的人来说,我将把all_changed_files变量中的每个文件名读取到一个单独的文件中,我将其分类并拆分为其他几个文件,这些文件留在diff_files目录中。然后,我的python脚本将读取该目录,该脚本将在后续步骤中运行。我把它分解成这样的单独文件,因为这个repo中的PR往往有数千个文件差异。

最新更新