Stale Repos Action を使って GitHub オーガニゼーションの古いリポジトリをリストする
Stale Repos Action とは
#Stale Repos Action は、GitHub オーガニゼーション内で一定期間更新のないリポジトリを検出するための Action です。ワークフローに組み込んで定期実行することで、古くなったリポジトリをリストアップし棚卸しできます。GitHub 公式の Action で v1.0 のリリースアナウンスがありました。
Announcing the Stale Repos Action | The GitHub Blog
この Action は GitHub の Open Source Program Office (OSPO) によって開発され、OSS として公開されたようです。
自分の組織内で OSPO 組織を立ち上げて運営していくためのガイドは以下のリポジトリで OSS として公開されています。
GitHub - github/github-ospo: Helping open source program offices get started
Stale Repos Action のリポジトリは以下です。
GitHub - github/stale-repos: Find stale repositories in a GitHub organization.
Marketplace のページは以下です。
stale-repos - GitHub Marketplace
リポジトリではなく、古い issue や PR を自動クローズする Action は以前からあります。
使ってみる
#アナウンスのブログや Action の README にワークフローサンプルがありますので使うのは簡単でしょう。自社のオーガニゼーションのリポジトリにワークフローファイルを追加して試してみました。
name: stale repo identifier
on:
workflow_dispatch:
schedule:
- cron: '0 0 1 * *'
jobs:
build:
name: stale repo identifier
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Run stale_repos tool
uses: docker://ghcr.io/github/stale_repos:v1
env:
GH_TOKEN: ${{ secrets.GH_TOKEN }}
ORGANIZATION: mamezou-tech
INACTIVE_DAYS: 365
- name: Create issue
uses: peter-evans/create-issue-from-file@v4
with:
title: Stale repository report
content-filepath: ./stale_repos.md
assignees: kondoumh
スケジュール起動では毎月1日の午前0時(UTC) に起動するようにしました。
Stale Repo Action は Docker Action です。Run stale_repos tool のステップで使用しています。環境変数 ORGANIZATION
で指定されたオーガニゼーションで、INACTIVE_DAYS
で指定された日数更新がないリポジトリを検出して stale_repos.md という Markdown ファイルに出力します。
後続ステップで create-issue-from-file Action を使って出力された Markdown ファイルから issue を作成します。この Action では作成した issue に assignees
で担当者をアサインすることも可能です。
今回は、repo のスコープを有効化した Personal Access Token (classic) を secret に格納して使用しました。現状 オーガニゼーションのリポジトリにアクセスするには PAT classic の発行が必要なようです。
このワークフローを実行すると、ワークフローが格納されているリポジトリに issue が作成され非アクティブなリポジトリの一覧表が挿入されました。担当者もアサインされました。
とてもシンプルです。issue として起票されることで、対象リポジトリをアーカイブする、再度アクティブなものにしていくなどのアクションに繋げることができます。このように定期的に非アクティブなリポジトリに対する見直しをかけることが、オーガニゼーション内のリポジトリの鮮度を維持する上で役立ちます。
最初 private リポジトリがリストアップされていないので疑問に思っていたところ、private なリポジトリも対象にする PR がタイムリーに出てマージされ、ちゃんとリストアップされるようになりました。
Allow private repos and update test by zkoppert · Pull Request #21 · github/stale-repos
最後に
#以上、GitHub の OSPO から公開された Stale repos Action の紹介でした。開発組織が大きくなりリポジトリの数が増えてくると、古い非アクティブなリポジトリが増えてメンテナンスコストだけが増大していきます。オーガニゼーション内のリポジトリの鮮度を保つためにもこういったレポーティングの仕組みは重要です。