actions/staleを使って放置されたPRをクローズしよう
はじめに
こんにちは。READFYORのエンジニアをしているshmokmtです。
READYFORで運用している主要なRuby on Railsアプリケーションのリポジトリは比較的モノリスです。
このリポジトリにはバックエンドエンジニアだけでなく、SREやフロントエンドエンジニアを含めたほとんどのエンジニアが高頻度でコミットします。
しかし、このリポジトリでPR一覧を見ようとすると、不要と思われる大量のPRがOpenなままになってしまっていました。
具体的には以下のような状況でした。
・コミットするエンジニアの人数が10~15人の規模であるのに対して、リモートブランチ数が何故か普通に200を越えている。
・退職者が作成していた数多くのPRがOpenになったままである。
・エンジニアがライブラリの導入のために試行錯誤したDraft PRがそのまま放置されている。
・作業者の手元に不要なリモート追跡ブランチがいつの間にか溜まる。
今回はSREもくもく会[1]を通して actions/stale
を使ってPRをクローズするGitHub Actionsのworkflowを作成しました。
今回はworkflowのコードを丸ごと紹介します。
掃除がしたくてうずうずしている筆者
actions/staleを使ったPRのクローズ
実はactions/stale
はissueもクローズできます。ですが、当該リポジトリはissueまでクローズする必要はないため、オプションで無効化しています。
dependabotによるPRは自動でクローズされてしまったら不都合である場合が多いため、dependencies
ラベルがついている場合はクローズされないようにオプションで設定しています。
READYFORでは下記のworkflowでactions/stale
を動かしています。
name: "Closing a Pull Request"
on:
workflow_dispatch:
schedule:
- cron: "30 1 * * *" # 毎日午前10時30分(JST)に実行
jobs:
stale:
runs-on: ubuntu-latest
permissions:
pull-requests: write
contents: write
issues: read
steps:
- uses: actions/stale@v9
with:
exempt-pr-labels: do-not-close,dependencies
days-before-issue-stale: -1 # お掃除したいのはPRだけ。issueは対象外。
days-before-issue-close: -1 # お掃除したいのはPRだけ。issueは対象外。
days-before-pr-stale: 14 # 2週間アクティビティがない場合はstaleラベルを貼る。
days-before-pr-close: 14 # staleラベルが貼られてから2週間アクティビティがない場合はクローズする
delete-branch: true
operations-per-run: 100
# see also https://docs.github.com/ja/actions/use-cases-and-examples/project-management/closing-inactive-issues
おわりに
PRのお掃除も年末掃除の1つです。
それではみなさん良いお年を。
参考
-
私の所属するシステム&データ基盤というチームでは、毎週金曜日にもくもく会という名目でOKRとは別でOSS活動や軽微なセキュリティ改善、Terraformのリファクタリング等を実施しています。 ↩︎
「みんなの想いを集め、社会を良くするお金の流れをつくる」READYFORのエンジニアブログです。技術情報を中心に様々なテーマで発信していきます。 ( Zenn: zenn.dev/p/readyfor_blog / Hatena: tech.readyfor.jp/ )
Discussion