nandi/jolt-nativepublic Fork 0
33a5195
Commits
Clone
git clone https://git.rickub.com/nandi/jolt-native.git
git clone ssh://git@rickub.com/nandi/jolt-native.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

Give CI a realistic timeout and real local parallelism

The cold pipeline hit GitLab's default 1h wall while still vendoring, so
raise it to 3h. max-jobs goes from 2 to nproc: crane emits a per-crate
derivation for each of ~800 crates, and trickling those through two
slots (or dispatching them, at a serial ~1.5s ssh round trip each) is
most of the wall clock.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
nandi committed 2026-09-07T21:01:46-07:00 Browse files
33a5195 parent: 8c5607c
modified .gitlab-ci.yml +11 -7
@@ -14,18 +14,22 @@ stages: [check]
1414 check:
1515 stage: check
1616 image: nixos/nix:latest
17+ # A cold run has to vendor ~800 crates and compile the workspace; the default
18+ # hour is not enough for that even with the builder doing the compiling.
19+ timeout: 3h
1720 variables:
1821 # The flake is fetched from the checkout, so the runner needs the git tree
1922 # rather than a shallow single commit.
2023 GIT_DEPTH: "0"
2124 before_script:
2225 # 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.
26+ # and uploads. max-jobs must not be zero: at zero the runner refuses to
27+ # build anything at all, which sends the fixed-output fetches (the rust
28+ # toolchain tarballs, every crate source) to nixbuild, where the build
29+ # sandbox has no network and they can only fail. Giving it nproc keeps
30+ # those fetches and crane's hundreds of trivial cargo-src/cargo-package
31+ # derivations local and parallel -- each one costs a serial ~1.5s ssh
32+ # round trip if dispatched -- while the expensive builds still go remote.
2933 - |
3034 set -eu
3135 mkdir -p ~/.ssh
@@ -38,7 +42,7 @@ check:
3842 'experimental-features = nix-command flakes' \
3943 'builders = ssh-ng://eu.nixbuild.net x86_64-linux - 16 1 big-parallel,benchmark' \
4044 'builders-use-substitutes = true' \
41- 'max-jobs = 2' >> /etc/nix/nix.conf
45+ "max-jobs = $(nproc)" >> /etc/nix/nix.conf
4246 script:
4347 - nix flake check -L
4448 # The store paths are read-only symlink farms; the runner uploads plain
@@ -14,18 +14,22 @@ stages: [check]
14 check:14 check:
15 stage: check15 stage: check
16 image: nixos/nix:latest16 image: nixos/nix:latest
17+ # A cold run has to vendor ~800 crates and compile the workspace; the default
18+ # hour is not enough for that even with the builder doing the compiling.
19+ timeout: 3h
17 variables:20 variables:
18 # The flake is fetched from the checkout, so the runner needs the git tree21 # The flake is fetched from the checkout, so the runner needs the git tree
19 # rather than a shallow single commit.22 # rather than a shallow single commit.
20 GIT_DEPTH: "0"23 GIT_DEPTH: "0"
21 before_script:24 before_script:
22 # Compilation is offloaded to nixbuild.net; the runner evaluates, fetches25 # Compilation is offloaded to nixbuild.net; the runner evaluates, fetches
23- # and uploads. max-jobs stays small but NOT zero: at zero the runner refuses26+ # and uploads. max-jobs must not be zero: at zero the runner refuses to
24- # to build anything at all, which sends the fixed-output fetches (the rust27+ # build anything at all, which sends the fixed-output fetches (the rust
25- # toolchain tarballs) to nixbuild, where the sandbox has no network and they28+ # toolchain tarballs, every crate source) to nixbuild, where the build
26- # fail. Two local slots keep those fetches -- and the hundreds of trivial29+ # sandbox has no network and they can only fail. Giving it nproc keeps
27- # cargo-src/cargo-package derivations, each otherwise a 1.5s ssh round trip30+ # those fetches and crane's hundreds of trivial cargo-src/cargo-package
28- # -- on the runner, and everything expensive still lands on the builder.31+ # derivations local and parallel -- each one costs a serial ~1.5s ssh
32+ # round trip if dispatched -- while the expensive builds still go remote.
29 - |33 - |
30 set -eu34 set -eu
31 mkdir -p ~/.ssh35 mkdir -p ~/.ssh
@@ -38,7 +42,7 @@ check:
38 'experimental-features = nix-command flakes' \42 'experimental-features = nix-command flakes' \
39 'builders = ssh-ng://eu.nixbuild.net x86_64-linux - 16 1 big-parallel,benchmark' \43 'builders = ssh-ng://eu.nixbuild.net x86_64-linux - 16 1 big-parallel,benchmark' \
40 'builders-use-substitutes = true' \44 'builders-use-substitutes = true' \
41- 'max-jobs = 2' >> /etc/nix/nix.conf45+ "max-jobs = $(nproc)" >> /etc/nix/nix.conf
42 script:46 script:
43 - nix flake check -L47 - nix flake check -L
44 # The store paths are read-only symlink farms; the runner uploads plain48 # The store paths are read-only symlink farms; the runner uploads plain