GitHub Actionsで画像生成プログラムの簡単な自動テストをする
CIにGitHub Actionsを利用しているプロジェクト内に画像生成をしているプログラムがありました。画像生成プログラムには自動テストが無く、依存ライブラリのバージョンを上げる(DependabotのPRを処理する)際に不安を感じたので、成果物に差分があるかをチェックする簡単なテストを追加してみました。
方針
- 期待される生成物として、事前に生成した画像をリポジトリに入れておく
- GitHub Actionsで画像を生成し、変化がないことをテストする
- 画像の比較にはImageMagickのCompareコマンドを使う(追加の依存なし)
- テストが失敗した場合には差分の画像をartifactとして出力する
具体的な設定
# ...
steps:
# ...
- name: "Image Generation Test"
run: |
mkdir -p tmp/artifacts
compare "$EXPECTED_IMAGE" <(generate-image) tmp/artifacts/diff.png
- name: "Upload Failed Tests' Diffs"
uses: actions/upload-artifact@v3
if: failure()
with:
name: failed-tests-diffs
path: tmp/artifacts
retention-days: 5
if-no-files-found: ignore
"Image Generation Test"
について
$EXPECTED_IMAGE
には事前にリポジトリに追加しておいた、期待される生成結果の画像パスを入れます。意図して画像生成プログラムに変更を加えた場合には、この画像も更新する必要があります。
generate-image
も自分のプロジェクトにあったものを入れます。ここでは、標準出力に出力するものを想定しています。入力が必要な場合には $EXPECTED_IMAGE
を生成した時と同じ入力を渡します。例えばHTTPサーバとして動いているなら、事前に立ち上げておいて curl --silent -X POST --data "$IMAGE_INPUT" "$IMAGE_GENERATOR_URL"
するなど。
compare
コマンドはGitHub Actionsでruns-on: ubuntu-latest
している場合デフォルトで入っており、インストールは不要でした。使い方は、比較したい入力画像input1.png
, input2.png
があるとき
$ compare input1.png input2.png diff.png
とすると、差分が強調された画像がdiff.png
に出力されます。設定では後でアップロードするtmp/artifacts
に出力しています。
compare
のexit statusは差分がないときには0
、あるときには1
になります。そのため差分があったときは "Image Generation Test"
は失敗します。
"Upload Failed Tests' Diffs"
について
actions/upload-artifact@v3
を使い、にテストが失敗した時のみtmp/artifacts
をアップロードしているだけです。
詳しくはactions/upload-artifactをご覧ください。
参考
Author And Source
この問題について(GitHub Actionsで画像生成プログラムの簡単な自動テストをする), 我々は、より多くの情報をここで見つけました https://zenn.dev/en30/articles/78dc493852630c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol