Skip to content

feat: automate verified npm and GitHub releases - #91

Merged
mldangelo-oai merged 25 commits into
mainfrom
mdangelo/codex/automate-github-npm-releases-20260729
Jul 30, 2026
Merged

feat: automate verified npm and GitHub releases#91
mldangelo-oai merged 25 commits into
mainfrom
mdangelo/codex/automate-github-npm-releases-20260729

Conversation

@mldangelo-oai

@mldangelo-oai mldangelo-oai commented Jul 29, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Automatically turn each strictly increasing stable TypeScript SDK version merged to main into its exact npm-vX.Y.Z tag and dispatch the existing protected npm publisher.
  • Require a real release tag, an exact package version and source commit on main, and either an increasing stable npm version or an authenticated recovery of the exact highest already-published version. Treat an npm E404 as empty history only for the initial 0.1.0 release; fail closed on later releases and all other registry/auth/network errors.
  • Durably queue release cuts, protected npm publication, and repository-wide GitHub releases with GitHub Actions queue: max, preserving intermediate versions and preventing historical releases from racing to become Latest.
  • Resolve release inputs from the exact remote refs/tags/npm-vX.Y.Z object, correctly peel lightweight and annotated tags through the GitHub Git Tags API without assuming tag objects exist locally, and never resolve a same-named branch.
  • Recheck and peel the authoritative remote release tag immediately after protected-environment approval, immediately before npm publication, and immediately before either GitHub Release creation or edit; fail closed on deleted, malformed, or retargeted refs.
  • Publish a GitHub Release only after independently verifying the protected release run, exact public npm version and gitHead, SHA-512 package integrity, registry signatures, and Sigstore/SLSA provenance.
  • Bind ordinary publication provenance to the exact successful resolved release run. Accept an alternate original attestation only when the resolved protected run proves its authenticated recovery step succeeded and the original signing run independently matches the exact protected workflow, commit, and tag.
  • Verify the cryptographically checked Fulcio certificate against the GitHub Actions OIDC issuer, protected workflow/tag, repository, source commit, release run, GitHub-hosted runner, and protected npm environment.
  • Explicitly pin protected package verification to the supported minimum Node.js 22.13.0 and the release cutter, protected publisher, and GitHub Release job to Node.js 24.15.0; install npm 11.12.1 into an isolated runner-temporary prefix through the Socket Firewall; and verify the exact version plus npm audit signatures --json --include-attestations.
  • Compute GitHub Latest against both npm and GitHub release history, correctly ignore the candidate's own already-published release tag, read GitHub's actual authenticated HTTP status for both existing-release and Latest lookups; treat only genuine 404 responses as missing even when their JSON body omits status, and fail closed on authentication errors, malformed responses, network failures, and all other HTTP errors before release creation or reconciliation, reconcile incorrect Latest metadata even when existing notes are current, safely backfill expired Actions artifacts, and cryptographically verify existing GitHub assets even when their API digests are absent.
  • Preserve manually applied and unattributed skip-release-notes labels by checking the true latest labeling event, while still reconciling other managed category labels when a PR title changes and avoiding redundant label writes.
  • Restrict manual GitHub Release backfills to the trusted main branch and explicitly check out refs/heads/main before running contents-write automation.
  • Regenerate stale, empty, or manually written existing GitHub Release notes using GitHub's documented release-notes API and the exact tag, source commit, previous tag, and release configuration, without changing Latest or relying on GitHub CLI edit flags unavailable in some runner versions.
  • Require every signed workflow invocation to contain the exact protected run and a canonical positive decimal attempt; reject empty, zero, leading-zero, nonnumeric, path-extended, and query-extended attempts in both publication and authenticated recovery.
  • Add fail-closed DER child-parser progress protection and malformed/empty certificate regressions.
  • Backfill the signed npm-v0.1.2 release from protected run 30481596229 without republishing npm.
  • Merge current main commit 9c7634b5d08b36e6060441fe3e35caaaf8aa6a49, including the 0.1.4 package, nested Git repository snapshots/remediation checkouts, and latest scan-comparison CLI/workbench changes, without rewriting the existing PR branch.

Why

Tags created using GITHUB_TOKEN do not start a second tag-push workflow. The cutter explicitly dispatches the existing protected publisher on the true release tag; a separately retryable GitHub Release workflow then publishes generated release notes only after authenticating the public npm artifact and its protected provenance.

