specsfy-release-cli

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Publicar o Specsfy CLI

发布Specsfy CLI

Executar na raiz do checkout oficial. Exigir versão
X.Y.Z
, notas confirmadas e autorização explícita antes de push.
在官方代码仓库的根目录执行。推送前需要确认版本号
X.Y.Z
、发布说明并获得明确授权。

1. Classificar o estado

1. 检查状态

bash
git remote get-url origin
git branch --show-current
gh auth status
npm whoami
git fetch origin main --tags
git status --porcelain
git rev-parse HEAD
git rev-parse origin/main
git rev-parse --verify refs/tags/vX.Y.Z
gh release view vX.Y.Z --repo promovaweb/specsfy \
  --json tagName,targetCommitish,body
Exigir remoto
https://github.com/promovaweb/specsfy
, branch
main
, acesso ao mesmo repositório, worktree limpa,
HEAD
igual a
origin/main
e ausência da tag e do release para publicação nova.
Em estado parcial, não recriar commit, tag ou versão. Compare tag, commit, artefatos e seção do changelog e retome apenas a etapa ausente.
bash
git remote get-url origin
git branch --show-current
gh auth status
npm whoami
git fetch origin main --tags
git status --porcelain
git rev-parse HEAD
git rev-parse origin/main
git rev-parse --verify refs/tags/vX.Y.Z
gh release view vX.Y.Z --repo promovaweb/specsfy \
  --json tagName,targetCommitish,body
需要满足以下条件:远程仓库为
https://github.com/promovaweb/specsfy
、当前分支为
main
、拥有该仓库的访问权限、工作区干净、
HEAD
origin/main
一致,且目标标签和Release不存在(针对新版本发布)。
如果是恢复未完成的发布流程,请勿重新创建提交、标签或版本。对比标签、提交、制品和变更日志部分,仅补全缺失的步骤。

2. Preparar versão

2. 准备版本

bash
python3 -B \
  .agents/skills/specsfy-release-cli/scripts/release_changelog.py prepare \
  --cli cli --version X.Y.Z --date YYYY-MM-DD \
  --notes-file /caminho/notas.md
cd cli
npm install --package-lock-only --ignore-scripts
npm ci
npm run build:executable
npm run typecheck
npm test
npm run build
node dist/main.js --help
./bin/specsfy --version
npm publish --dry-run
cd ..
python3 -B \
  .agents/skills/specsfy-release-cli/scripts/release_changelog.py extract \
  --changelog cli/CHANGELOG.md --version X.Y.Z \
  --output /caminho/release-notes.md
Exigir
X.Y.Z
em
package.json
,
src/version.ts
,
package-lock.json
, CLI instalado, binário e
bin/specsfy.build.json
. O changelog promove as notas sob
## [X.Y.Z] - YYYY-MM-DD
.
bash
python3 -B \
  .agents/skills/specsfy-release-cli/scripts/release_changelog.py prepare \
  --cli cli --version X.Y.Z --date YYYY-MM-DD \
  --notes-file /caminho/notas.md
cd cli
npm install --package-lock-only --ignore-scripts
npm ci
npm run build:executable
npm run typecheck
npm test
npm run build
node dist/main.js --help
./bin/specsfy --version
npm publish --dry-run
cd ..
python3 -B \
  .agents/skills/specsfy-release-cli/scripts/release_changelog.py extract \
  --changelog cli/CHANGELOG.md --version X.Y.Z \
  --output /caminho/release-notes.md
需要确保
package.json
src/version.ts
package-lock.json
中已更新为
X.Y.Z
,CLI已安装,生成了二进制文件和
bin/specsfy.build.json
。变更日志中需将发布说明移至
## [X.Y.Z] - YYYY-MM-DD
下方。

3. Revisar e versionar

3. 审核并打版本标签

Permitir somente:
  • cli/CHANGELOG.md
    ;
  • cli/package.json
    ;
  • cli/package-lock.json
    ;
  • cli/src/version.ts
    ;
  • cli/bin/specsfy
    ;
  • cli/bin/specsfy.build.json
    .
