ci(release): allow publishing one package on its own and fix Enterprise E2E dispatch - #67
Conversation
… E2E dispatch Azure rejects an empty string for the javascriptClientPrNumber template parameter, which failed every push and schedule dispatch. Omit it when there is no pull request, and print Azure's error message when a call fails instead of exiting silently under set -e.
Add a packages input (both, nodejs, browser) to the publish workflow. The release gate keeps the manifests in lockstep but checks only the selected packages against npm, so one package can ship first and the other can follow later under the same version.
Review: approve (no Critical or Moderate findings, one Minor)Reviewed head The title and both commits follow Conventional Commits, and every procedure described in Evidence
Minor
Test coverageTwo refusal messages for single-package dispatches have no test:
Both still exit 1, so only the hint text is unguarded. The fake npm could take its published list from an environment variable, as it already does for Trade-offA single-package dispatch never checks which commit the other package was published from. So Not verifiedWhether the Enterprise Azure pipeline has a default for Submodules: none changed. |
Only the browser selection had a passing single-package case, so a broken nodejs selection kept every test green while refusing a real Node-only release.
…ection When curl fails before Azure answers, or Azure sends no body, the step printed 'Azure DevOps rejected ...:' with an empty detail. Point at curl's own error line instead.
Review: approve (no Critical or Moderate findings, one Minor)Reviewed head Evidence
Minor
Test coverageThe test gate passes with no gaps admitted. The Trade-off (documented)A single-package dispatch never checks which commit the other package came from. As a result, Not verifiedWhether the Enterprise Azure pipeline has a default for Submodules: none changed. |
bluestreak01
left a comment
There was a problem hiding this comment.
Approve
Level 3 review: b94ab855 → 208a7de5. No admitted findings or demonstrated regressions.
Validation
- Release tests: 6/6 passed.
- Test typecheck and changed-test formatting passed.
- 72 head/base release scenarios checked; default-release decisions preserved.
- 58 local Azure-step executions checked payloads and failure handling.
- Reverting production changes and mutating key guards made the tests fail.
Coverage and scope
- Test gate: pass; 0 admitted coverage gaps.
- Severity: 0 Critical / 0 Moderate / 0 Minor.
- Findings: 0 in-diff / 0 out-of-diff breakage.
- Submodules: none.
Documented trade-off: separately released packages can share a version while containing different commits.
Live Azure pipeline defaults remain unverified; full integration/browser suites were not run locally. The working tree is unchanged, and temporary worktrees were removed.
Summary
Two CI changes that don't affect the published packages.
Publish one package on its own
publish.ymlgains apackagesinput (bothby default,nodejs, orbrowser). This lets one package ship before the other, for example when the browser client depends on server support that hasn't shipped yet.scripts/check-release-versions.mjschecks only the selected packages against npm, so the other package can follow later under the same version with its own dispatch.bothdispatch behaves as before: it refuses a forgotten bump, and it resumes a partial release only when the published package's npmgitHeadmatches the commit being dispatched.packagesvalue that publishes it.CONTRIBUTING.mddocuments the procedure.Enterprise E2E dispatch
javascriptClientPrNumberwith HTTP 400, which broke every push, schedule andworkflow_dispatchrun. The parameter is now omitted when there is no pull request, so the pipeline default applies.curl -ftogether withset -eexited without showing why.Testing
test/release-version.test.tsnow runs the gate against fixture manifests instead of the repository's own. It covers:gitHeadwas run against a fake npm registry, comparing the head and base scripts.jqrequest body and the error helper were run against JSON,null, array, HTML and empty responses.