GitHub Actionsがマイブームです。とても便利なGitHub Actionsですが、「ボタンを押してデプロイ」のようなことができないのが不便でした。
GitHub Actionsをトリガーするボタンを作るサービスを作りたいって思ってるけどこれあと5分待てば公式から出るでしょと思い続けて2週間近く経ちました
— こーき@だん (@kouki_dan) September 4, 2019
5分待てば公式のものができると思いつつ、なかなか出ないので作ってしまいました。
作ったもの
Action Buttonというサービスを作りました。 リポジトリはこちらです
GitHub Actionsのトリガーには外部イベントをトリガーとする repository_dispatch
というものがあります。
ワークフローをトリガーするイベント - GitHub ヘルプ
任意のリポジトリに対し、この repository_dispatch
を発行するボタンを作りました。
Action Buttonで作ったボタンをGitHubのREADMEに設置することで「ボタンを押してデプロイ」のようなことが実現できるようになります。
使い方
Action ButtonはGitHub Appsとして動きます。また、repository_dispatch
を発行するためにユーザーのOAuthトークンを利用するため、OAuth認可をする必要もあります。
- まずは以下のリンクからボタンを設置したいリポジトリに対しAction Buttonをインストールします
- 以下のリンクからサインインし、ボタンを設置するリポジトリを探します
- https://github-action-button.web.app/
- (実装をサボっていてページング非対応です。表示されない場合は直接リポジトリのURLを入力してください)
- 実行したい名前と、実行したいActionのevent_typeを指定しボタンのマークダウンを生成します
- 生成したマークダウンテキストをコピペし、READMEなどに貼り付けます
- これもAction ButtonのGitHubリポジトリのREADMEに例があります。
- write権限のあるユーザーがGitHubからこのボタンをタップすることで自動的にディスパッチイベントが発行されます
- ボタンをタップするとAction Buttonのイベントを発行するページへと遷移します。
- GitHubの該当するリポジトリをリファラーに持つ場合は自動的にイベントを発行するようにしています
- 他のリファラをURLに持つ場合はボタンが表示されるので、それをクリックすることでイベントを発行できます
準備のステップ数は多いですが、一度セットアップすればボタンをクリックするだけでデプロイできてとても便利です(Action ButtonのデプロイにもAction Buttonで生成したボタンを使っている)
使っている様子
デプロイしたいタイミングでREADMEをクリックします。動画にしてみました
まとめ
GitHub ActionsはGitHubのイベントを元に色々なタスクを実行できて便利な一方、任意のタイミングで実行したいタスクを記述するためには適したイベントがなく不便でした。リポジトリにある手頃なボタンとして、Starをトグルすることでイベントを発行するようなハックをしていた場合もあるみたいです。 Action Buttonではその問題を解決し、このケースに適したイベント(repository_dispatch)を簡単に発行できるようにします。masterにpushされたら毎回実行されて欲しくはないけど、cronで実行するほどでもない、そんなタスクにぜひ使ってみてください。
僕はデプロイボタンとして使っています。