Skip to content
Apothem
ランブック

パブリッシャーアカウントのセットアップ

@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 ページ自体で配布され、外部のパブリッシャーアカウントを必要としません。

アイデンティティマップ

面アカウントパッケージ識別子
GitHubahmed-g-gadahmed-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)

  1. ahmed-g-gad として https://www.npmjs.com/ にサインインします。

  2. アカウントで二要素認証を有効にします。

  3. スコープ付きパッケージ名を確認します。

    npm view @ahmed-g-gad/apothem name

    404 は、スコープ付きパッケージがまだ公開されていないことを意味します。 それ以外のパッケージ応答は、公開する前に、このリポジトリおよびアカウントと一致していなければなりません。

  4. UI が最初のパッケージレコードを要求する場合は、npm 上でパッケージを作成します。 名前はスコープ付きのまま保ちます: @ahmed-g-gad/apothem。

  5. 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。
  6. GitHub で、release 環境が ahmed-g-gad/apothem に存在し、 デプロイに手動承認を必要とすることを確認します。

  7. npm の面を 1 つの公開レジストリパッケージに保ちます: npmjs.com 上の @ahmed-g-gad/apothem。

  8. タグのプッシュが開始する 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 に、トークンのスコープとダウンロードコマンドが記載されています。

  9. タグのプッシュが開始する Publish npm(publish-npm.yml)の実行について、 release 環境のデプロイを承認します。その実行が開始されなかった場合は、 GitHub Actions タブから tag=<release-tag> を指定してワークフローをディスパッチします。

  10. 公開されたパッケージを検証します。

    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 で認証します。外部アカウントは一切関与しません。

  1. GitHub Release。 .github/workflows/release.yml はバージョンタグ上で実行され、 ジョブローカルの contents: write 権限だけを必要とします。 タグを付ける前に、ワークフローファイルが main 上に存在することを確認します。

  2. 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
  3. スクリプトインストーラー。 install.sh と install.ps1 は Pages サイトから提供されます (https://apothem.ahmedgad.com/install.sh と https://apothem.ahmedgad.com/install.ps1)。 これらは同じ Pages デプロイによって公開されます。別個のアカウントやトークンは必要ありません。

検証マトリクス

セットアップ後、各パブリッシャー面はその正規のチェックに応答します。

面チェック
npmjs.comnpm view @ahmed-g-gad/apothem version がリリース済みのバージョンを返す
GitHub Releasegh release view <release-tag> --json assets --jq '.assets[].name' が sdist、wheel、SBOM、cosign バンドル、来歴、プラットフォームアーカイブを一覧表示する
Pagescurl -sSI https://apothem.ahmedgad.com/ がカスタムドメインで 200 を返す

On this page