🥰
clasp×githubActionsで複数のgasプロジェクトを一つのリポジトリで管理し、自動デプロイまでできるようにした
やりたいこと
- GASはプロジェクトがかなり増えるので、一つのプロジェクトに一つのリポジトリを使わずに複数のプロジェクトを一つのリポジトリで管理したい
- さらにプロジェクトごとにそれぞれのgasプロジェクトにデプロイしたい
- リポジトリごとに自動デプロイする記事はあるけどディレクトリごとにデプロイを説明している記事がない(簡単だから?)
つまりこういうこと
リポジトリ
├─ プロジェクト1/
│ └─ src/
│ │ ├─ appsscript.json
│ │ └─ コード.gs
│ └─ .clasp.json
├─ プロジェクト2/
│ └─ src/
│ │ ├─ appsscript.json
│ │ └─ コード.gs
│ └─ .clasp.json
├─ プロジェクト3/
│ └─ src/
│ │ ├─ appsscript.json
│ │ └─ コード.gs
│ └─ .clasp.json
↑こういうふうにしたい😋
結論
githubActionsのpath指定とworking-directoryを指定すると各プロジェクトで自動デプロイが可能です。
そしてプロジェクトごとにActionsを設定すればおけです!
(ymlの中でパスを切り分けることができるならコメントで教えていただけると🙇♂️)
↓こんなふうに
on:
push:
branches:
- main
paths:
- 'プロジェクト1/src/**'
defaults:
run:
working-directory: プロジェクト1
各プロジェクトのファイル構成
├─ プロジェクト3/
│ └─ src/
│ │ ├─ appsscript.json
│ │ └─ コード.gs
│ └─ .clasp.json
working-directoryによってそれぞれのファイルがルートディレクトリとなるためプロジェクトのファイルを起点として、自動デプロイに必要なファイルを用意します。
- .clasp.json
- src/appsscript.json
など
claspの場合は.clasp.jsonにプロジェクトファイルに応じたscriptIdを設定することによりgithubActionsでpathを切り分けたのち、それぞれのプロジェクトにデプロイすることができます。
.clasp.json
{
"scriptId": "スクリプトID", #urlの~/projects/**この部分**/edit
"rootDir": "./src"
}
Actionsの設定
私はこの記事を参考にしました。
あとは以下のymlファイルをプロジェクトごとに作成するだけです。
シークレットなどは上の記事を参考に設定してください。
name: clasp_push
on:
push:
branches:
- main
paths:
- 'プロジェクトディレクトリ/src/**'
defaults:
run:
working-directory: プロジェクトディレクトリ
jobs:
deployment:
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v2
- name: node install
uses: actions/setup-node@v2
with:
node-version: '14'
- name: install clasp
run: npm install -g @google/clasp
- name: create clasprc.json
run: |
cat << EOS > ~/.clasprc.json
{
"token": {
"access_token": "${{ secrets.ACCESS_TOKEN }}",
"scope": "https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/drive.metadata.readonly https://www.googleapis.com/auth/script.projects https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/drive.file https://www.googleapis.com/auth/service.management https://www.googleapis.com/auth/script.deployments https://www.googleapis.com/auth/logging.read https://www.googleapis.com/auth/script.webapp.deploy openid",
"token_type": "Bearer",
"id_token": "${{ secrets.ID_TOKEN }}",
"expiry_date": 1641493053167,
"refresh_token": "${{ secrets.REFRESH_TOKEN }}"
},
"oauth2ClientSettings": {
"clientId": "${{ secrets.CLIENT_ID }}",
"clientSecret": "${{ secrets.CLIENT_SECRET }}",
"redirectUri": "http://localhost"
},
"isLocalCreds": false
}
EOS
- name: deploy
run: clasp push -f
まとめ
これで私の部署では、私だけが扱っていたgasファイルをみんなで見ることができ、軽微な修正ならgithubからプルリクを送ってもらえるようになりました。🙌
Discussion
thx!!
コメントありがとうございます!
お役にたてて嬉しいです!
2年越しに同じ「やりたいこと」を考えてたどり着きました。ありがとうございます!!
↑こちらは、もう解決済みでしょうか...?job内の
strategy.matrix
を使うと、一つのyml内で全てのプロジェクトのパスについて、それぞれclasp push
できました。ご存じであれば、以下、ご放念ください。記事本文中のymlをもとに、strategy.matrix
を入れてみました:なるほど!ありがとうございます!
こちら参考にさせていただきます!