GitHub Actions で手動トリガーのワークフローを作る - proudust.github.io

GitHub Actions で手動トリガーのワークフローを作る

GitHub Actions は GitHub 内の様々なイベントをトリガーとして実行されるワークフローを設定できますが、現状手動で実行可能なワークフローを作成することはできません。 ですが、repository_dispatchdeployment イベントを使うことで、擬似的に手動で実行可能なワークフローを作成することができます。

repository_dispatchdeployment の比較

event 権限 発火ブランチ 備考
repository_dispatch public_repo master のみ types: による絞り込みが可能
deployment repo_deployment 指定ブランチ GitHub Pages などとの併用不可

repository_dispatch の場合

1. ワークフローのトリガーに repository_dispatch イベントを追加

今回は cron で毎日 0 時に実行されるワークフローを手動でも実行可能にしてみます。 on:repository_dispatch: types: [test_trigger] を書き足して下さい。

  name: Example workflow

  on:
+   repository_dispatch:
+     types: [test_trigger]
    schedule:
      - cron: "0 15 * * *"

  jobs:
    example:
      runs-on: ubuntu-latest

      steps:
        # 省略

2. 任意の HTTP クライアントで Repository API を叩く

GitHub の Create a repository dispatch event の API を叩きます。 curl の場合以下のようになります。

curl -X POST -H "Authorization: token $GITHUB_TOKEN" \
             -H "Content-Type: application/json" \
             https://api.github.com/repos/:user/:repo/dispatches \
             --data '{"event_type":"test_trigger","client_payload":{"test":true}}'
  • -H "Authorization: token $GITHUB_TOKEN"
    認証用の Personal access token を渡す。$GITHUB_TOKENpublic_repo の権限を持つ Personal access token に置き換えてください。(プライベートリポジトリの場合は repo 権限が必要です。)
  • --data '{"event_type":"test_trigger","client_payload":{"test":true}}'
    event_type は必須で、1.の types: で指定した文字列のいずれかにに完全一致する必要があります。
    client_payload は省略可能で、ここに渡したデータは ${{ github.event.client_payload }} から参照できます。

deployment の場合

1. ワークフローのトリガーに deployment イベントを追加

on:deployment: を書き足して下さい。

  name: Example workflow

  on:
+   deployment:
    schedule:
      - cron: "0 15 * * *"

  jobs:
    example:
      runs-on: ubuntu-latest

      steps:
        # 省略

2. 任意の HTTP クライアントで Deployment API を叩く

GitHub の Create a deployment の API を叩きます。 curl の場合以下のようになります。

curl -X POST -H "Authorization: token $GITHUB_TOKEN" \
             -H "Content-Type: application/json" \
             https://api.github.com/repos/:user/:repo/deployments \
             --data '{"ref": "master"}'
  • -H "Authorization: token $GITHUB_TOKEN"
    認証用の Personal access token を渡す。$GITHUB_TOKENrepo_deployment の権限を持つ Personal access token に置き換えてください。
  • --data '{"ref": "master"}'
    ref に指定されたコミットを対象にワークフローが実行されます。ブランチ名かタグ名、コミットハッシュを指定します。 省略可能な payloadenvironment などの値は ${{ github.event.deployment }} から参照できます。

注意点

  • GitHub Pages が有効になっている場合、ソースブランチに指定されているブランチにコミットされることでも deployment イベントが発火されてしまいます。

メモ

2019 年 11 月現在、repository_dispatchdeployment トリガーを event_typeenvironment などの値でフィルタリングしたり、ワークフロー内で参照したりはできないようです。 あるいはドキュメントに書かれていないだけかも?

(2019 年 2 月 3 日追記) 上記ドキュメントに書かれていないだけなことを Repository Dispatch · Actions · GitHub Marketplace で知ったので記事を大幅に更新しました。

元ネタ


Proudust

Proudust

Virtual cockadoodledoo