From ee4567696ae7c819df3d3976f52e41d30d9de7a2 Mon Sep 17 00:00:00 2001 From: 4gray Date: Fri, 17 Jul 2026 22:56:47 +0200 Subject: [PATCH] fix(ci): declare fontconfig gperf generator --- .github/workflows/build-and-make.yaml | 3 ++- tools/embedded-mpv/README.md | 3 ++- tools/embedded-mpv/build-linux-runtime.cjs | 2 ++ tools/embedded-mpv/build-linux-runtime.mjs | 1 + tools/embedded-mpv/build-linux-runtime.test.mjs | 3 +++ .../configure-linux-frame-copy-build.test.mjs | 12 ++++++++++++ 6 files changed, 22 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-and-make.yaml b/.github/workflows/build-and-make.yaml index dbe1744c4..424e4c763 100644 --- a/.github/workflows/build-and-make.yaml +++ b/.github/workflows/build-and-make.yaml @@ -35,7 +35,7 @@ jobs: sudo apt-get update { apt-cache policy \ - binutils build-essential cmake curl git \ + binutils build-essential cmake curl git gperf \ libasound2-dev libdrm-dev libegl-dev libgbm-dev \ libgl-dev libpulse-dev libva-dev make nasm \ ninja-build patchelf perl pkg-config python3-pip \ @@ -70,6 +70,7 @@ jobs: cmake \ curl \ git \ + gperf \ libasound2-dev \ libdrm-dev \ libegl-dev \ diff --git a/tools/embedded-mpv/README.md b/tools/embedded-mpv/README.md index 46b6c89c9..a15e6e264 100644 --- a/tools/embedded-mpv/README.md +++ b/tools/embedded-mpv/README.md @@ -84,7 +84,8 @@ pnpm embedded-mpv:stage-runtime -- linux x64 /tmp/linux-prefix The Linux builder runs only on Linux x64. It requires the tool versions and system development interfaces declared in `build-linux-runtime.cjs`, including -Meson 1.6 or newer, Ninja, CMake, NASM, pkg-config, patchelf, and `readelf`. +Meson 1.6 or newer, gperf 3.1 or newer, Ninja, CMake, NASM, pkg-config, +patchelf, and `readelf`. It builds into an owned staging directory and publishes atomically, so it will not delete or overwrite an arbitrary destination. diff --git a/tools/embedded-mpv/build-linux-runtime.cjs b/tools/embedded-mpv/build-linux-runtime.cjs index dc1a4a6f2..860a9a874 100644 --- a/tools/embedded-mpv/build-linux-runtime.cjs +++ b/tools/embedded-mpv/build-linux-runtime.cjs @@ -427,6 +427,7 @@ const REQUIRED_TOOLS = Object.freeze([ 'cmake', 'curl', 'git', + 'gperf', 'make', 'meson', 'nasm', @@ -444,6 +445,7 @@ const MINIMUM_TOOL_VERSIONS = Object.freeze({ cmake: '3.16.0', curl: '7.71.0', git: '2.30.0', + gperf: '3.1.0', make: '4.0.0', meson: '1.6.0', nasm: '2.15.05', diff --git a/tools/embedded-mpv/build-linux-runtime.mjs b/tools/embedded-mpv/build-linux-runtime.mjs index a761bbbd0..215b8a399 100644 --- a/tools/embedded-mpv/build-linux-runtime.mjs +++ b/tools/embedded-mpv/build-linux-runtime.mjs @@ -699,6 +699,7 @@ function collectToolVersions(context) { cmake: ['--version'], curl: ['--version'], git: ['--version'], + gperf: ['--version'], make: ['--version'], meson: ['--version'], nasm: ['-v'], diff --git a/tools/embedded-mpv/build-linux-runtime.test.mjs b/tools/embedded-mpv/build-linux-runtime.test.mjs index 0ea7dc064..af0f1aac4 100644 --- a/tools/embedded-mpv/build-linux-runtime.test.mjs +++ b/tools/embedded-mpv/build-linux-runtime.test.mjs @@ -705,6 +705,7 @@ test('requires ELF patching and inspection tools in addition to the build toolch 'cmake', 'curl', 'git', + 'gperf', 'make', 'meson', 'nasm', @@ -725,6 +726,7 @@ test('preflights every required tool against a supported minimum version', () => ); assert.equal(MINIMUM_TOOL_VERSIONS.meson, '1.6.0'); assert.equal(MINIMUM_TOOL_VERSIONS.nasm, '2.15.05'); + assert.equal(MINIMUM_TOOL_VERSIONS.gperf, '3.1.0'); const supportedVersions = Object.fromEntries( REQUIRED_TOOLS.map((tool) => [ @@ -742,6 +744,7 @@ test('preflights every required tool against a supported minimum version', () => ); for (const [tool, oldVersion] of [ + ['gperf', 'GNU gperf 3.0.4'], ['meson', 'meson 1.5.9'], ['nasm', 'NASM version 2.15.04'], ]) { diff --git a/tools/packaging/configure-linux-frame-copy-build.test.mjs b/tools/packaging/configure-linux-frame-copy-build.test.mjs index d40f64bb2..6b9e7164c 100644 --- a/tools/packaging/configure-linux-frame-copy-build.test.mjs +++ b/tools/packaging/configure-linux-frame-copy-build.test.mjs @@ -273,6 +273,18 @@ test('Linux CI builds one cached source runtime and packages three isolated prof assert.match(buildWorkflow, /sourceSha256[\s\S]*source-index\.json/); }); +test('Linux runtime toolchain installs fontconfig generators without network wraps', () => { + const cacheKeyStep = workflowStep( + 'Resolve Linux runtime toolchain cache key' + ); + const installStep = workflowStep( + 'Install pinned Linux runtime build dependencies' + ); + + assert.match(cacheKeyStep, /\bapt-cache policy[\s\S]*\bgperf\b/); + assert.match(installStep, /^\s+gperf\s+\\$/m); +}); + test('Linux CI verifies every package family and exercises intended environments', () => { for (const suffix of [ 'AppImage',