ノート: 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 }}