@@ -5,45 +5,54 @@ description: Guide npm releases and the publish pipeline for @qalma/editor and @
55
66# Qalma Release
77
8- ` @qalma/editor ` and ` @qalma/skills ` are published to npm under the ` latest `
9- dist-tag while the public API stabilizes. The packages are pre-1.0 and now use
10- beta prereleases for public early-adopter cuts. There is no stable version to
11- reserve ` latest ` for yet, so ` latest ` tracks the newest beta and remains what
12- npmjs features and what plain installs resolve.
13-
14- Releases are tag-driven: a ` vX.Y.Z[-prerelease] ` git tag pushed to ` main `
15- triggers GitHub Actions, which builds, re-derives the version from the tag, and
16- publishes both packages via npm's OIDC Trusted Publisher (no npm token in CI).
17- When a stable ` 1.0.0 ` is cut, publish it as ` latest ` and move later
18- prereleases back to a separate ` next ` /` beta ` dist-tag.
8+ ` @qalma/editor ` , ` @qalma/skills ` , and ` @qalma/kit ` are published to npm under
9+ the ` latest ` dist-tag while the public API stabilizes. The packages are
10+ pre-1.0, but public releases use normal semver versions without prerelease
11+ suffixes. The scripted release path bumps the minor version on every release
12+ (` 0.2.0 ` , ` 0.3.0 ` , and so on).
13+
14+ Releases are tag-driven: a ` vX.Y.Z ` git tag pushed to ` main ` triggers GitHub
15+ Actions, which builds, re-derives the version from the tag, and publishes all
16+ three packages via npm's OIDC Trusted Publisher (no npm token in CI).
1917
2018For the full architecture, history, and troubleshooting, read
2119[ release-pipeline.md] ( references/release-pipeline.md ) .
2220
2321## Cut a Release
2422
25231 . Make sure ` main ` is clean and up to date (` git status ` , ` git pull ` ).
26- 2 . Preview the beta bump:
27- - First beta from the alpha line: ` pnpm release:beta:init:dry-run `
28- (uses ` preminor --preid beta ` , e.g. ` 0.1.0-beta.0 ` ).
29- - Subsequent betas: ` pnpm release:beta:dry-run `
30- (uses ` prerelease --preid beta ` , e.g. ` 0.1.0-beta.1 ` ).
31- - Explicit stable or one-off version:
32- ` pnpm nx release <version> --skip-publish --dry-run ` .
33- 3 . Run the matching release command:
34- - First beta: ` pnpm release:beta:init ` .
35- - Subsequent beta: ` pnpm release:beta ` .
36- - Explicit stable or one-off version:
37- ` pnpm nx release <version> --skip-publish ` , then
38- ` node tools/sync-changelog-doc.mjs ` .
24+ 2 . If the current version is still on the historical beta line, bootstrap the
25+ first normal semver release explicitly:
26+
27+ ``` sh
28+ pnpm nx release 0.2.0 --skip-publish --dry-run
29+ pnpm nx release 0.2.0 --skip-publish
30+ node tools/sync-changelog-doc.mjs
31+ ```
32+
33+ This one explicit version is needed because Nx's native ` minor ` bump from
34+ ` 0.1.0-beta.4 ` resolves to ` 0.1.0 ` , while Qalma's new policy is to move to
35+ the next minor without a suffix.
36+
37+ 3 . After ` 0.2.0 ` , preview the next minor bump with ` pnpm release:dry-run ` .
38+ 4 . After ` 0.2.0 ` , run the normal release command with ` pnpm release ` .
39+
40+ For an explicit one-off version, call Nx directly so the version argument is
41+ passed before the changelog-sync command:
42+
43+ ``` sh
44+ pnpm nx release < version> --skip-publish
45+ node tools/sync-changelog-doc.mjs
46+ ```
3947
4048 These scripts or commands run ` nx release ... --skip-publish ` , then sync the
4149 generated editor changelog into the docs changelog. The release portion:
4250 - Runs the ` preVersionCommand `
43- (` pnpm nx run-many -t build -p editor skills` ).
51+ (` ./node_modules/.bin/ nx run-many -t build -p editor skills ui-kit ` ).
4452 - Writes the new version into ` libs/editor/package.json ` and
45- ` dist/libs/editor/package.json ` , plus ` libs/skills/package.json ` and
46- ` dist/libs/skills/package.json ` .
53+ ` dist/libs/editor/package.json ` , ` libs/skills/package.json ` and
54+ ` dist/libs/skills/package.json ` , plus ` libs/ui-kit/package.json ` and
55+ ` dist/libs/ui-kit/package.json ` .
4756 - Generates project changelogs from conventional commits.
4857 - Commits the manifest and changelog change as
4958 ` chore(release): publish <version> ` .
@@ -55,31 +64,32 @@ For the full architecture, history, and troubleshooting, read
5564 ` docs(changelog): sync docs changelog from release ` commit if the docs
5665 changelog changed. The release tag intentionally stays on the release commit.
5766
58- 4 . ` git push --follow-tags ` to push the commit and the tag. Pushing the tag is
67+ 5 . ` git push --follow-tags ` to push the commit and the tag. Pushing the tag is
5968 the actual deploy trigger — ` .github/workflows/release.yml ` runs, publishes
60- ` @qalma/editor@<version> ` and ` @qalma/skills@<version> ` under the ` latest `
61- dist-tag, then creates a GitHub release whose notes are this version's
62- section of ` libs/editor/CHANGELOG.md ` .
63- 5 . Watch the "Release" workflow run in GitHub Actions to confirm the publish
69+ ` @qalma/editor@<version> ` , ` @qalma/skills@<version> ` , and
70+ ` @qalma/kit@<version> ` under the ` latest ` dist-tag, then creates a GitHub
71+ release whose notes are this version's section of ` libs/editor/CHANGELOG.md ` .
72+ 6 . Watch the "Release" workflow run in GitHub Actions to confirm the publish
6473 and the GitHub release both succeeded.
6574
66- Before the first coupled tag, ensure ` @qalma/skills ` exists on npm and has the
67- same Trusted Publisher configuration as ` @qalma/editor ` . If npm package settings
68- are not available yet, bootstrap ` @qalma/skills ` once manually, configure the
69- Trusted Publisher, then let tags publish both packages going forward.
75+ Before the first coupled tag that includes all packages, ensure ` @qalma/skills `
76+ and ` @qalma/kit ` both exist on npm and have the same Trusted Publisher
77+ configuration as ` @qalma/editor ` . If npm package settings are not available yet,
78+ bootstrap the missing package once manually, configure the Trusted Publisher,
79+ then let tags publish all packages going forward.
7080
7181## Versioning Conventions
7282
73- - Use beta prereleases for public early-adopter releases before ` 1.0.0 `
74- ( ` 0.1.0-beta.N ` unless an explicit version is intentionally chosen). ` latest `
75- tracks the newest beta until a stable release exists, keeping npmjs and plain
76- installs current. At ` 1.0.0 ` , stable remains on ` latest ` and later
77- prereleases should move to a separate ` next ` / ` beta ` dist-tag .
78- - Keep the historical alpha line as history only. Do not cut new alpha releases
79- unless the project intentionally reopens an alpha track and updates this skill
80- plus the release scripts again.
83+ - Use normal semver releases before ` 1.0.0 ` ; do not add a ` -beta ` , ` -alpha ` , or
84+ other prerelease suffix on the scripted release path.
85+ - The default release script always bumps to the next minor. From the historical
86+ beta line, use one explicit ` 0.2.0 ` release first; after that the normal
87+ script moves ` 0.2.0 ` to ` 0.3.0 ` , then ` 0.3.0 ` to ` 0.4.0 ` , and so on .
88+ - Keep the historical alpha and beta lines as history only. Do not cut new
89+ prereleases unless the project intentionally reopens a prerelease track and
90+ updates this skill plus the release scripts again.
8191- Never push a ` v* ` tag for a version already published to npm — the workflow
82- checks both package versions before publishing, and re-publishing an existing
92+ checks all package versions before publishing, and re-publishing an existing
8393 version fails before any package is published.
8494- ` BREAKING CHANGE: ` commit footers still document API breaks for history, even
8595 though the package remains pre-1.0.
@@ -89,6 +99,6 @@ Trusted Publisher, then let tags publish both packages going forward.
8999- Run plain ` nx release ` (without ` --skip-publish ` ) locally — it will attempt
90100 ` npm publish ` from your machine and re-introduce the 2FA/token friction the
91101 Trusted Publisher setup removed.
92- - Hand-edit package ` version ` fields — use the beta release scripts or
102+ - Hand-edit package ` version ` fields — use ` pnpm release` or
93103 ` pnpm nx release <version> --skip-publish ` so the commit, tag, and ` dist `
94104 manifests stay in sync.
0 commit comments