Build only what a release needs; verify tap push access - #3
Merged
Conversation
Each release workflow was building all three deliverables, and the osate-cli one was building them twice. The `build-cli` input never skipped anything. It gated the test-count assertion and the artifact upload, while scripts/build-test-release went on building the language server, the extension and the CLI unconditionally. So a language-server release packaged a VSIX and ran the CLI integration suite for nothing. Worse, release-osate-cli.yml called the reusable build workflow *and* then rebuilt everything in its package job, because packaging needs the dist tree on disk. That is a second full build per release. - scripts/build-test-release gains --skip-extension (implying --skip-extension-tests) and --skip-cli, so the phases are actually selectable. - build.yml gains a build-extension input and maps all three inputs onto those flags, printing the resulting argument list so a run says what it built. - release-server.yml builds the language server alone; release-vscode.yml builds the language server and extension; ci.yml still builds everything. - release-osate-cli.yml drops the redundant build job. The package job computes the osate2 pin itself for the cache keys and builds once, skipping the extension. Measured locally against a warm OSATE cache: language-server-only drops from about four minutes to 41s, and the CLI path is 2m15s with the dist tree in place for the packaging scripts.
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.
Each release was building all three tools
You spotted this. The
build-cliinput never skipped anything — it gated the test-count assertion and the artifact upload, whilescripts/build-test-releasewent on building the language server, the extension and the CLI unconditionally. A language-server release was packaging a VSIX and running the CLI integration suite for nothing.Worse,
release-osate-cli.ymlcalled the reusable build workflow and then rebuilt everything in its package job, because packaging needs the dist tree on disk. That was a second full build per release.build-test-releasegains--skip-extension(implying--skip-extension-tests) and--skip-cli, so the phases are genuinely selectable.build.ymlgains abuild-extensioninput, maps all three inputs onto those flags, and prints the resulting argument list so a run states what it built.release-server.ymlbuilds the language server alone;release-vscode.ymlbuilds the language server and extension;ci.ymlstill builds everything.release-osate-cli.ymldrops the redundant build job — the package job computes theosate2pin itself for the cache keys and builds once.Measured locally against a warm OSATE cache: language-server-only drops from ~4 min to 41 s; the CLI path is 2m15s with the dist tree in place for packaging.
The tap check was reporting a pass it hadn't earned
Your
verify-credentialsrun was green, but the tap step had taken its empty-repo branch (warning: You appear to have cloned an empty repository) and only proved the token can read — a read-only token clones fine. Push access, which is the last step of a CLI release and would fail after the GitHub Release already exists, was never exercised.It now manufactures a throwaway local commit when the tap has no history, so
git push --dry-runhas something to offer and the server actually authorizes the ref update. Nothing is written. Rehearsed against a local empty repo: unborn HEAD → probe commit → dry run accepted → remote still empty.Also pins the tap branch to
maininstead of inheriting the runner'sinit.defaultBranch. My local rehearsal pickedmaster, and for an empty tap that choice decides which branch the first release creates — the same logic is now used in both the check and the release step so they cannot disagree.Confirmed working from your run
vsce verify-patreported "The Personal Access Token verification succeeded for the publisher 'osate'" andovsxreported "PAT valid to publish at osate" — so the Marketplace publisher exists and both tokens are good. That closes the blocker flagged since the original publish.🤖 Generated with Claude Code