fix(nix): avoid CI stack overflow by using builtins.split

- Replace builtins.match with builtins.split for version extraction
- Previous regex with .* patterns caused catastrophic backtracking on large files (~2800 lines)
- builtins.split avoids full-string regex matching and is more efficient

Fixes: Nix build CI failure
This commit is contained in:
Martin Wimpress 2026-01-25 14:11:38 +00:00 committed by Martin Wimpress
parent dd39102ef9
commit dead42dc25
1 changed files with 7 additions and 6 deletions

View File

@ -60,15 +60,16 @@ let
usbutils usbutils
xdg-user-dirs xdg-user-dirs
]; ];
versionMatches = builtins.match '' # Extract version using builtins.split to avoid regex backtracking on large files.
.* # builtins.match with .* patterns on multi-kilobyte files can cause stack overflow.
readonly[[:blank:]]VERSION="([[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+)" versionParts = builtins.split "readonly VERSION=\"([0-9]+\\.[0-9]+\\.[0-9]+)\"" (
.* builtins.readFile ./quickemu
'' (builtins.readFile ./quickemu); );
version = builtins.elemAt (builtins.elemAt versionParts 1) 0;
in in
stdenv.mkDerivation (finalAttrs: { stdenv.mkDerivation (finalAttrs: {
pname = "quickemu"; pname = "quickemu";
version = builtins.concatStringsSep "" versionMatches; version = version;
src = lib.cleanSource ./.; src = lib.cleanSource ./.;
postPatch = '' postPatch = ''