Let the runner build locally again, just barely
max-jobs = 0 sent the fixed-output rust toolchain fetches to nixbuild, whose sandbox has no network, so they failed; it also pushed every trivial cargo-src derivation across an ssh round trip. Two local slots fix both without giving the slow runner any real compiling to do. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
8c5607c parent: fccae88 modified
.gitlab-ci.yml +8 -7 | @@ -19,12 +19,13 @@ check: | ||
| 19 | 19 | # rather than a shallow single commit. |
| 20 | 20 | GIT_DEPTH: "0" |
| 21 | 21 | before_script: |
| 22 | - # Everything heavy is offloaded to nixbuild.net; the runner only evaluates, | |
| 23 | - # copies results back and uploads. max-jobs = 0 means it refuses to build | |
| 24 | - # anything locally, so a misconfigured builder fails loudly instead of | |
| 25 | - # silently falling back to the slow runner. 16 concurrent remote jobs, not | |
| 26 | - # more: every in-flight goal costs the runner's single nix daemon an ssh-ng | |
| 27 | - # connection plus the path copy, and at 100 the daemon OOMs mid-pipeline. | |
| 22 | + # Compilation is offloaded to nixbuild.net; the runner evaluates, fetches | |
| 23 | + # and uploads. max-jobs stays small but NOT zero: at zero the runner refuses | |
| 24 | + # to build anything at all, which sends the fixed-output fetches (the rust | |
| 25 | + # toolchain tarballs) to nixbuild, where the sandbox has no network and they | |
| 26 | + # fail. Two local slots keep those fetches -- and the hundreds of trivial | |
| 27 | + # cargo-src/cargo-package derivations, each otherwise a 1.5s ssh round trip | |
| 28 | + # -- on the runner, and everything expensive still lands on the builder. | |
| 28 | 29 | - | |
| 29 | 30 | set -eu |
| 30 | 31 | mkdir -p ~/.ssh |
| @@ -37,7 +38,7 @@ check: | ||
| 37 | 38 | 'experimental-features = nix-command flakes' \ |
| 38 | 39 | 'builders = ssh-ng://eu.nixbuild.net x86_64-linux - 16 1 big-parallel,benchmark' \ |
| 39 | 40 | 'builders-use-substitutes = true' \ |
| 40 | - 'max-jobs = 0' >> /etc/nix/nix.conf | |
| 41 | + 'max-jobs = 2' >> /etc/nix/nix.conf | |
| 41 | 42 | script: |
| 42 | 43 | - nix flake check -L |
| 43 | 44 | # The store paths are read-only symlink farms; the runner uploads plain |
| @@ -19,12 +19,13 @@ check: | |||
| 19 | # rather than a shallow single commit. | 19 | # rather than a shallow single commit. |
| 20 | GIT_DEPTH: "0" | 20 | GIT_DEPTH: "0" |
| 21 | before_script: | 21 | before_script: |
| 22 | - # Everything heavy is offloaded to nixbuild.net; the runner only evaluates, | 22 | + # Compilation is offloaded to nixbuild.net; the runner evaluates, fetches |
| 23 | - # copies results back and uploads. max-jobs = 0 means it refuses to build | 23 | + # and uploads. max-jobs stays small but NOT zero: at zero the runner refuses |
| 24 | - # anything locally, so a misconfigured builder fails loudly instead of | 24 | + # to build anything at all, which sends the fixed-output fetches (the rust |
| 25 | - # silently falling back to the slow runner. 16 concurrent remote jobs, not | 25 | + # toolchain tarballs) to nixbuild, where the sandbox has no network and they |
| 26 | - # more: every in-flight goal costs the runner's single nix daemon an ssh-ng | 26 | + # fail. Two local slots keep those fetches -- and the hundreds of trivial |
| 27 | - # connection plus the path copy, and at 100 the daemon OOMs mid-pipeline. | 27 | + # cargo-src/cargo-package derivations, each otherwise a 1.5s ssh round trip |
| 28 | + # -- on the runner, and everything expensive still lands on the builder. | ||
| 28 | - | | 29 | - | |
| 29 | set -eu | 30 | set -eu |
| 30 | mkdir -p ~/.ssh | 31 | mkdir -p ~/.ssh |
| @@ -37,7 +38,7 @@ check: | |||
| 37 | 'experimental-features = nix-command flakes' \ | 38 | 'experimental-features = nix-command flakes' \ |
| 38 | 'builders = ssh-ng://eu.nixbuild.net x86_64-linux - 16 1 big-parallel,benchmark' \ | 39 | 'builders = ssh-ng://eu.nixbuild.net x86_64-linux - 16 1 big-parallel,benchmark' \ |
| 39 | 'builders-use-substitutes = true' \ | 40 | 'builders-use-substitutes = true' \ |
| 40 | - 'max-jobs = 0' >> /etc/nix/nix.conf | 41 | + 'max-jobs = 2' >> /etc/nix/nix.conf |
| 41 | script: | 42 | script: |
| 42 | - nix flake check -L | 43 | - nix flake check -L |
| 43 | # The store paths are read-only symlink farms; the runner uploads plain | 44 | # The store paths are read-only symlink farms; the runner uploads plain |