37
16

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-11-26

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

ですが、repository_dispatchdeployment イベントを使うことで、擬似的に手動で実行可能なワークフローを作成することができます。

workflow_dispatch が追加され、手動で実行可能なワークフローを作成できるようになりました。

比較

event 権限 発火ブランチ 備考
workflow_dispatch public_repo? 指定ブランチ
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 クライアントで 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 クライアントで 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 で知ったので記事を大幅に更新しました。

元ネタ

37
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
16