GitHub's documented durable concurrency queues retain pending releases instead of replacing the previous pending run. A repository-wide GitHub Release queue also serializes Latest selection and release creation across versions.

Review feedback addressed

  • All 36 review threads are resolved; replied directly with regression evidence to every newly actionable Codex and Copilot finding and fixed all additional suppressed reports, including initial publication, canonical Actions run IDs, annotated tags, missing/incorrect Latest repair, manually skipped category reconciliation, unattributed labels, release-cutter Node pinning, and release-tag races.
  • Added executed regressions for human-versus-bot release-note labels; trusted manual backfill source; generated existing-release notes; GitHub CLI edit-flag compatibility; protected remote tag revalidation; explicit resolved-run propagation; strict provenance-run binding and canonical numeric attempts with authenticated recovery; and annotated tags absent from the local checkout.
  • Preserved all prior release-hardening behavior, package provenance checks, Socket Firewall enforcement, protected npm environment requirements, and existing manual release-note exclusions.
  • Deliberately kept real-workflow shell regressions enabled on Windows: Git is already required by the repository tests, GitHub-hosted Windows runners provide Git Bash, and this coverage caught the Windows command-line limit that stdin-streamed fixtures now avoid.

Validation

  • Final exact pushed head: 6820cc44cd80b95ac1192f1d73bbd9a144f8add5; merged main: 9c7634b5d08b36e6060441fe3e35caaaf8aa6a49.
  • Complete SDK suite: 634 pass, 6 expected platform/integration skips, 0 fail, across 640 tests in 31 files, with 4,669 passing expectations.
  • Focused release/provenance/workflow regression suite: 169 pass, 0 fail and 357 expectations.
  • Merged-main CLI launcher, CLI, and nested-repository scan-recovery regression suites: 100 pass, 0 fail.
  • Executed the actual workflow shell for manually applied and bot-managed skip labels, trusted release backfills, deleted/retargeted/lightweight/annotated publisher tags, annotated cutter tags, exact-run provenance, rejected unauthorized alternate runs, authenticated protected recovery, wrong-source recovery rejection, canonical run IDs and attempts, initial-publication npm E404 handling with fail-closed auth/network/later-version errors, stale/empty/current generated release notes, missing-release and missing-Latest HTTP 404 responses without a JSON status; fail-closed existing-release HTTP 500, HTTP 401, malformed 404, and network failures; and fail-closed Latest HTTP 500, malformed 404, and network failures, Latest-status repair, manually skipped category-label reconciliation, unavailable annotated objects, tag deletion/retargeting immediately before release creation or edit, unattributed latest label events, and GitHub CLI edit compatibility.
  • Downloaded and authenticated the real public 0.1.2 archive against npm integrity, source commit 1e03c89ad22d2df5ae65b146be1483b3608572a9, protected Actions run 30481596229, Fulcio certificate, exact workflow/tag identity, and protected npm environment.
  • Built the production 0.1.4 tarball with gitHead bound to exact final commit 6820cc44cd80b95ac1192f1d73bbd9a144f8add5; independently validated all 179 archive entries, public SDK import, executable CLI, and all 95 bundled plugin files.
  • Installed and smoke-tested that exact final release archive on Node.js 22.13.0, 24.15.0, and 26.0.0.
  • TypeScript and generated-model checks; full SDK/workflow formatting and lint checks; production and full dependency audits with no known vulnerabilities; 110 consecutive targeted macOS-sensitive workflow/provenance mock regressions with piped input fully drained; oversized shell fixtures streamed through stdin to avoid Windows command-line length limits.
  • actionlint 1.7.12 passes with only a narrowly scoped compatibility exclusion for its outdated rejection of GitHub's officially documented concurrency.queue: max syntax.

@mldangelo-oai
mldangelo-oai marked this pull request as ready for review July 29, 2026 20:32

Copy link
Copy Markdown
Collaborator Author

@codex review

Please focus on release trigger correctness, GitHub Actions permission and trust boundaries, npm provenance and exact gitHead verification, idempotent historical backfills, latest-release selection, and automatic release-note category reconciliation.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces an automated, verification-driven release pipeline that (1) cuts stable npm-vX.Y.Z tags and dispatches the protected npm publishing workflow, then (2) publishes a GitHub Release only after validating npm publication metadata, gitHead, SLSA provenance, and tarball integrity, with automated release-note labeling and changelog configuration.

