GitHub Actions - オーガニゼーションレベルの required workflows (public beta) を試す

| 4 min read
Author: masahiro-kondo masahiro-kondoの画像

GitHub Actions の required workflows が public beta として公開されました。

GitHub Actions - Support for organization-wide required workflows public beta | GitHub Changelog

required workflows の概要

#

オーガニゼーション内のリポジトリで Pull Request が作成された時に特定のワークフローの実行を強制する機能です。GitHub の紹介ブログによると以下のようなセキュリティ・品質・統制などのユースケースを想定しているようです。

  • セキュリティ: 外部の脆弱性スコアリングまたは動的分析ツールを起動する
  • コンプライアンス: すべてのコードが企業の品質基準を満たしていることを確認する
  • デプロイ: コードが標準的な方法でCD(継続的デプロイ)されるようにする

Introducing required workflows and configuration variables to GitHub Actions | The GitHub Blog

上記のユースケースを実現するために全てのワークフローファイルに同じステップを追加するのではなく、1つのリポジトリに集約して CI/CD パイプラインのコード重複を無くし実行漏れを防ぐのが required workflows です。

required workflows のドキュメントは以下にあります。

Required workflows - GitHub Docs

Information

GitHub の日本語ドキュメントではまだ訳出されていませんが、required workflows は「必須ワークフロー」と呼べばよいでしょうか。

required workflows はオーガニゼーション内の他のリポジトリから利用されるという点では reusable workflow(再利用可能ワークフロー)と似ています。

再利用可能ワークフローについては以下の記事で紹介しています。

required workflows 用リポジトリの作成

#

まずオーガニゼーション内に required workflows 専用のリポジトリを作成します。ここでは required-workflows というそのままの名前で作成しました。今回リポジトリの可視性は private にしましたが問題なく使えました。

このリポジトリの設定でオーガニゼーション内の他のリポジトリからのアクセスを許可する必要があります。リポジトリの Settings > Actions > General と開きます。

required workflow repo settings

Access セクションで Accessible from repositories in the xx organization を選択して Save をクリックします。

Accessible from repos

Information

この設定は再利用可能ワークフロー用のリポジトリの設定と共通です。以下の記事を参照してください。

次に required workflow の作成です。required workflows は、通常のワークフローファイルの格納場所である .github/workflows 以外の任意のフォルダにも配置できます。今回は flows というフォルダを作って格納することにしました。以下のようにライセンスファイルの存在をチェックする簡単なワークフローを書きました。対象リポジトリをチェックアウトし、挨拶文を表示した後に、LICENSE ファイルを表示しています。

  • flows/required.yml
name: Check LICENSE

on:
pull_request:

jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Greeting from required workflow
run: echo Hello! from Required workflow
- name: Check LICENSE
run: cat LICENSE

オーガニゼーションにおける required workflows の設定

#

required workflows はオーガニゼーション単位で設定します。

Information

required workflows は現時点で無償プランのオーガニゼーションでも利用可能です。これが public beta 期間中だけなのかは不明です。

オーガニゼーションの Settings > Actions > General と選択します。

Settings-Actions-General

General の一番下にある Required workflows のセクションで Add workflow をクリックして、実行するワークフローや対象リポジトリを設定します。

Add Required workflows

上記で作成した required-workflows リポジトリのワークフローファイルを指定し、対象のリポジトリを選択しました。

required workflows settings

対象リポジトリは、すべてのリポジトリを対象にすることも個別に選択も可能です。今回は sandbox-repo というリポジトリを選択しました。

Select repos

required workflows の動作確認

#

それでは、対象リポジトリとして選択した sandbox-repo リポジトリ[1]で PR を作って required workflow として作った Check LICENSE ワークフローの動作を確認してみます。

この sandbox-repo リポジトリ自体にはワークフローファイルは追加していませんが、PR を作成したら Check LICENSE が実行され成功しました。

PR Checks

実行結果の詳細です。sandbox-repo がチェックアウトされ Greeting に続いて、LICENSE ファイルが表示されました。

Workflow result

まとめ

#

required workflows の概要と利用方法を紹介しました。共通的なフローを1箇所にまとめるという意味では再利用可能ワークフローにも似ていますが、利用側のリポジトリではその存在を意識せず問答無用で実行されるところが違いますね。Linter の実行をもれなく行いたいなどのケースにもうまくマッチしそうです。


  1. このリポジトリでは LICENSE ファイルは追加済みです。 ↩︎

豆蔵デベロッパーサイト - 先週のアクセスランキング
  1. 基本から理解するJWTとJWT認証の仕組み (2022-12-08)
  2. Docker+Wasm で WASM をコンテナとして実行する (2023-01-25)
  3. 自然言語処理初心者が「GPT2-japanese」で遊んでみた (2022-07-08)
  4. 直感が理性に大反抗!「モンティ・ホール問題」 (2022-07-04)
  5. Nuxt3入門(第4回) - Nuxtのルーティングを理解する (2022-10-09)
  6. AWS認定資格を12個すべて取得したので勉強したことなどをまとめます (2022-12-12)
  7. Jest再入門 - 関数・モジュールモック編 (2022-07-03)
  8. ORマッパーのTypeORMをTypeScriptで使う (2022-07-27)
  9. Nuxt3入門(第8回) - Nuxt3のuseStateでコンポーネント間で状態を共有する (2022-10-28)
  10. Nuxt3入門(第1回) - Nuxtがサポートするレンダリングモードを理解する (2022-09-25)