フラミナル

考え方や調べたことを書き殴ります。IT技術系記事多め

gh コマンドでcould not determine base repo: GraphQL: Resource protected by organization SAML enforcement が出る

GitHub

github enterprise に入った環境で、gh コマンドを実行するとこのようなエラーになることがあります。

❯ gh pr view

could not determine base repo: GraphQL: Resource protected by organization SAML enforcement. You must grant your OAuth token access to an organization within this business. (repo_000)
Authorize in your web browser:  https://github.com/enterprises/xxx/sso?authorization_request=XXXXX

URLにアクセスしても状況が改善しないのですが、この場合は以下をすると直ります。

❯ gh auth login

? What account do you want to log into? GitHub.com
? You're already logged into github.com. Do you want to re-authenticate? Yes
? What is your preferred protocol for Git operations? SSH
? Upload your SSH public key to your GitHub account? xxxxx
? Title for your SSH key: GitHub CLI
? How would you like to authenticate GitHub CLI? Login with a web browser

! First copy your one-time code: XXX-XXXX
Press Enter to open github.com in your browser... 
✓ Authentication complete.
- gh config set -h github.com git_protocol ssh
✓ Configured git protocol
HTTP 422: Validation Failed (https://api.github.com/user/keys)
key is already in use

理由について

GitHub Enterprise になった時から、元々持っていたトークンだけではリポジトリにアクセスできなくなり、自社・自分の組織が用意している IdP での認証を経由した場合でのみリポジトリにアクセスできるようになります。

この時事前に IdP を経由してブラウザで GitHub にログインしておけば、gh auth login でこのアカウントにアクセス可能なトークンをローカルに生成することができるようです。