Apresentar notas e diff. Após confirmação:
bash
git add cli/CHANGELOG.md cli/package.json cli/package-lock.json \
  cli/src/version.ts \
  cli/bin/specsfy cli/bin/specsfy.build.json
git commit -m "chore(release): vX.Y.Z"
git tag -a vX.Y.Z -m "Specsfy CLI vX.Y.Z"
git rev-parse HEAD
git rev-list -n 1 vX.Y.Z
Os hashes devem ser idênticos. A tag pertence ao monorepo.
仅允许修改以下文件:
  • cli/CHANGELOG.md
  • cli/package.json
  • cli/package-lock.json
  • cli/src/version.ts
  • cli/bin/specsfy
  • cli/bin/specsfy.build.json
展示发布说明和差异。确认后执行:
bash
git add cli/CHANGELOG.md cli/package.json cli/package-lock.json \
  cli/src/version.ts \
  cli/bin/specsfy cli/bin/specsfy.build.json
git commit -m "chore(release): vX.Y.Z"
git tag -a vX.Y.Z -m "Specsfy CLI vX.Y.Z"
git rev-parse HEAD
git rev-list -n 1 vX.Y.Z
两个哈希值必须一致。标签属于monorepo仓库。

4. Publicar e comprovar

4. 发布并验证

bash
git push --atomic origin main vX.Y.Z
gh run watch --repo promovaweb/specsfy \
  "$(gh run list --repo promovaweb/specsfy --branch vX.Y.Z \
    --workflow Specsfy --limit 1 --json databaseId --jq '.[0].databaseId')"
gh release create vX.Y.Z \
  --repo promovaweb/specsfy --verify-tag \
  --title "Specsfy CLI vX.Y.Z" \
  --notes-file /caminho/release-notes.md
gh release view vX.Y.Z --repo promovaweb/specsfy \
  --json url,tagName,targetCommitish,body
gh release view vX.Y.Z --repo promovaweb/specsfy \
  --json body > /caminho/release-publicado.json
python3 -B \
  .agents/skills/specsfy-release-cli/scripts/release_changelog.py verify \
  --changelog cli/CHANGELOG.md --version X.Y.Z \
  --release-json /caminho/release-publicado.json
git ls-remote origin "refs/tags/vX.Y.Z^{}"
gh run list --repo promovaweb/specsfy --branch vX.Y.Z --workflow Specsfy
Confirmar tag remota, CI e equivalência exata das notas. Em falha, preservar o estado e reclassificar. O job da tag publica
@promovaweb/specsfy
no npm. A proveniência é incluída quando o repositório estiver público. Nunca crie uma tag compensatória.
bash
git push --atomic origin main vX.Y.Z
gh run watch --repo promovaweb/specsfy \
  "$(gh run list --repo promovaweb/specsfy --branch vX.Y.Z \
    --workflow Specsfy --limit 1 --json databaseId --jq '.[0].databaseId')"
gh release create vX.Y.Z \
  --repo promovaweb/specsfy --verify-tag \
  --title "Specsfy CLI vX.Y.Z" \
  --notes-file /caminho/release-notes.md
gh release view vX.Y.Z --repo promovaweb/specsfy \
  --json url,tagName,targetCommitish,body
gh release view vX.Y.Z --repo promovaweb/specsfy \
  --json body > /caminho/release-publicado.json
python3 -B \
  .agents/skills/specsfy-release-cli/scripts/release_changelog.py verify \
  --changelog cli/CHANGELOG.md --version X.Y.Z \
  --release-json /caminho/release-publicado.json
git ls-remote origin "refs/tags/vX.Y.Z^{}"
gh run list --repo promovaweb/specsfy --branch vX.Y.Z --workflow Specsfy
确认远程标签、CI流程正常,且发布说明完全一致。若失败,保留当前状态并重新检查。标签对应的CI任务会将
@promovaweb/specsfy
发布至npm。当仓库公开后会包含溯源信息。切勿创建补偿标签。