feat(ci): automate TypeScript SDK release - #48
Conversation
Nostradamus Risk Rating — MediumThis PR introduces a |
Change Control Evidence CheckAuthorization — ❌ FailEvidence:
Testing — ✅ PassEvidence:
Approval — ✅ PassEvidence:
Segregation of Duties — ✅ PassValidated:
Last checked: 2026-09-09 00:17 UTC ↩ Re-run Clarissa if tickets, CI, or approvals have changed. |
ximt
left a comment
There was a problem hiding this comment.
I found five important issues in the TypeScript release path:
- The new pull_request_target execution context does not match the live npm environment's tag-only deployment policy, so publish is currently blocked before approval.
- Removing the SDK source CODEOWNERS catch-all leaves source changes in a release PR without a required source owner.
- The accepted prerelease versions are not publishable with npm 11.5.1 without an explicit dist-tag, leaving an immutable tag behind on failure.
- The hand-written version regex accepts invalid SemVer with leading-zero numeric prerelease identifiers, also creating a tag before npm rejects it.
- Provenance is generated from GITHUB_SHA/GITHUB_REF, while the artifact is checked out from the explicit merge SHA; those can diverge under this trigger.
I validated the workflow with actionlint and git diff --check. I also checked the live npm dist-tags and GitHub release controls. The PR description already calls out the separate requirement to grant the Actions integration a bypass on the protected release-tag ruleset; the current ruleset still has no such bypass, so that configuration is required before the first release can create its tag. I am leaving this as a comment review rather than approving.
|
Please enable commit signing by following the commit signing setup guide. If you have additional questions, reach out to #git-commit-signing. Reveal/hide commits without valid signatures |
ximt
left a comment
There was a problem hiding this comment.
Re-review of head 286edb2: the previously reported findings are addressed (stable-only version validation, restored TypeScript source ownership, and tag-based publishing for environment policy and provenance). One important release-orchestration issue remains; see the inline comment.
Validation completed: actionlint, git diff --check, and syntax checks for both embedded Node.js scripts pass. The live tag ruleset still needs the Actions bypass documented in the PR body before the first release.
ximt
left a comment
There was a problem hiding this comment.
Re-review of head 52f56d5: the five previously reported issues are fixed and their review threads are resolved. The existing P1 concurrency finding remains open: the pull_request_target orchestrator and workflow_dispatch publisher still share a single static concurrency group, so a later release can replace an earlier pending publish run. I am not approving until that race is addressed.\n\nValidation: actionlint, git diff --check, and syntax checks for all embedded Node.js scripts pass. The live tag ruleset still requires the Actions bypass documented in the PR body, and ssdlc/validation is currently failing.
2f522eb to
4777554
Compare
ximt
left a comment
There was a problem hiding this comment.
Re-review of head 4777554: the six previously reported issues are addressed and their review threads are resolved. The latest concurrency change correctly separates per-tag publishing from parent tag jobs, but one related release-queue race remains; see the inline comment.
Validation: actionlint, git diff --check, and syntax checks for all embedded Node.js scripts pass. ssdlc/validation is currently failing, and the live tag ruleset still requires the Actions bypass documented in the PR body.
ximt
left a comment
There was a problem hiding this comment.
Re-review of head 834eba5: no actionable TypeScript or release-workflow findings remain. All prior review threads are resolved, including the per-PR tag concurrency fix. actionlint, embedded Node syntax checks, and git diff --check pass. Approving.
Summary
typescript-sdk-v<version>tag on the exact merge commit.Why
A version bump in
packages/sdk-typescript/package.jsonis the release signal. A version-bump PR may include SDK source or dependency changes; the generated tag points to the exact merged commit, which is then built, tested, and published.Release flow
packages/sdk-typescript/package.jsonstartsTag and Publish TypeScript SDK.tagjob reads package metadata frommerge_commit_sha, validates the version bump and lockfile, and createstypescript-sdk-v<version>.The tag remains the immutable release marker. Because it is created with
GITHUB_TOKEN, it intentionally does not start a second workflow; publishing is a dependent job in this same workflow. No manual workflow trigger or downstream workflow dispatch is required.Required repository configuration
typescript-sdk-v*tag ruleset. The current ruleset has user bypass actors only, so this must be updated before the workflow can create the tag.npmenvironment configured with required reviewers and prevent self-review.gemini/developer-platform, workflow filenamepublish-typescript-sdk.yml, environmentnpm, andnpm publish.No GitHub App credentials or
SDK_RELEASE_TAG_RULESET_READYvariable are required.Validation
yq.