📦
GitHub Actionでprivateリポジトリをnpm installすると「Repository not found.」エラーになる
はじめに
GitHub Action 上で、GitHub の private リポジトリを記載した package.json をnpm install
したら、「Repository not found.」エラーになり、困ったので備忘録。
なお、python のpip install
では今回の対応をしなくても問題は発生せず、npm install
では発生した。
動作環境
- GitHub Action
- Node.js 14.x
前提
- private リポジトリのインストールには
git+https
を利用package.json・・・ "dependencies": { "package name": "git+https://github.com/YOUR-USERNAME/YOUR-REPOSITORY", } ・・・
- ~/.netrc を利用~/.netrc
machine github.com login アカウント名 password Personal access token
結論
actions/checkout@v2
の with 句で persist-credentials
をfalse
に設定する。
修正前後の workflow
修正前
workflow.yml
・・・
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [14.x]
steps:
- uses: actions/checkout@v2
- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node-version }}
- name: Install dependencies
env:
MACHINE_USER: workflowで利用するユーザ名
ACCESS_TOKEN: ${{ secrets.MACHINE_USER_TOKEN }} <- GitHubのSecretsに登録したPersonal access token
run: |
touch ~/.netrc
echo "machine github.com" > ~/.netrc
echo "login $MACHINE_USER" >> ~/.netrc
echo "password $ACCESS_TOKEN" >> ~/.netrc
chmod 600 ~/.netrc
npm install
- name: Clean up
run: |
rm ~/.netrc
if: ${{ always() }}
・・・
修正後
workflow.yml
・・・
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [14.x]
steps:
- uses: actions/checkout@v2
+ with:
+ persist-credentials: false
- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node-version }}
- name: Install dependencies
env:
MACHINE_USER: Personal access tokenを持つユーザ名
ACCESS_TOKEN: ${{ secrets.MACHINE_USER_TOKEN }}
run: |
touch ~/.netrc
echo "machine github.com" > ~/.netrc
echo "login $MACHINE_USER" >> ~/.netrc
echo "password $ACCESS_TOKEN" >> ~/.netrc
chmod 600 ~/.netrc
npm install
- name: Clean up
run: |
rm ~/.netrc
if: ${{ always() }}
・・・
何が問題だったのか?
persist-credentials
の説明を見ると、
# Whether to configure the token or SSH key with the local git config
# Default: true
とあるから、true
だとローカルの設定が優先されて、
~/.netrc
が存在していても、提供された GITHUB_TOKEN シークレットしか使わないということだろうか。
まとめ
たったこの 2 行にたどり着くために、どれだけネットをさまよい、いろいろ試してみたことか。。。
同じようにハマっている人の助けになれば、幸いです。
参考
Discussion