2020年2月3日月曜日

[技術書典8] GitHub Actions で作成した PDF を Google Drive にアップロードして Slack に通知する

ブログズミ: [技術書典8] GitHub Actions で Re:VIEW Starter の PDF を作成する」先週の続きです。

先週は、GitHub Actions を使って Re:VIEW Starter の PDF 作成を CI にしました。
その際に、PDF のアップロード先を GitHub Actions の Artifact にしていましたが、こちらは誰でもアクセスが可能な場所だったので、private な場所にアップロードするようにしたいと思います。

Google Drive にアップロード
Google Drive へのアップロードはこちらで紹介されているアクションを利用しました。
GitHub ActionsでLaTeXをビルドしてGoogle Driveに上げる - Qiita
Interact with Google Drive · Actions · GitHub Marketplace

筆者は skicka は使ったことがなかったのでそちらの手順に従ってセットアップしました。

まずは手順通りに進めてみる
skicka-を使ったことがない方」の手順どおりに進めていきます。

手順の 1. と 2. を実行してみて、「このアプリでは「Google でログイン」機能が一時的に無効」と出た場合は、別途回避手順が必要です。
筆者がやった時点では、このメッセージが表示されましたので回避手順を行いました。

回避手順を行う
skickaの『「Google でログイン」機能が一時的に無効』を一時的に解決する - Qiita
回避手順も Qiita とアクションのページに記事が投稿されていますので、参考にしましょう。

必要なのは、Google Drive API の Client ID と Client Secret です。
こちらを作成したら、アクションページの手順にあるとおりに ENV に 作成した ID/Secret を渡して docker run します。
続いて、手順にあるコマンドをそのまま実行します。

回避対応は以上です。
URL が表示されているので、もとの手順(2. ブラウザで開く)にもどりましょう。

続き
回避対応が正しくできていれば、今度はアクセスできると思います。
(警告出るかもしれませんが・・詳細開いて続行します)

アクセスを許可したら、コードが発行されるので docker に戻って入力します。


入力したら json が表示さます。
これで必要な情報が揃いました。

GitHub の Secrets に登録する
上記で作成した json と Google Drive API の Client ID/Secret を GitHub repository の Secret に登録します。

GitHub Actions に追加する
- name: Upload to Google Drive
  uses: satackey/action-google-drive@v1
  with:
    skicka-tokencache-json: ${{ secrets.SKICKA_TOKENCACHE_JSON }}
    upload-from: ./
    upload-to: /path/to/upload
    # 回避手順を取った場合は以下の2つも必須
    google-client-id: ${{ secrets.SKICKA_CLIENT_ID }}
    google-client-secret: ${{ secrets.SKICKA_CLIENT_SECRET }}

完成
無事にアップロード完了しました。



Slack に通知する
アップロードできたら、今度はアップロード通知が欲しくなりました。
そこで Slack 通知にも対応しておきました。

Post Slack messages · Actions · GitHub Marketplace
中みたら curl で API 叩いているだけだったので、正直 Actions 使う必要ないなーと思いつつも、これを使うことにしました。

Slack bot 作成

まずは Slack のボットを作成します。

1. Slack API で App を作成する



2. サイドバーの「OAuth & Permissions」のリンクを開きます。
(「App Home」の「Bot Token Added」のところにもリンクがあります)


3. 「Scopes」に chat:write 権限を追加


4. ワークスペースに Bot をインストールします。

5. 「Bot User OAuth Access Token」にトークンが表示されます。


Secrets 登録

トークンを発行できたら、続いて GitHub のリポジトリ設定から Secrets にトークンを追加します。
名前は「SLACK_BOT_TOKEN」としました。

Slack notification step

最後に、GitHub Actions のワークフローに以下のステップを追加します。
      - name: Notify slack
        env:
          SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
        uses: pullreminders/slack-action@master
        with:
          args: '{\"channel\":\"CSYR0PEHW\",\"text\":\"Upload new pdf!!\"}'


最後に
技術書典にサークル参加される皆さん。準備はバッチシでしょうか?
私はダメです。。。

がんばります。