パブリッシャーアカウントのセットアップ
@ahmed-g-gad/apothem 向けの npmjs.com 信頼済みパブリッシャーと、GitHub 側のリリース前提条件を構成します。
このランブックは、リリース面のパブリッシャー側を構成します。
配布の構成にはレジストリが 1 つだけあります。npmjs.com 上のスコープ付き npm パッケージ @ahmed-g-gad/apothem で、publish-npm.yml ワークフローによって公開されます。
このワークフローは、v*.*.* のタグのプッシュ時に release.yml と並行して実行され、その完了を待ちません(tag 入力を指定した手動ディスパッチは、そのフォールバックです)。
release 環境の承認がゲートです。オペレーターは、GitHub Release、Pages、CI、コンフォーミティ、ハーネスの各ワークフローがグリーンになった後に、これを承認します。
その他のすべての成果物は GitHub Release ページ自体で配布され、外部のパブリッシャーアカウントを必要としません。
アイデンティティマップ
| 面 | アカウント | パッケージ識別子 |
|---|---|---|
| GitHub | ahmed-g-gad | ahmed-g-gad/apothem |
| npm (npmjs.com) | ahmed-g-gad | @ahmed-g-gad/apothem |
GitHub のオーナーは、将来変わることが許容されています。ワークフローとインストーラーのロジックは、プラットフォームが動的な解決を許可する場所では、github.repository、github.repository_owner、または APOTHEM_GITHUB_REPO を読み取ります。ユーザーはメンテナーのアカウント名ではなくパッケージ名をインストールするため、レジストリのパッケージ識別子は安定したままです。
npm (npmjs.com)
-
ahmed-g-gadとしてhttps://www.npmjs.com/にサインインします。 -
アカウントで二要素認証を有効にします。
-
スコープ付きパッケージ名を確認します。
npm view @ahmed-g-gad/apothem name404は、スコープ付きパッケージがまだ公開されていないことを意味します。 それ以外のパッケージ応答は、公開する前に、このリポジトリおよびアカウントと一致していなければなりません。 -
UI が最初のパッケージレコードを要求する場合は、npm 上でパッケージを作成します。 名前はスコープ付きのまま保ちます:
@ahmed-g-gad/apothem。 -
GitHub Actions から
@ahmed-g-gad/apothemの Trusted Publishing を構成します。- GitHub オーナー:
ahmed-g-gad - リポジトリ:
apothem - ワークフローファイル名:
publish-npm.yml - 環境:
release(publish-npm.ymlの publish ジョブのenvironment:です。 この 2 つは一致している必要があります) - 許可されるアクション:
npm publish。
- GitHub オーナー:
-
GitHub で、
release環境がahmed-g-gad/apothemに存在し、 デプロイに手動承認を必要とすることを確認します。 -
npm の面を 1 つの公開レジストリパッケージに保ちます: npmjs.com 上の
@ahmed-g-gad/apothem。 -
タグのプッシュが開始する
release.ymlの実行で、publish GitHub Releaseジョブを承認します。 このジョブはrelease環境の承認を待機し、以下の準備状態チェックには、その実行がグリーンであることが必要です。 リリースサイクルランブック の §2.3 に、その方法が示されています。 その後、リリースの準備状態を確認します。Release readiness bash scripts/release/check-release-ready.sh <release-tag>チェックには
GH_TOKENの設定と、dist/release-assets/内の公開済みのsbom.cdx.jsonが必要です。リリースサイクルランブック の §2.4 に、トークンのスコープとダウンロードコマンドが記載されています。 -
タグのプッシュが開始する
Publish npm(publish-npm.yml)の実行について、release環境のデプロイを承認します。その実行が開始されなかった場合は、 GitHub Actions タブからtag=<release-tag>を指定してワークフローをディスパッチします。 -
公開されたパッケージを検証します。
npm verification npm view @ahmed-g-gad/apothem version npx @ahmed-g-gad/apothem@<version> --version
NPM_TOKEN、ユーザー名、パスワードのシークレットは必要ありません。
ワークフローは、Node のバージョンと npm CLI の OIDC 下限を .github/workflows/publish-npm.yml 内にピン留めした状態で、npm Trusted Publishing(OIDC)を通じて公開します。
ワークフローは npmjs.com に対して npm publish --provenance --access public を実行するため、Sigstore の来歴ステートメントが明示的に生成されます。また npm は、パブリックな GitHub Actions ワークフローから公開されたパブリックパッケージに対して、デフォルトでも来歴を発行します。
PUT 中のレジストリ 404 は、npm 側の信頼済みパブリッシャー、パッケージスコープ、またはアカウントの認可がまだ整合していないことを意味します。ワークフローを再試行する前に、npm のパッケージ設定を修正してください。
信頼済み公開が一度成功したら、トークンの経路を完全に閉じてください。 npmjs.com のパッケージの Settings → Publishing access で Require two-factor authentication and disallow tokens を選択し、リポジトリに残っている npm トークンのシークレットをすべて削除します。 ワークフローはもうトークンを読み取りません。
参考資料: npm の信頼済みパブリッシャー、npm の来歴、npm のスコープ。
GitHub 側のリリース前提条件
残りのリリース面は GitHub ネイティブであり、リポジトリスコープの GITHUB_TOKEN で認証します。外部アカウントは一切関与しません。
-
GitHub Release。
.github/workflows/release.ymlはバージョンタグ上で実行され、 ジョブローカルのcontents: write権限だけを必要とします。 タグを付ける前に、ワークフローファイルがmain上に存在することを確認します。 -
Pages のカスタムドメイン。 ドキュメントサイトは、
publish-static-site.ymlを通じて カスタムドメインapothem.ahmedgad.comにデプロイされます。 ドメイン、DNS、HTTPS の強制は Pages 有効化ランブックによって確立されます。 次のように検証します。Pages verification gh api repos/ahmed-g-gad/apothem/pages --jq '.cname, .https_enforced' curl -sSI https://apothem.ahmedgad.com/ | head -n 1 -
スクリプトインストーラー。
install.shとinstall.ps1は Pages サイトから提供されます (https://apothem.ahmedgad.com/install.shとhttps://apothem.ahmedgad.com/install.ps1)。 これらは同じ Pages デプロイによって公開されます。別個のアカウントやトークンは必要ありません。
検証マトリクス
セットアップ後、各パブリッシャー面はその正規のチェックに応答します。
| 面 | チェック |
|---|---|
| npmjs.com | npm view @ahmed-g-gad/apothem version がリリース済みのバージョンを返す |
| GitHub Release | gh release view <release-tag> --json assets --jq '.assets[].name' が sdist、wheel、SBOM、cosign バンドル、来歴、プラットフォームアーカイブを一覧表示する |
| Pages | curl -sSI https://apothem.ahmedgad.com/ がカスタムドメインで 200 を返す |