发布者账户设置
为 @ahmed-g-gad/apothem 配置 npmjs.com 受信任发布者,以及 GitHub 侧的发布前置条件。
本操作手册配置发布表面的发布者一侧。分发形态只有一个注册表: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 name返回
404表示该作用域包尚未发布。任何其他包响应都必须在发布之前与本仓库和账户相匹配。 -
如果界面要求首条包记录,则在 npm 上创建该包。保持名称为作用域形式:
@ahmed-g-gad/apothem。 -
从 GitHub Actions 为
@ahmed-g-gad/apothem配置受信任发布:- GitHub 所有者:
ahmed-g-gad - 仓库:
apothem - 工作流文件名:
publish-npm.yml - 环境:
release(publish-npm.yml中发布作业的environment:;两者必须一致) - 允许的操作:
npm publish。
- GitHub 所有者:
-
在 GitHub 中,验证
ahmed-g-gad/apothem上存在release环境,并且其部署需要手动批准。 -
将 npm 表面保持为一个公开注册表包: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、用户名或密码机密。该工作流通过 npm 受信任发布(OIDC)进行发布,Node 版本和 npm CLI 的 OIDC 下限固定在 .github/workflows/publish-npm.yml 中。它针对 npmjs.com 运行 npm publish --provenance --access public,因此 Sigstore 出处溯源声明是显式的;对于从公开 GitHub Actions 工作流发布的公开包,npm 默认也会生成出处溯源。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 |