gh repo delete で 403 が出たら、エラーメッセージのコマンドをそのまま叩く
gh repo delete で要らなくなったテスト用リポジトリを片付けようとしたら、HTTP 403 で拒否されました。ただしエラーメッセージの末尾に復旧コマンドがそのまま書かれていて、1 行コピペで済みました。 起き […]
目次
gh repo delete で要らなくなったテスト用リポジトリを片付けようとしたら、HTTP 403 で拒否されました。ただしエラーメッセージの末尾に復旧コマンドがそのまま書かれていて、1 行コピペで済みました。
起きたこと
$ gh repo delete hideokamoto/test-cci-ready --yes
HTTP 403: Must have admin rights to Repository. (https://api.github.com/repos/hideokamoto/test-cci-ready)
This API operation needs the "delete_repo" scope. To request it, run: gh auth refresh -h github.com -s delete_repo
gh auth login でログインした直後の token には、リポジトリ削除に必要な delete_repo scope が含まれていません。GitHub CLI が認証 token に保持する最小 scope は repo、read:org、gist の 3 つで、削除のような破壊的操作にはこの最小セット外の scope を別途追加する必要があります。
対処
エラーメッセージに書かれているコマンドをそのまま実行します。
$ gh auth refresh -h github.com -s delete_repo
! First copy your one-time code: XXXX-XXXX
Press Enter to open https://github.com/login/device in your browser...
✓ Authentication complete.
ブラウザで one-time code を入力すれば、既存の token に delete_repo scope が追加されます。-s/--scopes は追加方向のフラグで、以前に追加した scope は維持されます。
gh auth refresh 自体の仕様は 公式マニュアル に整理されています。--remove-scopes で削除、--reset-scopes でデフォルトに戻すこともできます。
他の scope でも同じパターンで足せる
workflow (Actions の workflow ファイル更新)、admin:org (Organization 操作)、read:project (Projects 読み取り) など、別の scope が要求されたときも対処は同じです。エラーメッセージに gh auth refresh -h github.com -s <scope> が出てくるので、それを叩くことでたいおうできそうです。