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 68254e438c)
This commit is contained in:
Wolfgang Walther 2024-11-15 21:44:56 +01:00 committed by github-actions[bot]
parent 013c1ee860
commit a7ab390051
13 changed files with 114 additions and 76 deletions

View File

@ -60,70 +60,88 @@
lib, lib,
stdenv, stdenv,
postgresql, postgresql,
nix-update-script,
}: }:
args: args:
let let
buildPostgresqlExtension = finalAttrs: prevAttrs: { buildPostgresqlExtension =
buildInputs = [ postgresql ] ++ prevAttrs.buildInputs or [ ]; 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 = [ buildInputs = [ postgresql ] ++ prevAttrs.buildInputs or [ ];
"DESTDIR=${placeholder "out"}"
] ++ prevAttrs.installFlags or [ ];
postInstall = installFlags = [
'' "DESTDIR=${placeholder "out"}"
# DESTDIR + pg_config install the files into ] ++ prevAttrs.installFlags or [ ];
# /nix/store/<extension>/nix/store/<postgresql>/...
# We'll now remove the /nix/store/<postgresql> part:
if [[ -d "$out${postgresql}" ]]; then
cp -alt "$out" "$out${postgresql}"/*
rm -r "$out${postgresql}"
fi
if [[ -d "$out${postgresql.dev}" ]]; then postInstall =
mkdir -p "''${dev:-$out}" ''
cp -alt "''${dev:-$out}" "$out${postgresql.dev}"/* # DESTDIR + pg_config install the files into
rm -r "$out${postgresql.dev}" # /nix/store/<extension>/nix/store/<postgresql>/...
fi # We'll now remove the /nix/store/<postgresql> part:
if [[ -d "$out${postgresql}" ]]; then
cp -alt "$out" "$out${postgresql}"/*
rm -r "$out${postgresql}"
fi
if [[ -d "$out${postgresql.lib}" ]]; then if [[ -d "$out${postgresql.dev}" ]]; then
mkdir -p "''${lib:-$out}" mkdir -p "''${dev:-$out}"
cp -alt "''${lib:-$out}" "$out${postgresql.lib}"/* cp -alt "''${dev:-$out}" "$out${postgresql.dev}"/*
rm -r "$out${postgresql.lib}" rm -r "$out${postgresql.dev}"
fi fi
if [[ -d "$out${postgresql.doc}" ]]; then if [[ -d "$out${postgresql.lib}" ]]; then
mkdir -p "''${doc:-$out}" mkdir -p "''${lib:-$out}"
cp -alt "''${doc:-$out}" "$out${postgresql.doc}"/* cp -alt "''${lib:-$out}" "$out${postgresql.lib}"/*
rm -r "$out${postgresql.doc}" rm -r "$out${postgresql.lib}"
fi fi
if [[ -d "$out${postgresql.man}" ]]; then if [[ -d "$out${postgresql.doc}" ]]; then
mkdir -p "''${man:-$out}" mkdir -p "''${doc:-$out}"
cp -alt "''${man:-$out}" "$out${postgresql.man}"/* cp -alt "''${doc:-$out}" "$out${postgresql.doc}"/*
rm -r "$out${postgresql.man}" rm -r "$out${postgresql.doc}"
fi fi
# In some cases (postgis) parts of the install script if [[ -d "$out${postgresql.man}" ]]; then
# actually work "OK", before we add DESTDIR, so some mkdir -p "''${man:-$out}"
# files end up in cp -alt "''${man:-$out}" "$out${postgresql.man}"/*
# /nix/store/<extension>/nix/store/<extension>/... rm -r "$out${postgresql.man}"
if [[ -d "$out$out" ]]; then fi
cp -alt "$out" "$out$out"/*
rm -r "$out$out"
fi
if [[ -d "$out/nix/store" ]]; then # In some cases (postgis) parts of the install script
if ! rmdir "$out/nix/store" "$out/nix"; then # actually work "OK", before we add DESTDIR, so some
find "$out/nix" # files end up in
nixErrorLog 'Found left-overs in $out/nix/store, make sure to move them into $out properly.' # /nix/store/<extension>/nix/store/<extension>/...
exit 1 if [[ -d "$out$out" ]]; then
fi cp -alt "$out" "$out$out"/*
fi rm -r "$out$out"
'' fi
+ prevAttrs.postInstall or "";
}; 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 in
stdenv.mkDerivation (lib.extends buildPostgresqlExtension (lib.toFunction args)) stdenv.mkDerivation (lib.extends buildPostgresqlExtension (lib.toFunction args))

View File

@ -28,6 +28,7 @@ buildPostgresqlExtension rec {
"PERL=${perl}/bin/perl" "PERL=${perl}/bin/perl"
]; ];
enableUpdateScript = false;
passthru.tests = stdenv.mkDerivation { passthru.tests = stdenv.mkDerivation {
inherit version src; inherit version src;

View File

@ -36,6 +36,7 @@ buildPostgresqlExtension (finalAttrs: {
runHook postPatch runHook postPatch
''; '';
enableUpdateScript = false;
passthru.tests.extension = postgresqlTestExtension { passthru.tests.extension = postgresqlTestExtension {
inherit (finalAttrs) finalPackage; inherit (finalAttrs) finalPackage;
sql = '' sql = ''

View File

@ -2,7 +2,7 @@
buildPostgresqlExtension rec { buildPostgresqlExtension rec {
pname = "cstore_fdw"; pname = "cstore_fdw";
version = "unstable-2022-03-08"; version = "1.7.0-unstable-2021-03-08";
nativeBuildInputs = [ protobufc ]; nativeBuildInputs = [ protobufc ];

View File

@ -2,7 +2,7 @@
buildPostgresqlExtension rec { buildPostgresqlExtension rec {
pname = "jsonb_deep_sum"; pname = "jsonb_deep_sum";
version = "unstable-2021-12-24"; version = "0-unstable-2021-12-24";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "furstenheim"; owner = "furstenheim";

View File

@ -44,6 +44,8 @@ buildPostgresqlExtension {
substituteInPlace Makefile --replace "LDFLAGS+=-Wl,--build-id" "" substituteInPlace Makefile --replace "LDFLAGS+=-Wl,--build-id" ""
''; '';
enableUpdateScript = false;
meta = with lib; { meta = with lib; {
description = "Extension to tweak PostgreSQL execution plans using so-called 'hints' in SQL comments"; description = "Extension to tweak PostgreSQL execution plans using so-called 'hints' in SQL comments";
homepage = "https://github.com/ossc-db/pg_hint_plan"; homepage = "https://github.com/ossc-db/pg_hint_plan";

View File

@ -1,8 +1,8 @@
{ stdenv, lib, fetchFromGitHub, fetchpatch, postgresql, unstableGitUpdater, buildPostgresqlExtension }: { stdenv, lib, fetchFromGitHub, fetchpatch, postgresql, buildPostgresqlExtension }:
buildPostgresqlExtension { buildPostgresqlExtension {
pname = "pg_similarity"; pname = "pg_similarity";
version = "1.0-unstable-2021-01-12"; version = "pg_similarity_1_0-unstable-2021-01-12";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "eulerto"; owner = "eulerto";
@ -23,8 +23,6 @@ buildPostgresqlExtension {
makeFlags = [ "USE_PGXS=1" ]; makeFlags = [ "USE_PGXS=1" ];
passthru.updateScript = unstableGitUpdater {};
meta = { meta = {
description = "Extension to support similarity queries on PostgreSQL"; description = "Extension to support similarity queries on PostgreSQL";
longDescription = '' longDescription = ''

View File

@ -1,16 +1,17 @@
{ lib, stdenv, fetchFromGitHub, postgresql, postgresqlTestExtension, buildPostgresqlExtension }: { lib, stdenv, fetchFromGitHub, postgresql, postgresqlTestExtension, buildPostgresqlExtension, nix-update-script }:
buildPostgresqlExtension (finalAttrs: { buildPostgresqlExtension (finalAttrs: {
pname = "pg_squeeze"; pname = "pg_squeeze";
version = "1.7.0"; version = "${builtins.replaceStrings ["_"] ["."] (lib.strings.removePrefix "REL" finalAttrs.src.rev)}";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "cybertec-postgresql"; owner = "cybertec-postgresql";
repo = "pg_squeeze"; repo = "pg_squeeze";
rev = "REL${builtins.replaceStrings ["."] ["_"] finalAttrs.version}"; rev = "REL1_7_0";
hash = "sha256-Kh1wSOvV5Rd1CG/na3yzbWzvaR8SJ6wmTZOnM+lbgik="; hash = "sha256-Kh1wSOvV5Rd1CG/na3yzbWzvaR8SJ6wmTZOnM+lbgik=";
}; };
passthru.updateScript = nix-update-script { extraArgs = [ "--version-regex=REL(.*)" ]; };
passthru.tests.extension = postgresqlTestExtension { passthru.tests.extension = postgresqlTestExtension {
inherit (finalAttrs) finalPackage; inherit (finalAttrs) finalPackage;
postgresqlExtraSettings = '' postgresqlExtraSettings = ''

View File

@ -43,6 +43,8 @@ buildPostgresqlExtension {
makeFlags = [ "USE_PGXS=1" ]; makeFlags = [ "USE_PGXS=1" ];
enableUpdateScript = false;
meta = with lib; { meta = with lib; {
description = "Open Source PostgreSQL Audit Logging"; description = "Open Source PostgreSQL Audit Logging";
homepage = "https://github.com/pgaudit/pgaudit"; homepage = "https://github.com/pgaudit/pgaudit";

View File

@ -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 { buildPostgresqlExtension rec {
pname = "pgroonga"; pname = "pgroonga";
version = "3.2.3"; version = "3.2.3";
src = fetchurl { src = fetchFromGitHub {
url = "https://packages.groonga.org/source/${pname}/${pname}-${version}.tar.gz"; owner = "pgroonga";
hash = "sha256-k9+DgiLzU2cA3jvw3pMF7/FmDGxsCYtAOaUtf2LMTnw="; repo = "pgroonga";
rev = "${version}";
hash = "sha256-bDCDfb78r/HUa7LuZZrwrSZEFcevA1pwSy8/tcCh/oE=";
}; };
nativeBuildInputs = [ pkg-config ]; nativeBuildInputs = [ pkg-config ];
buildInputs = [ msgpack-c groonga ]; buildInputs = [ msgpack-c groonga xxHash ];
makeFlags = [ makeFlags = [
"HAVE_XXHASH=1"
"HAVE_MSGPACK=1" "HAVE_MSGPACK=1"
"MSGPACK_PACKAGE_NAME=msgpack-c" "MSGPACK_PACKAGE_NAME=msgpack-c"
]; ];

View File

@ -2,12 +2,12 @@
buildPostgresqlExtension rec { buildPostgresqlExtension rec {
pname = "plr"; pname = "plr";
version = "8.4.7"; version = "${builtins.replaceStrings ["_"] ["."] (lib.strings.removePrefix "REL" src.rev)}";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "postgres-plr"; owner = "postgres-plr";
repo = "plr"; repo = "plr";
rev = "REL${builtins.replaceStrings ["."] ["_"] version}"; rev = "REL8_4_7";
sha256 = "sha256-PdvFEmtKfLT/xfaf6obomPR5hKC9F+wqpfi1heBphRk="; sha256 = "sha256-PdvFEmtKfLT/xfaf6obomPR5hKC9F+wqpfi1heBphRk=";
}; };

View File

@ -1,5 +1,5 @@
{ {
fetchurl, fetchFromGitHub,
lib, lib,
stdenv, stdenv,
perl, perl,
@ -22,6 +22,10 @@
jitSupport, jitSupport,
llvm, llvm,
buildPostgresqlExtension, buildPostgresqlExtension,
autoconf,
automake,
libtool,
which,
}: }:
let let
@ -36,9 +40,11 @@ buildPostgresqlExtension (finalAttrs: {
"doc" "doc"
]; ];
src = fetchurl { src = fetchFromGitHub {
url = "https://download.osgeo.org/postgis/source/postgis-${finalAttrs.version}.tar.gz"; owner = "postgis";
hash = "sha256-ymmKIswrKzRnrE4GO0OihBPzAE3dUFvczddMVqZH9RA="; repo = "postgis";
rev = "${finalAttrs.version}";
hash = "sha256-wh7Lav2vnKzGWuSvvMFvAaGV7ynD+KgPsFUgujdtzlA=";
}; };
buildInputs = [ buildInputs = [
@ -51,8 +57,12 @@ buildPostgresqlExtension (finalAttrs: {
pcre2.dev pcre2.dev
] ++ lib.optional stdenv.hostPlatform.isDarwin libiconv; ] ++ lib.optional stdenv.hostPlatform.isDarwin libiconv;
nativeBuildInputs = [ nativeBuildInputs = [
autoconf
automake
libtool
perl perl
pkg-config pkg-config
which
] ++ lib.optional jitSupport llvm; ] ++ lib.optional jitSupport llvm;
dontDisableStatic = true; dontDisableStatic = true;
@ -70,7 +80,7 @@ buildPostgresqlExtension (finalAttrs: {
setOutputFlags = false; setOutputFlags = false;
preConfigure = '' preConfigure = ''
sed -i 's@/usr/bin/file@${file}/bin/file@' configure ./autogen.sh
''; '';
configureFlags = [ configureFlags = [

View File

@ -8,12 +8,14 @@
buildPostgresqlExtension rec { buildPostgresqlExtension rec {
pname = "wal2json"; pname = "wal2json";
version = "2.6"; version = "${builtins.replaceStrings [ "_" ] [ "." ] (
lib.strings.removePrefix "wal2json_" src.rev
)}";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "eulerto"; owner = "eulerto";
repo = "wal2json"; repo = "wal2json";
rev = "wal2json_${builtins.replaceStrings [ "." ] [ "_" ] version}"; rev = "wal2json_2_6";
sha256 = "sha256-+QoACPCKiFfuT2lJfSUmgfzC5MXf75KpSoc2PzPxKyM="; sha256 = "sha256-+QoACPCKiFfuT2lJfSUmgfzC5MXf75KpSoc2PzPxKyM=";
}; };
@ -24,7 +26,7 @@ buildPostgresqlExtension rec {
meta = with lib; { meta = with lib; {
description = "PostgreSQL JSON output plugin for changeset extraction"; description = "PostgreSQL JSON output plugin for changeset extraction";
homepage = "https://github.com/eulerto/wal2json"; 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 ]; maintainers = with maintainers; [ euank ];
platforms = postgresql.meta.platforms; platforms = postgresql.meta.platforms;
license = licenses.bsd3; license = licenses.bsd3;