notebook

都内でWEB系エンジニアやってます。

GitHub Ationsで任意のタイミングでトリガーを発火させる

GitHub Actionsで定期実行をしたいなと思っていたので調べてみたのですが単体では実現できなそうでした

ただ任意のタイミングでトリガーを発火させることはrepository_dispatchイベントを使えば可能なようです

Triggering a RepositoryDispatch webhook | GitHub Developer Guide developer.github.com

ドキュメントを見ると

curlでAPI叩けばOK!ってはなしですね

ということで試してみます

tokenの発行

https://github.com/settings/tokens

Settings > Developer settings > Personal access tokens

からAPI用のtokenを発行します

Actionの定義

とりあえずなにか動作させるだけなので簡単な設定をしてみます

  • .github/main.workflow
workflow "repository-dispatch" {
  on = "repository_dispatch"
  resolves = ["shell"]
}

action "shell" {
  uses = "actions/bin/sh@master"
  args = ["cat /github/workflow/event.json"]
}

repository_dispatchイベントをトリガーにしてshellのアクションを実行します

shellアクションではただ/github/workflow/event.jsonをcatするだけです

API叩く

documentにしたがってAPIを叩いてみます

curl -XPOST -u "swfz:token" -H "Accept: application/vnd.github.everest-preview+json"  -H "Content-Type: application/json" https://api.github.com/repos/swfz/gh-action-sample/dispatches --data '{"event_type": "custom.preview"}'

f:id:swfz:20190331235420p:plain

動きました

Running 'cat /github/workflow/event.json'...
{
    "action":"custom.preview",
    "branch":"master",
    ......
    ......
    ......
}

event_typeのキーで渡した値がactionの内容に渡ってくるみたいですね

キーの対応などまでは調べてないのですがここである程度自由度を保てそうな感じですね

おわり

任意のタイミングでActionを動かすことができるようになりました

既存のトリガーで実現できないものがある場合は今回の方法でトリガーが自由に設定できそうですね

やりようによっては定期実行とかも可能ですね

結局curlコマンドをGASなりサーバなりどこかにセットしないといけない。。。ということで今の所GitHubActionsで定期実行をやるメリットはなさそうに思えますが。。。w