GASでGithubAPIを叩いてSlackに投げる
そういうものっぽい。
UrlFetchApp.fetch()
で投げられるように書き換えた
Github APIを叩く場合に、Github のトークンが必要になる(Personal Access Token (以降PAT)とか)
PATを使うとPersonalなだけに個人に紐づいてしまうので良くない。
また、PATはClassicを使うと無期限にできるけれど、セキュリティ上良くないという問題もあり、GithubApps経由でトークンの発行を行い、それをもってリクエストするようにした
この辺を見ていたような気がする。この辺の話を調べても、大体出てくるのはGithub Actionsでやる方法
権限という所でこの辺
Github Appsへのリクエストがちょっと大変だった。
まず、SDKが使えずこちらも UrlFetchApp.fetch()
になる。
リクエスト先は、 /app/installations/{installationID}/access_tokens
ここに諸々まとめて投げる必要がある
Google App Scriptのライブラリがあった
調べてたらGoogle App Scriptのライブラリまで作ってる人がいた
ライブラリ入れたりもあれだなーと思って記事に書いてる内容でやってみたが、後述するPrivate Keyの問題に阻まれて上手く動かなかった。
あと、実装が長いのでちょっとやだなと思って諦めてライブラリを入れた。
ライブラリ導入
READMEに結構書かれている
setupの所でApp Scriptのエディタ上での操作が丁寧に書かれていて、この通りにやって登録できた。
が、Claspで開発しているので、デプロイしたら消えた。
appsscript.json
で dependencies. libraries
の指定をして上げる必要がある。
{
:
"dependencies": {
"libraries": [
{
"userSymbol": "GitHubAppToken",
"libraryId": "1S3DNbJEq91TAWt753wnEnDtUNcnWWBVSUl7_mNiyzi1rc9BwButo07xl",
"version": "1"
}
]
},
:
}
Private Key周りが上手くいかずに困った。
$ openssl pkcs8 -topk8 -inform pem -in xxxxx-private-key.pem -outform pem -nocrypt -out new-private.pem
書かれていたコマンドで変換はおそらくうまくいった。
ただ、鍵を環境変数で読み込んでいて、App Scriptの設定画面に貼った時にうまくいっていなかったのか難航した。
生成した鍵を cat key.pen | pbcopy
とかしてるのにダメで、最初は鍵の変換が上手くいっていないと思って改めてしらべていた。
Template literalにまるっと埋めてみたら上手く動いた所で気づいた。
環境変数から取り出すと、無理やり1行に直された文字列になってしまう。
重要なのが記事内少し上で書いてるフォーマットの話で、改行文字なんかも入れないと上手くいかなかった
var signature = Utilities.computeRsaSha256Signature("this is my input",
"-----BEGIN PRIVATE KEY-----\nprivatekeyhere\n-----END PRIVATE KEY-----\n");
環境変数として設定する前に、変換後のKeyの改行部分に改行文字を入れた上で環境変数に設定したら上手く動いた。
Slackへの通知
UrlFetchApp.fetch()
でいく
このあたりを参考にSlackアプリを作って、あとはドキュメントを元にメッセージ投稿なリクエストを組み立てて終わり