Changes:

  • Add a release automation Node script plus Bun tests to validate stable versioning, npm publication verification, and idempotent GitHub Release verification.
  • Introduce GitHub Actions workflows to cut tags, dispatch protected npm publishing, and publish verified GitHub Releases with generated notes (without forcing “latest” on historical backfills).
  • Add automated PR labeling for release-note categories and configure GitHub Release note categories/exclusions.

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
sdk/typescript/tests-ts/release-automation.test.ts Adds Bun tests covering version validation, npm metadata/artifact verification, and workflow safeguard assertions.
sdk/typescript/scripts/release-automation.mjs Implements release version parsing plus npm/GitHub Release verification helpers and CLI entrypoints.
.github/workflows/node-release.yml Enables manual dispatch for the existing protected npm publishing workflow.
.github/workflows/node-release-labels.yml Adds a pull_request_target workflow that auto-labels PRs for release-note categorization.
.github/workflows/node-release-cut.yml Adds a workflow to cut npm-vX.Y.Z tags from merged stable bumps and dispatch the protected publisher.
.github/workflows/node-github-release.yml Adds a workflow that publishes GitHub Releases only after verifying successful npm publication and artifact integrity.
.github/release.yml Configures release-note categories and excludes internal changes via labels.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .github/workflows/node-release-labels.yml Outdated
Comment thread sdk/typescript/scripts/release-automation.mjs

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 335411fc07

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .github/workflows/node-release.yml
Comment thread .github/workflows/node-github-release.yml
Comment thread .github/workflows/node-release-labels.yml Outdated
Comment thread .github/workflows/node-release-cut.yml
Comment thread .github/workflows/node-release-cut.yml
Comment thread .github/workflows/node-github-release.yml Outdated
Comment thread sdk/typescript/scripts/release-automation.mjs
Comment thread .github/workflows/node-github-release.yml Outdated
@mldangelo-oai
mldangelo-oai requested a review from Copilot July 29, 2026 21:07

Copy link
Copy Markdown
Collaborator Author

@codex review

All prior findings are fixed and individually resolved on 35413aa. Please re-review tag-only publishing, main-only release cuts, strictly increasing versions, historical/latest release handling, concurrent PR labeling, durable tarball backfill, and cryptographically verified npm/SLSA provenance.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated no new comments.

Comments suppressed due to low confidence (2)

sdk/typescript/scripts/release-automation.mjs:217

  • verified.attestationBundles?.find(...) can throw a TypeError if attestationBundles is present but not an array (untrusted JSON from npm audit signatures). This bypasses the intended controlled error path ("The verified SLSA provenance bundle is missing.") and can make failures harder to diagnose. Guard with Array.isArray before calling .find.
  const provenance = verified.attestationBundles?.find(
    (candidate) => candidate?.predicateType === provenancePredicate,
  );

sdk/typescript/scripts/release-automation.mjs:332

  • The .find callback assumes every entry in release.assets is an object and unconditionally reads candidate.name. If the API response contains an unexpected/null entry, this will throw a TypeError instead of producing the intended verification error. Using optional chaining keeps behavior deterministic with untrusted JSON.
  const asset = Array.isArray(release.assets)
    ? release.assets.find((candidate) => candidate.name === assetName)
    : undefined;

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 35413aafa3

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .github/workflows/node-release-cut.yml
Comment thread .github/workflows/node-github-release.yml Outdated
Comment thread .github/workflows/node-github-release.yml Outdated
Comment thread sdk/typescript/scripts/release-automation.mjs Outdated
Comment thread .github/workflows/node-release-cut.yml Outdated
Comment thread .github/workflows/node-release-labels.yml Outdated

Copy link
Copy Markdown
Collaborator Author

@codex review

All 16 prior review threads are fixed, regression-tested, individually answered, and resolved on bf19d80. Please recheck the durable GitHub Actions release queues, monotonic manual release cuts, repository-wide Latest serialization, pinned Node/npm attestation support, full Fulcio/OIDC certificate identity verification, protected npm environment, and idempotent concurrent label creation.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated no new comments.

Comments suppressed due to low confidence (1)

.github/workflows/node-github-release.yml:83

  • The workflow claims to require an existing release tag, but it only validates the tag shape and then resolves release_sha via the commits/<ref> endpoint, which can also resolve branch names. Add an explicit check that refs/tags/$release_tag exists before proceeding so manual dispatches can’t accidentally accept a branch ref and so missing tags fail with the intended error message.
          if [[ ! "$release_tag" =~ ^npm-v(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)$ ]]; then
            echo "GitHub releases require an existing stable npm-vX.Y.Z tag." >&2
            exit 1
          fi

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: bf19d80ab7

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .github/workflows/node-release.yml

