From c43696c9a65ae754e53e4900335925d9126cfdf3 Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Fri, 26 Jan 2024 18:21:55 +0100 Subject: [PATCH] nix: Move postgrest-check-static inside derivation of static package This will make the static build fail if we're not producing a static binary. --- .github/workflows/ci.yaml | 5 ----- nix/static.nix | 18 +++++++++++++++--- nix/tools/tests.nix | 21 --------------------- 3 files changed, 15 insertions(+), 29 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index b781d2d52..4927af41d 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -134,14 +134,9 @@ jobs: - uses: actions/checkout@v4 - name: Setup Nix Environment uses: ./.github/actions/setup-nix - with: - tools: tests - cache-id: common - name: Build static executable run: nix-build -A postgrestStatic - - name: Check static executable - run: postgrest-check-static result/bin/postgrest - name: Save built executable as artifact uses: actions/upload-artifact@v4 with: diff --git a/nix/static.nix b/nix/static.nix index 0d14583d1..410ff13cf 100644 --- a/nix/static.nix +++ b/nix/static.nix @@ -46,9 +46,21 @@ let }); }); - makeExecutableStatic = drv: - lib.justStaticExecutables - (lib.appendConfigureFlag drv "--enable-executable-static"); + makeExecutableStatic = drv: pkgs.lib.pipe drv [ + (lib.compose.appendConfigureFlags [ "--enable-executable-static" ]) + lib.compose.justStaticExecutables + (lib.compose.overrideCabal (drv: { + postInstall = '' + exe="$out/bin/postgrest" + if ! (file "$exe" | grep 'statically linked') then + echo "not a static executable, ldd output:" + ldd "$exe" + exit 1 + fi + "$exe" --help + ''; + })) + ]; in { diff --git a/nix/tools/tests.nix b/nix/tools/tests.nix index a5da6f054..469208e9f 100644 --- a/nix/tools/tests.nix +++ b/nix/tools/tests.nix @@ -192,26 +192,6 @@ let sed -i 's|^module \(.*\):|module \1/|g' test/coverage.overlay ''; - checkStatic = - checkedShellScript - { - name = "postgrest-check-static"; - docs = "Verify that the argument is a static executable."; - args = [ "ARG_POSITIONAL_SINGLE([executable], [Executable])" ]; - inRootDir = true; - withEnv = postgrest.env; - } - '' - exe="$_arg_executable" - ldd_output=$(ldd "$exe" 2>&1 || true) - if ! grep -q "not a dynamic executable" <<< "$ldd_output"; then - echo "not a static executable, ldd output:" - echo "$ldd_output" - exit 1 - fi - "$exe" --help - ''; - in buildToolbox { @@ -225,6 +205,5 @@ buildToolbox dumpSchema coverage coverageDraftOverlay - checkStatic ]; }