GitHubで管理しているPythonのレポジトリで pytest を使ったテストなどを一括で管理する Actionを作った話。
python-action
Python Test Action · Actions · GitHub Marketplace
GitHub ActionsのActionで主に
- レポジトリのcheckout
- Pythonのインストール
- Cacheの管理
- Poetry環境のセットアップ
- pytestの実行
- coverageの表示
- pre-commitによるチェック
を行うもの。
レポジトリのcheckoutやpythonのインストールなどは もし必要でなければ引数でオフにも出来ます。
また、poetryのレポジトリでない場合には
setup-cmdのコマンドを変更してそのレポジトリ様のセットアップに変更もできます。
デフォルトではpoetry installでこれを単にrequirements.txtで管理しているならpip install .と変更するとか。
簡単な使い方
基本的には
- poetryによる設定が書かれたレポジトリ。
- pytestのテストファイルがtestsディレクトリにある。
- .pre-commit-config.yamlにpre-commit設定がある。
という情況が基本設定。
簡単な使い方としては、 このような情況であれば簡単に以下のようなActionsのファイルを書くことで 環境の準備から
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
のような感じで書けば、 pytestを実行して 以下で書いたようなcoverageの出力も含めて ジョブ概要とかに書き出してくれます。
複数のバージョンや環境で実行する
PythonのバージョンやOSなどを変えていくつかテストしたい場合には
Coverageの結果をcoverageブランチに出力するものは一つにしたいので、
mainとなる組み合わせを指定する必要があります。
README には
os: [ubuntu-latest, macos-latest]python-version: ["3.10", "3.9"]
なmatrixで計4つの組み合わせになりますが、 最初のstepで
os == 'ubuntu-latest'python-version == '3.10'
になる時、かつbranchがmainの時にis_mainのフラッグを1にして
coverage-pushに渡しています。
これで上の組み合わせのときだけcoverageをブランチに書いてそれ以外では書かないようになります。
上のREADMEの例ではpre-commitに関してもis_mainが1のときのみ実行するようにしています。
(場合によってはpython versionやosによってそれぞれでチェックしたほうが良い場合もあるので
その場合は常に1に設定してください。)
これで各matrixの組み合わせ毎にpytestやpre-commitを実行してcoverageのまとめも含めて まとめを作ってくれます。
例:
chore(deps): lock file maintenance · rcmdnk/homebrew-file@fb0e124
