GitHub Actions 备忘

GitHub Actions 如何仅在某些文件发生更改时执行特定的 job

要实现某些 job 仅在特定文件发生更改时执行,您可以在工作流中使用 if 语句来检查变更文件。这需要使用 actions/checkoutdorny/paths-filter 动作。下面是一个示例,仅在 my_folder 中的文件发生更改时才执行名为 run_job 的 job:

yaml
1name: Conditional Job Execution
2
3on: [push, pull_request]
4
5jobs:
6  check_changes:
7    runs-on: ubuntu-latest
8    outputs:
9      has_changes: ${{ steps.filter.outputs.has_changes }}
10
11    steps:
12      - name: Checkout repository
13        uses: actions/checkout@v2
14
15      - name: Check for changes in my_folder
16        uses: dorny/paths-filter@v2
17        id: filter
18        with:
19          filters: |
20            has_changes:
21              - 'my_folder/**'
22
23  run_job:
24    runs-on: ubuntu-latest
25    needs: check_changes
26    if: ${{ needs.check_changes.outputs.has_changes == 'true' }}
27
28    steps:
29      - name: Checkout repository
30        uses: actions/checkout@v2
31
32      - name: Run task only if my_folder files changed
33        run: echo "Files in my_folder have changed, running the task."

在这个示例中,我们首先创建一个名为 check_changes 的 job,使用 dorny/paths-filter 动作来检查是否有变更的文件。然后,我们将其输出设置为 has_changes,并在 run_jobif 语句中使用该输出,如果 has_changestrue,则执行 run_job。这样,仅当 my_folder 中的文件发生更改时,run_job 才会执行。

默认 Actions 只有部分权限

Workflows have read permissions in the repository for the contents and packages scopes only.

使用 permissions.contents 字段增加写入权限,如下:

yaml
1name: 'GitHub CI'
2
3permissions:
4  contents: write