ノート: GitHubホストランナーは、現在GitHub Enterprise Serverでサポートされていません。 GitHubパブリックロードマップで、計画されている将来のサポートに関する詳しい情� �を見ることができます。
はじめに
本ガイドでは、継続的インテグレーション(CI)テストにパスした後、Node.jsのパッケージをGitHub Packages及びnpmレジストリに公開するワークフローの作成方法を紹介します。
必要な環境
ワークフローの設定オプションと、ワークフローファイルの作成方法についての基本的な知識を持っておくことをおすすめします。 詳しい情� �については、「GitHub Actions を学ぶ」を参照してく� さい。
Node.jsプロジェクトのためのCIワークフローの作成に関する詳しい情� �については「GitHub ActionsでのNode.jsの利用」を参照してく� さい。
また、以下の基本的な理解があれば役立ちます。
- 「npm レジストリの利用」
- 「環境変数」
- 「暗号化されたシークレット」
- 「ワークフローでの認証」
パッケージの設定について
package.jsonファイル中のname
及びversion
フィールドは、レジストリがパッケージをレジストリにリンクするために利用するユニークな識別子を作成します。 package.jsonファイル中にdescription
を含めることによって、パッケージのリストページのためのまとめを追� できます。 詳しい情� �については、npmのドキュメンテーション中の「package.jsonファイルの作成」及び「Node.jsモジュールの作成」を参照してく� さい。
ローカルの.npmrcファイルがあり、registry
の値が指定されている� �合、npm publish
コマンドは.npmrcファイルで設定されたレジストリを使います。 setup-node
アクションを使って、デフォルトのレジストリとスコープを設定するローカルの.npmrcファイルをランナー上に作成できます。 setup-node
アクションは、プライベートリポジトリへのアクセスやnodeパッケージの公開に使われる認証トークンも入力として受け付けます。 詳しい情� �についてはsetup-node
を参照してく� さい。
setup-node
アクションを使えば、ランナーにインストールされたNode.jsのバージョンを指定できます。
package.jsonファイルにpublishConfig
フィールドを設定するステップをワークフローに追� したなら、setup-node
アクションを使ってregistry-urlを指定する必要はありませんが、パッケージを公開するレジストリは1つ� けに限られます。 詳しい情� �についてはnpmドキュメンテーションの「Configの公開」を参照してく� さい。
npmレジストリへのパッケージの公開
新しいリリースを作成するたびに、パッケージを公開するワークフローを起動できます。 以下の例でのワークフローは、created
という種類でrelease
イベントが発生したときに実行されます。 このワークフローは、CIテストをパスすればnpmレジストリにパッケージを公開します。
ワークフロー中で npm レジストリに対して認証を受けた操作を行うためには、npm の認証トークンをシークレットとして保存しなければなりません。 たとえば、NPM_TOKEN
というリポジトリシークレットを作成します。 詳しい情� �については、「暗号化されたシークレットの作成と利用」を参照してく� さい。
By default, npm uses the name
field of the package.json file to determine the name of your published package. グローバルな名前空間に公開する� �合は、パッケージ名� けを含める必要があります。 For example, you would publish a package named npm-hello-world-test
to https://www.npmjs.com/package/npm-hello-world-test
.
スコープのプレフィックスを含むパッケージを公開するなら、そのスコープをpackage.jsonファイルの名前に含めてく� さい。 たとえばnpmのスコーププレフィックスがoctocatであり、パッケージ名がhello-worldなら、package.jsonファイル中のname
は@octocat/hello-world
とすべきです。 npmパッケージがスコーププレフィックスを使っており、パブリックであるなら、npm publish --access public
オプションを使う必要があります。 これは、意図せずプライベートパッケージを公開してしまうことを防ぐためにnpmが必要とするオプションです。
以下の例は、NPM_TOKEN
シークレットを環境変数のNODE_AUTH_TOKEN
に保存します。 setup-node
アクションが.npmrcファイルを作成する際には、環境変数のNODE_AUTH_TOKEN
からトークンを参照します。
name: Publish Package to npmjs
on:
release:
types: [created]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
# Setup .npmrc file to publish to npm
- uses: actions/setup-node@v2
with:
node-version: '16.x'
registry-url: 'https://registry.npmjs.org'
- run: npm ci
- run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
上の例では、setup-node
アクションは以下の内容でランナー上に.npmrcファイルを作成します。
//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}
registry=https://registry.npmjs.org/
always-auth=true
Please note that you need to set the registry-url
to https://registry.npmjs.org/
in setup-node
to properly configure your credentials.
GitHub Packagesへのパッケージの公開
新しいリリースを作成するたびに、パッケージを公開するワークフローを起動できます。 以下の例でのワークフローは、created
という種類でrelease
イベントが発生したときに実行されます。 このワークフローは、CIテストをパスすればGitHub Packagesにパッケージを公開します。
宛先リポジトリの設定
package.json ファイルで repository
キーを指定しない� �合、GitHub Packages は package.json ファイルの name
フィールドで指定した GitHub リポジトリにパッケージを公開します。 たとえば、@my-org/test
という名前のパッケージは、my-org/test
GitHub というリポジトリに公開されます。
た� し、repository
キーを指定すると、そのキーのリポジトリが GitHub Packages の宛先 npm レジストリとして使用されます。 たとえば、以下の package.json を公開すると、my-amazing-package
という名前のパッケージが octocat/my-other-repo
GitHub リポジトリに公開されます。
{
"name": "@octocat/my-amazing-package",
"repository": {
"type": "git",
"url": "https://github.com/octocat/my-other-repo.git"
},
宛先リポジトリへの認証
ワークフロー中でGitHub Packagesレジストリに対して認証を受けた操作をするには、GITHUB_TOKEN
が使えます。 ワークフロー内のジョブが開始されるたびに、GITHUB_TOKEN
はそのリポジトリのアクセストークンに設定されます。 これは、ワークフローが実行されるリポジトリ内でパッケージに対する読み取り及び書き込み権限を持っています。 詳しい情� �については「GITHUB_TOKENでの認証を参照してく� さい。
パッケージを別のリポジトリに公開する� �合は、宛先リポジトリ内のパッケージに書き込む権限を持つ個人アクセストークン (PAT) を使用する必要があります。 詳しい情� �については、「個人アクセストークンを作成する」および「暗号化されたシークレット」を参照してく� さい。
ワークフローの例
以下の例は、GITHUB_TOKEN
シークレットを環境変数のNODE_AUTH_TOKEN
に保存します。 setup-node
アクションが.npmrcファイルを作成する際には、環境変数のNODE_AUTH_TOKEN
からトークンを参照します。
name: Publish package to GitHub Packages
on:
release:
types: [created]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
# Setup .npmrc file to publish to GitHub Packages
- uses: actions/setup-node@v2
with:
node-version: '16.x'
registry-url: 'https://npm.pkg.github.com'
# Defaults to the user or organization that owns the workflow file
scope: '@octocat'
- run: npm ci
- run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
setup-node
アクションは、ランナー上で.npmrcファイルを作成します。 setup-node
アクションでscope
インプットを使うと、.npmrcファイルにはスコーププレフィックスが含まれます。 デフォルトでは、setup-node
アクションは.npmrcファイルのスコープを、ワークフローファイルを含むアカウントに設定します。
//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}
@octocat:registry=https://npm.pkg.github.com
always-auth=true
yarnを利用したパッケージの公開
パッケージマネージャーのYarnを使う� �合、Yarnを使ってパッケージのインストールと公開が行えます。
name: Publish Package to npmjs
on:
release:
types: [created]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
# Setup .npmrc file to publish to npm
- uses: actions/setup-node@v2
with:
node-version: '16.x'
registry-url: 'https://registry.npmjs.org'
# Defaults to the user or organization that owns the workflow file
scope: '@octocat'
- run: yarn
- run: yarn publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}