知らんけど。

主にプログラミングについて書きます

GitHub Repository に公開した package を GitHub Actions でインストールする

状況

僕は、numberplace-generator という数独の問題を生成するパッケージを GitHub Actions に公開しています。

github.com

そして、numberplace-generator で生成した問題を遊ぶ numberplace という SPA を作っています。

github.com

numberplace は numberp という名前で Amazon S3ホスティングしています。

numberp.net

何をしようとしていたか

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 ファイルを生成するようです。 詳細は下記公式サイトに記載があります。

docs.github.com

あとがき

.npmrc なしで開発できていたので、ここで詰まることは想定外でした。VSCodeGitHub Packages にログイン済みだったのだろうとは思いますが。

npm にパッケージを公開していればこの設定は不要だったのかと考えると、 GitHub Packages での公開はあまり得しないように思いました。そのうち npm での公開に切り替えるかもしれません。