feat(runner): zstd installieren, damit der Actions-Cache nicht einkernig gzippt wird #12

Merged
l.kirchner merged 1 commits from feat/runner-zstd into main 2026-09-03 01:44:20 +02:00
Owner

Ein Paket in setup_base_apt, dazu die Begründung.

Warum

actions/cache — und damit auch actions/setup-go, das darauf aufsetzt —
packt seinen Cache mit zstdmt, wenn zstd vorhanden ist, und fällt sonst auf
einkerniges gzip zurück. Am Archivnamen sichtbar: cache.tzst gegen
cache.tgz.

Gemessen in l.kirchner/patchmgr, CI-Lauf 1957:

Job Runner Archiv Größe Nachlauf
make proto runner-03 cache.tgz 2138 MB 344 s
make all (stable) runner-01 cache.tgz 3411 MB 553 s
go test -race (stable) runner-02 cache.tgz 3796 MB 605 s
make all (1.24.x) runner-gpu cache.tzst 5292 MB 135 s
make diff-coverage runner-gpu cache.tzst – 162 s
make counter-check runner-gpu cache.tzst – 196 s

go test -race (stable) verbrachte 605 Sekunden mit dem Packen, bei
41 Sekunden eigentlicher Arbeit. Über alle acht Jobs des Laufs: 2312 von
3146 Sekunden im Nachlauf.

Was das nicht löst

Ob dieser Cache überhaupt gebraucht wird. Im Host-Mode mit dauerhaftem Zuhause
überleben GOMODCACHE und GOCACHE ohnehin zwischen den Jobs — patchmgr
schaltet ihn deshalb gerade ab (dortiger PR #58, gemessen 3146 s → 828 s).
Aber solange irgendein Repo der Instanz ihn nutzt, soll er nicht einkernig
komprimiert werden
, und diese Entscheidung liegt nicht bei einem einzelnen
Repo.

Eine Einschränkung, die dazugehört

Dass zstd auf den drei LXC wirklich fehlt, ist erschlossen, nicht direkt
geprüft
— der Beleg ist cache.tgz gegen cache.tzst und die Laufzeit, nicht
ein command -v zstd auf dem Container. Von luki-dev aus besteht kein
SSH-Zugang zu 10.11.20.71/.72/.73 noch zu pve-gamer. Falls zstd doch schon
liegt, ist die Zeile folgenlos: setup_base_apt ruft apt-get install auf, und
das ist auf ein vorhandenes Paket ein No-Op.

Prüfungen

bash -n, shellcheck -S error und tests/test_validation.sh (50 passed,
0 failed) — alle grün.

Ein Paket in `setup_base_apt`, dazu die Begründung. ## Warum `actions/cache` — und damit auch `actions/setup-go`, das darauf aufsetzt — packt seinen Cache mit `zstdmt`, wenn `zstd` vorhanden ist, und fällt sonst auf **einkerniges gzip** zurück. Am Archivnamen sichtbar: `cache.tzst` gegen `cache.tgz`. Gemessen in `l.kirchner/patchmgr`, CI-Lauf **1957**: | Job | Runner | Archiv | Größe | Nachlauf | |---|---|---|---|---| | `make proto` | runner-03 | `cache.tgz` | 2138 MB | 344 s | | `make all (stable)` | runner-01 | `cache.tgz` | 3411 MB | 553 s | | `go test -race (stable)` | runner-02 | `cache.tgz` | 3796 MB | **605 s** | | `make all (1.24.x)` | runner-gpu | `cache.tzst` | 5292 MB | 135 s | | `make diff-coverage` | runner-gpu | `cache.tzst` | – | 162 s | | `make counter-check` | runner-gpu | `cache.tzst` | – | 196 s | `go test -race (stable)` verbrachte **605 Sekunden** mit dem Packen, bei **41 Sekunden** eigentlicher Arbeit. Über alle acht Jobs des Laufs: 2312 von 3146 Sekunden im Nachlauf. ## Was das nicht löst Ob dieser Cache überhaupt gebraucht wird. Im Host-Mode mit dauerhaftem Zuhause überleben `GOMODCACHE` und `GOCACHE` ohnehin zwischen den Jobs — `patchmgr` schaltet ihn deshalb gerade ab (dortiger PR #58, gemessen 3146 s → 828 s). **Aber solange irgendein Repo der Instanz ihn nutzt, soll er nicht einkernig komprimiert werden**, und diese Entscheidung liegt nicht bei einem einzelnen Repo. ## Eine Einschränkung, die dazugehört **Dass `zstd` auf den drei LXC wirklich fehlt, ist erschlossen, nicht direkt geprüft** — der Beleg ist `cache.tgz` gegen `cache.tzst` und die Laufzeit, nicht ein `command -v zstd` auf dem Container. Von luki-dev aus besteht kein SSH-Zugang zu 10.11.20.71/.72/.73 noch zu `pve-gamer`. Falls `zstd` doch schon liegt, ist die Zeile folgenlos: `setup_base_apt` ruft `apt-get install` auf, und das ist auf ein vorhandenes Paket ein No-Op. ## Prüfungen `bash -n`, `shellcheck -S error` und `tests/test_validation.sh` (50 passed, 0 failed) — alle grün.
l.kirchner added 1 commit 2026-09-03 01:04:25 +02:00
feat(runner): install zstd so the actions cache is not gzipped single-threaded
CI / Shell-Lint (bash -n, source-check, Validierungs-Tests) (pull_request) Successful in 2s
dd758e6806
actions/cache -- and actions/setup-go, which builds on it -- packs its archive
with zstdmt when zstd is present and falls back to single-threaded gzip when
it is not. The archive name says which happened: cache.tzst against cache.tgz.

Measured in l.kirchner/patchmgr, CI run 1957. The cache is GOMODCACHE plus
GOCACHE and runs to 2-5 GB. runner-gpu has zstd and writes cache.tzst;
runner-01, -02 and -03 write cache.tgz, and go test -race (stable) spent 605
seconds packing it for a job with 41 seconds of work. Across all eight jobs of
that run, 2312 of 3146 seconds went into this step.

This does not settle whether the cache is wanted at all -- in host mode with a
persistent home both directories survive between jobs anyway, and patchmgr is
switching it off for that reason. But as long as any repository on the
instance uses it, it should not be compressed on one core.

zstd is a package for the post step, not for jobs, so it sits with the others
rather than in a workflow: this runner installs nothing at job time, by
design.
l.kirchner merged commit dbd215a4fb into main 2026-09-03 01:44:20 +02:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: luki-net/proxmox-scripts#12