Skip to content

feat(release): publish localized changelog metadata - #5520

Merged
AmyShang-alt merged 2 commits into
mainfrom
feat/release-changelog-cicd
Jul 13, 2026
Merged

feat(release): publish localized changelog metadata#5520
AmyShang-alt merged 2 commits into
mainfrom
feat/release-changelog-cicd

Conversation

@PerishCode

Copy link
Copy Markdown
Contributor

Related to #5071 and #5343.

Why

The updater and release work exposed a missing delivery contract: release notes had no channel-consistent source convention, immutable publication path, public metadata projection, or strict stable gate. That left release operators and future consumers to couple source discovery, storage layout, metadata assembly, and rendering decisions together.

This PR establishes that mechanism in tools-release after the product team split the lightweight What's New experience into an independent path. The goal is to make localized changelog delivery deterministic now while keeping source format, storage, metadata, and eventual rendering independently replaceable.

What users will see

There is no new updater UI in this PR. Release operators can author localized Markdown at docs/CHANGELOG/v<full-release-version>/<locale>.md; successful releases publish immutable locale assets and expose their URL, media type, SHA-256, and byte size through metadata.json.releaseNote.content.

Stable releases now fail before platform builds when required en and zh-CN notes are missing or malformed. Beta, prerelease, and preview use the same pipeline but may explicitly publish without notes when no matching version directory exists.

