🖥️

過去に実行したGitHubActionsワークフローのアーティファクトを取得したい

に公開

アーティファクトをさくっと取得したい

デプロイフローにいくつか手順があって、前段で実行したワークフローで保存したアーティファクトを取得したいなんてことがあると思います。
そんなときはワークフローのrun_idを取得して辿ることが可能です。

コード例

過去に実行したワークフローの情報を取得する際にGitHubのREST APIを使っています。
ワークフローのIDを指定することも可能ですが、以下の例ではファイル名を使ってrun_idを取得しています。
またQuery parametersで正常終了の場合や実行者などで条件をつけることもできます。

name: Download Artifact from Another Workflow

on:
  workflow_dispatch:
    inputs:
      DEPLOY_WORKFLOW_FILE_NAME:
        required: true
        type: string
      ENVIRONMENT:
        required: true
        type: string
      ARTIFACT_NAME:
        required: true
        type: string

permissions:
  contents: read
  actions: read

jobs:
  download-artifact:
    runs-on: ubuntu-latest
    steps:
      - name: Get latest workflow run_id
        id: get-run-id
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          gh api \
            "repos/${{ github.repository }}/actions/workflows/${{ inputs.DEPLOY_WORKFLOW_FILE_NAME }}/runs?status=success&environment=${{ inputs.ENVIRONMENT }}" > response.json
          run_id=$(cat response.json | jq -r '.workflow_runs[0].id')
          echo "run_id=${run_id}" >> $GITHUB_OUTPUT

      - name: Download artifact
        if: steps.get-run-id.outputs.run_id != ''
        uses: actions/download-artifact@v4
        with:
          name: ${{ inputs.ARTIFACT_NAME }}
          run-id: ${{ steps.get-run-id.outputs.run_id }}
          github-token: ${{ secrets.GITHUB_TOKEN }}

参考

https://docs.github.com/en/rest/actions/workflow-runs?apiVersion=2022-11-28#list-workflow-runs-for-a-workflow
https://docs.github.com/ja/actions/writing-workflows/choosing-what-your-workflow-does/storing-and-sharing-data-from-a-workflow#uploading-build-and-test-artifacts
https://docs.github.com/ja/actions/writing-workflows/choosing-what-your-workflow-does/storing-and-sharing-data-from-a-workflow#downloading-or-deleting-artifacts

SMARTCAMP Engineer Blog

Discussion