Closed14

GitHub Actions の organization-wide required workflows を実験する

Futa HirakobaFuta Hirakoba

これ

GitHub Actions - Support for organization-wide required workflows public beta | GitHub Changelog
https://github.blog/changelog/2023-01-10-github-actions-support-for-organization-wide-required-workflows-public-beta/

Futa HirakobaFuta Hirakoba

まとめ

気づいた仕様

  • ソースのリポジトリとターゲットのリポジトリは同Organizationでなければいけない
  • ターゲットリポジトリのプルリクエストで発火する
  • ソースのワークフローにはon: pull_requestが必要
  • ソースのワークフローがあるリポジトリがprivate/internalである場合、同Organizationに対するワークフローの再利用を許可しないといけない[1]
  • ソースのワークフローはデフォルトブランチのHEADコミットが使われる[2]
  • ステータスチェック付きで保護されているブランチに対するプルリクエストの場合、Requiredソースのワークフローが実行される
  • ステータスチェック付きの保護がないブランチに対するプルリクエストの場合、Requiredはつかずにソースのワークフローが実行される

所感

  • ワークフローをOrg横断で強制したい場合には効果的
  • 複数チームが利用するOrgでガバナンスを強化できる
  • 使用例: ライセンスチェックを必ず行わせる
  • ワークフローをOrg横断で使い回したいという用途だと微妙な気がする
    • 原則として必ずRequiredになるのが邪魔
    • ブランチプロテクションである程度制御できるけども
  • ソースのワークフローについて、常にHEADコミットが使われるのは不便になり得そう
  • 仕様がちょっと複雑
脚注
  1. 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 ↩︎

  2. 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 ↩︎

Futa HirakobaFuta Hirakoba

ソースとなるワークフローを用意

hoge/playground リポジトリに次のワークフローを用意する。
mainブランチにコミット。

required-test
# 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
Futa HirakobaFuta Hirakoba

Required workflows を設定

hoge org の Settings で Required workflows を設定。


設定画面は Settings -> Actions -> General -> Required workflows -> Add workflow。

Futa HirakobaFuta Hirakoba

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

Futa HirakobaFuta Hirakoba

選択できた。
Select repositoriesではターゲットとなるhoge organization内のリポジトリを適当に指定。

Futa HirakobaFuta Hirakoba

実際にプルリクエストを作って確認

ターゲットリポジトリに指定したリポジトリで適当にプルリクを作る。

Futa HirakobaFuta Hirakoba

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とあり、どこのワークフローであるかがわかる

Futa HirakobaFuta Hirakoba

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がついてない

このスクラップは2023/01/24にクローズされました