Both editors ship one version. vscode/package.json, zed/extension.toml
and zed/Cargo.toml carry the same major.minor.patch version, and
bun run verify fails when they disagree. The Visual Studio Marketplace
accepts no pre-release suffix, and no store accepts the same version twice.
-
On a branch, set the new version in the three manifests, add an entry to
vscode/CHANGELOG.mdand open a pull request intodev. -
After it merges, promote
dev: open a pull request fromdevintomain; onceverifypasses on its head, rungh workflow run promote.yml --ref dev -f pull_request=<number>, which fast-forwardsmainto that exact commit. -
Qualify the
maincommit with the Rootform release it targets:bun run verify, the VS Code extension-host suite withROOTFORM_BINARY, and the Zed package installed as a dev extension. -
Tag the
maincommit and push the tag:git tag -a v0.1.0 -m "Rootform editors 0.1.0" <main-commit> git push origin v0.1.0
-
Update the Zed registry, as described below.
-
Check each store page, then install from each store and open a
.rf.hclfile with a released Rootform CLI.
The release workflow refuses a tag whose
commit is not on main or did not pass verify in its promotion pull
request. It checks that the tag
matches the manifests, runs verify, packages one VSIX and attaches it with
SHA256SUMS to the GitHub release. The repository enforces immutable
releases, so once published, that release, its files and its tag never change.
Only after GitHub reports the release immutable and holding exactly the
packaged files does the workflow publish that same VSIX to Open VSX and the
Visual Studio Marketplace, from the release environment, which only version
tags can use. To resume after a failure, re-run the failed jobs: they reuse
the run's VSIX, keep the published release and skip a version a store already
has.
The publisher is rootform-dev, displayed as Rootform. Azure DevOps retires
global personal access tokens on 1 December 2026; this repository uses none.
Automated publishing uses Microsoft Entra ID workload identity federation, as the publishing guide recommends:
- Create a user-assigned managed identity in Azure. An app registration signs in but cannot publish.
- Add a federated credential to it for GitHub Actions: organization
rootform-dev, repositoryeditors, entity type Environment, environmentrelease. - Signed in as that identity, read its Azure DevOps profile id once:
az rest -u https://app.vssps.visualstudio.com/_apis/profile/profiles/me --resource 499b84ac-1321-427f-aa17-267ca6975798. - Add that id to the
rootform-devpublisher as a Contributor member. - Set the repository variables
AZURE_CLIENT_IDandAZURE_TENANT_ID. Thevs-marketplacejob runs once they exist.
Until then, upload the VSIX attached to the GitHub release on the
publisher management page.
When the Marketplace opens trusted publishing (vsce publish --oidc), it
replaces the Azure identity.
The namespace is rootform-dev, matching publisher exactly.
- Sign the Eclipse Foundation Publisher Agreement from the open-vsx.org profile, using the GitHub account that publishes.
- Create an access token on the open-vsx.org profile and store it as the
OVSX_PATsecret of thereleaseenvironment. The first release creates therootform-devnamespace with it, then publishes. - After that first release, check the extension page.
- Claim namespace ownership with an issue on EclipseFdn/open-vsx.org.
- Register a trusted publisher for
rootform-dev.rootform: GitHub Actions, organizationrootform-dev, repositoryeditors, workflowrelease.yml, environmentrelease. - Delete the
OVSX_PATsecret and the token. Theopen-vsxjob then publishes with its OIDC token.
Zed publishes extensions from zed-industries/extensions. Its AI policy expects a person to open the pull request and write its description, so this step stays manual.
-
Install
zed/as a dev extension at the tagged commit and test it. -
In a fork of the registry, add or update the submodule
extensions/rootformwithhttps://github.com/rootform-dev/editors.gitat the tagged commit, which must be on a branch. -
Set the entry in
extensions.toml:[rootform] submodule = "extensions/rootform" path = "zed" version = "0.1.0"
-
Run
pnpm sort-extensions, then open one pull request for this extension. Answer review feedback within three weeks.
The registry builds the package with the Rust toolchain set in its CI,
currently 1.90. Keep zed/rust-toolchain.toml and rust-version at or below
that toolchain.