Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,8 @@ jobs:
- run: npm test
- name: Check version consistency
run: node scripts/check-version-consistency.mjs
- name: Verify marketplace release gate
- name: Check marketplace sync (advisory)
continue-on-error: true
env:
EXPECTED_VERSION: ${{ github.ref_name }}
run: |
Expand Down
2 changes: 1 addition & 1 deletion docs/release-checklist.md
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ Validate examples according to their recorded workflow variant. Existing legacy
--expected-version <semver>
```

- This check is a **blocking release CI gate**: the upstream marketplace PR must be submitted and merged, and its generated manifest must report the release version, before pushing the `v<semver>` tag. The gate runs before GitHub Release creation and npm publishing.
- This is an **advisory release CI check**. Marketplace lag does not block the release tag, GitHub Release or npm publication. Submit the synchronization PR and verify marketplace delivery separately after maintainers merge it and the generator finishes.

- Before creating the marketplace sync branch, fast-forward the personal fork to the upstream default branch. After opening the PR, verify its diff is limited to the intended catalog entry (normally `README.md`); do not carry generated marketplace files or unrelated fork history into the PR.

Expand Down
8 changes: 4 additions & 4 deletions docs/releases/v2.1.0-plan.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# v2.1.0 发布计划

更新:2026-10-26。状态:#139 已合并,维护者已授权发布 v2.1.0 和评论、关闭已解决的 issue;候选源验证与外部市场同步进行中。
更新:2026-10-26。状态:#139/#140 已合并,候选源验证通过。维护者明确要求先推标签并发布 v2.1.0,外部市场待 #579 合并后同步。

当前正式版本为 v2.0.1,目标版本为 v2.1.0。发布授权已具备;仍须依次完成候选源验证、发布准备 PR、最终源扫描、外部市场同步和干净安装,再推送标签。#112 仅交付导入包预览,客户端验收完成前保留 issue。
当前正式版本为 v2.0.1,目标版本为 v2.1.0。发布授权已具备;候选源验证、发布准备 PR 和源扫描已完成。按维护者最新决定,先推送标签并发布,外部市场同步和该渠道的干净安装验收单独跟踪。#112 仅交付导入包预览,客户端验收完成前保留 issue。

## 范围

Expand Down Expand Up @@ -53,7 +53,7 @@
- [ ] 在干净 Codex 配置中完成 marketplace add、plugin add、plugin list,确认取得 2.1.0 的同包技能和运行时。
- [ ] 将最终市场验证结果写入发布记录。WorkBuddy 官方市场上架和妙手技能广场上传不包含在本次本地安装支持范围内。

发布 CI 在 GitHub Release/npm 之前阻断远端市场版本不一致的情况,不能先推标签再补做市场同步:
维护者已明确改为先发布、后等待市场同步。以下检查在发布 CI 中仅作提示;市场版本不一致仍如实记录,但不阻断 GitHub Release/npm:

```bash
node scripts/verify-marketplace-release.mjs \
Expand Down Expand Up @@ -82,4 +82,4 @@ node scripts/verify-marketplace-release.mjs \

标签尚未推送时保留 PR 和候选物供调整。npm 发布后不覆盖同一版本、不擅自删除标签或 unpublish;若存在发布缺陷,先记录各渠道实际状态,再由维护者决定补丁版本或市场回退。

下一步:完成 2.1.0 候选源验证和发布准备 PR;最终合并源扫描通过后提交外部市场同步 PR。市场版本与干净安装验证通过后,按维护者本次授权发布并处理已解决的 issue。
下一步:将发布工作流的市场检查改为非阻断提示,然后推送 v2.1.0 标签并验证 GitHub Release/npm。市场同步 PR https://github.com/hashgraph-online/awesome-codex-plugins/pull/579 已提交,合并后的市场版本和干净安装单独验收;#134/#89/#137 已评论并关闭,#112 保持预览验收跟踪。
11 changes: 7 additions & 4 deletions tests/lib/marketplace-release-gate.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,20 @@ import { readFileSync } from 'node:fs';

const workflow = readFileSync('.github/workflows/ci.yml', 'utf8').replace(/\r\n/g, '\n');

describe('marketplace release gate', () => {
it('blocks tagged releases until the marketplace manifest matches the tag version', () => {
describe('marketplace release check', () => {
it('reports marketplace lag without blocking tagged releases', () => {
const releaseJob = workflow.indexOf('\n release:\n');
const gate = workflow.indexOf('name: Verify marketplace release gate');
const gate = workflow.indexOf('name: Check marketplace sync (advisory)');
const githubRelease = workflow.indexOf('name: Create GitHub Release');
const npmPublish = workflow.indexOf('name: Publish to npm');

assert.ok(releaseJob >= 0, 'workflow must define a release job');
assert.ok(gate >= 0, 'release workflow must verify marketplace delivery');
assert.ok(gate > releaseJob, 'marketplace verification must remain in the release job');
assert.doesNotMatch(workflow.slice(0, releaseJob), /name: Verify marketplace release gate/);
assert.doesNotMatch(workflow.slice(0, releaseJob), /name: Check marketplace sync/);
const marketplaceStep = workflow.slice(gate, workflow.indexOf('\n - name:', gate));
assert.match(marketplaceStep, /\n continue-on-error: true\n/);
assert.doesNotMatch(workflow.slice(githubRelease), /continue-on-error: true/);
assert.match(workflow.slice(releaseJob), /if: startsWith\(github\.ref, 'refs\/tags\/v'\)/);
assert.ok(gate < githubRelease, 'marketplace verification must run before GitHub Release creation');
assert.ok(gate < npmPublish, 'marketplace verification must run before npm publish');
Expand Down
Loading