fix(vscode): publish the extension under the aet-tum publisher#812
Merged
Conversation
`vsce publish` failed with `Access Denied ... on the resource /TUMAET/apollon-vscode`. The manifest has named `publisher: tumaet` since the extension was first committed, but that publisher belongs to a listing this repository does not produce. Both Marketplace listings for Apollon came from ls1intum/apollon-vscode, a repository archived once #806 absorbed it here: tumaet.apollon-vscode (v0.0.17, Jan 2025) and, after its maintainers migrated publishers, aet-tum.apollon-extension (v1.0.0, Mar 2026). `aet-tum` is the organization's live publisher; it also owns aet-tum.iris-thaumantias, and the Open VSX namespace of the same name. `tumaet` publishes nothing else. The workflow restated `tumaet.apollon-vscode` in three places while `vsce` read the identity from the manifest, so the query, the tag, and the release body could each disagree with what was published. The check job now derives `publisher`, `name` and `publisher.name` from the manifest and hands them to the jobs downstream; the git tag stays `apollon-vscode@X.Y.Z` because it is built from the same `name`. Open VSX becomes optional: with no OVSX_PAT the step is skipped with a notice, and the release body names only the registries that were actually reached. A `vsce verify-pat` preflight turns a missing publisher grant into a failure before the VSIX is uploaded rather than after. Verified: the rewritten marketplace query returns publish=true for aet-tum.apollon-vscode and publish=false for aet-tum.iris-thaumantias@0.4.8 and tumaet.apollon-vscode@0.0.17, so the absence is real and not a broken query. `vsce verify-pat` exits 1 on an unset, empty and invalid PAT in a clean container -- it never prompts. Release notes render correctly with OVSX true, false, and unset. 44/44 extension tests pass. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claudia-Anthropica
approved these changes
Jul 9, 2026
Claudia-Anthropica
left a comment
Collaborator
There was a problem hiding this comment.
@FelixTJDietrich The publisher rename and release workflow wiring look consistent, and the dynamic Marketplace/Open VSX handling is scoped to the manifest identity. I did not find any code issues; the extension-specific checks are green, with only broader CI jobs still pending when I reviewed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The
5.1.1release reached npm but died atvsce publish:This is not a PAT to repair. It is the wrong publisher.
What the archaeology showed
Both Apollon listings on the Marketplace were published from
ls1intum/apollon-vscode, a repository that has been archived since #806 absorbed it into this monorepo. Their VSIX manifests both carryrepository: github.com/ls1intum/apollon-vscode.tumaet.apollon-vscodeaet-tum.apollon-extensionIts maintainers migrated from
tumaettoaet-tumin March, stranding the 38 installs themselves.aet-tumis the organization's live publisher — it also ownsaet-tum.iris-thaumantias, and the matching Open VSX namespace already exists withartemis-scorpioandiris-thaumantiasin it.tumaetpublishes nothing else, on either registry.Meanwhile this monorepo's manifest has read
publisher: tumaetsince the extension was first committed in February. It has always pointed at the dead listing; nothing had ever tried to publish it until now.New identity:
aet-tum.apollon-vscode(the ID is free). The git tag staysapollon-vscode@X.Y.Z, the pnpm workspace staysapollon-vscode, and.changeset/config.jsonis untouched — onlypublisherchanges.The duplication that let this drift
vsceandovsxderive what they publish from the manifest'spublisherandname. The workflow restatedtumaet.apollon-vscodein three separate places: the Marketplace version query, the install footer, and the release-body links. Plus the tag was hardcoded asapollon-vscode@…. So the listing the workflow queried and the listingvscewrote to were free to disagree — and did.The
checkjob now readspublisher,name, andpublisher.namefrom the manifest once and passes them downstream. There is exactly one source for the identity.Open VSX is now optional
Requested explicitly.
OVSX_PATdoes not currently exist in any secret scope, so with the Marketplace PAT fixed it would have become the next failure. Now: no token → the step is skipped with a::notice::, and the release body names only the registries actually reached. A release that says "Published to Open VSX" when it wasn't is worse than one that omits it.A
vsce verify-pat <publisher>preflight also runs before the VSIX is uploaded, so a missing publisher grant fails in seconds with a clear message instead of after a full build.Verification
jq-built Marketplace query returnspublish=trueforaet-tum.apollon-vscode, andpublish=falsefor bothaet-tum.iris-thaumantias@0.4.8andtumaet.apollon-vscode@0.0.17. The negative controls prove the absence is real rather than a query I broke.vsce verify-patexits1on an unset, empty, and invalid PAT, tested in a cleannode:24-slimcontainer. It never prompts — so the hang I was worried about doesn't exist, and no guard was added for it.OVSX=true,OVSX=false, andOVSX=''(the backfill case where the publish job was skipped).apollon-vscode@5.1.1. Workflow YAML parses; all four jobs and theirneedswiring check out.pnpm format:checkclean; 44/44 extension unit tests pass.Merging this does not publish
By design (#808): the
checkjob compares the version against the parent commit, and5.1.1is unchanged. Merging is inert. To ship, run Actions → Release VS Code Extension → Run workflow onmainwithdry_run: false—workflow_dispatchskips the version-changed guard, sees5.1.1absent fromaet-tum.apollon-vscode, and publishes, tags, and cuts the Release.Out of scope, but you should know
The
vscode-marketplaceenvironment has no protection rules at all (protection_rules: [],deployment_branch_policy: null), whilenpm-publishhas a branch policy. The setup docs instruct you to add "Selected branches → main" and required reviewers; that was never applied. Any branch that can trigger the workflow can currently readVSCE_PAT.The two legacy listings are now dead ends. Worth deprecating both in favour of
aet-tum.apollon-vscode— I have not verified the exact Marketplace deprecation flow, so I did not write it into the docs.🤖 Generated with Claude Code