この記事で伝えたいこと
私はAndroidアプリを個人開発しています。
PRを出す時に、ターゲットブランチとソースブランチに画像差分があればスクリーンショットを出力するVRTを実現しようとしました。ワークフローの内容的はほぼコピペですが、ちょっとしたことで詰まったので記事に起こしておきます。
この記事が誰かの悩みの解消になれば幸いです。
この記事の対象者
- VRTに興味がある人
- VRTの導入で困っている人
問題の発生
サンプルリポジトリを参考に、以下の3つのワークフローをリポジトリに設定しました。
- StoreScreenshot.yml
- CompareScreenshot.yml
- CompareScreenShotComment.yml
それでfeatureブランチからmainブランチにPRを出したところ、なぜかmainブランチのスクリーンショットの中身が空っぽになってしまっていました。
当然、問答無用で全ての画像が差分として出てしまうので、VRTが機能していない状態です。
GitHub Actionsのワークフロー実行ログを確認してみると、compareScrenshotでStoreScreenShotのワークフロー(run id)を見つけられていないことがわかりました。
Run dawidd6/action-download-artifact@v3
==> Repository: Nagumo-7960/pokemon-stats-quiz
==> Artifact name: screenshot
==> Local path: ./
==> Workflow name: StoreScreenshot.yml
==> Workflow conclusion: success
==> Branch: main
==> Allow forks: true
Error: Not Found - https://docs.github.com/rest/actions/workflow-runs#list-workflow-runs-for-a-workflow
こういうエラーになることもありました。どっちにしてもワークフローが見つかっていません。
Run dawidd6/action-download-artifact@v3
==> Repository: Nagumo-7960/pokemon-stats-quiz
==> Artifact name: screenshot
==> Local path: ./
==> Workflow name: StoreScreenshot.yml
==> Workflow conclusion: success
==> Branch: main
==> Allow forks: true
Error: no matching workflow run found with any artifacts?
調査
いくつか試しました。
別の新規プロジェクトで試してみる
どこが原因か確かめるために、別の新規プロジェクトを作って同様のワークフローを実行してみたところ、問題なく差分が出力されました。そのため、ワークフローの内容自体には問題がなく、該当のリポジトリのコードやGitHubのリポジトリの設定に問題があるのではないかと思いました。
別のGitHubのリポジトリで試してみる
リポジトリのどこで問題が発生しているのか確かめるため、該当リポジトリをコピーして、新しく作ったGitHubのリポジトリ上でワークフローを実行してみました。
ここでも問題なく差分が出力されたため、コード上には問題がなく、リポジトリの設定などに問題がありそうだということがわかりました。
ワークフローのファイル名の大文字と小文字を修正
.github/workflows/storeScreenShot.yml
↑StoreScreenShotのShotのSが大文字になっていたので、ファイル認識に問題が発生しているのかと思い、修正しました。
.github/workflows/storeScreenshot.yml
しかし、結果は変わらず。
GitHubのActionsの設定を見直す
権限が上手くいってないのではないかと思い、
GitHubのsetting -> Actions -> GeneralのWorkflow permissionを、
Read repository contents and packages permissions
から
Read and write permissions
に変えてみました。が、これも結果は変わらず
原因
過去にmainで実行されたStoreScreenShotのアーティファクトが期限切れになっており、ワークフローを参照できなくなっていたことが原因でした。
mainで一度StoreScreenshotが実行されるようにワークフローを動かした結果、無事差分が出力されるようになりました。