GitHub Actions で private リポジトリの actions や workflows を共有する
アクションやワークフローを共有する方法は下記の記事が参考になる
共有したアクションから、別の共有アクションを呼び出す
試した流れ
Composite Action を同一リポジトリで共有するときは相対パスで指定していたが、共有アクションから相対パスで指定すると、共有アクションを利用しているリポジトリの相対パスになってしまう。
${{ github.action_path }}
を使えばいけるか検証してみてたが、uses は動的な値を組み込むと format error になってしまう。
以下は実際のエラーメッセージから抜粋
Expected format {org}/{repo}[/path]@ref. Actual '${{ github.action_path }}/.github/actions/my-action'
Error: System.FormatException: Input string was not in a correct format.
公式ドキュメントを確認してみる。
再利用可能なワークフロー ファイルを参照するには、次のいずれかの構文を使用します。
{owner}/{repo}/.github/workflows/{filename}@{ref}パブリックとプライベートリポジトリの再利用可能ワークフローの 。
./.github/workflows/{filename} は同じリポジトリ内の再利用可能なワークフローの場合。
ref: https://docs.github.com/ja/actions/using-workflows/reusing-workflows#calling-a-reusable-workflow
結論
別の共有アクションを呼び出したい場合、タグを打って、参照する uses: octo-org/another-repo/.github/workflows/workflow.yml@v1
が正解。
(main ブランチを参照してしまうと、v1 指定いるのに中で v2 が呼ばれることになるので NG)
余談
共有する Reusable Workflow から、共有アクションを呼び出すようなケースでも同様。
ディレクトリ構成と Lint の話
呼び出す際にディレクトリを指定することになるので、private リポジトリのディレクトリ構成自体は自由にしてよい。
ただし、後述する Lint が .github/workflows
ディレクトリ配下しかチェックしないので、Lint を導入する場合は一択になる。
Lint 周りはこの本が大変参考になる。
無料なのが不思議なレベルの本です。Lint 以外でもお世話になりました。上記、本で紹介されている actionlint というツールですが、これを導入する場合には .github/workflows
に置くことになる。
関連する issue: https://github.com/rhysd/actionlint/issues/242
ワークフローが .github/workflows
に置くことになるので、アクションも .github/actions
に置くのが自然かなと思います。