Skip to content

feat(ci): version the VS Code extension with the rest of Apollon#809

Merged
FelixTJDietrich merged 2 commits into
mainfrom
feat/vscode-extension-joins-product-version
Jul 9, 2026
Merged

feat(ci): version the VS Code extension with the rest of Apollon#809
FelixTJDietrich merged 2 commits into
mainfrom
feat/vscode-extension-joins-product-version

Conversation

@FelixTJDietrich

@FelixTJDietrich FelixTJDietrich commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Follows #808 (merged), which stopped a stray manifest edit from publishing. This PR makes the version itself meaningful.

Summary

vscode-extension/package.json has said 1.0.0 at every commit I can trace back to 2026-02-03. Nobody chose it; it is npm init's default. The Marketplace listing it supposedly describes is at 0.0.17, published 2024-11 — so that field has never driven a release. Meanwhile @tumaet/apollon, @tumaet/webapp and @tumaet/server are all at 5.1.0.

apollon-vscode joins them in a Changesets fixed group. It carries Apollon's version from now on.

What happens next

Nothing, until you merge a Version Packages PR. Then all four move together:

Package Before After
@tumaet/apollon 5.1.0 5.1.1
@tumaet/webapp 5.1.0 5.1.1
@tumaet/server 5.1.0 5.1.1
apollon-vscode 1.0.0 5.1.1

No version is hand-edited here, and that is deliberate. Changing vscode-extension/package.json's version in this PR would fire Release VS Code Extension on merge and publish immediately — the premature release #808 exists to prevent. Changesets aligns a fixed-group member to the group's highest version on its own, so 1.0.0 → 5.1.1 happens inside the Version Packages PR, and merging that is the deliberate release.

0.0.17 → 5.1.1 is monotonic, so the Marketplace accepts it. version-monotonicity.yml is satisfied for the same reason.

The trade, stated plainly

fixed means a changeset touching only the extension still bumps and republishes the library and the standalone images, at a new version, with identical content. That is the cost of one product number.

The alternative is linked, which bumps only what changed but lets the numbers drift apart again — which is the thing we're fixing. I've gone with fixed and written the trade into docs/contributor/deployment/npm-publishing.md so the next person doesn't rediscover it. Say the word and I'll switch to linked.

Two smaller consequences:

  • Version Bump (VS Code extension) is deleted. It existed only to hand-bump a package Changesets was told to ignore. Extension work now records a pnpm changeset like everything else.
  • apollon-vscode is no longer in ignore, which was also what kept it away from npm. Nothing publishes it there — release.yml runs Changesets in version-only mode — but I've written that constraint into the docs rather than leave it implicit. It ships to the Marketplace, never to npm.

CHANGELOG

vscode-extension/CHANGELOG.md is now what Changesets writes, matching library/CHANGELOG.md. Its prose preamble had to go: Changesets inserts each release directly after the first line, so anything under the heading gets shoved beneath every future release. I verified this — the first simulation produced exactly that mess.

The 0.0.17 migration note moved into the changeset. Review caught that it would have gone nowhere: release-vscode-extension.yml built its GitHub Release with --generate-notes and a static body, ignoring the changelog the library and standalone tracks both feed through extract-changelog.mjs. Fixed in 6d45a1c — the extension now uses the same path, so the note reaches the release body:

# apollon-vscode

## 5.1.1

### Patch Changes

- Apollon for VS Code now carries the same version as the rest of Apollon…
  If you have used the extension before, version `0.0.17` wrote
  "files.associations": { "*.apollon": "json" } into your user settings…

Verification

