From dce2dd00da2caf4c057592046b7a24363a5bde24 Mon Sep 17 00:00:00 2001 From: speak-agent <248744407+speak-agent@users.noreply.github.com> Date: Wed, 26 Aug 2026 02:39:16 +0800 Subject: [PATCH] release: the mirror step's cap was shorter than the deadline it was guarding MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `mirror_res.sh` gives GitCode `MIRROR_LEG_DEADLINE_GTC=2400s` because that host shapes inbound traffic. The step around it killed the script at 600s, so that budget could never be spent — of two disagreeing limits the shorter always wins, and every release ended the same way: The action 'Mirror binaries to xlings-res/mcpp (gh + gtc)' has timed out after 10 minutes with GitHub's eight assets uploaded in seconds and GitCode's three large ones cut off, only the small `.sha256` files through. v2026.8.25.1 and v2026.8.25.2 both, measured; both were finished by hand with `gtc` and verified byte-for-byte. The comment on that value described a design that no longer exists — a per-asset `MIRROR_UPLOAD_TIMEOUT` of 180s. The script's own comment records why it went ("the old per-asset cap failed four releases in a row"), but this number, calibrated to it, stayed behind. 45 > 40 leaves the script room to reach its own deadline and report what it abandoned by name, which is what the value exists for; the job's `timeout-minutes: 30` is the outer backstop. Also moves the workspace bootstrap pin to 2026.8.25.2. It named 2026.8.17.1, which the index no longer offers, so building mcpp from a fresh clone tried to install a version that is not there — the cross-validation channel had to `rm -f .xlings.json` to get past it. --- .github/workflows/release.yml | 28 +++++++++++++++++++++------- .xlings.json | 2 +- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ae5ad2a3..780c1ccb 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -865,13 +865,27 @@ jobs: - name: Mirror binaries to xlings-res/mcpp (gh + gtc) if: ${{ env.XLINGS_RES_TOKEN != '' }} - # Hard ceiling for the whole mirror segment. The script caps each asset - # at MIRROR_UPLOAD_TIMEOUT (180s) and abandons anything slower, so a - # healthy run lands well inside this; 10min is the backstop that keeps a - # pathological host from burning the job's budget the way v0.0.94 did - # (30min, killed, zero per-asset visibility). Whatever gets skipped is - # reported by name + size and pushed by hand. - timeout-minutes: 10 + # ⚠️⚠️ THIS MUST BE LONGER THAN THE SCRIPT'S OWN LEG DEADLINE, AND FOR + # A LONG TIME IT WAS SHORTER. + # + # `mirror_res.sh` gives GitCode `MIRROR_LEG_DEADLINE_GTC=2400s` because + # that host shapes inbound traffic; this step killed it at 600s, so the + # script's budget could never be spent and the shorter of two + # disagreeing limits always won. Every release since has ended the same + # way — `The action … has timed out after 10 minutes`, GitHub's eight + # assets uploaded in seconds and GitCode's three large ones cut off, + # with only the small `.sha256` files through. v2026.8.25.1 and + # v2026.8.25.2 both, measured. + # + # ⚠️ The paragraph this replaces described a design that no longer + # exists: a per-asset `MIRROR_UPLOAD_TIMEOUT` of 180s. The script's own + # comment records why it went ("the old per-asset cap failed four + # releases in a row") — but this value, calibrated to it, stayed. + # + # 45 > 40 leaves the script room to reach its own deadline and report + # what it abandoned by name, which is the visibility the value exists + # for; the job's `timeout-minutes: 30` above is the outer backstop. + timeout-minutes: 45 env: GH_TOKEN: ${{ secrets.XLINGS_RES_TOKEN }} run: | diff --git a/.xlings.json b/.xlings.json index c72e01d3..16ab2c9d 100644 --- a/.xlings.json +++ b/.xlings.json @@ -1,5 +1,5 @@ { "workspace": { - "mcpp": "2026.8.17.1" + "mcpp": "2026.8.25.2" } }