Dockerfile の中のパッケージのバージョン更新面倒くさて古くなる問題
Alice: はぁ…今日も Dockerfile の更新しなきゃ。他にもやらないといけないことあるのに…
Bob: そんなあなたに朗報です。GitHub Action と awk を使えば Dockerfile の中のパッケージバージョンを自動更新!
Alice: でもお高いんでしょう…?
Bob: それが、奥さん、GitHub Action なら 2000 minutes/month まで無料!
Alice: えぇ..!? (困惑)
Bob: さらにさらに、on schedule を使えば、毎朝、毎時でも自動更新チェックしてくれます!
Alice: うそぉー、今すぐ電話しなきゃ。Bob 電話番号を教えて!
Bob: ( ´・ω・)⊃旦 go-zen-chu/docker-plantuml
ということで、そんなリポジトリを作ってみた
原理:
- on schedule で毎朝 Dockerfile の中で 利用しているライブラリの更新がないかチェック
- 更新があった場合は、awk で Dockerfile の中のバージョン文字列 を更新して master へ push
- master にマージされたとき、
[skip ci]
が含まれていなければ、イメージビルドして、dockerhub へ push
master マージ時に、latest と コミットハッシュ の tag それぞれで push するのがポイント。
たったこれだけで自動更新してくれるなんてありがたや 🙏
GITHUB_TOKEN で push しても他の workflow は trigger されない
実装中に問題となったのが、GITHUB_TOKEN が設定された workflow から git push を行っても、on.push を設定している他の workflow は起動しない。
GITHUB_TOKENでの認証 - GitHub Docs によると、
リポジトリのGITHUB_TOKENを使ってGitHub Actions アプリケーションの代わりにタスクを実行した場合、そのGITHUB_TOKENによって生じたイベントは、新たなワークフローの実行を生じさせません。
これによって、予想外の再帰的なワークフローの実行が生じないようになります。 たとえば、ワークフローの実行によってリポジトリのGITHUB_TOKENを使ったコードのプッシュが行われた場合、そのリポジトリにpushイベントが生じた際に実行されるよう設定されたワークフローが含まれていても、新しいワークフローの実行は行われません。
そこで、Personal Access Token (PAT) を利用して push することにより、他の workflow を trigger させることができます。
Push from Action does not trigger subsequent action - GitHub Actions - GitHub Support Community
secrets.PAT を指定しても workflow が trigger されない
実はさらに actions/checkout の v2 を利用していると、GITHUB_TOKEN が自動的に設定されて、その workflow に残ってしまいます。
この設定のように することで、別の workflow を起動するようにできます。
- uses: actions/checkout@v2
with:
persist-credentials: false