me

Github Action 技巧查询


Github Action 上下文

设置环境变量

除了通过 env: 字段来直接指定环境变量,还可以在工作流运行期间使用 set-env 命令来设置环境变量。

echo "{environment_variable_name}={value}" >> "$GITHUB_ENV"

保留 job 的输出

输出也是有两种方式(但是这两种方式都是要 job/step 的 id):

可以查询这个比较简单的示例,以下仅展示一部分:

  create_release:
    runs-on: ubuntu-latest
    outputs:
      changes: ${{ steps.changelog_reader.outputs.changes }}
      version: ${{ steps.changelog_reader.outputs.VERSION }}
    steps:
      - uses: actions/checkout@v3
      - name: Get version number
        id: get_version
        run: |
          VERSION=${GITHUB_REF#refs/tags/}
          echo "VERSION=${VERSION/v_gui\./}" >> $GITHUB_ENV
      - name: Changelog Reader
        id: changelog_reader
        uses: mindsers/changelog-reader-action@v2.2.2
        with:
          path: './crates/cli/CHANGELOG.md'
          version: ${{ steps.get_version.outputs.version }}

之后我们指定该 job,然后使用 ${{ needs.create_release.outputs.changes }} 方式来访问。

指定仓库执行

在其它成员 fork 仓库的时候,我们不希望其它成员也运行 GitHub workflow,可以使用 if 语句进行判别。像这样:

if: github.repository == 'jaywcjlove/reference'

参考:https://github.com/fwqaaq/translator/blob/23dcf1f6679531457df49d38d6b9e28dd8430d8d/.github/workflows/main.yaml#L12

矩阵策略

在 matrix 你可以指定不同平台,不同版本之间的组合,进行多个 job 的执行。