GitHub Actions: workflow_run でCI成功後にだけCDを起動する
CDワークフローのトリガーを workflow_run にすると、「CIワークフローが完了したら」起動でき、CIとCDを別ファイルに分けてモジュール化できる。
コード例
yaml
# .github/workflows/deploy.yml
name: Deploy
on:
workflow_run:
workflows: ["CI"] # CI ワークフローの name
types: [completed]
branches: [main]
jobs:
deploy:
if: ${{ github.event.workflow_run.conclusion == 'success' }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.workflow_run.head_sha }} # CIが検証したコミットをデプロイ
- run: ./scripts/deploy.sh注意点
completedは失敗時も発火するので、conclusion == 'success'の判定が必須。workflow_runで起動するワークフローはデフォルトブランチ上の定義が使われる。- フォークからのPRで起動されたCIを起点にすると、シークレット付きで信頼できないコードを動かす危険がある(ref の扱いに注意)。
- 単純に同じワークフロー内で済むなら、ジョブの
needs:で十分。