Skip to content

ci: pin the Windows image and make its leg measurable - #10

Merged
martin-fleck-at merged 1 commit into
mainfrom
ci/windows
Sep 9, 2026
Merged

ci: pin the Windows image and make its leg measurable#10
martin-fleck-at merged 1 commit into
mainfrom
ci/windows

Conversation

@martin-fleck-at

Copy link
Copy Markdown
Contributor

Baseline

  • Pin windows-2025 instead of the windows-latest alias, which advances a major Windows Server release under the workflow; a leg whose runtime and failure rate move on someone else's schedule cannot be measured against a change made here
  • Bump actions/checkout to v7.0.1 and actions/setup-node to v7.0.0 across both workflows, so neither is forced onto a Node it does not declare
  • Say what the Windows leg is actually for: child-process startup and per-file cost, alongside the path and URI divergence it already named
  • Correct the claim that setup-node ignores packageManager; it reads the field to pick a cache, and still never installs that version

Dispatch knobs

  • Add a turbo_concurrency input wired into the gate job's environment, so repeated runs of one commit can vary the cap without a commit each
  • Add a skip_e2e input, since repeating a run to measure the gate should not also repeat four minutes e2e shares nothing with
  • Leave both inert outside a dispatch: the input is empty on a push and a pull request, turbo reads empty as unset, and the e2e condition is written so only an explicit true can suppress the job

Two facts checked rather than assumed.

  • turbo does read TURBO_CONCURRENCY, an invalid value being rejected by name, and does treat an empty one as absent
  • Of the breaking changes across the three majors, the two reaching here are benign: setup-node's automatic caching converges on the cache the explicit input already selects, and its dropped dummy NODE_AUTH_TOKEN only helps a release authenticating over OIDC

@martin-fleck-at
martin-fleck-at force-pushed the ci/windows branch 4 times, most recently from 2d84768 to 2a2589d Compare September 9, 2026 11:23
Baseline
- Pin windows-2025 instead of the windows-latest alias, which advances
  a major Windows Server release under the workflow; a leg whose
  runtime and failure rate move on someone else's schedule cannot be
  measured against a change made here
- Bump actions/checkout to v7.0.1 and actions/setup-node to v7.0.0
  across both workflows, so neither is forced onto a Node it does not
  declare
- Say what the Windows leg is actually for: child-process startup and
  per-file cost, alongside the path and URI divergence it already named
- Correct the claim that setup-node ignores packageManager; it reads the
  field to pick a cache, and still never installs that version

Dispatch knobs
- Add a turbo_concurrency input wired into the gate job's environment,
  so repeated runs of one commit can vary the cap without a commit each
- Add a skip_e2e input, since repeating a run to measure the gate should
  not also repeat four minutes e2e shares nothing with
- Record what is in force rather than what was asked for: the variable
  turbo consults, and the heap ceiling V8 reports
- Report that ceiling twice, with the cap and without it. V8 derives its
  own from physical memory and these runners sit just under the 16 GB
  boundary its flag documentation names, so only the pair says whether
  the cap raises, matches or lowers what V8 would have chosen
- Record it through tee, so the figures survive in the log an API can
  read and not only in a summary a person has to open
- Record the machine beside them, because the ceiling is per process
  and turbo runs many, and no log states the cores or the memory
- Leave all of it inert outside a dispatch: the input is empty on a push
  and a pull request, turbo reads empty as unset, and the e2e condition
  is written so only an explicit true can suppress the job

Six facts checked rather than assumed.
- turbo does read TURBO_CONCURRENCY, an invalid value being rejected by
  name, and does treat an empty one as absent
- The snippet prints the cap when set and a default marker when empty,
  which is the state of every push and pull-request run
- Its node fragments survive the quoting: the backticks they emit are
  not taken as command substitution
- tee reaches both destinations, so neither copy is the only one
- The uncapped probe cannot redden the gate: with the command missing it
  prints its fallback and the block still exits zero
- The step sits after Setup Node because V8 derives its default ceiling
  from physical memory per version, so read earlier the figure would
  describe the preinstalled Node the build never runs
@martin-fleck-at
martin-fleck-at merged commit 5c4804b into main Sep 9, 2026
4 checks passed
@martin-fleck-at
martin-fleck-at deleted the ci/windows branch September 9, 2026 13:15
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.

1 participant