Github packageにpublishしてあるPrivateのライブラリを取得するには認証Tokenを設定してyarn install(またはnpm install)を行う必要があります。ただ、ググってもpublishする際の情報は出てくるのですが、取得する方は内容が薄い or 間違っているものが出てくるので、情報を正すために投稿しておきたいと思います。
正しい設定方法
-
- 下記のyamlをレポジトリに追加
-
- 権限のついた個人Tokenの発行
-
- GithubのSettingからsecretを設定
の3手順が必要です。
1. Github actionsの設定
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を設定しないとうまくライブラリを取ってこれません。
参考(公式)
参考(ですが、正しくない部分があるので注意)