注目イベント!
春の新人向け連載企画開催中
新人エンジニアの皆さん、2024春、私たちと一緒にキャリアアップの旅を始めませんか?
IT業界への最初の一歩を踏み出す新人エンジニアをサポートする新連載スタート!
mameyose

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 の紹介でした。開発組織が大きくなりリポジトリの数が増えてくると、古い非アクティブなリポジトリが増えてメンテナンスコストだけが増大していきます。オーガニゼーション内のリポジトリの鮮度を保つためにもこういったレポーティングの仕組みは重要です。

豆蔵では共に高め合う仲間を募集しています!

recruit

具体的な採用情報はこちらからご覧いただけます。