はいっ、今日もはりきって緑化運動していきましょう。
発端は↓のツイート
先にお断りしておくと、2019/02/22時点のGitHub ActionsでPRのマージイベントは取れないので、上記をやろうとするとActionsの設定を頑張る必要がありそうです。(設定を頑張ったからといってできるとは限らない
発端は↓のツイート
ギッハブでPRマージしたらpixela に草生やしたいな
— 石◯王 もちだ (@mike_neck) 2019年2月19日
なにもわかりませんが Action って言ってるくらいなのでなんとかしてほしい!(乱暴
— a-know (@a_know) 2019年2月19日
先にお断りしておくと、2019/02/22時点のGitHub ActionsでPRのマージイベントは取れないので、上記をやろうとするとActionsの設定を頑張る必要がありそうです。(設定を頑張ったからといってできるとは限らない
ということで、Pull RequestがOpen(Reopen)されたらPixelaに草を生やす、CloseしたらPixelaの草を減らすというGitHub Actionsを作成したいと思います。
手順としては、前に上げたエントリ(NetlifyでdeployされたらPixelaに草を生やす)と似たような感じですね。
(なお、リポジトリをForkされた際にSecretsまで引き継がれるのかどうかは不明)
Secretsの登録はActionsを登録したいリポジトリのSettingsページで行います。
今回はPixelaのユーザー名(PIXELA_USERNAME)とIncrement用のWebhook Hash(PIXELA_PR_INCREMENT_HASH)、Decrement用のWebhook Hash(PIXELA_PR_DECREMENT_HASH)を登録しました。
右側の黒い「New workflow」ってのがイベントの発火ポイントになります。
まずは「Pull RequestがオープンしたらPixelaに草を生やす」workflowを作成していきます。
Editをクリックしたら右側に編集画面が出るので、名前を適当なものに変更してRunは「on: pull_request」を選択します。
次は、黒いヤツの下部にある青い丸を矢印方向、「Drag the blue connector here to create your first action.」って書いてあるところまでぴゅーっと引っ張ります(そのままやんけ)。
すると、Actionを選択する画面が出てくるので「Filters for GitHub Actions」を選択します。lableに適当な名前を付けてargsに「action 'opened|reopened'」を指定します。
できたらFilterのActionの下部の青い丸をピューっと引っ張って新しいActionを作ります。
今度は「HTTP client」を選択して、labelに適当な名前を付けて、argsに「["POST", "pixe.la/v1/users/$PIXELA_USERNAME/webhook/$PIXELA_PR_INCREMENT_HASH"]」と入力します。
また、ここでは先ほど作ったSecretsを使用するので、使用するもの(PIXELA_PR_INCREMENT_HASHとPIXELA_USERNAME)にチェックを入れておきます。

これで「PRがきたらPixelaに草を生やす」workflowができました。
次は「PRを(マージする|しないに関わらず)閉じたらPixelaを除草する」workflowを作ります。
左上の「Create a new workflow」をクリックして新規イベントを作成します。
当初は1つのworkflowで発火ポイントから2本のActionを生やしてて、「PRのopen時にfilter:openは成功するけどfilter:closeが失敗」やその逆でworkflow全体が失敗扱いになって草生えたのでここ重要(実際問題Pixelaには草が生えない)
ここから先のやり方は草を生やすworkflowと同様なのでポイントだけ書きます。
最初に触った時「ははーん?ここでActionsの編集を行うんだな?」って認識でいたら全然違いました。
1回でもActionsが動いた後はこのページからはActionsの編集はできなくなるようです。
Actionsを作成していない場合にこのタブを開くと↓のような画面になって、workflowファイルの編集ができます。
で、workflowを作って保存した後に再度Actionsのタブを開くとまた↑の画面が出てきます。
で、「Create a new workflow」を押すと、main.workflowの編集画面が開きます。この挙動を見た時は「まだベータ版なのでバグってんのかな?」くらいにしか思ってませんでした。
この時、リポジトリにmain.workflowがなければ(別名のworkflowがあっても)新規でmain.workflowを作成させようとします。この挙動を見た時には「Actionsはmain.workflowって名前しかサポートしてないのかな?」くらいにしか思っていませんでした。
で、workflowファイルをいじって(ぶっ壊れたworkflowファイルの)動作確認をしようと思ってPRを投げたところActionsタブが↓のような表示になりました。
workflowファイルを見てみれば確かに変なことを書いてたので直してPushし直しても反映されないのでGitHubサポートに泣きついたけど「別におかしいところはなさそうだけど」で打ち切られました。
workflowファイルを直した後に、PRを投げたら正常に動きましたとさ。
手順
- Pixelaに記録用のグラフとWebhookを作成する
- GitHubのSecretsにWebhookのhashを設定する
- GitHub Actionsを作っていく
手順としては、前に上げたエントリ(NetlifyでdeployされたらPixelaに草を生やす)と似たような感じですね。
PixelaにグラフとWebhookを登録
「NetlifyでdeployされたらPixelaに草を生やす」とまったく同じなので省略します。GitHubにSecretsを登録する
GitHub Actionsはリポジトリ内のコードとして管理するため、Publicリポジトリであれば他の人から丸見えになります。そこにPixelaのユーザー名とWebhookのHashを直接書いてしまうと、他の人がincrement / decrementし放題になるので、Secretsとして登録します。(なお、リポジトリをForkされた際にSecretsまで引き継がれるのかどうかは不明)
Secretsの登録はActionsを登録したいリポジトリのSettingsページで行います。
今回はPixelaのユーザー名(PIXELA_USERNAME)とIncrement用のWebhook Hash(PIXELA_PR_INCREMENT_HASH)、Decrement用のWebhook Hash(PIXELA_PR_DECREMENT_HASH)を登録しました。
GitHub Actionsの設定
GitHub Actionsを作成していない場合はActionsのタブを開いて「Create a new workflow」ってボタンを押せばActionsの作成画面に移動します。右側の黒い「New workflow」ってのがイベントの発火ポイントになります。
まずは「Pull RequestがオープンしたらPixelaに草を生やす」workflowを作成していきます。
Editをクリックしたら右側に編集画面が出るので、名前を適当なものに変更してRunは「on: pull_request」を選択します。
次は、黒いヤツの下部にある青い丸を矢印方向、「Drag the blue connector here to create your first action.」って書いてあるところまでぴゅーっと引っ張ります(そのままやんけ)。
すると、Actionを選択する画面が出てくるので「Filters for GitHub Actions」を選択します。lableに適当な名前を付けてargsに「action 'opened|reopened'」を指定します。

今度は「HTTP client」を選択して、labelに適当な名前を付けて、argsに「["POST", "pixe.la/v1/users/$PIXELA_USERNAME/webhook/$PIXELA_PR_INCREMENT_HASH"]」と入力します。
また、ここでは先ほど作ったSecretsを使用するので、使用するもの(PIXELA_PR_INCREMENT_HASHとPIXELA_USERNAME)にチェックを入れておきます。

これで「PRがきたらPixelaに草を生やす」workflowができました。
次は「PRを(マージする|しないに関わらず)閉じたらPixelaを除草する」workflowを作ります。
左上の「Create a new workflow」をクリックして新規イベントを作成します。
当初は1つのworkflowで発火ポイントから2本のActionを生やしてて、「PRのopen時にfilter:openは成功するけどfilter:closeが失敗」やその逆でworkflow全体が失敗扱いになって草生えたのでここ重要(実際問題Pixelaには草が生えない)
ここから先のやり方は草を生やすworkflowと同様なのでポイントだけ書きます。
- workflowの発火ポイントは同様に「on:pull_request」
- Filterで指定するargsは「action 'closed'」
- HTTP clientに指定するsecretsはINCREMENT_HASHからDECREMENT_HASHに変更
できたやつ
ryosms/sandbox/.github/main.workflowはまりポイント
GitHub Actionsのタブは動作ログを確認するページだということを認識しておきましょう。最初に触った時「ははーん?ここでActionsの編集を行うんだな?」って認識でいたら全然違いました。
1回でもActionsが動いた後はこのページからはActionsの編集はできなくなるようです。
Actionsを作成していない場合にこのタブを開くと↓のような画面になって、workflowファイルの編集ができます。
で、workflowを作って保存した後に再度Actionsのタブを開くとまた↑の画面が出てきます。
で、「Create a new workflow」を押すと、main.workflowの編集画面が開きます。この挙動を見た時は「まだベータ版なのでバグってんのかな?」くらいにしか思ってませんでした。
この時、リポジトリにmain.workflowがなければ(別名のworkflowがあっても)新規でmain.workflowを作成させようとします。この挙動を見た時には「Actionsはmain.workflowって名前しかサポートしてないのかな?」くらいにしか思っていませんでした。
で、workflowファイルをいじって(ぶっ壊れたworkflowファイルの)動作確認をしようと思ってPRを投げたところActionsタブが↓のような表示になりました。
workflowファイルを見てみれば確かに変なことを書いてたので直してPushし直しても反映されないのでGitHubサポートに泣きついたけど「別におかしいところはなさそうだけど」で打ち切られました。
workflowファイルを直した後に、PRを投げたら正常に動きましたとさ。
コメント