Copy link
Copy Markdown
Collaborator Author

@codex review

All 17 prior findings are regression-tested, replied to, and resolved on 65c0722. Please verify direct publisher downgrade protection, exact Git-tag resolution, durable release queues, verified Fulcio certificate identity, historical release handling, and concurrent release-note labels.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. 👍

Reviewed commit: 65c0722e40

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated no new comments.

Comments suppressed due to low confidence (1)

.github/workflows/node-github-release.yml:90

  • release_sha is resolved via repos/.../commits/$release_tag, which can be ambiguous if a branch with the same name exists. Since the workflow already requires a real tag, resolve the commit SHA from the git/ref/tags/... object (and dereference annotated tags) so the commit cannot be influenced by a same-named branch.
          if ! gh api \
            "repos/$GITHUB_REPOSITORY/git/ref/tags/$release_tag" \
            --silent >/dev/null 2>&1; then
            echo "GitHub releases require an existing stable npm-vX.Y.Z tag." >&2
            exit 1
          fi

          release_sha="$(
            gh api "repos/$GITHUB_REPOSITORY/commits/$release_tag" \
              --jq '.sha'
          )"

Copy link
Copy Markdown
Collaborator Author

@codex review

All 17 prior findings are fixed, regression-tested, individually replied to, and resolved on 75496c2. This head is synchronized to main v0.1.3. It also addresses Copilot's latest suppressed finding: release commits now come from the exact real Git tag-object SHA, with passing regressions for lightweight tags, annotated tags, and same-named branches. Please review final tag resolution, direct publisher monotonicity, durable release queues, Fulcio/OIDC certificate identity, historical release notes, and concurrent labels.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7c93c564b1

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .github/workflows/node-github-release.yml Outdated
Comment thread .github/workflows/node-release-labels.yml Outdated

Copy link
Copy Markdown
Collaborator Author

@codex review

Please review exact final head 02662bee352b104e46a13cb26a4c9325b0b780b4. All 36 prior review threads have been answered and resolved. This update specifically fixes the newly reported no-current-Latest HTTP 404 case while failing closed on all other API errors, preserves manual/unattributed skip-release-notes while reconciling managed category labels, and pins Node 24.15.0 in the release cutter. The complete SDK suite passes 627 tests with six expected skips; 157 focused release regressions pass; and the exact commit-bound npm artifact passes on Node 22, 24, and 26.

Copy link
Copy Markdown
Collaborator Author

@codex review

Please review exact current head c75314f6d316f8cab187af641aef50a2d1d9c96a, including the freshly merged main commit 9c7634b5d08b36e6060441fe3e35caaaf8aa6a49. All 36 existing review threads are answered and resolved. The no-current-Latest HTTP 404 case, fail-closed non-404 errors, manually skipped category-label reconciliation, explicit release-cutter Node pin, and nested-Git-repository merge have all been verified. The complete SDK suite passes 627 tests / 4,649 expectations with six expected skips; 162 focused release/provenance regressions and 100 merged-main CLI/recovery regressions pass; and the exact commit-bound release archive passes on Node 22, 24, and 26.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated no new comments.

Comments suppressed due to low confidence (2)

.github/workflows/node-release.yml:233

  • PR description states Node.js 24.15.0 is pinned in both the release cutter and the protected publisher, but this workflow only pins 24.15.0 in the protected publish job while the verify job still uses Node.js 22. Either update the description or pin the same Node version in verify as well to keep the release pipeline consistent.
      - name: Set up Node.js
        uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
        with:
          node-version: "24.15.0"
          registry-url: "https://registry.npmjs.org"
          package-manager-cache: false

.github/workflows/node-github-release.yml:508

  • The Latest-release lookup treats a missing Latest as acceptable only when the JSON body contains status: "404". gh api repos/.../releases/latest typically returns an error body without a status field, so the workflow would fail closed even when there is simply no current Latest release (e.g., early in repo history), preventing the intended reconciliation behavior.
                    } else if (String(response?.status) !== "404") {
                      throw new Error(
                        "Unable to resolve the current Latest GitHub Release.",
                      );
                    }

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Chef's kiss.

Reviewed commit: c75314f6d3

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Copy link
Copy Markdown
Collaborator Author

@codex review

