GitHub Actions の checkout@v2 と access token 認証を合わせた結果ハマった
GitHub で作成した personal access token を用いてプライベートリポジトリを参照できるようにする方法の一つとして、以下によってリポジトリの URL を書き換えるというものがある。
code:sh
git config --global --add url.https://${GITHUB_TOKEN}@github.com.insteadOf ssh://git@github.com
git config --global --add url.https://${GITHUB_TOKEN}@github.com.insteadOf https://github.com
git config --global --add url.https://${GITHUB_TOKEN}@github.com.insteadOf git://git@github.com
しかし、上記を GitHub Actions 上で用いると、git cloneは使えるがgit ls-remoteはRepository Not Foundと返されてしまった。(ls-remoteは npm 等が使用する)
原因は、その前で使用しているactions/checkout@v2が GitHub の credential を永続化し、それが上記のトークンを用いる認証よりも優先されてしまうためっぽい。特に v2 の仕様に依存していたわけではなかったので v1 にすることで回避した。
参考:https://github.community/t/internal-repository-not-reachable-from-actions/17652
---
それはさておきcloneとls-remoteで認証の挙動が変わることに違和感がある。