Surface area

  • UI — new page / dialog / panel / menu item / setting / empty state in apps/web or apps/desktop (including Electron menu bar)
  • Keyboard shortcut — new or changed
  • CLI / env var — new od subcommand or flag, new tools-dev / tools-pack / tools-pr flag, or new OD_* env var
  • API / contract — new /api/* endpoint, new SSE event, or changed shape in packages/contracts
  • Extension point — new entry under skills/, design-systems/, design-templates/, or craft/, or change to the skills protocol
  • i18n keys — added new translation keys (see TRANSLATIONS.md for the locale workflow)
  • New top-level dependency — adding any new entry to the root package.json (dependencies or devDependencies); workspace-package package.json files are out of scope. Include a paragraph on what we get vs. what bytes we ship (see CONTRIBUTING.md → Code style)
  • Default behavior change — changes what existing users experience without opting in (default model, default setting, file/SQLite schema, auto-network on startup, auto-install)
  • None — internal refactor, docs, tests, or translation update only

Screenshots

Not applicable. This PR has no UI diff against main; release-note rendering remains a separate consumer concern.

Bug fix verification

Not applicable; this is a release delivery feature rather than a bug fix.

Validation

  • pnpm install
  • pnpm guard (78 checks passed after the latest main merge)
  • pnpm typecheck
  • pnpm --filter @open-design/tools-release test (16 tests)
  • pnpm --filter @open-design/tools-serve exec vitest run tests/release-metadata-publish.test.ts (2 tests)
  • pnpm --filter @open-design/tools-pack exec vitest run tests/release-workflows.test.ts
  • pnpm --filter @open-design/e2e exec vitest run -c vitest.config.ts tests/packaged-smoke-workflow.test.ts (46 tests)
  • actionlint for all five changed release workflows
  • Local stable 0.14.1 dry-run: planned bilingual immutable uploads, candidate metadata assembly, and verification passed without storage access
  • Two local tools-serve + tools-pack packaged loops: 0.14.1-beta.1000 -> .1001 -> .1002 and .2000 -> .2001 -> .2002, including build, install, update, restart, stop, uninstall, and cleanup
  • Two complete remote release-beta publishes: 0.14.1-beta.3 and 0.14.1-beta.4, including macOS arm64 and Windows x64 builds/smokes, bilingual immutable note publication, metadata verification, and latest promotion

Nix is not installed locally, so nix flake check was not rerun. The lockfile hash path remains covered by the repository's PR validation/autofix gate.

@PerishCode
PerishCode requested a review from a team as a code owner July 13, 2026 04:51
@lefarcen
lefarcen requested a review from mrcfps July 13, 2026 04:55
@lefarcen lefarcen added size/XL PR changes 700-1500 lines risk/high High risk: apps/desktop, daemon, auth, migration, workflows, package deps type/feature New feature skip-validation Maintainer override: bot will not auto-add needs-validation on this PR. labels Jul 13, 2026
@github-actions

github-actions Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

🚀 Landing page preview

This PR is deployed to a Cloudflare Pages preview — not staging or production:

@github-actions

github-actions Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Visual regression review

Head: c398981 · Base: 88b411e

1 changed · 52 unchanged · 0 new without baseline · 0 failed

Changed cases

Case Main PR Diff
visual-integrations-use-everywhere
1,118 px (0.09%)
main pr diff
Unchanged cases
Case Main PR Diff
visual-avatar-local-agent-list
0 px (0.00%)
main pr diff
visual-avatar-local-agent-list-panel
0 px (0.00%)
main pr diff
visual-avatar-menu
0 px (0.00%)
main pr diff
visual-avatar-menu-panel
0 px (0.00%)
main pr diff
visual-avatar-open-design-account
0 px (0.00%)
main pr diff
visual-critical-settings
0 px (0.00%)
main pr diff
visual-critical-workspace
0 px (0.00%)
main pr diff
visual-critical-workspace-preview
0 px (0.00%)
main pr diff
visual-design-system-detail
0 px (0.00%)
main pr diff
visual-design-systems
0 px (0.00%)
main pr diff
visual-home
161 px (0.01%)
main pr diff
visual-home-catalog
0 px (0.00%)
main pr diff
visual-home-context-picker
0 px (0.00%)
main pr diff
visual-home-context-picker-popover
0 px (0.00%)
main pr diff
visual-home-plugin-filter
0 px (0.00%)
main pr diff
visual-home-plugin-use-staged
0 px (0.00%)
main pr diff
visual-home-plugin-use-with-query
0 px (0.00%)
main pr diff
visual-home-staged-attachment
0 px (0.00%)
main pr diff
visual-integrations
0 px (0.00%)
main pr diff
visual-integrations-mcp
0 px (0.00%)
main pr diff

Visual diff is advisory only and does not block merging.

@mrcfps mrcfps left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@PerishCode Thanks for putting together the channel-neutral release-note pipeline and its focused validation coverage. The overall flow is well structured; I found one merge-safe byte-integrity edge for an accepted UTF-8 input variant.

🔁 Powered by Looper · runner=reviewer · agent=codex · An autonomous AI dev team for your GitHub repos.

Comment thread tools/release/src/release-note/verify.ts Outdated
Generated-By: looper 0.10.3 (runner=fixer, agent=codex)
@PerishCode

Copy link
Copy Markdown
Contributor Author

Looper fixer round completec398981

  • ✅ Review comment on tools/release/src/release-note/verify.ts (@mrcfps) — thread
    • Exposed raw bytes from getStorageObject and changed release-note publish/verify integrity checks to hash byte buffers; the storage fixture now publishes a BOM-prefixed beta note through verify and immutable reuse.

🔁 Powered by Looper · runner=fixer · agent=codex · An autonomous AI dev team for your GitHub repos.

@lefarcen
lefarcen requested a review from mrcfps July 13, 2026 05:26

@mrcfps mrcfps left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@PerishCode I reviewed the channel-neutral localized release-note pipeline across all five release workflows, source/front-matter validation, immutable storage publication, metadata projection and verification, and the stable pre-build locale gate. The follow-up raw-byte fix correctly preserves BOM-prefixed content through immutable reuse and integrity verification. Focused release, storage-fixture, workflow-topology, typecheck, guard, and actionlint validation all pass. Thank you for the careful end-to-end implementation and for promptly closing the prior edge case. 🙌

🔁 Powered by Looper · runner=reviewer · agent=codex · An autonomous AI dev team for your GitHub repos.

@AmyShang-alt AmyShang-alt left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

QA 验收通过。

验证范围:

  • PR head: c398981
  • 本地 isolated worktree: /Users/mac/open-design/pr-5520-electron
  • Electron/runtime namespace: pr5520,desktop/web/daemon 均 running,windowVisible=true,首页 readyState=complete
  • tools-release: pnpm --filter @open-design/tools-release test 通过,3 files / 16 tests
  • tools-release typecheck: pnpm --filter @open-design/tools-release typecheck 通过
  • release metadata fixture: pnpm --filter @open-design/tools-serve exec vitest run tests/release-metadata-publish.test.ts 通过,2 tests
  • workflow release-note coverage: pnpm --filter @open-design/e2e exec vitest run -c vitest.config.ts tests/packaged-smoke-workflow.test.ts -t "release notes" 通过,2 tests
  • GitHub checks 当前 head 全绿,mergeStateStatus=CLEAN

结论:该 PR 属于发布链路 feature,localized release-note source validation、immutable publication、metadata projection/verification 和 workflow wiring 的核心验收项已覆盖;未发现阻塞问题。

@AmyShang-alt AmyShang-alt added the validated Runtime change validated (via /explore Pass or manual QA). label Jul 13, 2026
@AmyShang-alt
AmyShang-alt added this pull request to the merge queue Jul 13, 2026
Merged via the queue into main with commit 3e09ebf Jul 13, 2026
26 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk/high High risk: apps/desktop, daemon, auth, migration, workflows, package deps size/XL PR changes 700-1500 lines skip-validation Maintainer override: bot will not auto-add needs-validation on this PR. type/feature New feature validated Runtime change validated (via /explore Pass or manual QA).

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants