GitHub Repository に公開した package を GitHub Actions でインストールする
状況
僕は、numberplace-generator という数独の問題を生成するパッケージを GitHub Actions に公開しています。
そして、numberplace-generator で生成した問題を遊ぶ numberplace という SPA を作っています。
numberplace は numberp という名前で Amazon S3 でホスティングしています。
何をしようとしていたか
GitHub Actions を使って、numberplace の main ブランチに push が行われたときには本番環境へデプロイし、PullRequest が作られた際にはテスト環境へデプロイするようにしたいと考えていました。
問題点
npm ci
で 401 になってしまいます。
詳細
以下は npm ci 時のログです。 chokidar のワーニングが出ているところを鑑みるに、途中まで npm ci は動いているのですが、途中から E401 の権限のエラーが発生しています。 おそらく GitHub Packages で公開している numberplace-generator のインストールで失敗しているものと考えました。
... npm WARN deprecated chokidar@2.1.8: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies npm ERR! code E401 npm ERR! Incorrect or missing password.
エラーの全容はこちら
解決方法
以下の Workflow でビルドまで成功しました。(S3 へのデプロイは現時点ではまだ失敗)
name: Deploy for test on: pull_request: types: [opened, reopened, synchronize] jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Use Node.js uses: actions/setup-node@v3 with: always-auth: true node-version: 16.14.0 registry-url: 'https://npm.pkg.github.com' scope: '@ysk8hori' - name: Install Dependencies run: npm ci env: NODE_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }} - name: Build run: npm run build # ...
ポイント
ポイントは以下の2つでした。
actions/setup-node
をする- 環境変数
NODE_AUTH_TOKEN
を指定する
actions/setup-node
では setup-node の設定と NODE_AUTH_TOKEN
を元に .npmrc ファイルを生成するようです。
詳細は下記公式サイトに記載があります。
あとがき
.npmrc なしで開発できていたので、ここで詰まることは想定外でした。VSCode で GitHub Packages にログイン済みだったのだろうとは思いますが。
npm にパッケージを公開していればこの設定は不要だったのかと考えると、 GitHub Packages での公開はあまり得しないように思いました。そのうち npm での公開に切り替えるかもしれません。