Stale Repos Action を使って GitHub オーガニゼーションの古いリポジトリをリストする

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

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 として公開されたようです。

Information

自分の組織内で 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

Information

リポジトリではなく、古い issue や PR を自動クローズする Action は以前からあります。

Close Stale Issues - GitHub Marketplace

使ってみる

#

アナウンスのブログや 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 で担当者をアサインすることも可能です。

Information

今回は、repo のスコープを有効化した Personal Access Token (classic) を secret に格納して使用しました。現状 オーガニゼーションのリポジトリにアクセスするには PAT classic の発行が必要なようです。

このワークフローを実行すると、ワークフローが格納されているリポジトリに issue が作成され非アクティブなリポジトリの一覧表が挿入されました。担当者もアサインされました。

Stale repository report

とてもシンプルです。issue として起票されることで、対象リポジトリをアーカイブする、再度アクティブなものにしていくなどのアクションに繋げることができます。このように定期的に非アクティブなリポジトリに対する見直しをかけることが、オーガニゼーション内のリポジトリの鮮度を維持する上で役立ちます。

Information

最初 private リポジトリがリストアップされていないので疑問に思っていたところ、private なリポジトリも対象にする PR がタイムリーに出てマージされ、ちゃんとリストアップされるようになりました。

Allow private repos and update test by zkoppert · Pull Request #21 · github/stale-repos

最後に

#

以上、GitHub の OSPO から公開された Stale repos Action の紹介でした。開発組織が大きくなりリポジトリの数が増えてくると、古い非アクティブなリポジトリが増えてメンテナンスコストだけが増大していきます。オーガニゼーション内のリポジトリの鮮度を保つためにもこういったレポーティングの仕組みは重要です。

豆蔵デベロッパーサイト - 先週のアクセスランキング
  1. 基本から理解するJWTとJWT認証の仕組み (2022-12-08)
  2. AWS認定資格を12個すべて取得したので勉強したことなどをまとめます (2022-12-12)
  3. Nuxt3入門(第4回) - Nuxtのルーティングを理解する (2022-10-09)
  4. Backstageで開発者ポータルサイトを構築する - 導入編 (2022-04-29)
  5. Nuxt3入門(第8回) - Nuxt3のuseStateでコンポーネント間で状態を共有する (2022-10-28)
  6. Viteベースの高速テスティングフレームワークVitestを使ってみる (2022-12-28)
  7. ORマッパーのTypeORMをTypeScriptで使う (2022-07-27)
  8. Nuxt3入門(第1回) - Nuxtがサポートするレンダリングモードを理解する (2022-09-25)
  9. GitHub Actions - 構成変数(環境変数)が外部設定できるようになったので用途を整理する (2023-01-16)
  10. Jest再入門 - 関数・モジュールモック編 (2022-07-03)