LoginSignup
18
5

More than 1 year has passed since last update.

Github Actionsから、PrivateなGithub packagesのnpm repositoryにアクセスする方法

Last updated at Posted at 2020-09-30

Github packageにpublishしてあるPrivateのライブラリを取得するには認証Tokenを設定してyarn install(またはnpm install)を行う必要があります。ただ、ググってもpublishする際の情報は出てくるのですが、取得する方は内容が薄い or 間違っているものが出てくるので、情報を正すために投稿しておきたいと思います。

正しい設定方法

    1. 下記のyamlをレポジトリに追加
    1. 権限のついた個人Tokenの発行
    1. GithubのSettingからsecretを設定

の3手順が必要です。

1. Github actionsの設定

.github/workflows/build.yaml
name: 'build-and-test'

on: # rebuild any PRs and main branch changes
  pull_request:
  push:
    branches:
      - master
      - develop
jobs:
  build-and-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Get yarn cache directory path
        id: yarn-cache-dir-path
        run: echo "::set-output name=dir::$(yarn cache dir)"
      - name: Cache node modules
        uses: actions/cache@v2
        env:
          cache-name: cache-node-modules
        with:
          # yarn cache files are stored in `~/.cache/yarn` on Linux/macOS
          path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
          key: ${{ runner.os }}-yarn-${{ env.cache-name }}-${{ hashFiles('**/yarn.lock') }}
          restore-keys: |
            ${{ runner.os }}-yarn-${{ env.cache-name }}-
            ${{ runner.os }}-yarn-
            ${{ runner.os }}-
      # プロジェクトにすでに.npmrcを入れている場合は、このステップをコメントインして下さい。
      # - run: rm .npmrc

      - name: Use Node.js
        uses: actions/setup-node@v1
        with:
          always-auth: true
          node-version: 14.4.0
          # .npmrc内で
          # //npm.pkg.github.com/@please_replace_here/:_authToken=${secrets.AUTH_TOKEN_FOR_GITHUBPKG }
          # 相当の設定に展開されます
          registry-url: 'https://npm.pkg.github.com'
          scope: '@please_replace_here'

      # https://docs.github.com/en/free-pro-team@latest/actions/guides/building-and-testing-nodejs#example-using-a-private-registry-and-creating-the-npmrc-file
      - run: yarn install
        env:
          NODE_AUTH_TOKEN: ${{ secrets.AUTH_TOKEN_FOR_GITHUBPKG }}
      - run: |
          yarn compile
      - run: |
          yarn test

このファイルをレポジトリに追加します。
scope: '@please_replace_here' の部分だけ、書き換えまたは、Scopeの制限をする必要が無い場合はこの行を削除して下さい。それ以外は変更不要です。
このファイルを追加した上でpushすると、github actionsが走るようになります。ただ、後述の2,3の設定をしていない場合は、pushはまだしないで下さい。

※ yarn installのキャッシュも設定しています
※ yarn compileやyarn testは各自のpackage.jsonの設定に合わせて下さい
※ npmの場合はキャッシュの設定を変更し、コマンドをnpmに置き換えてください。

2. 権限のついた個人トークンの発行

上記のAUTH_TOKEN_FOR_GITHUBPKGに埋め込まれるTokenを作成する必要があります。
権限としては、yarn installで引っ張って来たいlibraryのprivate github packagesへのread権限が必要になります。
公式の手順を参考に、適切にPackagesへのRead権限が付いたトークンを生成して下さい。
(会社の場合、個人アカウントではなくCI用のアカウントを作ってそのアカウントでトークンを発行しておくのをおすすめします。)

3. GithubのSettingからsecretを設定

生成したトークンを設定ページに設定する必要があります。
github actionsを実行したいRepositoryのページのSettingsを開き、左側のメニューのsecretsから登録可能です。
登録の際に、KeyはAUTH_TOKEN_FOR_GITHUBPKGで登録して下さい。(上記のbuild.yamlで設定したKeyと一致させる必要があります)
公式の手順

Tokenの登録はrepository単位で登録出来ますが、organizationを利用しているならorganizationレベルで設定しておくと他のレポジトリでトークンの登録作業が不要になるので楽です。

よくある間違い

良く出てくる間違った情報としてinstallのときに

- run: yarn install
  env:
    NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

としているものがありますが、GITHUB_TOKENには、そのレポジトリ のGithub packagesのRead/Write権限しかついていないため、他のPrivate repositoryのpackagesの取得は出来ません。なので、上記で示したように、追加で権限が正しくついたtokenを設定しないとうまくライブラリを取ってこれません。

参考(公式)

参考(ですが、正しくない部分があるので注意)

18
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
5