diff --git a/.github/workflows/publish-nix-pgupgrade-bin-flake-version.yml b/.github/workflows/publish-nix-pgupgrade-bin-flake-version.yml index 7a8a45e000..be42adba7a 100644 --- a/.github/workflows/publish-nix-pgupgrade-bin-flake-version.yml +++ b/.github/workflows/publish-nix-pgupgrade-bin-flake-version.yml @@ -51,7 +51,7 @@ jobs: if [[ "${{ inputs.postgresVersion }}" != "" ]]; then VERSION="${{ inputs.postgresVersion }}" else - VERSION=$(nix run nixpkgs#yq -- '.postgres_release["postgres'${{ matrix.postgres_version }}'"]' ansible/vars.yml) + VERSION=$(nix run nixpkgs#yq -- -r '.postgres_release["postgres'${{ matrix.postgres_version }}'"]' ansible/vars.yml) fi echo "version=$VERSION" >> "$GITHUB_OUTPUT" echo "major_version=$(echo $VERSION | cut -d'.' -f1)" >> "$GITHUB_OUTPUT" diff --git a/ansible/vars.yml b/ansible/vars.yml index e76f8d3e7f..394fa1c138 100644 --- a/ansible/vars.yml +++ b/ansible/vars.yml @@ -10,9 +10,9 @@ postgres_major: # Full version strings for each major version postgres_release: - postgresorioledb-17: "17.6.0.036-orioledb" - postgres17: "17.6.1.079" - postgres15: "15.14.1.079" + postgresorioledb-17: "17.6.0.036-orioledb-slim-1" + postgres17: "17.6.1.079-slim-1" + postgres15: "15.14.1.079-slim-1" # Non Postgres Extensions pgbouncer_release: 1.25.1 diff --git a/nix/ext/hypopg.nix b/nix/ext/hypopg.nix index 92784a8de5..b3e880a1b6 100644 --- a/nix/ext/hypopg.nix +++ b/nix/ext/hypopg.nix @@ -4,6 +4,7 @@ buildEnv, fetchFromGitHub, postgresql, + latestOnly ? false, }: let @@ -14,7 +15,13 @@ let ) allVersions; versions = lib.naturalSort (lib.attrNames supportedVersions); latestVersion = lib.last versions; - numberOfVersions = builtins.length versions; + versionsToUse = + if latestOnly then + { "${latestVersion}" = supportedVersions.${latestVersion}; } + else + supportedVersions; + versionsBuilt = if latestOnly then [ latestVersion ] else versions; + numberOfVersionsBuilt = builtins.length versionsBuilt; build = version: hash: stdenv.mkDerivation rec { @@ -66,9 +73,7 @@ let inherit (postgresql.meta) platforms; }; }; - packages = builtins.attrValues ( - lib.mapAttrs (name: value: build name value.hash) supportedVersions - ); + packages = builtins.attrValues (lib.mapAttrs (name: value: build name value.hash) versionsToUse); in buildEnv { name = pname; @@ -81,14 +86,19 @@ buildEnv { # checks (set -x test "$(ls -A $out/lib/${pname}*${postgresql.dlSuffix} | wc -l)" = "${ - toString (numberOfVersions + 1) + toString (numberOfVersionsBuilt + 1) }" ) ''; passthru = { - inherit versions numberOfVersions pname; + versions = versionsBuilt; + numberOfVersions = numberOfVersionsBuilt; + inherit pname latestOnly; version = - "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); + if latestOnly then + latestVersion + else + "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); }; } diff --git a/nix/ext/index_advisor.nix b/nix/ext/index_advisor.nix index 85a23bfd04..3130d4bcc2 100644 --- a/nix/ext/index_advisor.nix +++ b/nix/ext/index_advisor.nix @@ -5,6 +5,7 @@ fetchFromGitHub, postgresql, callPackage, + latestOnly ? false, }: let @@ -15,7 +16,13 @@ let ) allVersions; versions = lib.naturalSort (lib.attrNames supportedVersions); latestVersion = lib.last versions; - numberOfVersions = builtins.length versions; + versionsToUse = + if latestOnly then + { "${latestVersion}" = supportedVersions.${latestVersion}; } + else + supportedVersions; + versionsBuilt = if latestOnly then [ latestVersion ] else versions; + numberOfVersionsBuilt = builtins.length versionsBuilt; build = version: hash: stdenv.mkDerivation rec { @@ -64,9 +71,7 @@ let inherit (postgresql.meta) platforms; }; }; - packages = builtins.attrValues ( - lib.mapAttrs (name: value: build name value.hash) supportedVersions - ); + packages = builtins.attrValues (lib.mapAttrs (name: value: build name value.hash) versionsToUse); in pkgs.buildEnv { name = pname; @@ -78,8 +83,13 @@ pkgs.buildEnv { ]; passthru = { - inherit versions numberOfVersions pname; + versions = versionsBuilt; + numberOfVersions = numberOfVersionsBuilt; + inherit pname latestOnly; version = - "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); + if latestOnly then + latestVersion + else + "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); }; } diff --git a/nix/ext/pg-safeupdate.nix b/nix/ext/pg-safeupdate.nix index ee31f4371d..97921c9c6c 100644 --- a/nix/ext/pg-safeupdate.nix +++ b/nix/ext/pg-safeupdate.nix @@ -5,6 +5,7 @@ fetchFromGitHub, postgresql, makeWrapper, + latestOnly ? false, }: let @@ -49,10 +50,14 @@ let ) allVersions; versions = lib.naturalSort (lib.attrNames supportedVersions); latestVersion = lib.last versions; - numberOfVersions = builtins.length versions; - packages = builtins.attrValues ( - lib.mapAttrs (name: value: build name value.hash) supportedVersions - ); + versionsToUse = + if latestOnly then + { "${latestVersion}" = supportedVersions.${latestVersion}; } + else + supportedVersions; + versionsBuilt = if latestOnly then [ latestVersion ] else versions; + numberOfVersionsBuilt = builtins.length versionsBuilt; + packages = builtins.attrValues (lib.mapAttrs (name: value: build name value.hash) versionsToUse); in pkgs.buildEnv { name = pname; @@ -68,18 +73,23 @@ pkgs.buildEnv { # checks (set -x test "$(ls -A $out/lib/${pname}*${postgresql.dlSuffix} | wc -l)" = "${ - toString (numberOfVersions + 1) + toString (numberOfVersionsBuilt + 1) }" ) ''; passthru = { - inherit versions numberOfVersions pname; + versions = versionsBuilt; + numberOfVersions = numberOfVersionsBuilt; + inherit pname latestOnly; defaultSettings = { shared_preload_libraries = [ "safeupdate" ]; }; pgRegressTestName = "pg-safeupdate"; version = - "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); + if latestOnly then + latestVersion + else + "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); }; } diff --git a/nix/ext/pg_cron/default.nix b/nix/ext/pg_cron/default.nix index cec9d8ec4b..a823fa450b 100644 --- a/nix/ext/pg_cron/default.nix +++ b/nix/ext/pg_cron/default.nix @@ -6,6 +6,7 @@ buildEnv, makeWrapper, switch-ext-version, + latestOnly ? false, }: let pname = "pg_cron"; @@ -15,7 +16,13 @@ let ) allVersions; versions = lib.naturalSort (lib.attrNames supportedVersions); latestVersion = lib.last versions; - numberOfVersions = builtins.length versions; + versionsToUse = + if latestOnly then + { "${latestVersion}" = supportedVersions.${latestVersion}; } + else + supportedVersions; + versionsBuilt = if latestOnly then [ latestVersion ] else versions; + numberOfVersionsBuilt = builtins.length versionsBuilt; build = version: versionData: stdenv.mkDerivation rec { @@ -71,7 +78,7 @@ let license = licenses.postgresql; }; }; - packages = builtins.attrValues (lib.mapAttrs (name: value: build name value) supportedVersions); + packages = builtins.attrValues (lib.mapAttrs (name: value: build name value) versionsToUse); in buildEnv { name = pname; @@ -93,7 +100,7 @@ buildEnv { # checks (set -x test "$(ls -A $out/lib/${pname}*${postgresql.dlSuffix} | wc -l)" = "${ - toString (numberOfVersions + 1) + toString (numberOfVersionsBuilt + 1) }" ) @@ -109,13 +116,18 @@ buildEnv { }; passthru = { - inherit versions numberOfVersions switch-ext-version; + versions = versionsBuilt; + numberOfVersions = numberOfVersionsBuilt; + inherit switch-ext-version latestOnly; hasBackgroundWorker = true; defaultSettings = { shared_preload_libraries = [ "pg_cron" ]; "cron.database_name" = "postgres"; }; version = - "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); + if latestOnly then + latestVersion + else + "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); }; } diff --git a/nix/ext/pg_graphql/default.nix b/nix/ext/pg_graphql/default.nix index a7f6d1065a..11ea156dc5 100644 --- a/nix/ext/pg_graphql/default.nix +++ b/nix/ext/pg_graphql/default.nix @@ -7,6 +7,7 @@ postgresql, rust-bin, rsync, + latestOnly ? false, }: let @@ -124,9 +125,15 @@ let ) allVersions; versions = lib.naturalSort (lib.attrNames supportedVersions); latestVersion = lib.last versions; - numberOfVersions = builtins.length versions; + versionsToUse = + if latestOnly then + { "${latestVersion}" = supportedVersions.${latestVersion}; } + else + supportedVersions; + versionsBuilt = if latestOnly then [ latestVersion ] else versions; + numberOfVersionsBuilt = builtins.length versionsBuilt; packages = builtins.attrValues ( - lib.mapAttrs (name: value: build name value.hash value.rust value.pgrx) supportedVersions + lib.mapAttrs (name: value: build name value.hash value.rust value.pgrx) versionsToUse ); in (buildEnv { @@ -167,14 +174,19 @@ in # checks (set -x test "$(ls -A $out/lib/${pname}*${postgresql.dlSuffix} | wc -l)" = "${ - toString (numberOfVersions + 1) + toString (numberOfVersionsBuilt + 1) }" ) ''; passthru = { - inherit versions numberOfVersions pname; + versions = versionsBuilt; + numberOfVersions = numberOfVersionsBuilt; + inherit pname latestOnly; version = - "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); + if latestOnly then + latestVersion + else + "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); }; }).overrideAttrs (_: { diff --git a/nix/ext/pg_hashids.nix b/nix/ext/pg_hashids.nix index b11c5ce685..c8fc3fef55 100644 --- a/nix/ext/pg_hashids.nix +++ b/nix/ext/pg_hashids.nix @@ -4,6 +4,7 @@ fetchFromGitHub, postgresql, buildEnv, + latestOnly ? false, }: let pname = "pg_hashids"; @@ -71,9 +72,15 @@ let ) allVersions; versions = lib.naturalSort (lib.attrNames supportedVersions); latestVersion = lib.last versions; - numberOfVersions = builtins.length versions; + versionsToUse = + if latestOnly then + { "${latestVersion}" = supportedVersions.${latestVersion}; } + else + supportedVersions; + versionsBuilt = if latestOnly then [ latestVersion ] else versions; + numberOfVersionsBuilt = builtins.length versionsBuilt; packages = builtins.attrValues ( - lib.mapAttrs (name: value: build name value.hash (value.revision or name)) supportedVersions + lib.mapAttrs (name: value: build name value.hash (value.revision or name)) versionsToUse ); in buildEnv { @@ -87,14 +94,19 @@ buildEnv { # checks (set -x test "$(ls -A $out/lib/${pname}*${postgresql.dlSuffix} | wc -l)" = "${ - toString (numberOfVersions + 1) + toString (numberOfVersionsBuilt + 1) }" ) ''; passthru = { - inherit versions numberOfVersions pname; + versions = versionsBuilt; + numberOfVersions = numberOfVersionsBuilt; + inherit pname latestOnly; version = - "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); + if latestOnly then + latestVersion + else + "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); }; } diff --git a/nix/ext/pg_jsonschema/default.nix b/nix/ext/pg_jsonschema/default.nix index d3a72036f9..4ec4f97a97 100644 --- a/nix/ext/pg_jsonschema/default.nix +++ b/nix/ext/pg_jsonschema/default.nix @@ -6,6 +6,7 @@ fetchFromGitHub, postgresql, rust-bin, + latestOnly ? false, }: let pname = "pg_jsonschema"; @@ -131,10 +132,16 @@ let ) allVersions; versions = lib.naturalSort (lib.attrNames supportedVersions); latestVersion = lib.last versions; - numberOfVersions = builtins.length versions; + versionsToUse = + if latestOnly then + { "${latestVersion}" = supportedVersions.${latestVersion}; } + else + supportedVersions; packages = builtins.attrValues ( - lib.mapAttrs (name: value: build name value.hash value.rust value.pgrx) supportedVersions + lib.mapAttrs (name: value: build name value.hash value.rust value.pgrx) versionsToUse ); + versionsBuilt = if latestOnly then [ latestVersion ] else versions; + numberOfVersionsBuilt = builtins.length versionsBuilt; in (pkgs.buildEnv { name = pname; @@ -147,7 +154,7 @@ in # checks (set -x test "$(ls -A $out/lib/${pname}*${postgresql.dlSuffix} | wc -l)" = "${ - toString (numberOfVersions + 1) + toString (numberOfVersionsBuilt + 1) }" ) @@ -171,9 +178,14 @@ in ''; passthru = { - inherit versions numberOfVersions pname; + versions = versionsBuilt; + numberOfVersions = numberOfVersionsBuilt; + inherit pname latestOnly; version = - "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); + if latestOnly then + latestVersion + else + "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); }; }).overrideAttrs (_: { diff --git a/nix/ext/pg_net.nix b/nix/ext/pg_net.nix index 60304138d6..09692b6ac2 100644 --- a/nix/ext/pg_net.nix +++ b/nix/ext/pg_net.nix @@ -8,6 +8,7 @@ makeWrapper, switch-ext-version, curl_8_6, + latestOnly ? false, }: let @@ -98,15 +99,23 @@ let ) platformFilteredVersions; versions = lib.naturalSort (lib.attrNames supportedVersions); latestVersion = lib.last versions; - numberOfVersions = builtins.length versions; - packages = builtins.attrValues ( - lib.mapAttrs (name: value: build name value.hash) supportedVersions - ); + versionsToUse = + if latestOnly then + { "${latestVersion}" = supportedVersions.${latestVersion}; } + else + supportedVersions; + packages = builtins.attrValues (lib.mapAttrs (name: value: build name value.hash) versionsToUse); + versionsBuilt = if latestOnly then [ latestVersion ] else versions; + numberOfVersionsBuilt = builtins.length versionsBuilt; in pkgs.buildEnv { name = pname; paths = packages; nativeBuildInputs = [ makeWrapper ]; + pathsToLink = [ + "/lib" + "/share/postgresql/extension" + ]; postBuild = '' { echo "default_version = '${latestVersion}'" @@ -118,7 +127,7 @@ pkgs.buildEnv { # checks (set -x test "$(ls -A $out/lib/${pname}*${postgresql.dlSuffix} | wc -l)" = "${ - toString (numberOfVersions + 1) + toString (numberOfVersionsBuilt + 1) }" ) @@ -127,12 +136,17 @@ pkgs.buildEnv { ''; passthru = { - inherit versions numberOfVersions pname; + versions = versionsBuilt; + numberOfVersions = numberOfVersionsBuilt; + inherit pname latestOnly; hasBackgroundWorker = true; defaultSettings = { shared_preload_libraries = [ "pg_net" ]; }; version = - "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); + if latestOnly then + latestVersion + else + "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); }; } diff --git a/nix/ext/pg_partman.nix b/nix/ext/pg_partman.nix index 809861d52c..4c36e765fc 100644 --- a/nix/ext/pg_partman.nix +++ b/nix/ext/pg_partman.nix @@ -6,6 +6,7 @@ postgresql, makeWrapper, switch-ext-version, + latestOnly ? false, }: let @@ -60,10 +61,14 @@ let ) allVersions; versions = lib.naturalSort (lib.attrNames supportedVersions); latestVersion = lib.last versions; - numberOfVersions = builtins.length versions; - packages = builtins.attrValues ( - lib.mapAttrs (name: value: build name value.hash) supportedVersions - ); + versionsToUse = + if latestOnly then + { "${latestVersion}" = supportedVersions.${latestVersion}; } + else + supportedVersions; + versionsBuilt = if latestOnly then [ latestVersion ] else versions; + numberOfVersionsBuilt = builtins.length versionsBuilt; + packages = builtins.attrValues (lib.mapAttrs (name: value: build name value.hash) versionsToUse); in pkgs.buildEnv { name = pname; @@ -86,7 +91,7 @@ pkgs.buildEnv { # checks (set -x test "$(ls -A $out/lib/${pname}*${postgresql.dlSuffix} | wc -l)" = "${ - toString (numberOfVersions + 1) + toString (numberOfVersionsBuilt + 1) }" ) @@ -95,12 +100,9 @@ pkgs.buildEnv { ''; passthru = { - inherit - versions - numberOfVersions - switch-ext-version - libName - ; + versions = versionsBuilt; + numberOfVersions = numberOfVersionsBuilt; + inherit switch-ext-version libName latestOnly; pname = "${pname}-all"; hasBackgroundWorker = true; defaultSchema = "partman"; @@ -108,6 +110,9 @@ pkgs.buildEnv { shared_preload_libraries = [ libName ]; }; version = - "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); + if latestOnly then + latestVersion + else + "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); }; } diff --git a/nix/ext/pg_plan_filter.nix b/nix/ext/pg_plan_filter.nix index dfb3262b7d..402f6b1924 100644 --- a/nix/ext/pg_plan_filter.nix +++ b/nix/ext/pg_plan_filter.nix @@ -5,6 +5,7 @@ fetchFromGitHub, postgresql, makeWrapper, + latestOnly ? false, }: let @@ -50,9 +51,15 @@ let ) allVersions; versions = lib.naturalSort (lib.attrNames supportedVersions); latestVersion = lib.last versions; - numberOfVersions = builtins.length versions; + versionsToUse = + if latestOnly then + { "${latestVersion}" = supportedVersions.${latestVersion}; } + else + supportedVersions; + versionsBuilt = if latestOnly then [ latestVersion ] else versions; + numberOfVersionsBuilt = builtins.length versionsBuilt; packages = builtins.attrValues ( - lib.mapAttrs (name: value: build name value.rev value.hash) supportedVersions + lib.mapAttrs (name: value: build name value.rev value.hash) versionsToUse ); in pkgs.buildEnv { @@ -69,18 +76,23 @@ pkgs.buildEnv { # checks (set -x test "$(ls -A $out/lib/${pname}*${postgresql.dlSuffix} | wc -l)" = "${ - toString (numberOfVersions + 1) + toString (numberOfVersionsBuilt + 1) }" ) ''; passthru = { - inherit versions numberOfVersions pname; + versions = versionsBuilt; + numberOfVersions = numberOfVersionsBuilt; + inherit pname latestOnly; defaultSettings = { shared_preload_libraries = [ "plan_filter" ]; }; pgRegressTestName = "pg_plan_filter"; version = - "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); + if latestOnly then + latestVersion + else + "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); }; } diff --git a/nix/ext/pg_repack.nix b/nix/ext/pg_repack.nix index 153cebd762..89b1d11182 100644 --- a/nix/ext/pg_repack.nix +++ b/nix/ext/pg_repack.nix @@ -6,6 +6,7 @@ postgresqlTestHook, testers, buildEnv, + latestOnly ? false, }: let pname = "pg_repack"; @@ -21,10 +22,14 @@ let # Derived version information versions = lib.naturalSort (lib.attrNames supportedVersions); latestVersion = lib.last versions; - numberOfVersions = builtins.length versions; - packages = builtins.attrValues ( - lib.mapAttrs (name: value: build name value.hash) supportedVersions - ); + versionsToUse = + if latestOnly then + { "${latestVersion}" = supportedVersions.${latestVersion}; } + else + supportedVersions; + versionsBuilt = if latestOnly then [ latestVersion ] else versions; + numberOfVersionsBuilt = builtins.length versionsBuilt; + packages = builtins.attrValues (lib.mapAttrs (name: value: build name value.hash) versionsToUse); # Build function for individual versions build = @@ -117,7 +122,7 @@ buildEnv { postBuild = '' # Verify all expected library files are present - expectedFiles=${toString (numberOfVersions + 1)} + expectedFiles=${toString (numberOfVersionsBuilt + 1)} actualFiles=$(ls -l $out/lib/${pname}*${postgresql.dlSuffix} | wc -l) if [[ "$actualFiles" != "$expectedFiles" ]]; then @@ -129,8 +134,13 @@ buildEnv { ''; passthru = { - inherit versions numberOfVersions pname; + versions = versionsBuilt; + numberOfVersions = numberOfVersionsBuilt; + inherit pname latestOnly; version = - "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); + if latestOnly then + latestVersion + else + "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); }; } diff --git a/nix/ext/pg_stat_monitor.nix b/nix/ext/pg_stat_monitor.nix index ddf46de306..c82eaf8301 100644 --- a/nix/ext/pg_stat_monitor.nix +++ b/nix/ext/pg_stat_monitor.nix @@ -4,6 +4,7 @@ fetchFromGitHub, postgresql, buildEnv, + latestOnly ? false, }: let pname = "pg_stat_monitor"; @@ -19,9 +20,15 @@ let # Derived version information versions = lib.naturalSort (lib.attrNames supportedVersions); latestVersion = lib.last versions; - numberOfVersions = builtins.length versions; + versionsToUse = + if latestOnly then + { "${latestVersion}" = supportedVersions.${latestVersion}; } + else + supportedVersions; + versionsBuilt = if latestOnly then [ latestVersion ] else versions; + numberOfVersionsBuilt = builtins.length versionsBuilt; packages = builtins.attrValues ( - lib.mapAttrs (name: value: build name value.hash value.revision) supportedVersions + lib.mapAttrs (name: value: build name value.hash value.revision) versionsToUse ); # Build function for individual versions @@ -85,7 +92,7 @@ buildEnv { postBuild = '' # Verify all expected library files are present - expectedFiles=${toString (numberOfVersions + 1)} + expectedFiles=${toString (numberOfVersionsBuilt + 1)} actualFiles=$(ls -l $out/lib/${pname}*${postgresql.dlSuffix} | wc -l) if [[ "$actualFiles" != "$expectedFiles" ]]; then @@ -97,8 +104,13 @@ buildEnv { ''; passthru = { - inherit versions numberOfVersions pname; + versions = versionsBuilt; + numberOfVersions = numberOfVersionsBuilt; + inherit pname latestOnly; version = - "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); + if latestOnly then + latestVersion + else + "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); }; } diff --git a/nix/ext/pg_tle.nix b/nix/ext/pg_tle.nix index 7101952a2b..d5d1e44464 100644 --- a/nix/ext/pg_tle.nix +++ b/nix/ext/pg_tle.nix @@ -7,6 +7,7 @@ flex, openssl, libkrb5, + latestOnly ? false, }: let pname = "pg_tle"; @@ -78,10 +79,14 @@ let ) allVersions; versions = lib.naturalSort (lib.attrNames supportedVersions); latestVersion = lib.last versions; - numberOfVersions = builtins.length versions; - packages = builtins.attrValues ( - lib.mapAttrs (name: value: build name value.hash) supportedVersions - ); + versionsToUse = + if latestOnly then + { "${latestVersion}" = supportedVersions.${latestVersion}; } + else + supportedVersions; + versionsBuilt = if latestOnly then [ latestVersion ] else versions; + numberOfVersionsBuilt = builtins.length versionsBuilt; + packages = builtins.attrValues (lib.mapAttrs (name: value: build name value.hash) versionsToUse); in buildEnv { name = pname; @@ -94,17 +99,22 @@ buildEnv { # checks (set -x test "$(ls -A $out/lib/${pname}*${postgresql.dlSuffix} | wc -l)" = "${ - toString (numberOfVersions + 1) + toString (numberOfVersionsBuilt + 1) }" ) ''; passthru = { - inherit versions numberOfVersions pname; + versions = versionsBuilt; + numberOfVersions = numberOfVersionsBuilt; + inherit pname latestOnly; defaultSettings = { shared_preload_libraries = [ "pg_tle" ]; }; version = - "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); + if latestOnly then + latestVersion + else + "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); }; } diff --git a/nix/ext/pgaudit.nix b/nix/ext/pgaudit.nix index 55dd237f7c..06e4bca40d 100644 --- a/nix/ext/pgaudit.nix +++ b/nix/ext/pgaudit.nix @@ -6,6 +6,7 @@ libkrb5, openssl, postgresql, + latestOnly ? false, }: #adapted from https://github.com/NixOS/nixpkgs/blob/master/pkgs/servers/sql/postgresql/ext/pgaudit.nix let @@ -24,12 +25,16 @@ let # Supported versions sorted (for libraries) versions = lib.naturalSort (lib.attrNames supportedVersions); latestVersion = lib.last versions; - numberOfVersions = builtins.length versions; + versionsToUse = + if latestOnly then + { "${latestVersion}" = supportedVersions.${latestVersion}; } + else + supportedVersions; + versionsBuilt = if latestOnly then [ latestVersion ] else versions; + numberOfVersionsBuilt = builtins.length versionsBuilt; # Build packages only for supported versions (with libraries) - packages = builtins.attrValues ( - lib.mapAttrs (name: value: build name value.hash) supportedVersions - ); + packages = builtins.attrValues (lib.mapAttrs (name: value: build name value.hash) versionsToUse); # Helper function to generate migration SQL file pairs # Returns a list of {from, to} pairs for sequential migrations @@ -217,7 +222,7 @@ buildEnv { '') versions} # Verify all expected library files are present (one per version + symlink) - expectedFiles=${toString (numberOfVersions + 1)} + expectedFiles=${toString (numberOfVersionsBuilt + 1)} actualFiles=$(ls -A $out/lib/${pname}*${postgresql.dlSuffix} | wc -l) if [[ "$actualFiles" != "$expectedFiles" ]]; then @@ -229,9 +234,14 @@ buildEnv { ''; passthru = { - inherit versions numberOfVersions pname; + versions = versionsBuilt; + numberOfVersions = numberOfVersionsBuilt; + inherit pname latestOnly; version = - "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); + if latestOnly then + latestVersion + else + "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); defaultSettings = { shared_preload_libraries = "pgaudit"; }; diff --git a/nix/ext/pgjwt.nix b/nix/ext/pgjwt.nix index 6bac9dcd8c..348b534c34 100644 --- a/nix/ext/pgjwt.nix +++ b/nix/ext/pgjwt.nix @@ -5,6 +5,7 @@ fetchFromGitHub, postgresql, unstableGitUpdater, + latestOnly ? false, }: let pname = "pgjwt"; @@ -14,9 +15,13 @@ let ) allVersions; versions = lib.naturalSort (lib.attrNames supportedVersions); latestVersion = lib.last versions; - numberOfVersions = builtins.trace "Versions: ${toString (builtins.length versions)}" ( - builtins.length versions - ); + versionsToUse = + if latestOnly then + { "${latestVersion}" = supportedVersions.${latestVersion}; } + else + supportedVersions; + versionsBuilt = if latestOnly then [ latestVersion ] else versions; + numberOfVersionsBuilt = builtins.length versionsBuilt; build = version: hash: revision: stdenv.mkDerivation { @@ -68,7 +73,7 @@ let }; }; packages = builtins.attrValues ( - lib.mapAttrs (name: value: build name value.hash value.revision) supportedVersions + lib.mapAttrs (name: value: build name value.hash value.revision) versionsToUse ); in buildEnv { @@ -77,8 +82,13 @@ buildEnv { pathsToLink = [ "/share/postgresql/extension" ]; passthru = { - inherit versions numberOfVersions pname; + versions = versionsBuilt; + numberOfVersions = numberOfVersionsBuilt; + inherit pname latestOnly; version = - "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); + if latestOnly then + latestVersion + else + "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); }; } diff --git a/nix/ext/pgmq/default.nix b/nix/ext/pgmq/default.nix index 518308211e..42613b6acd 100644 --- a/nix/ext/pgmq/default.nix +++ b/nix/ext/pgmq/default.nix @@ -4,6 +4,7 @@ fetchFromGitHub, postgresql, buildEnv, + latestOnly ? false, }: let pname = "pgmq"; @@ -19,10 +20,14 @@ let # Derived version information versions = lib.naturalSort (lib.attrNames supportedVersions); latestVersion = lib.last versions; - numberOfVersions = builtins.length versions; - packages = builtins.attrValues ( - lib.mapAttrs (name: value: build name value.hash) supportedVersions - ); + versionsToUse = + if latestOnly then + { "${latestVersion}" = supportedVersions.${latestVersion}; } + else + supportedVersions; + versionsBuilt = if latestOnly then [ latestVersion ] else versions; + numberOfVersionsBuilt = builtins.length versionsBuilt; + packages = builtins.attrValues (lib.mapAttrs (name: value: build name value.hash) versionsToUse); # Build function for individual versions build = @@ -99,11 +104,16 @@ buildEnv { pathsToLink = [ "/share/postgresql/extension" ]; passthru = { - inherit versions numberOfVersions pname; + versions = versionsBuilt; + numberOfVersions = numberOfVersionsBuilt; + inherit pname latestOnly; defaultSettings = { search_path = "\"$user\", public, auth, extensions"; }; version = - "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); + if latestOnly then + latestVersion + else + "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); }; } diff --git a/nix/ext/pgroonga/default.nix b/nix/ext/pgroonga/default.nix index 89aca72a23..4a824ac25b 100644 --- a/nix/ext/pgroonga/default.nix +++ b/nix/ext/pgroonga/default.nix @@ -11,6 +11,7 @@ buildEnv, supabase-groonga, mecab-naist-jdic, + latestOnly ? false, }: let pname = "pgroonga"; @@ -26,10 +27,14 @@ let # Derived version information versions = lib.naturalSort (lib.attrNames supportedVersions); latestVersion = lib.last versions; - numberOfVersions = builtins.length versions; - packages = builtins.attrValues ( - lib.mapAttrs (name: value: build name value.hash) supportedVersions - ); + versionsToUse = + if latestOnly then + { "${latestVersion}" = supportedVersions.${latestVersion}; } + else + supportedVersions; + versionsBuilt = if latestOnly then [ latestVersion ] else versions; + numberOfVersionsBuilt = builtins.length versionsBuilt; + packages = builtins.attrValues (lib.mapAttrs (name: value: build name value.hash) versionsToUse); # List of C extensions to be included in the build cExtensions = [ @@ -159,7 +164,7 @@ buildEnv { ]; postBuild = '' # Verify all expected library files are present - expectedFiles=${toString ((numberOfVersions + 1) * (builtins.length cExtensions))} + expectedFiles=${toString ((numberOfVersionsBuilt + 1) * (builtins.length cExtensions))} actualFiles=$(ls -l $out/lib/${pname}*${postgresql.dlSuffix} | wc -l) if [[ "$actualFiles" != "$expectedFiles" ]]; then @@ -171,8 +176,13 @@ buildEnv { ''; passthru = { - inherit versions numberOfVersions pname; + versions = versionsBuilt; + numberOfVersions = numberOfVersionsBuilt; + inherit pname latestOnly; version = - "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); + if latestOnly then + latestVersion + else + "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); }; } diff --git a/nix/ext/pgrouting/default.nix b/nix/ext/pgrouting/default.nix index a05101dd82..cff4e7d862 100644 --- a/nix/ext/pgrouting/default.nix +++ b/nix/ext/pgrouting/default.nix @@ -7,6 +7,7 @@ cmake, boost, buildEnv, + latestOnly ? false, }: let pname = "pgrouting"; @@ -22,10 +23,14 @@ let # Derived version information versions = lib.naturalSort (lib.attrNames supportedVersions); latestVersion = lib.last versions; - numberOfVersions = builtins.length versions; - packages = builtins.attrValues ( - lib.mapAttrs (name: value: build name value.hash) supportedVersions - ); + versionsToUse = + if latestOnly then + { "${latestVersion}" = supportedVersions.${latestVersion}; } + else + supportedVersions; + versionsBuilt = if latestOnly then [ latestVersion ] else versions; + numberOfVersionsBuilt = builtins.length versionsBuilt; + packages = builtins.attrValues (lib.mapAttrs (name: value: build name value.hash) versionsToUse); # Build function for individual versions build = @@ -130,7 +135,7 @@ buildEnv { postBuild = '' #Verify all expected library files are present - expectedFiles=${toString (numberOfVersions + 1)} + expectedFiles=${toString (numberOfVersionsBuilt + 1)} actualFiles=$(ls -l $out/lib/lib${pname}*${postgresql.dlSuffix} | wc -l) if [[ "$actualFiles" != "$expectedFiles" ]]; then @@ -142,8 +147,13 @@ buildEnv { ''; passthru = { - inherit versions numberOfVersions pname; + versions = versionsBuilt; + numberOfVersions = numberOfVersionsBuilt; + inherit pname latestOnly; version = - "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); + if latestOnly then + latestVersion + else + "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); }; } diff --git a/nix/ext/pgsodium.nix b/nix/ext/pgsodium.nix index fa111d8a5c..ad5cd008b4 100644 --- a/nix/ext/pgsodium.nix +++ b/nix/ext/pgsodium.nix @@ -5,6 +5,7 @@ fetchFromGitHub, postgresql, libsodium, + latestOnly ? false, }: let pname = "pgsodium"; @@ -20,10 +21,14 @@ let # Derived version information versions = lib.naturalSort (lib.attrNames supportedVersions); latestVersion = lib.last versions; - numberOfVersions = builtins.length versions; - packages = builtins.attrValues ( - lib.mapAttrs (name: value: build name value.hash) supportedVersions - ); + versionsToUse = + if latestOnly then + { "${latestVersion}" = supportedVersions.${latestVersion}; } + else + supportedVersions; + packages = builtins.attrValues (lib.mapAttrs (name: value: build name value.hash) versionsToUse); + versionsBuilt = if latestOnly then [ latestVersion ] else versions; + numberOfVersionsBuilt = builtins.length versionsBuilt; # Build function for individual pgsodium versions build = @@ -89,7 +94,7 @@ pkgs.buildEnv { postBuild = '' # Verify all expected library files are present - expectedFiles=${toString (numberOfVersions + 1)} + expectedFiles=${toString (numberOfVersionsBuilt + 1)} actualFiles=$(ls -A $out/lib/${pname}*${postgresql.dlSuffix} | wc -l) if [[ "$actualFiles" != "$expectedFiles" ]]; then @@ -101,8 +106,13 @@ pkgs.buildEnv { ''; passthru = { - inherit versions numberOfVersions pname; + versions = versionsBuilt; + numberOfVersions = numberOfVersionsBuilt; + inherit pname latestOnly; version = - "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); + if latestOnly then + latestVersion + else + "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); }; } diff --git a/nix/ext/pgsql-http.nix b/nix/ext/pgsql-http.nix index 3ad03b80ca..e36f4a2187 100644 --- a/nix/ext/pgsql-http.nix +++ b/nix/ext/pgsql-http.nix @@ -5,6 +5,7 @@ fetchFromGitHub, postgresql, curl, + latestOnly ? false, }: let pname = "http"; @@ -20,10 +21,14 @@ let # Derived version information versions = lib.naturalSort (lib.attrNames supportedVersions); latestVersion = lib.last versions; - numberOfVersions = builtins.length versions; - packages = builtins.attrValues ( - lib.mapAttrs (name: value: build name value.hash) supportedVersions - ); + versionsToUse = + if latestOnly then + { "${latestVersion}" = supportedVersions.${latestVersion}; } + else + supportedVersions; + versionsBuilt = if latestOnly then [ latestVersion ] else versions; + numberOfVersionsBuilt = builtins.length versionsBuilt; + packages = builtins.attrValues (lib.mapAttrs (name: value: build name value.hash) versionsToUse); # Build function for individual versions build = @@ -91,7 +96,7 @@ pkgs.buildEnv { ]; postBuild = '' # Verify all expected library files are present - expectedFiles=${toString (numberOfVersions + 1)} + expectedFiles=${toString (numberOfVersionsBuilt + 1)} actualFiles=$(ls -A $out/lib/${pname}*${postgresql.dlSuffix} | wc -l) if [[ "$actualFiles" != "$expectedFiles" ]]; then @@ -103,8 +108,13 @@ pkgs.buildEnv { ''; passthru = { - inherit versions numberOfVersions pname; + versions = versionsBuilt; + numberOfVersions = numberOfVersionsBuilt; + inherit pname latestOnly; version = - "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); + if latestOnly then + latestVersion + else + "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); }; } diff --git a/nix/ext/pgvector.nix b/nix/ext/pgvector.nix index bcf86ebfbd..12b8816d63 100644 --- a/nix/ext/pgvector.nix +++ b/nix/ext/pgvector.nix @@ -4,6 +4,7 @@ stdenv, fetchFromGitHub, postgresql, + latestOnly ? false, }: let pname = "vector"; @@ -19,10 +20,14 @@ let # Derived version information versions = lib.naturalSort (lib.attrNames supportedVersions); latestVersion = lib.last versions; - numberOfVersions = builtins.length versions; - packages = builtins.attrValues ( - lib.mapAttrs (name: value: build name value.hash) supportedVersions - ); + versionsToUse = + if latestOnly then + { "${latestVersion}" = supportedVersions.${latestVersion}; } + else + supportedVersions; + packages = builtins.attrValues (lib.mapAttrs (name: value: build name value.hash) versionsToUse); + versionsBuilt = if latestOnly then [ latestVersion ] else versions; + numberOfVersionsBuilt = builtins.length versionsBuilt; # Build function for individual versions build = @@ -83,9 +88,14 @@ pkgs.buildEnv { ]; passthru = { - inherit versions numberOfVersions pname; + versions = versionsBuilt; + numberOfVersions = numberOfVersionsBuilt; + inherit pname latestOnly; version = - "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); + if latestOnly then + latestVersion + else + "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); pgRegressTestName = "pgvector"; }; } diff --git a/nix/ext/plpgsql-check.nix b/nix/ext/plpgsql-check.nix index faf918c675..05542b9498 100644 --- a/nix/ext/plpgsql-check.nix +++ b/nix/ext/plpgsql-check.nix @@ -7,6 +7,7 @@ buildEnv, makeWrapper, switch-ext-version, + latestOnly ? false, }: let pname = "plpgsql_check"; @@ -22,9 +23,15 @@ let # Derived version information versions = lib.naturalSort (lib.attrNames supportedVersions); latestVersion = lib.last versions; - numberOfVersions = builtins.length versions; + versionsToUse = + if latestOnly then + { "${latestVersion}" = supportedVersions.${latestVersion}; } + else + supportedVersions; + versionsBuilt = if latestOnly then [ latestVersion ] else versions; + numberOfVersionsBuilt = builtins.length versionsBuilt; packages = builtins.attrValues ( - lib.mapAttrs (name: value: build name value.hash value.revision) supportedVersions + lib.mapAttrs (name: value: build name value.hash value.revision) versionsToUse ); # Build function for individual versions @@ -108,7 +115,7 @@ buildEnv { ln -sfn ${pname}-${latestVersion}${postgresql.dlSuffix} $out/lib/${pname}${postgresql.dlSuffix} # Verify all expected library files are present - expectedFiles=${toString (numberOfVersions + 1)} + expectedFiles=${toString (numberOfVersionsBuilt + 1)} actualFiles=$(ls -l $out/lib/${pname}*${postgresql.dlSuffix} | wc -l) if [[ "$actualFiles" != "$expectedFiles" ]]; then @@ -133,7 +140,9 @@ buildEnv { ''; passthru = { - inherit versions numberOfVersions switch-ext-version; + versions = versionsBuilt; + numberOfVersions = numberOfVersionsBuilt; + inherit switch-ext-version latestOnly; hasBackgroundWorker = true; defaultSettings = { shared_preload_libraries = [ @@ -142,6 +151,9 @@ buildEnv { ]; }; version = - "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); + if latestOnly then + latestVersion + else + "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); }; } diff --git a/nix/ext/plv8/default.nix b/nix/ext/plv8/default.nix index 50927521b3..93a17434a1 100644 --- a/nix/ext/plv8/default.nix +++ b/nix/ext/plv8/default.nix @@ -14,6 +14,7 @@ nodejs_20, libcxx, v8_oldstable, + latestOnly ? false, }: let @@ -30,10 +31,14 @@ let # Derived version information versions = lib.naturalSort (lib.attrNames supportedVersions); latestVersion = lib.last versions; - numberOfVersions = builtins.length versions; - packages = builtins.attrValues ( - lib.mapAttrs (name: value: build name value.hash) supportedVersions - ); + versionsToUse = + if latestOnly then + { "${latestVersion}" = supportedVersions.${latestVersion}; } + else + supportedVersions; + versionsBuilt = if latestOnly then [ latestVersion ] else versions; + numberOfVersionsBuilt = builtins.length versionsBuilt; + packages = builtins.attrValues (lib.mapAttrs (name: value: build name value.hash) versionsToUse); # plv8 3.1 requires an older version of v8 (we cannot use nodejs.libv8) v8 = v8_oldstable; @@ -221,7 +226,7 @@ buildEnv { ]; postBuild = '' # Verify all expected library files are present - expectedFiles=${toString (numberOfVersions + 1)} + expectedFiles=${toString (numberOfVersionsBuilt + 1)} actualFiles=$(ls -A $out/lib/${pname}*${postgresql.dlSuffix} | wc -l) if [[ "$actualFiles" != "$expectedFiles" ]]; then @@ -233,8 +238,13 @@ buildEnv { ''; passthru = { - inherit versions numberOfVersions pname; + versions = versionsBuilt; + numberOfVersions = numberOfVersionsBuilt; + inherit pname latestOnly; version = - "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); + if latestOnly then + latestVersion + else + "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); }; } diff --git a/nix/ext/postgis.nix b/nix/ext/postgis.nix index 3989e8aae1..74539e5de3 100644 --- a/nix/ext/postgis.nix +++ b/nix/ext/postgis.nix @@ -17,6 +17,7 @@ callPackage, buildEnv, sfcgal, + latestOnly ? false, }: let @@ -34,10 +35,14 @@ let # Derived version information versions = lib.naturalSort (lib.attrNames supportedVersions); latestVersion = lib.last versions; - numberOfVersions = builtins.length versions; - packages = builtins.attrValues ( - lib.mapAttrs (name: value: build name value.hash) supportedVersions - ); + versionsToUse = + if latestOnly then + { "${latestVersion}" = supportedVersions.${latestVersion}; } + else + supportedVersions; + versionsBuilt = if latestOnly then [ latestVersion ] else versions; + numberOfVersionsBuilt = builtins.length versionsBuilt; + packages = builtins.attrValues (lib.mapAttrs (name: value: build name value.hash) versionsToUse); # List of C extensions to be included in the build cExtensions = [ @@ -190,9 +195,9 @@ in ]; postBuild = '' # Verify all expected library files are present - # We expect: (numberOfVersions * cExtensions) versioned libraries + cExtensions symlinks + # We expect: (numberOfVersionsBuilt * cExtensions) versioned libraries + cExtensions symlinks expectedFiles=${ - toString ((numberOfVersions * builtins.length cExtensions) + builtins.length cExtensions) + toString ((numberOfVersionsBuilt * builtins.length cExtensions) + builtins.length cExtensions) } actualFiles=$(ls -A $out/lib/*${postgresql.dlSuffix} | wc -l) @@ -205,9 +210,14 @@ in ''; passthru = { - inherit versions numberOfVersions pname; + versions = versionsBuilt; + numberOfVersions = numberOfVersionsBuilt; + inherit pname latestOnly; version = - "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); + if latestOnly then + latestVersion + else + "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); }; }).overrideAttrs (_: { diff --git a/nix/ext/rum.nix b/nix/ext/rum.nix index 6a9492e381..a16be47c97 100644 --- a/nix/ext/rum.nix +++ b/nix/ext/rum.nix @@ -4,6 +4,7 @@ fetchFromGitHub, postgresql, buildEnv, + latestOnly ? false, }: let pname = "rum"; @@ -19,9 +20,15 @@ let # Derived version information versions = lib.naturalSort (lib.attrNames supportedVersions); latestVersion = lib.last versions; - numberOfVersions = builtins.length versions; + versionsToUse = + if latestOnly then + { "${latestVersion}" = supportedVersions.${latestVersion}; } + else + supportedVersions; + versionsBuilt = if latestOnly then [ latestVersion ] else versions; + numberOfVersionsBuilt = builtins.length versionsBuilt; packages = builtins.attrValues ( - lib.mapAttrs (name: value: build name value.hash value.revision) supportedVersions + lib.mapAttrs (name: value: build name value.hash value.revision) versionsToUse ); # Build function for individual versions @@ -82,7 +89,7 @@ buildEnv { postBuild = '' # Verify all expected library files are present - expectedFiles=${toString (numberOfVersions + 1)} + expectedFiles=${toString (numberOfVersionsBuilt + 1)} actualFiles=$(ls -l $out/lib/${pname}*${postgresql.dlSuffix} | wc -l) if [[ "$actualFiles" != "$expectedFiles" ]]; then @@ -94,8 +101,13 @@ buildEnv { ''; passthru = { - inherit versions numberOfVersions pname; + versions = versionsBuilt; + numberOfVersions = numberOfVersionsBuilt; + inherit pname latestOnly; version = - "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); + if latestOnly then + latestVersion + else + "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); }; } diff --git a/nix/ext/timescaledb.nix b/nix/ext/timescaledb.nix index 765ca52671..dbfb2a8365 100644 --- a/nix/ext/timescaledb.nix +++ b/nix/ext/timescaledb.nix @@ -11,6 +11,7 @@ switch-ext-version, coreutils, writeShellApplication, + latestOnly ? false, }: let @@ -97,9 +98,15 @@ let ) allVersions; versions = lib.naturalSort (lib.attrNames supportedVersions); latestVersion = lib.last versions; - numberOfVersions = builtins.length versions; + versionsToUse = + if latestOnly then + { "${latestVersion}" = supportedVersions.${latestVersion}; } + else + supportedVersions; + versionsBuilt = if latestOnly then [ latestVersion ] else versions; + numberOfVersionsBuilt = builtins.length versionsBuilt; packages = builtins.attrValues ( - lib.mapAttrs (name: value: build name value.hash (value.revision or name)) supportedVersions + lib.mapAttrs (name: value: build name value.hash (value.revision or name)) versionsToUse ); switch-timescaledb-loader = writeShellApplication { name = "switch_timescaledb_loader"; @@ -145,13 +152,18 @@ buildEnv { ]; passthru = { - inherit versions numberOfVersions switch-ext-version; + versions = versionsBuilt; + numberOfVersions = numberOfVersionsBuilt; + inherit switch-ext-version latestOnly; hasBackgroundWorker = true; libName = "timescaledb-loader"; defaultSettings = { shared_preload_libraries = [ "timescaledb" ]; }; version = - "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); + if latestOnly then + latestVersion + else + "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); }; } diff --git a/nix/ext/vault.nix b/nix/ext/vault.nix index 537febc0b6..c48546ecb5 100644 --- a/nix/ext/vault.nix +++ b/nix/ext/vault.nix @@ -5,6 +5,7 @@ fetchFromGitHub, libsodium, postgresql, + latestOnly ? false, }: let pname = "supabase_vault"; @@ -20,10 +21,14 @@ let # Derived version information versions = lib.naturalSort (lib.attrNames supportedVersions); latestVersion = lib.last versions; - numberOfVersions = builtins.length versions; - packages = builtins.attrValues ( - lib.mapAttrs (name: value: build name value.hash) supportedVersions - ); + versionsToUse = + if latestOnly then + { "${latestVersion}" = supportedVersions.${latestVersion}; } + else + supportedVersions; + versionsBuilt = if latestOnly then [ latestVersion ] else versions; + numberOfVersionsBuilt = builtins.length versionsBuilt; + packages = builtins.attrValues (lib.mapAttrs (name: value: build name value.hash) versionsToUse); # Build function for individual pgsodium versions build = @@ -86,9 +91,14 @@ pkgs.buildEnv { ]; passthru = { - inherit versions numberOfVersions pname; + versions = versionsBuilt; + numberOfVersions = numberOfVersionsBuilt; + inherit pname latestOnly; version = - "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); + if latestOnly then + latestVersion + else + "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); pgRegressTestName = "vault"; }; } diff --git a/nix/ext/wal2json.nix b/nix/ext/wal2json.nix index 43ddab8dfd..f1ccd273b5 100644 --- a/nix/ext/wal2json.nix +++ b/nix/ext/wal2json.nix @@ -5,6 +5,7 @@ fetchFromGitHub, postgresql, makeWrapper, + latestOnly ? false, }: let @@ -56,9 +57,15 @@ let ) allVersions; versions = lib.naturalSort (lib.attrNames supportedVersions); latestVersion = lib.last versions; - numberOfVersions = builtins.length versions; + versionsToUse = + if latestOnly then + { "${latestVersion}" = supportedVersions.${latestVersion}; } + else + supportedVersions; + versionsBuilt = if latestOnly then [ latestVersion ] else versions; + numberOfVersionsBuilt = builtins.length versionsBuilt; packages = builtins.attrValues ( - lib.mapAttrs (name: value: build name value.rev value.hash) supportedVersions + lib.mapAttrs (name: value: build name value.rev value.hash) versionsToUse ); in pkgs.buildEnv { @@ -89,15 +96,20 @@ pkgs.buildEnv { # checks (set -x test "$(ls -A $out/lib/${pname}*${postgresql.dlSuffix} | wc -l)" = "${ - toString (numberOfVersions + 1) + toString (numberOfVersionsBuilt + 1) }" ) ''; passthru = { - inherit versions numberOfVersions pname; + versions = versionsBuilt; + numberOfVersions = numberOfVersionsBuilt; + inherit pname latestOnly; version = - "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); + if latestOnly then + latestVersion + else + "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); defaultSettings = { wal_level = "logical"; }; diff --git a/nix/ext/wrappers/default.nix b/nix/ext/wrappers/default.nix index 696358ea48..5383e30ec7 100644 --- a/nix/ext/wrappers/default.nix +++ b/nix/ext/wrappers/default.nix @@ -9,6 +9,7 @@ buildEnv, rust-bin, git, + latestOnly ? false, }: let pname = "wrappers"; @@ -207,6 +208,13 @@ let versions = lib.naturalSort (lib.attrNames supportedVersions); latestVersion = lib.last versions; numberOfVersions = builtins.length versions; + versionsToUse = + if latestOnly then + lib.filterAttrs (n: _: n == latestVersion) supportedVersions + else + supportedVersions; + versionsBuilt = if latestOnly then [ latestVersion ] else versions; + numberOfVersionsBuilt = builtins.length versionsBuilt; # Filter out previously packaged versions that are actually built for this PG version # This prevents double-counting when a version appears in both lists previouslyPackagedVersions = builtins.filter ( @@ -216,7 +224,7 @@ let packagesAttrSet = lib.mapAttrs' (name: value: { name = lib.replaceStrings [ "." ] [ "_" ] name; value = build name value.hash value.rust value.pgrx; - }) supportedVersions; + }) versionsToUse; packages = builtins.attrValues packagesAttrSet; in (buildEnv { @@ -240,69 +248,101 @@ in # Create main library symlink to latest version ln -sfn ${pname}-${latestVersion}${postgresql.dlSuffix} $out/lib/${pname}${postgresql.dlSuffix} - # Create symlinks for all previously packaged versions to main library - for v in ${lib.concatStringsSep " " previouslyPackagedVersions}; do - ln -sfn $out/lib/${pname}${postgresql.dlSuffix} $out/lib/${pname}-$v${postgresql.dlSuffix} - done + ${ + if latestOnly then + '' + # latestOnly mode: skip previouslyPackagedVersions symlinks + '' + else + '' + # Create symlinks for all previously packaged versions to main library + for v in ${lib.concatStringsSep " " previouslyPackagedVersions}; do + ln -sfn $out/lib/${pname}${postgresql.dlSuffix} $out/lib/${pname}-$v${postgresql.dlSuffix} + done + '' + } } - create_migration_sql_files() { + ${ + if latestOnly then + '' + # latestOnly mode: skip migration SQL files entirely + '' + else + '' + create_migration_sql_files() { - PREVIOUS_VERSION="" - while IFS= read -r i; do - FILENAME=$(basename "$i") - VERSION="$(grep -oE '[0-9]+\.[0-9]+\.[0-9]+' <<< $FILENAME)" - if [[ "$PREVIOUS_VERSION" != "" ]]; then - # Always write to $out/share/postgresql/extension, not $DIRNAME - # because $DIRNAME might be a symlinked read-only path from the Nix store - # We use -L with cp to dereference symlinks (copy the actual file content, not the symlink) - MIGRATION_FILENAME="$out/share/postgresql/extension/''${FILENAME/$VERSION/$PREVIOUS_VERSION--$VERSION}" - cp -L "$i" "$MIGRATION_FILENAME" - fi - PREVIOUS_VERSION="$VERSION" - done < <(find $out -name '*.sql' | sort -V) + PREVIOUS_VERSION="" + while IFS= read -r i; do + FILENAME=$(basename "$i") + VERSION="$(grep -oE '[0-9]+\.[0-9]+\.[0-9]+' <<< $FILENAME)" + if [[ "$PREVIOUS_VERSION" != "" ]]; then + # Always write to $out/share/postgresql/extension, not $DIRNAME + # because $DIRNAME might be a symlinked read-only path from the Nix store + # We use -L with cp to dereference symlinks (copy the actual file content, not the symlink) + MIGRATION_FILENAME="$out/share/postgresql/extension/''${FILENAME/$VERSION/$PREVIOUS_VERSION--$VERSION}" + cp -L "$i" "$MIGRATION_FILENAME" + fi + PREVIOUS_VERSION="$VERSION" + done < <(find $out -name '*.sql' | sort -V) - # Create empty SQL files for previously packaged versions that don't exist - # This compensates for versions that failed to produce SQL files in the past - for prev_version in ${lib.concatStringsSep " " previouslyPackagedVersions}; do - sql_file="$out/share/postgresql/extension/wrappers--$prev_version.sql" - if [ ! -f "$sql_file" ]; then - echo "-- Empty migration file for previously packaged version $prev_version" > "$sql_file" - fi - done + # Create empty SQL files for previously packaged versions that don't exist + # This compensates for versions that failed to produce SQL files in the past + for prev_version in ${lib.concatStringsSep " " previouslyPackagedVersions}; do + sql_file="$out/share/postgresql/extension/wrappers--$prev_version.sql" + if [ ! -f "$sql_file" ]; then + echo "-- Empty migration file for previously packaged version $prev_version" > "$sql_file" + fi + done - # Create migration SQL files from previous versions to newer versions - # Skip if the migration file already exists (to avoid conflicts with the first loop) - for prev_version in ${lib.concatStringsSep " " previouslyPackagedVersions}; do - for curr_version in ${lib.concatStringsSep " " versions}; do - if [[ "$(printf '%s\n%s' "$prev_version" "$curr_version" | sort -V | head -n1)" == "$prev_version" ]] && [[ "$prev_version" != "$curr_version" ]]; then - main_sql_file="$out/share/postgresql/extension/wrappers--$curr_version.sql" - new_file="$out/share/postgresql/extension/wrappers--$prev_version--$curr_version.sql" - # Only create if it doesn't already exist (first loop may have created it) - if [ -f "$main_sql_file" ] && [ ! -f "$new_file" ]; then - cp "$main_sql_file" "$new_file" - sed -i 's|$libdir/wrappers-[0-9.]*|$libdir/wrappers|g' "$new_file" - fi - fi - done - done + # Create migration SQL files from previous versions to newer versions + # Skip if the migration file already exists (to avoid conflicts with the first loop) + for prev_version in ${lib.concatStringsSep " " previouslyPackagedVersions}; do + for curr_version in ${lib.concatStringsSep " " versions}; do + if [[ "$(printf '%s\n%s' "$prev_version" "$curr_version" | sort -V | head -n1)" == "$prev_version" ]] && [[ "$prev_version" != "$curr_version" ]]; then + main_sql_file="$out/share/postgresql/extension/wrappers--$curr_version.sql" + new_file="$out/share/postgresql/extension/wrappers--$prev_version--$curr_version.sql" + # Only create if it doesn't already exist (first loop may have created it) + if [ -f "$main_sql_file" ] && [ ! -f "$new_file" ]; then + cp "$main_sql_file" "$new_file" + sed -i 's|$libdir/wrappers-[0-9.]*|$libdir/wrappers|g' "$new_file" + fi + fi + done + done + } + '' } create_control_files create_lib_files - create_migration_sql_files + ${if latestOnly then "" else "create_migration_sql_files"} # Verify library count matches expected - (test "$(ls -A $out/lib/${pname}*${postgresql.dlSuffix} | wc -l)" = "${ - toString (numberOfVersions + numberOfPreviouslyPackagedVersions + 1) - }") + ${ + if latestOnly then + '' + (test "$(ls -A $out/lib/${pname}*${postgresql.dlSuffix} | wc -l)" = "2") + '' + else + '' + (test "$(ls -A $out/lib/${pname}*${postgresql.dlSuffix} | wc -l)" = "${ + toString (numberOfVersions + numberOfPreviouslyPackagedVersions + 1) + }") + '' + } ''; passthru = { - inherit versions numberOfVersions; + versions = versionsBuilt; + numberOfVersions = numberOfVersionsBuilt; pname = "${pname}"; + inherit latestOnly; version = - "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); + if latestOnly then + latestVersion + else + "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); # Expose individual packages for CI to build separately packages = packagesAttrSet // { recurseForDerivations = true; diff --git a/nix/packages/postgres.nix b/nix/packages/postgres.nix index ad1779f68e..0cfacbab51 100644 --- a/nix/packages/postgres.nix +++ b/nix/packages/postgres.nix @@ -3,6 +3,12 @@ perSystem = { pkgs, lib, ... }: let + # Minimal glibc locales for slim images - only en_US.UTF-8 (~3MB vs ~200MB) + glibcLocalesMinimal = pkgs.glibcLocales.override { + allLocales = false; + locales = [ "en_US.UTF-8/UTF-8" ]; + }; + # Custom extensions that exist in our repository. These aren't upstream # either because nobody has done the work, maintaining them here is # easier and more expedient, or because they may not be suitable, or are @@ -55,7 +61,12 @@ orioledbExtensions = orioleFilteredExtensions ++ [ ../ext/orioledb.nix ]; dbExtensions17 = orioleFilteredExtensions; - getPostgresqlPackage = version: pkgs."postgresql_${version}"; + getPostgresqlPackage = + version: latestOnly: + let + base = pkgs."postgresql_${version}"; + in + if latestOnly then base.override { systemdSupport = false; } else base; # Create a 'receipt' file for a given postgresql package. This is a way # of adding a bit of metadata to the package, which can be used by other # tools to inspect what the contents of the install are: the PSQL @@ -93,8 +104,11 @@ makeOurPostgresPkgs = version: + { + latestOnly ? false, + }: let - postgresql = getPostgresqlPackage version; + postgresql = getPostgresqlPackage version latestOnly; extensionsToUse = if (builtins.elem version [ "orioledb-17" ]) then orioledbExtensions @@ -105,7 +119,7 @@ extCallPackage = pkgs.lib.callPackageWith ( pkgs // { - inherit postgresql; + inherit postgresql latestOnly; switch-ext-version = extCallPackage ./switch-ext-version.nix { }; overlayfs-on-package = extCallPackage ./overlayfs-on-package.nix { }; } @@ -116,8 +130,11 @@ # Create an attrset that contains all the extensions included in a server. makeOurPostgresPkgsSet = version: + { + latestOnly ? false, + }: let - pkgsList = makeOurPostgresPkgs version; + pkgsList = makeOurPostgresPkgs version { inherit latestOnly; }; baseAttrs = builtins.listToAttrs ( map (drv: { name = drv.name; @@ -142,22 +159,31 @@ # basis for building extensions, etc. makePostgresBin = version: + { + latestOnly ? false, + }: let - postgresql = getPostgresqlPackage version; - postgres-pkgs = makeOurPostgresPkgs version; + postgresql = getPostgresqlPackage version latestOnly; + postgres-pkgs = makeOurPostgresPkgs version { inherit latestOnly; }; ourExts = map (ext: { name = ext.name; version = ext.version; }) postgres-pkgs; pgbin = postgresql.withPackages (_ps: postgres-pkgs); + + # For slim packages, include minimal glibc locales for initdb locale support + extraPaths = lib.optionals (latestOnly && pkgs.stdenv.isLinux) [ + glibcLocalesMinimal + ]; in pkgs.symlinkJoin { inherit (pgbin) name version; paths = [ pgbin (makeReceipt pgbin ourExts) - ]; + ] + ++ extraPaths; }; # Create an attribute set, containing all the relevant packages for a @@ -171,22 +197,30 @@ # package names. makePostgres = version: + { + latestOnly ? false, + }: lib.recurseIntoAttrs { - bin = makePostgresBin version; - exts = makeOurPostgresPkgsSet version; + bin = makePostgresBin version { inherit latestOnly; }; + exts = makeOurPostgresPkgsSet version { inherit latestOnly; }; }; basePackages = { - psql_15 = makePostgres "15"; - psql_17 = makePostgres "17"; - psql_orioledb-17 = makePostgres "orioledb-17"; + psql_15 = makePostgres "15" { }; + psql_17 = makePostgres "17" { }; + psql_orioledb-17 = makePostgres "orioledb-17" { }; + }; + slimPackages = { + psql_15_slim = makePostgres "15" { latestOnly = true; }; + psql_17_slim = makePostgres "17" { latestOnly = true; }; + psql_orioledb-17_slim = makePostgres "orioledb-17" { latestOnly = true; }; }; binPackages = lib.mapAttrs' (name: value: { name = "${name}/bin"; value = value.bin; - }) basePackages; + }) (basePackages // slimPackages); in { packages = binPackages; - legacyPackages = basePackages; + legacyPackages = basePackages // slimPackages; }; } diff --git a/nix/postgresql/generic.nix b/nix/postgresql/generic.nix index a99ecad6d2..c9dcae8415 100644 --- a/nix/postgresql/generic.nix +++ b/nix/postgresql/generic.nix @@ -132,7 +132,13 @@ let ++ lib.optionals pythonSupport [ python3 ] ++ lib.optionals gssSupport [ libkrb5 ] ++ lib.optionals stdenv'.isLinux [ linux-pam ] - ++ lib.optionals (!stdenv'.isDarwin) [ libossp_uuid ] + ++ lib.optionals (!stdenv'.isDarwin) [ libossp_uuid ]; + + nativeBuildInputs = [ + makeWrapper + pkg-config + ] + # Build tools for PG17+ and OrioleDB - these are NOT runtime dependencies ++ lib.optionals (isOrioleDB || (lib.versionAtLeast version "17")) [ perl bison @@ -141,11 +147,6 @@ let docbook_xml_dtd_45 docbook_xsl_ns libxslt - ]; - - nativeBuildInputs = [ - makeWrapper - pkg-config ] ++ lib.optionals jitSupport [ llvmPackages.llvm.dev