Every claim above was run, not reasoned. In a throwaway git worktree off this branch, with the real pnpm exec changeset version:

  • All four packages land on 5.1.1; @tumaet/ui (not in the group) goes 0.0.1 → 0.0.2 as before; apollon-vscode-webview stays ignored and private.
  • The generated vscode-extension/CHANGELOG.md has the shape shown above.
  • node scripts/check-release-taxonomy.mjs — in sync.
  • node scripts/sync-library-version.mjs --check — CDN refs match.
  • pnpm exec changeset status — parses the new config, lists the five patches.
  • actionlint .github/workflows/*.yml0 findings across every workflow (was 2 pre-existing before fix(ci): release the VS Code extension only when its version changes #808).
  • prettier --check — clean.

One thing I could not run locally: changeset version with the real changelog-github generator, which resolves each changeset's commit on GitHub and fails on an unpushed one. I swapped in the default generator for the simulation; the GitHub generator only changes how release lines are worded, not which versions are computed. It runs for real in the Version Packages PR.

Steps for testing

  1. Merge this.
  2. release.yml opens (or updates) the Version Packages PR. Confirm it contains apollon-vscode: 1.0.0 → 5.1.1 alongside the other three.
  3. Merging that PR is the release. It changes vscode-extension/package.json, so Release VS Code Extension fires, check sees the version changed, and the VSIX is built, attested and published to the Marketplace + Open VSX as 5.1.1.
  4. Before that, worth one workflow_dispatch of Release VS Code Extension with dry_run: true to prove fix(ci): release the VS Code extension only when its version changes #808's .nvmrc fix on a real runner — it can only fail where there is no checkout.

Checklist

  • Linked to a related issue (if applicable)
  • Added a changeset whose summary is written in the user's voice (pnpm changeset, how) — or this PR doesn't touch a Changesets-tracked package (@tumaet/apollon, @tumaet/webapp, @tumaet/server)
  • PR title's Conventional Commit type (feat/fix/…) matches the kind of change — it groups the release note
  • Tests added or updated
  • Ran pnpm lint && pnpm format:check && pnpm build && pnpm test locally — green
  • Documentation updated (if applicable)
  • Screenshots or screencasts attached (if a UI change)

No tests: this is release configuration. It was instead exercised end-to-end with the real changeset version in a throwaway worktree, as described above.

@Claudia-Anthropica Claudia-Anthropica left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

@FelixTJDietrich The fixed-group config itself behaves as described; I verified changeset status and a temp changeset version simulation produce 5.1.1 across the four packages. I’m requesting changes because the VS Code release job still does not publish the generated changelog text, and a contributor guide still tells people to skip VS Code changesets.

Comment thread .changeset/apollon-vscode-joins-the-product-version.md
Comment thread .changeset/config.json
@github-project-automation github-project-automation Bot moved this from Backlog to In progress in Apollon Development Jul 9, 2026
Base automatically changed from fix/vscode-release-only-on-version-change to main July 9, 2026 14:17

@Claudia-Anthropica Claudia-Anthropica left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

@FelixTJDietrich All feedback addressed, nice work.

FelixTJDietrich and others added 2 commits July 9, 2026 16:32
The extension's manifest has said `1.0.0` at every commit since at least
February. Nobody chose it — it is `npm init`'s default, and the Marketplace
listing it supposedly describes is at `0.0.17`. Meanwhile the library, the webapp
and the server are at `5.1.0`.

Put `apollon-vscode` in a Changesets `fixed` group with them. The next Version
Packages PR carries it from `1.0.0` straight to `5.1.1`, alongside the other
three, and merging that PR is what publishes it — `Release VS Code Extension`
already fires on the version change. Nothing is hand-edited; Changesets aligns a
group member to the group's highest version.

`Version Bump (VS Code extension)` existed only to bump a package Changesets was
told to ignore. It is deleted.

The trade is worth naming, and the docs now name it: a changeset touching only
the extension republishes the library and the standalone images at the new
version with identical content. `linked` would avoid that, at the price of the
numbers drifting apart. One product number is the point.

The extension's CHANGELOG becomes what Changesets writes. Its prose preamble had
to go: Changesets inserts each release directly after the first line, so anything
below the heading is pushed under every future release. The `0.0.17` migration
note moves into the changeset, where it also reaches the GitHub Release body.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Review caught that the migration note this PR moves into a changeset never
reaches anyone. `release-vscode-extension.yml` created its GitHub Release with
`--generate-notes` and a static body, ignoring `vscode-extension/CHANGELOG.md`
entirely — so the curated, per-PR voice that Changesets assembles was written and
then discarded. The library and standalone tracks have always fed
`extract-changelog.mjs` into `--notes-file`; the extension now does the same, and
`npm-publishing.md` stops claiming that every track already did.

Full history is fetched for it, because the script recovers each entry's
Conventional Commit type from the SHA in the changelog line to group the notes.
An empty section falls back to `--generate-notes`, as elsewhere.

The contributor guide told authors to skip changesets for VS Code-only work,
which the new flow depends on them writing. It also promised the library is never
dragged up by a standalone bump — a `fixed` group drags every member, which is
what one product number costs. Both corrected.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@FelixTJDietrich
FelixTJDietrich force-pushed the feat/vscode-extension-joins-product-version branch from 6d45a1c to 9ff0482 Compare July 9, 2026 14:33
@FelixTJDietrich

Copy link
Copy Markdown
Contributor Author

Rebased onto main (8e01555, 9ff0482). #808 was squash-merged as d16a68d, so this branch was still carrying the pre-squash commit — same content, different SHA, hence the conflict. Dropped it with git rebase --onto origin/main 8eae0bb4; no textual conflicts.

Re-verified after the rebase rather than assuming, since the merge base moved:

  • fix(ci): release the VS Code extension only when its version changes #808's work is intact on the result (version guard, .nvmrc sparse checkout, fetch-depth: 2), and this branch's only change to release-vscode-extension.yml is the release-notes path.
  • actionlint clean across all workflows; check-release-taxonomy, sync-library-version --check, prettier, changeset status all pass.
  • The full pnpm changeset:version still lands @tumaet/apollon, @tumaet/webapp, @tumaet/server and apollon-vscode on 5.1.1.
  • On that simulated version-bump commit the guard reads before=1.0.0 now=5.1.1 and correctly proceeds to publish, and extract-changelog.mjs renders the extension's release body.

@FelixTJDietrich
FelixTJDietrich merged commit 6c8f782 into main Jul 9, 2026
20 checks passed
@github-project-automation github-project-automation Bot moved this from In progress to Done in Apollon Development Jul 9, 2026
@FelixTJDietrich
FelixTJDietrich deleted the feat/vscode-extension-joins-product-version branch July 9, 2026 14:35
@github-actions github-actions Bot mentioned this pull request Jul 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants