GitHub Actions の organization-wide required workflows を実験する
これ
GitHub Actions - Support for organization-wide required workflows public beta | GitHub Changelog
実験に使ったOrganizationをhoge orgとする。
まとめ
気づいた仕様
- ソースのリポジトリとターゲットのリポジトリは同Organizationでなければいけない
- ターゲットリポジトリのプルリクエストで発火する
- ソースのワークフローには
on: pull_request
が必要 - ソースのワークフローがあるリポジトリがprivate/internalである場合、同Organizationに対するワークフローの再利用を許可しないといけない[1]
- ソースのワークフローはデフォルトブランチのHEADコミットが使われる[2]
-
ステータスチェック付きで保護されているブランチに対するプルリクエストの場合、
Required
でソースのワークフローが実行される -
ステータスチェック付きの保護がないブランチに対するプルリクエストの場合、
Required
はつかずにソースのワークフローが実行される
所感
- ワークフローをOrg横断で強制したい場合には効果的
- 複数チームが利用するOrgでガバナンスを強化できる
- 使用例: ライセンスチェックを必ず行わせる
- ワークフローをOrg横断で使い回したいという用途だと微妙な気がする
- 原則として必ず
Required
になるのが邪魔 - ブランチプロテクションである程度制御できるけども
- 原則として必ず
- ソースのワークフローについて、常にHEADコミットが使われるのは不便になり得そう
- 仕様がちょっと複雑
-
If the required workflow is contained in a private repository, you must ensure that workflows within the repository are accessible by other repositories in your organization. https://docs.github.com//en/actions/using-workflows/required-workflows ↩︎
-
GitHub will source the required workflow from the HEAD commit of the default branch from the repository containing the workflow. https://docs.github.com//en/actions/using-workflows/required-workflows ↩︎
ソースとなるワークフローを用意
hoge/playground リポジトリに次のワークフローを用意する。
mainブランチにコミット。
# testing required workflow
# https://github.blog/changelog/2023-01-10-github-actions-support-for-organization-wide-required-workflows-public-beta/
on:
pull_request:
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: ls
triggerにはpull_request
が必須なので注意。
A required workflow is triggered by pull request events and appears as a required status check
https://docs.github.com//en/actions/using-workflows/required-workflows
Required workflows を設定
hoge org の Settings で Required workflows を設定。
設定画面は Settings -> Actions -> General -> Required workflows -> Add workflow。
Select a repository
ボタンを押しても playground リポジトリがクリックできない。
ドキュメントにその原因が書いてた。
If the required workflow is contained in a private repository, you must ensure that workflows within the repository are accessible by other repositories in your organization. For more information, see "Allowing access to components in a private repository."
https://docs.github.com//en/actions/using-workflows/required-workflows
DeepL先生: リポジトリ内のワークフローが組織内の他のリポジトリからアクセス可能であることを確認する必要があります。
確かにそんな設定あったな。
hoge/playground の Settings -> Actions -> General -> Access で Accessible from repositories in the 'hoge' organization
を選択して Save
選択できた。
Select repositories
ではターゲットとなるhoge organization内のリポジトリを適当に指定。
なお、ターゲットリポジトリにソースリポジトリは含められない。
実際にプルリクエストを作って確認
ターゲットリポジトリに指定したリポジトリで適当にプルリクを作る。
Require status checks to pass before merging
で保護されたブランチの場合
.github/workflows/required-test.yaml / test (pull_request)
、Required
とあり、Required workflowsが動いていることがわかる。
ワークフローの実行画面からワークフローを表示すると、hoge/playground/.github/workflows/required-test.yaml at 21e2749
とあり、どこのワークフローであるかがわかる
Require status checks to pass before merging
を設定していない未保護ブランチの場合
機能名としてはRequired workflows
であるが、branch protectionでステータスチェック保護されていないブランチに対するプルリクエストではRequired
にせずにワークフローを実行させることができる。
Required workflows are available for organizations and only in repositories where the organization's plan supports required status checks. If required status checks are not supported, the workflow will still run, but it will not be a required check and will not block merging. For more information about support for required status checks, see "About protected branches."
https://docs.github.com//en/actions/using-workflows/required-workflows
DeepL先生: 必須ステータスチェックがサポートされていない場合、ワークフローは実行されますが、必須チェックではなく、マージをブロックすることはありません。
たしかにRequired
がついてない
ちょうど今日事例出てた。タイムリー
Repository Rules に移行するらしい。
GitHub Actions: Required Workflows will move to Repository Rules - The GitHub Blog