From a7ab390051499e904165a6bb1eac81a33abd0d36 Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Fri, 15 Nov 2024 21:44:56 +0100 Subject: [PATCH] postgresqlPackages: enable update scripts by default This enables update scripts via buildPostgresqlExtension. Extensions must actively opt-out, if they don't support either the default configuration or the unstable configuration. To make the update script work, some extensions had to be changed to pull their code from GitHub instead. Those with PostgreSQL-style version tags (REL_X_Y) had to be changed to make src.rev the source of truth. (cherry picked from commit 68254e438c9ae6eb29b32ee96809e0beef97a014) --- .../postgresql/buildPostgresqlExtension.nix | 122 ++++++++++-------- pkgs/servers/sql/postgresql/ext/age.nix | 1 + .../postgresql/ext/apache_datasketches.nix | 1 + .../servers/sql/postgresql/ext/cstore_fdw.nix | 2 +- .../sql/postgresql/ext/jsonb_deep_sum.nix | 2 +- .../sql/postgresql/ext/pg_hint_plan.nix | 2 + .../sql/postgresql/ext/pg_similarity.nix | 6 +- .../servers/sql/postgresql/ext/pg_squeeze.nix | 7 +- pkgs/servers/sql/postgresql/ext/pgaudit.nix | 2 + pkgs/servers/sql/postgresql/ext/pgroonga.nix | 13 +- pkgs/servers/sql/postgresql/ext/plr.nix | 4 +- pkgs/servers/sql/postgresql/ext/postgis.nix | 20 ++- pkgs/servers/sql/postgresql/ext/wal2json.nix | 8 +- 13 files changed, 114 insertions(+), 76 deletions(-) diff --git a/pkgs/servers/sql/postgresql/buildPostgresqlExtension.nix b/pkgs/servers/sql/postgresql/buildPostgresqlExtension.nix index 87847c368eba..03797b610827 100644 --- a/pkgs/servers/sql/postgresql/buildPostgresqlExtension.nix +++ b/pkgs/servers/sql/postgresql/buildPostgresqlExtension.nix @@ -60,70 +60,88 @@ lib, stdenv, postgresql, + nix-update-script, }: args: let - buildPostgresqlExtension = finalAttrs: prevAttrs: { - buildInputs = [ postgresql ] ++ prevAttrs.buildInputs or [ ]; + buildPostgresqlExtension = + finalAttrs: + { + enableUpdateScript ? true, + ... + }@prevAttrs: + { + passthru = + prevAttrs.passthru or { } + // lib.optionalAttrs enableUpdateScript { + updateScript = + prevAttrs.passthru.updateScript or (nix-update-script ( + lib.optionalAttrs (lib.hasInfix "unstable" prevAttrs.version) { + extraArgs = [ "--version=branch" ]; + } + )); + }; - installFlags = [ - "DESTDIR=${placeholder "out"}" - ] ++ prevAttrs.installFlags or [ ]; + buildInputs = [ postgresql ] ++ prevAttrs.buildInputs or [ ]; - postInstall = - '' - # DESTDIR + pg_config install the files into - # /nix/store//nix/store//... - # We'll now remove the /nix/store/ part: - if [[ -d "$out${postgresql}" ]]; then - cp -alt "$out" "$out${postgresql}"/* - rm -r "$out${postgresql}" - fi + installFlags = [ + "DESTDIR=${placeholder "out"}" + ] ++ prevAttrs.installFlags or [ ]; - if [[ -d "$out${postgresql.dev}" ]]; then - mkdir -p "''${dev:-$out}" - cp -alt "''${dev:-$out}" "$out${postgresql.dev}"/* - rm -r "$out${postgresql.dev}" - fi + postInstall = + '' + # DESTDIR + pg_config install the files into + # /nix/store//nix/store//... + # We'll now remove the /nix/store/ part: + if [[ -d "$out${postgresql}" ]]; then + cp -alt "$out" "$out${postgresql}"/* + rm -r "$out${postgresql}" + fi - if [[ -d "$out${postgresql.lib}" ]]; then - mkdir -p "''${lib:-$out}" - cp -alt "''${lib:-$out}" "$out${postgresql.lib}"/* - rm -r "$out${postgresql.lib}" - fi + if [[ -d "$out${postgresql.dev}" ]]; then + mkdir -p "''${dev:-$out}" + cp -alt "''${dev:-$out}" "$out${postgresql.dev}"/* + rm -r "$out${postgresql.dev}" + fi - if [[ -d "$out${postgresql.doc}" ]]; then - mkdir -p "''${doc:-$out}" - cp -alt "''${doc:-$out}" "$out${postgresql.doc}"/* - rm -r "$out${postgresql.doc}" - fi + if [[ -d "$out${postgresql.lib}" ]]; then + mkdir -p "''${lib:-$out}" + cp -alt "''${lib:-$out}" "$out${postgresql.lib}"/* + rm -r "$out${postgresql.lib}" + fi - if [[ -d "$out${postgresql.man}" ]]; then - mkdir -p "''${man:-$out}" - cp -alt "''${man:-$out}" "$out${postgresql.man}"/* - rm -r "$out${postgresql.man}" - fi + if [[ -d "$out${postgresql.doc}" ]]; then + mkdir -p "''${doc:-$out}" + cp -alt "''${doc:-$out}" "$out${postgresql.doc}"/* + rm -r "$out${postgresql.doc}" + fi - # In some cases (postgis) parts of the install script - # actually work "OK", before we add DESTDIR, so some - # files end up in - # /nix/store//nix/store//... - if [[ -d "$out$out" ]]; then - cp -alt "$out" "$out$out"/* - rm -r "$out$out" - fi + if [[ -d "$out${postgresql.man}" ]]; then + mkdir -p "''${man:-$out}" + cp -alt "''${man:-$out}" "$out${postgresql.man}"/* + rm -r "$out${postgresql.man}" + fi - if [[ -d "$out/nix/store" ]]; then - if ! rmdir "$out/nix/store" "$out/nix"; then - find "$out/nix" - nixErrorLog 'Found left-overs in $out/nix/store, make sure to move them into $out properly.' - exit 1 - fi - fi - '' - + prevAttrs.postInstall or ""; - }; + # In some cases (postgis) parts of the install script + # actually work "OK", before we add DESTDIR, so some + # files end up in + # /nix/store//nix/store//... + if [[ -d "$out$out" ]]; then + cp -alt "$out" "$out$out"/* + rm -r "$out$out" + fi + + if [[ -d "$out/nix/store" ]]; then + if ! rmdir "$out/nix/store" "$out/nix"; then + find "$out/nix" + nixErrorLog 'Found left-overs in $out/nix/store, make sure to move them into $out properly.' + exit 1 + fi + fi + '' + + prevAttrs.postInstall or ""; + }; in stdenv.mkDerivation (lib.extends buildPostgresqlExtension (lib.toFunction args)) diff --git a/pkgs/servers/sql/postgresql/ext/age.nix b/pkgs/servers/sql/postgresql/ext/age.nix index a9f74bc76ec1..4811ec01ccb5 100644 --- a/pkgs/servers/sql/postgresql/ext/age.nix +++ b/pkgs/servers/sql/postgresql/ext/age.nix @@ -28,6 +28,7 @@ buildPostgresqlExtension rec { "PERL=${perl}/bin/perl" ]; + enableUpdateScript = false; passthru.tests = stdenv.mkDerivation { inherit version src; diff --git a/pkgs/servers/sql/postgresql/ext/apache_datasketches.nix b/pkgs/servers/sql/postgresql/ext/apache_datasketches.nix index 4c8d723354d2..46b5fac3852b 100644 --- a/pkgs/servers/sql/postgresql/ext/apache_datasketches.nix +++ b/pkgs/servers/sql/postgresql/ext/apache_datasketches.nix @@ -36,6 +36,7 @@ buildPostgresqlExtension (finalAttrs: { runHook postPatch ''; + enableUpdateScript = false; passthru.tests.extension = postgresqlTestExtension { inherit (finalAttrs) finalPackage; sql = '' diff --git a/pkgs/servers/sql/postgresql/ext/cstore_fdw.nix b/pkgs/servers/sql/postgresql/ext/cstore_fdw.nix index 2236f815a823..4b5499bfe9fa 100644 --- a/pkgs/servers/sql/postgresql/ext/cstore_fdw.nix +++ b/pkgs/servers/sql/postgresql/ext/cstore_fdw.nix @@ -2,7 +2,7 @@ buildPostgresqlExtension rec { pname = "cstore_fdw"; - version = "unstable-2022-03-08"; + version = "1.7.0-unstable-2021-03-08"; nativeBuildInputs = [ protobufc ]; diff --git a/pkgs/servers/sql/postgresql/ext/jsonb_deep_sum.nix b/pkgs/servers/sql/postgresql/ext/jsonb_deep_sum.nix index eb84ec54c028..7fe4f22254f3 100644 --- a/pkgs/servers/sql/postgresql/ext/jsonb_deep_sum.nix +++ b/pkgs/servers/sql/postgresql/ext/jsonb_deep_sum.nix @@ -2,7 +2,7 @@ buildPostgresqlExtension rec { pname = "jsonb_deep_sum"; - version = "unstable-2021-12-24"; + version = "0-unstable-2021-12-24"; src = fetchFromGitHub { owner = "furstenheim"; diff --git a/pkgs/servers/sql/postgresql/ext/pg_hint_plan.nix b/pkgs/servers/sql/postgresql/ext/pg_hint_plan.nix index db5c360196e2..5adf5486113f 100644 --- a/pkgs/servers/sql/postgresql/ext/pg_hint_plan.nix +++ b/pkgs/servers/sql/postgresql/ext/pg_hint_plan.nix @@ -44,6 +44,8 @@ buildPostgresqlExtension { substituteInPlace Makefile --replace "LDFLAGS+=-Wl,--build-id" "" ''; + enableUpdateScript = false; + meta = with lib; { description = "Extension to tweak PostgreSQL execution plans using so-called 'hints' in SQL comments"; homepage = "https://github.com/ossc-db/pg_hint_plan"; diff --git a/pkgs/servers/sql/postgresql/ext/pg_similarity.nix b/pkgs/servers/sql/postgresql/ext/pg_similarity.nix index 4ec5bd83fc47..19441807b515 100644 --- a/pkgs/servers/sql/postgresql/ext/pg_similarity.nix +++ b/pkgs/servers/sql/postgresql/ext/pg_similarity.nix @@ -1,8 +1,8 @@ -{ stdenv, lib, fetchFromGitHub, fetchpatch, postgresql, unstableGitUpdater, buildPostgresqlExtension }: +{ stdenv, lib, fetchFromGitHub, fetchpatch, postgresql, buildPostgresqlExtension }: buildPostgresqlExtension { pname = "pg_similarity"; - version = "1.0-unstable-2021-01-12"; + version = "pg_similarity_1_0-unstable-2021-01-12"; src = fetchFromGitHub { owner = "eulerto"; @@ -23,8 +23,6 @@ buildPostgresqlExtension { makeFlags = [ "USE_PGXS=1" ]; - passthru.updateScript = unstableGitUpdater {}; - meta = { description = "Extension to support similarity queries on PostgreSQL"; longDescription = '' diff --git a/pkgs/servers/sql/postgresql/ext/pg_squeeze.nix b/pkgs/servers/sql/postgresql/ext/pg_squeeze.nix index ba2f4443c557..fa4225f3389d 100644 --- a/pkgs/servers/sql/postgresql/ext/pg_squeeze.nix +++ b/pkgs/servers/sql/postgresql/ext/pg_squeeze.nix @@ -1,16 +1,17 @@ -{ lib, stdenv, fetchFromGitHub, postgresql, postgresqlTestExtension, buildPostgresqlExtension }: +{ lib, stdenv, fetchFromGitHub, postgresql, postgresqlTestExtension, buildPostgresqlExtension, nix-update-script }: buildPostgresqlExtension (finalAttrs: { pname = "pg_squeeze"; - version = "1.7.0"; + version = "${builtins.replaceStrings ["_"] ["."] (lib.strings.removePrefix "REL" finalAttrs.src.rev)}"; src = fetchFromGitHub { owner = "cybertec-postgresql"; repo = "pg_squeeze"; - rev = "REL${builtins.replaceStrings ["."] ["_"] finalAttrs.version}"; + rev = "REL1_7_0"; hash = "sha256-Kh1wSOvV5Rd1CG/na3yzbWzvaR8SJ6wmTZOnM+lbgik="; }; + passthru.updateScript = nix-update-script { extraArgs = [ "--version-regex=REL(.*)" ]; }; passthru.tests.extension = postgresqlTestExtension { inherit (finalAttrs) finalPackage; postgresqlExtraSettings = '' diff --git a/pkgs/servers/sql/postgresql/ext/pgaudit.nix b/pkgs/servers/sql/postgresql/ext/pgaudit.nix index d50da6c7e282..91c081eaf955 100644 --- a/pkgs/servers/sql/postgresql/ext/pgaudit.nix +++ b/pkgs/servers/sql/postgresql/ext/pgaudit.nix @@ -43,6 +43,8 @@ buildPostgresqlExtension { makeFlags = [ "USE_PGXS=1" ]; + enableUpdateScript = false; + meta = with lib; { description = "Open Source PostgreSQL Audit Logging"; homepage = "https://github.com/pgaudit/pgaudit"; diff --git a/pkgs/servers/sql/postgresql/ext/pgroonga.nix b/pkgs/servers/sql/postgresql/ext/pgroonga.nix index 3d855f5e1977..6cd900be5f16 100644 --- a/pkgs/servers/sql/postgresql/ext/pgroonga.nix +++ b/pkgs/servers/sql/postgresql/ext/pgroonga.nix @@ -1,18 +1,21 @@ -{ lib, stdenv, fetchurl, pkg-config, postgresql, msgpack-c, groonga, buildPostgresqlExtension }: +{ lib, stdenv, fetchFromGitHub, pkg-config, postgresql, msgpack-c, groonga, buildPostgresqlExtension, xxHash }: buildPostgresqlExtension rec { pname = "pgroonga"; version = "3.2.3"; - src = fetchurl { - url = "https://packages.groonga.org/source/${pname}/${pname}-${version}.tar.gz"; - hash = "sha256-k9+DgiLzU2cA3jvw3pMF7/FmDGxsCYtAOaUtf2LMTnw="; + src = fetchFromGitHub { + owner = "pgroonga"; + repo = "pgroonga"; + rev = "${version}"; + hash = "sha256-bDCDfb78r/HUa7LuZZrwrSZEFcevA1pwSy8/tcCh/oE="; }; nativeBuildInputs = [ pkg-config ]; - buildInputs = [ msgpack-c groonga ]; + buildInputs = [ msgpack-c groonga xxHash ]; makeFlags = [ + "HAVE_XXHASH=1" "HAVE_MSGPACK=1" "MSGPACK_PACKAGE_NAME=msgpack-c" ]; diff --git a/pkgs/servers/sql/postgresql/ext/plr.nix b/pkgs/servers/sql/postgresql/ext/plr.nix index 1c2266e7cfb6..2aece8cee9d1 100644 --- a/pkgs/servers/sql/postgresql/ext/plr.nix +++ b/pkgs/servers/sql/postgresql/ext/plr.nix @@ -2,12 +2,12 @@ buildPostgresqlExtension rec { pname = "plr"; - version = "8.4.7"; + version = "${builtins.replaceStrings ["_"] ["."] (lib.strings.removePrefix "REL" src.rev)}"; src = fetchFromGitHub { owner = "postgres-plr"; repo = "plr"; - rev = "REL${builtins.replaceStrings ["."] ["_"] version}"; + rev = "REL8_4_7"; sha256 = "sha256-PdvFEmtKfLT/xfaf6obomPR5hKC9F+wqpfi1heBphRk="; }; diff --git a/pkgs/servers/sql/postgresql/ext/postgis.nix b/pkgs/servers/sql/postgresql/ext/postgis.nix index 68aefc1e605d..cca196dab006 100644 --- a/pkgs/servers/sql/postgresql/ext/postgis.nix +++ b/pkgs/servers/sql/postgresql/ext/postgis.nix @@ -1,5 +1,5 @@ { - fetchurl, + fetchFromGitHub, lib, stdenv, perl, @@ -22,6 +22,10 @@ jitSupport, llvm, buildPostgresqlExtension, + autoconf, + automake, + libtool, + which, }: let @@ -36,9 +40,11 @@ buildPostgresqlExtension (finalAttrs: { "doc" ]; - src = fetchurl { - url = "https://download.osgeo.org/postgis/source/postgis-${finalAttrs.version}.tar.gz"; - hash = "sha256-ymmKIswrKzRnrE4GO0OihBPzAE3dUFvczddMVqZH9RA="; + src = fetchFromGitHub { + owner = "postgis"; + repo = "postgis"; + rev = "${finalAttrs.version}"; + hash = "sha256-wh7Lav2vnKzGWuSvvMFvAaGV7ynD+KgPsFUgujdtzlA="; }; buildInputs = [ @@ -51,8 +57,12 @@ buildPostgresqlExtension (finalAttrs: { pcre2.dev ] ++ lib.optional stdenv.hostPlatform.isDarwin libiconv; nativeBuildInputs = [ + autoconf + automake + libtool perl pkg-config + which ] ++ lib.optional jitSupport llvm; dontDisableStatic = true; @@ -70,7 +80,7 @@ buildPostgresqlExtension (finalAttrs: { setOutputFlags = false; preConfigure = '' - sed -i 's@/usr/bin/file@${file}/bin/file@' configure + ./autogen.sh ''; configureFlags = [ diff --git a/pkgs/servers/sql/postgresql/ext/wal2json.nix b/pkgs/servers/sql/postgresql/ext/wal2json.nix index adc57f333fcf..9562c738eb1f 100644 --- a/pkgs/servers/sql/postgresql/ext/wal2json.nix +++ b/pkgs/servers/sql/postgresql/ext/wal2json.nix @@ -8,12 +8,14 @@ buildPostgresqlExtension rec { pname = "wal2json"; - version = "2.6"; + version = "${builtins.replaceStrings [ "_" ] [ "." ] ( + lib.strings.removePrefix "wal2json_" src.rev + )}"; src = fetchFromGitHub { owner = "eulerto"; repo = "wal2json"; - rev = "wal2json_${builtins.replaceStrings [ "." ] [ "_" ] version}"; + rev = "wal2json_2_6"; sha256 = "sha256-+QoACPCKiFfuT2lJfSUmgfzC5MXf75KpSoc2PzPxKyM="; }; @@ -24,7 +26,7 @@ buildPostgresqlExtension rec { meta = with lib; { description = "PostgreSQL JSON output plugin for changeset extraction"; homepage = "https://github.com/eulerto/wal2json"; - changelog = "https://github.com/eulerto/wal2json/releases/tag/wal2json_${version}"; + changelog = "https://github.com/eulerto/wal2json/releases/tag/${src.rev}"; maintainers = with maintainers; [ euank ]; platforms = postgresql.meta.platforms; license = licenses.bsd3;