claspを利用してGitHub Actionsで Google App Script ( GAS )をデプロイする
はじめに
前回の記事で、google app script (GAS) の開発環境を整えました。なので今回はGASを自動デプロイする環境をGithub Actionsで用意します。
Github Actions
前回の記事にも記載していますが設定するディレクトリ構成は以下の通り
- ディレクトリ構成(必要な部分を抜粋)
❯ tree -L 2 -a . ├── .clasp.json ├── .claspignore ├── .github │ └── workflows └── src ├── crypto.js ├── appsscript.json
- claspでデプロイするために必要な3つのファイル
~/.clasprc.json
.clasp.json
appsscript.json
github actionsの処理で 実行環境に3つのファイルを作成してから $clasp push
コマンドを実行します。
これらのファイルには機密情報が含まれるので githubの secretにそれぞれ登録します。 環境変数名は以下にしました。
- clasprc.json
ACCESS_TOKEN
ID_TOKEN
REFRESH_TOKEN
CLIENTID
CLIENTSECRET
- clasp.json
SCRIPTID
(機密扱いしなくてもいいかもですが念のために)
- appsscript.json
LIBRARYID
(機密扱いしなくてもいいかもですが念のために)
{
→\{
"
→\"
[
→\[
github-actionsのソースコード deploy.yaml
は以下。
appsscript.json
の配置場所に関しては、.clasp.json
で"rootDir": "./src"
と設定しているため。- github actionsの実行結果を見ても、 echoしていますが、secretの部分は *** でマスクされています。
echo \{\"scriptId\":\"***\",\"rootDir\":\"./src\"\} > ./clasp.json
name: Deply to Google App Script on: push: branches: - main env: NODE_VERSION: '16' jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 with: node-version: ${{ env.NODE_VERSION }} - name: Install clasp run: | npm init -y npm install clasp -g - name: Setup clasprc.json run: echo \{\"token\":\{\"access_token\":\"${{ secrets.ACCESS_TOKEN }}\",\"scope\":\"https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/drive.metadata.readonly https://www.googleapis.com/auth/script.projects https://www.googleapis.com/auth/script.webapp.deploy https://www.googleapis.com/auth/logging.read openid https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/drive.file https://www.googleapis.com/auth/script.deployments https://www.googleapis.com/auth/service.management https://www.googleapis.com/auth/cloud-platform\",\"token_type\":\"Bearer\",\"id_token\":\"${{ secrets.ID_TOKEN }}\",\"expiry_date\":1620870307822,\"refresh_token\":\"${{ secrets.REFRESH_TOKEN }}\"\},\"oauth2ClientSettings\":\{\"clientId\":\"${{ secrets.CLIENTID }}\",\"clientSecret\":\"${{ secrets.CLIENTSECRET }}\",\"redirectUri\":\"http://localhost\"\},\"isLocalCreds\":false\} > ~/.clasprc.json - name: Setup clasp.json run: echo \{\"scriptId\":\"${{ secrets.SCRIPTID }}\",\"rootDir\":\"./src\"\} > ./clasp.json - name: Setup appsscript.json run: echo \{\"timeZone\":\"Asia/Tokyo\",\"exceptionLogging\":\"STACKDRIVER\",\"runtimeVersion\":\"V8\",\"dependencies\":\{\"libraries\":\[\{\"userSymbol\":\"Parser\",\"version\":\"8\",\"libraryId\":\"${{ secrets.LIBRARYID }}\"\}\]\}\} > ./src/appsscript.json - name: Deploy run: clasp push