自分用の GitHub reusable workflows リポジトリを作りました。

GitHub reusable workflows とは

GitHub Actions の reusable workflows は、workflow ファイルを他のリポジトリから呼び出せる仕組みです。

例えば、以下のように別リポジトリから workflow を呼び出します。

jobs:
  example:
    uses: masutaka/actions/.github/workflows/some-workflow.yml@main

共通の処理を一箇所にまとめられるので、複数リポジトリで同じ workflow を管理する手間が省けます。

いくつか制限や注意点があります。

  1. パブリックリポジトリからプライベートリポジトリの reusable workflow は呼び出せない
  2. プライベートリポジトリの reusable workflow を呼び出せるのは、同一 org/user の他リポジトリのみ(異なる org は不可、かつ呼び出し先リポジトリの Access policy 設定が必要)
  3. 呼び出し元 workflow レベルの env コンテキストは呼び出し先に伝播しない
  4. Environment secrets は渡せない(secrets: inherit で渡せるのは通常の secrets のみ)
  5. reusable workflow は必ずジョブ単位で実行される(step としては使えない)。そのため、呼び出すたびに別のランナーが起動し、ジョブ間でファイルシステムを共有できない。プライベートリポジトリでは Actions minutes の消費も増える。step レベルで再利用したい場合は composite action を使う必要がある

masutaka/actions はパブリックリポジトリなので、1 と 2 の制限は影響しません。

含まれている workflow

現時点で以下の reusable workflows を含めています。

ドキュメント構成は 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 をここに集約していこうと思います。

参考情報


  1. iOS/Android 向けのプッシュ通知サービス ↩︎