2022年5月18日水曜日

GitHub Actions で export-ignore 指定したパスがワークスペースになくて composite action が実行できなかった話

なにが起きたか

workflow の中で composite action として .github フォルダに置いた action を実行しようとしたところで、パスが存在しなくて失敗してました。


こんな感じのステップ
      - name: report
        uses: ./.github/actions/composite/test-report
        with:
          report_paths: test/*.xml
        if: always()

この composite action はいろいろなジョブで使っていたのですが、なぜか一部のジョブだけ失敗してました。
失敗していたジョブの共通点としては container 指定していて、 runner 上ではなく in コンテナなジョブであることでした。

なぜ .github フォルダがないのか?

確認してみるとパス指定ミスでもなく本当に .github フォルダがありませんでした。
ないフォルダはそれだけではなく、いくつか存在しないパスがありました。

これ見て即座に git export の除外指定だなとわかりました。
大分昔に Release 時に不要なパスが含まれないようにしていたのでした。
(git export の使い方としてあっているのかは知らない)

git export の設定を修正して、リリースワークフローを変えれば解決はするのですが、本質的ではないので export 設定はこのままにし、調査を続行。

なぜアーカイブダウンロードになったか?

export-ignore は clone/checkout には影響がないはずですし、
checkout 後にこれらのパスを削除するようなことはないです。
そこで actions@checkout ステップのログを確認してみると

なせかアーカイブダウンロードしてました。(なぜ?)
よくよく見ると・・・

The repository will be downloaded using the GitHub REST API
To create a local Git repository instead, add Git 2.18 or higher to the PATH
って書いてありました。つまり、コンテナにインストールされている git のバージョンが古いということですね!
これでコンテナ使ってるジョブだけ失敗するのも腑に落ちました。
どうしたか

使用してたコンテナイメージを更新して、インストールされている git のバージョンを更新しました。
git がインストールすらされていないコンテナイメージもありましたが、それでもなんとかしてくれる actions@checkout 偉いなと思いました。

コンテナの git が古い・ない、かつ export-ignore してるというなかなか踏むことなさそうな条件ですが、誰かの参考になれば幸いです。
では。

0 件のコメント:

コメントを投稿