この記事は 一分で読める小ネタのカレンダー | Advent Calendar 2023 - Qiita の15日目
act
- nektos/act: Run your GitHub Actions locally 🚀
- github actions のワークフローを編集して、いちいちコミットしてプッシュしてからテストするのは面倒くさい
- act を使えばローカルでワークフローを実行して試せる(できないこともあるけど)
- 実際にワークフローをテストするよりも、何ができるのか、どう書けばいいのか、を練習するのに向いている(業務で使うワークフローは規模が大きかったり難解だったり実行時に制限があったりしてローカルでテストするのは向いてないことも多い)
- 特にコンテキスト(ワークフロー実行時に与えられる情報の塊)を確認したり、組み合わせたりして使い方を理解すれば、実際に動作しているワークフロー側での失敗を極力避けられる(かもしれない)
- GitHub Actions のドキュメント - GitHub Docs を見ながら、できることややりたいことを模索して欲しい
本文はここまで。以下は時間外w
my-examples-github リポジトリ
- 作っておくと便利
- act を利用することでワークフローに関するゴミコミットは避けられるので、my-til でも足りる
- が、issue template 等の他のことでも使えるし、github に関することを集めていくとそれなりになるので、わけてあると見やすい(かもしれない)
- あと git についても一緒にまとめるならわけてあると見やすい(これは確実)
- my-examples- がたくさんあったほうがやってる感でるので、そういうのがモチベーションになるなら作る、めんどくさいから1つのリポジトリで十分なら作らない、という感じで
act でやるテスト
- pre-commit を既に試したなら pre-commit ワークフローを動かしてみる
- 新しいワークフローを作って コンテキスト を出力してみる
- if 文の使い方
- step の output とその拾い方
- on.workflow_dispatch で手動実行と input で変数渡し
- on.pull_request で実行された場合に input の値が入ってこないことを確認
- Workflow dispatch input environment variables are empty · Issue #1365 · actions/runner で解決方法を確認
- composite action (ワークフローの別ファイル化)
- ジョブの複数実行(A->B-C,D->E)のようにジョブが成功したら別のジョブを実行など
- gh を使って issue 作成など
- 他にもパッケージやリリースなどいろいろできるのでちょっとずつ試して欲しい
作ってみようワークフロー
- on.schedule を使ってスケジュール実行させる
- 毎日、毎週、毎月などで issue を作成するようにすると、自分向け定期タスクの管理ができる。自分をアサインしておくと、github のホーム画面で issue が確認できるので便利
- 文面を変更したり、ラベルを付けたり工夫する
- スケジュール実行で単純な月初日実行は(1日を指定するだけなので)楽にできる。が、日本時間で1日0時指定実行には工夫が必要になる(utc な cron あるあるな)ので、実現方法を考えてみよう。稀に必要になるよ。。。
- ちなみに act ではスケジュール指定実行はできない(?)ぽくて、
act schedule
を実行すると、スケジュール実行できるワークフローが全部動くっぽい
その他
- github actions のベストプラクティスを学ぶ(人のを見るだけじゃなくて自分なりのプラクティスを考えるの大事)
- git でローカルブランチを残さない運用(git に慣れたらね)で act を使うとバグるというか、ワーニングがたくさん出るので、act を使う時はデフォルトブランチをローカルに作っておく
改善依頼
- act の便利な使い方とか
- スケジュール実行の仕方を知っているぜとか
- こんなワークフローを作っているぜとか
おまけ
日本時間1日0時を指定してスケジュール実行の解答例
on:
schedule:
- cron: "0 15 29 2 *" # 2024/02/29 来年以降は 28 にして(うるう年をさぼる
- cron: "0 15 30 4,6,9,11 *" # 小の月
- cron: "0 15 31 1,3,5,7,8,10,12 *" # 大の月
- UTC なので 15時を指定する(+9hで0時)
- UTC なので日にちは月末日でなければならない
- 月ごとに実行日を変えてあげればいい
- パズルみたいで面白いね
- add timezone support to scheduling workflow runs with cron · community · Discussion #13454