Please review exact final head ba3a17f440f7ff8708b824f9b95d361cadd3f873 after incorporating Copilot’s newest suppressed findings. Missing Latest releases are now recognized from the actual authenticated HTTP status line, including real 404 bodies without a JSON status; 500s, network failures, malformed 404s, and invalid success responses fail closed. Protected package verification is intentionally pinned to the minimum supported Node 22.13.0, while release cutting, signing/publication, and GitHub Release verification are pinned to Node 24.15.0. All 36 discussion threads are answered and resolved; the complete SDK suite passes 630 tests / 4,657 expectations with six expected skips, 165 focused release/provenance regressions pass, and the exact commit-bound package passes on Node 22/24/26.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Bravo.

Reviewed commit: ba3a17f440

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Copy link
Copy Markdown
Collaborator Author

@codex review

Please review exact final head 68e0595682d15b589c2349ab64b6f7feaa30c8e9. The latest follow-up preserves the actual-HTTP-status 404 handling and exact Node runtime pins, and fixes Windows CI by streaming oversized real-workflow shell fixtures through stdin instead of exceeding the Windows command-line limit. All 36 review discussions are answered and resolved; the focused release/provenance suite passes 165 tests, all failure modes fail closed, and the exact package artifact remains bound to this head and installable on Node 22/24/26.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated no new comments.

Comments suppressed due to low confidence (1)

.github/workflows/node-github-release.yml:435

  • The existing-release check treats any gh api failure as “release does not exist” because stderr is silenced and the HTTP status is not inspected. This means transient/network/5xx/auth failures can fall through into the create-release path instead of failing closed; only a genuine 404 should be treated as “missing”.
          if existing_release="$(
            gh api "repos/$GITHUB_REPOSITORY/releases/tags/$RELEASE_TAG" \
              2>/dev/null
          )"; then

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. 🎉

Reviewed commit: 68e0595682

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Copy link
Copy Markdown
Collaborator Author

@codex review

Please review exact final head 6820cc44cd80b95ac1192f1d73bbd9a144f8add5. Copilot’s newest suppressed finding is fixed: both existing-release and Latest-release lookups now authenticate the actual HTTP status, accept only genuine missing-release 404s, and fail closed on HTTP 401/500, network failures, and malformed 404 responses before creating or editing any release. Both enlarged workflow fixtures now stream through stdin for Windows compatibility. All 36 previous review threads are answered and resolved; the complete SDK suite passes 634 tests / 4,669 expectations with six expected skips; 169 focused release/provenance regressions pass; and the exact-head release artifact validates on Node 22/24/26.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Swish!

Reviewed commit: 6820cc44cd

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated no new comments.

Comments suppressed due to low confidence (1)

sdk/typescript/tests-ts/release-automation.test.ts:1296

  • This describe block executes GitHub Actions workflow steps by spawning bash. Since the repo’s CI runs the Bun test suite on windows-latest (see .github/workflows/node-ci.yml), adding an unconditional bash dependency here makes the test suite rely on Git-for-Windows being present in PATH and makes local Windows runs fragile. Consider skipping the workflow-shell execution tests on Windows (the workflows themselves run on Ubuntu) to keep the test suite portable.
describe("GitHub release workflow safeguards", () => {
  test("requires a real tag for protected npm publication", () => {
    expect(protectedReleaseWorkflow).toContain("release-tag");
    expect(protectedReleaseWorkflow).toContain('"$GITHUB_REF_TYPE"');
    expect(protectedReleaseWorkflow).toContain('"$GITHUB_REF"');
  });

Copy link
Copy Markdown
Collaborator Author

Copilot follow-up on exact head 6820cc44cd80b95ac1192f1d73bbd9a144f8add5: I considered the suppressed suggestion to skip Bash-backed workflow regressions on Windows and intentionally kept them enabled. Git is already required by the repository/CLI integration tests, GitHub-hosted Windows runners provide Git Bash, and this exact coverage exposed the Windows command-line-limit bug fixed by streaming the two oversized fixtures over stdin. The full Windows job now passes, alongside all seven Linux/macOS jobs; disabling those regressions would remove useful cross-platform protection.

@tiffanycitra
tiffanycitra self-requested a review July 30, 2026 23:15
@mldangelo-oai
mldangelo-oai merged commit 358717f into main Jul 30, 2026
9 checks passed
@mldangelo-oai
mldangelo-oai deleted the mdangelo/codex/automate-github-npm-releases-20260729 branch July 30, 2026 23:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants