Github Actionsのワークフローを、外部の何かしらのシステムからcurlか何かで叩いて実行したいタイミングってあると思います。あったのでそのやり方を調べてみました

調べた: repository dispatch event

ワークフローをトリガーするイベント - GitHub Docs

こちらのドキュメントにある、 repository_dispatchというトリガを使用すると、webhookでトリガできるようです

やってみた: ワークフローを作成

まずは、シンプルなワークフローを作成し、Pushしておきます。(走ったら echoするだけ)

1
$ cat .github/workflows/dispatch-event.yml
1
2
3
4
5
6
7
8
9
10
11
12
name: repository dispatch event sample

on:
repository_dispatch:
types: [apple, orange]

jobs:
hoge:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- run: echo "exec repository dispatch event."

ここで、on.repository_dispatch.typesに、 event_typeを好きな数だけカンマ区切りで指定します。上記の例では、 apple orangeの部分です。

これは何を指定しているかというと、のちほど curlでPOSTする際に指定する event_typeパラメータに、 appleorangeが指定されていれば、Actionsが実行される、という流れになります

やってみた: Personal Access Tokenを取得する

取得方法は、こちらを参考にして下さい。

この時、 repoにチェックが入っている状態にします

実行してみる

環境変数などを駆使して、 Authorization: tokenにセキュリティトークンを渡します。(参考: コマンド履歴を残さないようにするメモ

1
2
3
4
5
6
7
8
// コマンド履歴を残さないようにする(A)
$ HISTIGNORE=*

// GithubのParsonal Access Tokenをセットする
$ export TOKEN=xxxxxxxxxxxxxxxxxxx

// (A)の解除
$ unset HISTIGNORE

実行します。 [ユーザ]/[リポジトリ]の所は自身の情報に置き換えて下さい

1
$ curl -X POST -H "Authorization: token $TOKEN" -H "Accept: application/vnd.github.everest-preview+json" --data '{"event_type": "apple" }' https://api.github.com/repos/[ユーザ]/[リポジトリ]/dispatches

Actionsのページに行って、実行されていれば完了です