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 は reporead:orggist の 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> が出てくるので、それを叩くことでたいおうできそうです。

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark