つい最近GitHub Actionsをいじっていた時のお話です。
GitHub ActionsにはReusable workflowsと呼ばれる再利用可能なワークフローの仕組みがあります。
例えば複数のリポジトリで同じワークフローを実装している場合に、何かを修正する必要が出てくると全てのリポジトリに修正の手を入れるのは面倒ですよね。
そんな時にReusable workflowsを利用して同じ処理を再利用可能な形にしていれば、それぞれのリポジトリが参照している一つのワークフローを修正するだけで済むようになります。楽チンです。
そのように依存関係を整理できる便利なReusable workflowsですが、つい先日お仕事で新しいリポジトリを用意してReusable workflowsの一つに参照したところ、以下のように怒られました。
つまりは呼び出そうとしたworkflowが見つからなかったと言っているわけですね。他の参照できているリポジトリと同じ実装にしているため、そんな見つからないなんてことは・・・とかなり四苦八苦しておりました。
で、色々と調査しているうちに他のリポジトリとの決定的な違いを見つけました。
呼び出しが成功しているリポジトリと、Reusable workflowsが存在する呼び出される側のリポジトリとのリポジトリの可視性は以下のような関係性でした。
Private Repository → Private Repository
対して、呼び出しに失敗していたリポジトリの関係性はというと
Internal Repository → Private Repository
となっていました。Internal RepositoryとはGitHub Enterpriseで利用することのできるリポジトリの可視性で、詳しくは以下になります。
で、このInternalからPrivateの参照ではReusable workflowsの参照ができないのでは?という仮説を立ててみました。
そうしましたら、公式ドキュメントにこんな項目が👀
これだ〜〜〜〜
呼び出し元がInternalではInternalかPublicのReusable workflowsしか呼び出せないのですね・・・知らなかった。
これに気付くまでに数時間溶かしたのですが、何故そうなったかというとこの可視性について分かりやすく書いてくれてるのが英語版のドキュメントにしかないんですよね・・・
公式ドキュメントあるあるの英語版にしか書いてないというトラップに久々に引っかかってしまいました。
結局、InternalからPrivateに変更しても問題ないリポジトリでしたので、戻すことで無事Reusable workflowsに参照することができました。めでたしめでたし。
というわけで、Reusable workflowsを利用していてGitHub Enterpriseな方はお気を付けください〜〜〜〜〜