From 20da792b54cad10950bf0e6694eabb9ad46fc857 Mon Sep 17 00:00:00 2001 From: Eric Andrechek Date: Sun, 13 Sep 2026 12:26:25 -0400 Subject: [PATCH] ci: a diagnostic upload must not fail a required check MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both `actions/upload-artifact` steps sit in REQUIRED jobs — `go` and `artifacts` — with no continue-on-error, so anything that refuses an upload reddens two required checks and blocks every pull request. That is not hypothetical. On 2026-09-13 the org's Actions artifact storage filled (97.6% of it one sibling repository, 20.36 GB across 408 rows) and GitHub refused every CreateArtifact in the org: "Artifact storage quota has been hit. Unable to upload any new artifacts." A sibling's scheduled job died on exactly this, two steps after doing its real work successfully. The SDK escaped only by timing — its last run predated the ceiling, and by the time a dispatched run tested it the sibling had deleted 16.8 GiB. Both uploads then succeeded (run 34768470404), which is the measurement, not the fix. What the artifact is: scratch/check-standalone.json, the census scripts/check-standalone.sh reads its own verdict from. The script has already decided by the time the upload runs; the JSON is how a human READS a failure afterwards, never how the verdict is reached. `if-no-files-found: ignore` already marks it best-effort. So the job's correctness does not depend on the upload landing, and letting it gate a required check was always wrong — the storage event only made it visible. A genuine upload failure stays visible: the step itself still shows red in the run, it simply no longer fails the job. No job `name:` changed — branch protection keys required checks on those. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_018ckJDLjWhAAttQVrYnQEJD --- .github/workflows/ci.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 94b4cd7..16d5385 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -107,8 +107,18 @@ jobs: run: cd go && go build ./... && go vet ./... - name: standalone check — a bare copy builds, the linked API is absent, the suite's census run: scripts/check-standalone.sh --no-artifacts + # The census JSON is diagnostic: it is how a failure is READ, never how a + # verdict is reached — scripts/check-standalone.sh already decided, and + # this job's result does not depend on the upload landing. So the upload + # must not be able to fail a REQUIRED check. On 2026-09-13 the org's + # Actions artifact storage filled (97.6% one sibling repository) and every + # CreateArtifact in the org was refused; without this, `go` and + # `artifacts` both go red for a reason that has nothing to do with the + # SDK, and no pull request can land until storage frees days later. + # A genuine upload failure is still visible: the step itself shows red. - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 if: always() + continue-on-error: true with: name: check-standalone-json-no-artifacts path: scratch/check-standalone.json @@ -195,8 +205,10 @@ jobs: cache: false # the module is stdlib-only: there is no go.sum to cache - name: go — standalone check with the registry; TestGoldens must run run: scripts/check-standalone.sh --registry "$CHTYPES_REGISTRY" --require-artifacts + # Diagnostic, and must not fail this required job — see the `go` job above. - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 if: always() + continue-on-error: true with: name: check-standalone-json-artifacts path: scratch/check-standalone.json