GitHub CLI でリポジトリを削除する

2024-10-10  /  GitHubShell Script

リポジトリを大量に消すためGitHubCLIで作業した記録です。

削除の権限が必要

CLIでリポジトリを削除するためには、通常と異なり削除の権限を明示的にする必要があるようです。

gh auth refresh -s delete_repo \
  -h github.enterprise.example.com

オプション -s delete_repo を指定します。
GitHub Enterpriseの場合は -h で指定します。

単純な削除

以下のように実行します。

gh repo delete "$org/$repo"

特にオプションを指定しない場合、削除の確認のため入力コンソールが表示されます。organization名/repository名 を入力する必要があります。

確認せずに削除

--yes を使用すると確認せずに削除できます。

gh repo delete --yes "$org/$repo"

確認なしで削除できるので、ウェブ上で削除するよりも手間がかからないですね。

アーカイブしたリポジトリを容赦なく削除する

大量に削除したいので、スクリプトを組んでみます。

archived_repos=$(gh repo list $org \
  --json name,isArchived \
  --jq '.[] | select(.isArchived) | .name' \
  --limit 100)

for repo_name in $archived_repos; do
  echo "Deleting: $org/$repo"
  gh repo delete --yes "$org/$repo"
done

gh repo list に渡せるオプションがすごいなって思いました。JSONで取得したい内容を渡し、jqのオプションを渡すことで内部で処理された結果になります(別途jqで処理しなくて良い)。

これを使ってラクにリポジトリが削除できました。

実際行う時には何らかのバックアップは取っておいた方が良いですね。