Skip to content

feat: add release workflow for multi-target theme distribution#1

Merged
slowdini merged 1 commit into
devfrom
feat/release-workflow
Jun 21, 2026
Merged

feat: add release workflow for multi-target theme distribution#1
slowdini merged 1 commit into
devfrom
feat/release-workflow

Conversation

@slowdini

Copy link
Copy Markdown
Owner

Summary

Adds a complete release pipeline for distributing Synthpunk themes across all five targets (VS Code, Zed, Neovim, WezTerm, Starship), mirroring the dev → main PR pattern from eval-magic and slow-powers.

What's included

Workflows (.github/workflows/)

  • ci.yml — PR gate: biome check + tsc, tests, generator sync check (bun run build then git diff --exit-code on generated files)
  • release-pr.yml — Manual trigger with version input: validates format, bumps all manifests via scripts/bump-version.ts, commits to dev, opens dev → main PR with release-notes placeholder
  • release.yml — On merge to main: tags vX.Y.Z, creates GitHub Release, builds themes, uploads curl-install files (starship.toml + 4 wezterm TOMLs), builds VSIX, fans out publish jobs (VS Code Marketplace, OpenVSX, Zed, synthpunk.nvim) — each gated on a repo variable so channels without configured secrets are skipped

Version tooling (scripts/)

  • manifest-files.ts — single source of truth for version-locked manifests
  • bump-version.ts — bumps JSON (parse + stringify + biome format) and TOML (regex replace) manifests; tested with 4 unit tests
  • tests/lockstep.test.ts — asserts all manifests match package.json version (3 tests)

Pre-release cleanup

  • Root package.json: name synthpunk, version 0.1.0, license MIT, build script with biome format step
  • biome.json: json.formatter.enabled: true for consistent JSON formatting
  • LICENSE (MIT), README.md (root, with per-target curl-install commands), RELEASE.md (manual publishing catalogue), AGENTS.md
  • themes/vscode/.vscodeignore, themes/vscode/package.json repository field
  • themes/zed/extension.toml: fix id (synthpunk), name, repo URL
  • Fix stale regen commands in 4 theme READMEs (cd generator && bun run src/index.tsbun run build)
  • themes/neovim/README.md: update for synthpunk.nvim dedicated repo

Manual steps before first release

  1. Create dev branch from main, set as default
  2. Create empty slowdini/synthpunk.nvim repo
  3. Set secrets: RELEASE_PR_TOKEN, VS_MARKETPLACE_TOKEN, OVSX_TOKEN, ZED_PUBLISH_TOKEN, SYNTHPUNK_NVIM_DEPLOY_KEY
  4. Set repo variables: PUBLISH_VSCODE=true, PUBLISH_OPENVSX=true, PUBLISH_ZED=true, PUBLISH_NVIM=true
  5. Confirm VS Code Marketplace publisher account synthpunk

Test plan

  • bun run check passes (biome + tsc)
  • bun test — 91 pass, 0 fail (84 original + 4 bump-version + 3 lockstep)
  • bun run build + generator sync check — generated files match committed
  • bun scripts/bump-version.ts 0.2.0 — bumps all 3 manifests correctly (verified, then reverted)
  • First real release: trigger Release PR workflow with 0.1.0, verify end-to-end

Add a complete release pipeline mirroring the dev→main PR pattern from
eval-magic and slow-powers:

- ci.yml: lint, typecheck, tests, generator sync check
- release-pr.yml: manual trigger bumps versions and opens dev→main PR
- release.yml: on merge to main, tags release, uploads curl-install files
  (starship.toml, wezterm *.toml), builds VSIX, and fans out publish jobs
  to VS Code Marketplace, OpenVSX, Zed, and synthpunk.nvim — each gated
  on a repo variable so channels without secrets are skipped

Supporting tooling:
- scripts/bump-version.ts bumps JSON + TOML manifests in lockstep
- tests/lockstep.test.ts enforces version match across all manifests
- bun run build now formats generated JSON via biome format --write
- Root package.json gets name, version, license fields
- Pre-release cleanup: fix stale regen commands in theme READMEs, fix
  Zed extension id/repo URL, add .vscodeignore, add root LICENSE/README
@slowdini slowdini merged commit eb3420f into dev Jun 21, 2026
1 check passed
@slowdini slowdini deleted the feat/release-workflow branch June 21, 2026 21:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant