Actions&Terraform

GitHubActionsでサブモジュールや他のリポジトリをチェックアウトする方法

Actions のセルフホストランナーでの運用にも慣れてきましたが、少し特殊なことをしようとすると問題にぶつかります。

今回遭遇したのは下記の 2 つ。

・サブモジュールのチェックアウト
・別リポジトリのチェックアウト

ワークフロー内で簡単にできるんだねってわかってしまえばどうってことないのですが、初めて試すことには未知数な部分が多いのも事実です。

今回は、Actions のジョブを実行する際に、対象のリポジトリ以外のサブモジュールや他のリポジトリを Checkout する方法を紹介します。

リポジトリのチェックアウト

Checkout は Actions に用意されている「actions/checkout@v2」を利用します。

通常は runs-on に自前のセルフホストランナーを指定しますが、ここでは仮に ubuntu-latest としておきます。
(セキュリティ面を気にしなくていい場合は、Actions のホストにお任せでいいと思いますが)

こんな感じですね。

サブモジュールのチェックアウト

複数のアプリを開発していると、共通化したい部分を別のリポジトリに逃したくなるケースが出てきます。

その場合、サブモジュールとしてメインのリポジトリから参照するパターンになりますよね。

Actions のジョブの中でサブモジュールがないとビルド(build)できなかったりと不便なので、サブモジュールも一緒にチェックアウトしたいところです。

その場合、Actions のジョブの中で以下のように定義します。

token には、GitHub で発行したサブモジュールへのアクセスが可能な Personal AccessToken を指定します。

fetch-depth には 0 を指定し、全てのブランチとタグの履歴を参照するようにします。

Only a single commit is fetched by default, for the ref/SHA that triggered the workflow. Set fetch-depth: 0 to fetch all history for all branches and tags. Refer here to learn which commit $GITHUB_SHA points to for different events.

別のブランチのチェックアウト

ジョブの中で、別のブランチに対する操作をすることは少ないかもしれませんが、知っておくに越したことはありません。

最初の checkout が Actions のジョブを動作させているリポジトリのもの。

2 つ目の checkout が別のリポジトリのものになり、path で指定したディレクトリ配下にチェックアウトされてきます。

まとめ

GitHubActions でサブモジュールや他のリポジトリをチェックアウトする方法について紹介してきました。

最初は、使える機能を探したり、定義の表現方法を調べたりするのが大変です。

しかし、幸いなことに日本語ドキュメントが充実しているので、まずはここを見ながらトライアンドエラーですね。