👷
GitHub Packagesを使用してprivateなnpmパッケージとして公開する
同じ内容の記事がいくつも公開されていますが、実際に試してみたら結構はまったので備忘録として残します。
やりたいこと
GitHub Packagesにプライベートで公開したnpmパッケージを、複数のアプリケーションで使用する。
npmなどのレジストリから取得しているパブリックなパッケージと同じように、自作パッケージをGitHub Packagesからバージョン指定してインストールできるようにする。
GitHub Packagesとは
GitHub PackagesはGitHubが提供しているレジストリ。
GitHubのユーザーまたはOrgに閉じたパッケージを公開できる。
パッケージをGitHub Packagesへパッケージ公開
package.json
の設定
公開するパッケージの package.json
に以下の情報を設定する。
- name: パッケージ名
- フォーマット:
@<スコープ>/<パッケージ名>
- 例:
@052hide/my-lib
- フォーマット:
- version: パッケージバージョン
- フォーマット:
x.x.x
- 例:
1.0.0
- フォーマット:
- publishConfig: registryのURL
- フォーマット:
{ "@<スコープ>:registry": "<GitHub PackagesのレジストリURL>" }
- 例:
{ "@052hide:registry": "https://npm.pkg.github.com" }
- フォーマット:
- private: 削除する
- パッケージを公開するため
private: true
は削除する必要がある。
削除したからといって、Github Packagesにpublishしたパッケージがパブリックに公開されるわけではない。
- パッケージを公開するため
{
+ "name": "@052hide/my-lib",
+ "version": "1.0.0",
+ "publishConfig": {
+ "@052hide:registry": "https://npm.pkg.github.com"
+ },
- "private": true
...
}
.npmrc
の設定
公開するパッケージの .npmrc
に以下の情報を設定する。
- _authToken: GitHub Packagesへ公開用のPersonal Access Token
- GitHub Actionsから指定することを想定し、
GITHUB_PACKAGES_NPM_PUBLISH_AUTH_TOKEN
という環境変数で受け取るようにする。
- GitHub Actionsから指定することを想定し、
+ //npm.pkg.github.com/:_authToken=${GITHUB_PACKAGES_NPM_PUBLISH_AUTH_TOKEN}
ローカルからpublish
ローカルからpublishすることは無いので省略[1]
GitHub Actionsからpublish
name: Publish Package
on:
release:
types: [published]
jobs:
build:
# 省略
publish:
needs: build
name: Publish GitHub Packages
runs-on: ${{ matrix.os }}
timeout-minutes: 30
strategy:
matrix:
os: [ubuntu-latest]
permissions:
packages: write # GitHub Packagesへの書き込み権限が必要
contents: read # リポジトリの内容の読み取り権限が必要
steps:
- name: Checkout 🛎
uses: actions/checkout@v4.1.0
- uses: actions/setup-node@v3
with:
node-version: 18
- run: npm publish
env:
GITHUB_PACKAGES_NPM_PUBLISH_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}} # permissionsで指定した権限を持つGITHUB_TOKENを指定する
GitHub Packagesに公開完了🎉
公開したパッケージの使用
GitHub Packageの設定
repositoryの登録
installを許可するリポジトリを追加する。
https://github.com/orgs/<org>/packages/npm/<package-name>/settings
or https://github.com/users/<user>/packages/npm/<package-name>/settings
GitHub Packagesからインストール
.npmrc
の設定
.npmrc
に以下の情報を設定する。
- registry: スコープに対するレジストリURL
- フォーマット:
@<スコープ>/<パッケージ名>=https://npm.pkg.github.com
- 例:
@052hide/my-lib=https://npm.pkg.github.com
- フォーマット:
- _authToken: GitHub Packagesから取得用のPersonal Access Token
- GitHub Actionsから指定することを想定し、
GITHUB_PACKAGES_NPM_READ_AUTH_TOKEN
という環境変数で受け取るようにする。
- GitHub Actionsから指定することを想定し、
+ @052hide:registry=https://npm.pkg.github.com
+ //npm.pkg.github.com/:_authToken=${GITHUB_PACKAGES_NPM_READ_AUTH_TOKEN}
ローカルでパッケージインストール
PATの生成
- 権限
- read:packages
GITHUB_PACKAGES_NPM_READ_AUTH_TOKEN
の設定
export GITHUB_PACKAGES_NPM_READ_AUTH_TOKEN=<PAT>
# export GITHUB_PACKAGES_NPM_READ_AUTH_TOKEN=ghp_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
パッケージインストール
npm install <package-name>
# npm install @052hide/my-lib
GitHub Actionsでパッケージインストール
package.json
{
"dependencies": {
"@052hide/my-lib": "1.0.0"
}
}
workflow.yml
name: Install Packages
on:
push:
jobs:
ci:
name: CI
runs-on: ${{ matrix.os }}
timeout-minutes: 30
strategy:
matrix:
os: [ubuntu-latest]
steps:
- name: Checkout 🛎
uses: actions/checkout@v4.1.0
- name: 'Install Node Modules'
run: npm install
env:
GITHUB_PACKAGES_NPM_READ_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} # GITHUB_TOKENを指定する
# Composite Actionを使用する場合はgithub.tokenを指定する
GitHub Packagesに公開したnpmパッケージをローカルとGitHub Actionsから使用できるようになりました🎉🎉🎉
-
適切な権限のPATを
GITHUB_PACKAGES_NPM_PUBLISH_AUTH_TOKEN
に指定が必要 ↩︎
Discussion