自分用の GitHub reusable workflows リポジトリを作りました。
GitHub reusable workflows とは
GitHub Actions の reusable workflows は、workflow ファイルを他のリポジトリから呼び出せる仕組みです。
例えば、以下のように別リポジトリから workflow を呼び出します。
jobs:
example:
uses: masutaka/actions/.github/workflows/some-workflow.yml@main
共通の処理を一箇所にまとめられるので、複数リポジトリで同じ workflow を管理する手間が省けます。
いくつか制限や注意点があります。
- パブリックリポジトリからプライベートリポジトリの reusable workflow は呼び出せない
- プライベートリポジトリの reusable workflow を呼び出せるのは、同一 org/user の他リポジトリのみ(異なる org は不可、かつ呼び出し先リポジトリの Access policy 設定が必要)
- 呼び出し元 workflow レベルの
envコンテキストは呼び出し先に伝播しない - Environment secrets は渡せない(
secrets: inheritで渡せるのは通常の secrets のみ) - reusable workflow は必ずジョブ単位で実行される(step としては使えない)。そのため、呼び出すたびに別のランナーが起動し、ジョブ間でファイルシステムを共有できない。プライベートリポジトリでは Actions minutes の消費も増える。step レベルで再利用したい場合は composite action を使う必要がある
masutaka/actions はパブリックリポジトリなので、1 と 2 の制限は影響しません。
含まれている workflow
現時点で以下の reusable workflows を含めています。
- add_assignee_to_pr.yml (docs ) - PR 作成時に assignee を PR 作成者に設定する
- codeql.yml (docs ) - 変更されたファイルから言語を検知し CodeQL 解析を実行する
- codeql_core.yml (docs ) - 指定された言語の CodeQL 解析を実行する
- create_gh_issue.yml (docs ) - テンプレートから GitHub Issue を作成する
- dependency_review.yml (docs ) - PR の依存関係をレビューする
- pushover.yml (docs ) - ワークフロー失敗用の Pushover 1 通知を送信する
ドキュメント構成は mdn/workflows
を参考にして、各 workflow ファイルの使い方を docs/ 以下の Markdown ファイルに記載し、README.md からリンクする形にしました。
作った経緯
前職でメンテナーになっていた route06/actions を、退職後も使わせてもらっていました。
ただ、個人用にカスタマイズしたいものがいくつかあったことに加え、pushover.yml を新たに作ったことをきっかけに、必要な workflow ファイルをコピーして自分用のリポジトリを作ることにしました。
それまで pushover.yml は同じファイルが個人の各リポジトリに重複していましたが、これを機に masutaka/actions に集約しました。
ライセンスの扱い
どちらのリポジトリも MIT ライセンスです。コピーしてきた workflow ファイルの先頭には、以下のように元リポジトリへの帰属を記載しました。
例: codeql.yml :
# Derived from https://github.com/route06/actions/blob/main/.github/workflows/codeql.yml
# Copyright (c) 2024 ROUTE06, Inc.
# Licensed under the MIT License.
また LICENSE ファイルにも両者の copyright を記載しています。MIT ライセンスの要件は満たしていると思います。
Copyright (c) Takashi Masuda
Copyright (c) 2024 ROUTE06, Inc.
まとめ
これまで個人の各リポジトリに同じような workflow ファイルが点在しており、変更があるたびに複数リポジトリを修正する必要がありました。masutaka/actions に集約したことで、修正が一箇所で済むようになりました。
個人用リポジトリが増えてきたので、今後も共通化できる workflow をここに集約していこうと思います。
参考情報
-
iOS/Android 向けのプッシュ通知サービス ↩︎