GAE versionには210個制限がある!
HerokuにはReview Appsという便利な仕組みがあり、GitHubでPRが作成される事に検証用の環境を自動的にデプロイすることができます。
参考: https://qiita.com/kon_yu/items/6d2c0ae91d0176ceb167
GAEでもCI上でスクリプトを書けば自動デプロイが実現できるので(こちらは今回触れません)、PR毎にGAEのversionを分けてデプロイをしてReview Appsぽいことをやっています。
しばらく運用していると、↓の様なエラーが出てしまいました...どうやらversion作りすぎで210個制限を超えてしまった様です。
Error 400: --- begin server output ---
<ApiError 400, Message: "Your app may not have more than 210 versions. Please delete one of the existing versions before trying to create a new version.">
--- end server output ---
GitHub Actionで不要なversionを消してみる
ちょうどGitHub Actionsが使える様になった時期だったので、PRのclose時に自動的に不要になったversionを削除する様にしてみました。
↓インラインコメントで簡単な解説を書いておきます。
name: Delete GAE version from staging
on:
pull_request: # PRのclose時のみ発動させます
types: [closed]
jobs:
build:
runs-on: ubuntu-latest
container: # GAE SDKの入ったDockerコンテナを使っています
image: ubiregiinc/jdk8-scala-appengine:latest
steps:
- uses: actions/checkout@v1
- name: delete_version
run: $APPENGINE_SDK_HOME/bin/appcfg.sh -A YOUR_APPID -V pr${{ github.event.number }} --oauth2_refresh_token=YOUR_TOKEN delete_version src/main/webapp
# ↑まだgcloudに移行していないので...appcfgを使っています...
# `-V`でversion指定ができるので、CIからデプロイしている命名規則と同じversionを指定して`delete_version`します
上記の様なymlで記述したworkflowを.github/workflows/delete_version_on_pr_close.yml
の様な場所に置いておくと該当レポジトリのPRなどのイベントに応じていろいろなことが自動化できて便利です。
実行状況を見る
PRのChecks
タブから実行状況を確認することができます。
プランによっては使えない...
GitHub ActionsのGAに伴い、レポジトリ数課金の古いプランだと使えなくなってしまいました...
GitHub Actions is unavailable for per-repository plans, which are legacy billing plans.
こんなエラーが出る場合はプランを確認しましょう。
### ERRORED 11:20:00Z
- Workflows can't be executed on this repository. Please check your payment method or billing status.