created: 2024-08-29T07:48:34.891Z

GitHub の gh コマンドで 4 年以上動いてない issue に Stale ラベルをまとめてつける

GitHub の UI から作業してもすぐなんだけれども、半年に 1 回くらいでやってるとスクリプトでやりたくなりそうなのでメモしておく。

なお、大人の事情で GitHub Actions が利用できないという背景がある。

コマンド

# github のこの形式のやつ
export REPO=sakamossan/myapp

ラベルをつける候補を stale-issue.json というファイルに出して事前に確認。

gh issue list \
    --repo $REPO \
    --state open \
    --label "UI" \
    --search "updated:<$(gdate -d "4 years ago" +%Y-%m-%d)" \
    --json number,updatedAt,title | jq . | tee /tmp/stale-issue.json

問題なかったら xargs で実行。

cat /tmp/stale-issue.json \
    | jq .[].number \
    | xargs -I{} gh issue edit "{}" --add-label "Stale" --repo $REPO

gh issue list の挙動メモ

gh コマンドは --label オプションを重複して渡すと AND で検索してくれる

gh issue list --repo $REPO \
    --label "UI" \
    --label "Stale"

ただし、--search オプションを複数渡すと最後の 1 つだけが有効になる。

↓ のようにすると "-label:UI"(UI ラベルがないもの)という条件だけで検索になってしまう。

gh issue list \
    --repo $REPO \
    --state open \
    --search "updated:<$(gdate -d "2 years ago" +%Y-%m-%d)" \
    --search "-label:UI"

複数条件をつけたい場合は 1 つの --search オプションに複数入れる。

gh issue list \
    --repo $REPO \
    --state open \
    --search "-label:SRE -label:UI updated:<$(gdate -d "2 years ago" +%Y-%m-%d)"
ダークナイト [Blu-ray]
[ad] ダークナイト [Blu-ray]
出演 クリスチャン・ベール, マイケル・ケイン (Blu-ray)