GithubのPushログをGoogle Spreadsheetsに記録する
Google Apps Scriptを記述する
Google Spreadsheetsを新規作成します。SpreadsheetのIDとシートの名前を控えておきます。スクリプトからシートを呼び出すときに必要になります。
上のメニューバーから『ツール→スクリプトエディタ』を開きます。
スクリプトエディタでGithub Webhookから送られてくる処理をSpreadsheetに記述する処理を書きます。
一番簡単なスクリプトを下に載せておきます。
const doPost = (e) => { const dataString = e.postData.getDataAsString(); const data = JSON.parse(dataString); edit(data); return; }; const edit = (data) => { const commits = data["commits"]; const sheet = SpreadsheetApp .openById(YOUR_SPREADSHEET_ID_HERE) .getSheetByName(YOUR_SHEET_NAME_HERE); sheet .getRange(sheet.getLastRow()+1, 1, commits.length, 5) .setValues(commits.map((commit, key) => ([ commit["id"], commit["message"], commit["author"]["name"], commit["timestamp"], commit["url"], ]))); };
スクリプト中のSpreadsheet IDとSheet Nameは各自のものに差し替えておいてください。
スクリプトをウェブアプリケーションとして導入する
上のメニューから『公開→ウェブアプリケーションとして導入』を選択します。
who has access to the app:のところをanyone, even anonymousに変更しておきます。
Github Webhookのリクエストを通すためです。
Deployを押すと、「スプレッドシートがスクリプトによって操作されますが許可しますか」的なことを聞かれるので構わず続行します。
これで導入は完了です。
『公開→ウェブアプリケーションとして導入』のところに『Current web app URL』が表示されているはずです。
"https://script.google.com/macros/s/{YOUR_APPS_ID}/exec"の形式のやつです。
このURLに、ためしにbash curlでそれっぽいデータをPOSTリクエストしてみます。
curl \ -X POST \ -H 'Content-Type: application/json' \ -d '{"commits": [{"id": "1", "message": "hello.", "author": {"name": "me"}, "timestamp": "2020/10/10", "url": "example.com"}]}' \ 'https://script.google.com/macros/s/AKfycbw6crKJ9ZJErVurbDI5ZkeZut3a-lh8MULELKR1EM3k_DfNrpQ/exec'
下のようなメッセージが返ってくるはずです。
何も返されませんでしたというエラーが出ていますが、これはdoPost関数の返り値をしていないからで、今回の場合は問題になりません。
○行目でエラーが生じました、的なメッセージが出た場合は、スクリプトの該当箇所を修正したのちに、改めて『ウェブアプリケーションとして導入』からProject VersionをNewにして更新するとうまくいくようです。
Spreadsheetにも無事反映されています。
Github WebhookにスクリプトのURLを貼る
自分のレポジトリのページで、設定→Webhookを開きます。URLはhttps://github.com/{USER_NAME}/{REPOSITORY_NAME}/settings/hooksです。
『Add Webhook』を開き、『Payload URL』に先ほどの『Current web app URL』を貼り付けます。また、『Content type』を『application/json』に変更しておきます。
これで全ての準備は完了です。
試しになにかPushして、Spreadsheetに反映されるか見てみましょう。
無事成功しました。
POSTリクエストの中身は、先ほどのGithubのWebhookを設定するページの下の方から確認することができます。
うまくいかなかった場合はここを確認しつつ試行錯誤してみてください。
以上です。