Skip to content

Publish VS Code extension pre-releases to the Marketplace (odd-minor scheme) #1198

@kwit75

Description

@kwit75

Goal

Complete the prerelease-versioning work (task #70 / follow-up to #1188/#1190): make the VS Code extension publish pre-releases to the Marketplace, not just GitHub. The Marketplace has no semver -prerelease suffix — its convention is odd/even minor: stable = even minor (1.2.x), pre-release = odd minor (1.3.x), published with vsce publish --pre-release.

Current state (verified)

  • apps/vscode/package.json = 1.2.0 (even minor).
  • prerelease.yaml → calls _release.yaml with prerelease: true.
  • In _release.yaml, all three VS Code steps (setup-node / vsce publish / ovsx publish) are gated if: inputs.prerelease == false …skipped for prereleases (GitHub-only today).
  • _init.yaml vscode_version = raw jq .version apps/vscode/package.json (no per-build uniqueness).
  • _build.yaml builds everything via ./builder build --version="$FULL_VERSION" where FULL_VERSION = <server>.<run_number> (4 segments).

Proposed implementation

  1. Manifest → odd minor. Bump apps/vscode/package.json to 1.3.0 on develop (pre-release line). When a release stabilizes, main cuts the next even minor (1.4.0) — needs a step in the release/cut process.
  2. Unique pre-release version. Marketplace rejects re-publishing a version and requires exactly major.minor.patch. Derive the pre-release version as <major>.<odd-minor>.<run_number> (e.g. 1.3.<run_number>) for prerelease: true; stable keeps the manifest version. Add a prerelease input to _init.yaml and compute vscode_version accordingly.
  3. Build the VSIX with that version. ⚠️ NEEDS VERIFICATION: how does ./builder build --version=… stamp the VSIX version? It must produce a 3-segment major.minor.patch for the extension (the server's 4-segment FULL_VERSION would be rejected by vsce). Confirm/adjust so the prerelease VSIX is built as 1.3.<run_number>.
  4. Publish on prerelease. In _release.yaml, change the three vscode steps to run for prereleases too, adding --pre-release:
    • vsce publish --pre-release --packagePath "$VSIX"
    • ovsx publish --pre-release "$VSIX" -p "$OVSX_PAT" (confirm ovsx 0.10.9 supports --pre-release)
    • Re-check the steps.tag_check gating interaction for the prerelease path.

Open questions for review

  • ./builder VSIX version stamping (item 3) — the crux.
  • Stabilize → next-even-minor bump: manual in the version-bump PR, or automated?
  • Do we also want Open VSX pre-releases, or Marketplace only?

Why this is an issue, not a PR

Every piece interacts (manifest ↔ _init./builder_release) and it publishes to the live Marketplace, so it needs the release owner's review + a verified ./builder behavior before merging. Happy to pair/implement once the builder VSIX-versioning is confirmed.

Refs: #1188, #1190 (SDK side), task #70.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions