Skip to content

Commit 06341db

Browse files
feat: multi-ext-versions-pgaudit
1 parent 0fddd47 commit 06341db

File tree

1 file changed

+76
-32
lines changed

1 file changed

+76
-32
lines changed

nix/ext/pgaudit.nix

Lines changed: 76 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,91 @@
1-
{ lib, stdenv, fetchFromGitHub, libkrb5, openssl, postgresql }:
1+
{ lib, stdenv, fetchFromGitHub, libkrb5, openssl, postgresql, runCommand }:
22
#adapted from https://github.com/NixOS/nixpkgs/blob/master/pkgs/servers/sql/postgresql/ext/pgaudit.nix
33
let
4-
source = {
4+
pname = "pgaudit";
5+
6+
meta = with lib; {
7+
description = "Open Source PostgreSQL Audit Logging";
8+
homepage = "https://github.com/pgaudit/pgaudit";
9+
changelog = "https://github.com/pgaudit/pgaudit/releases/tag/${source.version}";
10+
platforms = postgresql.meta.platforms;
11+
license = licenses.postgresql;
12+
};
13+
14+
versions = {
515
"17" = {
6-
version = "17.0";
7-
hash = "sha256-3ksq09wiudQPuBQI3dhEQi8IkXKLVIsPFgBnwLiicro=";
16+
"17.0" = "sha256-3ksq09wiudQPuBQI3dhEQi8IkXKLVIsPFgBnwLiicro=";
817
};
918
"16" = {
10-
version = "16.0";
11-
hash = "sha256-8+tGOl1U5y9Zgu+9O5UDDE4bec4B0JC/BQ6GLhHzQzc=";
19+
"16.0" = "sha256-8+tGOl1U5y9Zgu+9O5UDDE4bec4B0JC/BQ6GLhHzQzc=";
1220
};
1321
"15" = {
14-
version = "1.7.0";
15-
hash = "sha256-8pShPr4HJaJQPjW1iPJIpj3CutTx8Tgr+rOqoXtgCcw=";
22+
"1.7.0" = "sha256-8pShPr4HJaJQPjW1iPJIpj3CutTx8Tgr+rOqoXtgCcw=";
1623
};
1724
}.${lib.versions.major postgresql.version} or (throw "Source for pgaudit is not available for ${postgresql.version}");
18-
in
19-
stdenv.mkDerivation {
20-
pname = "pgaudit";
21-
inherit (source) version;
2225

23-
src = fetchFromGitHub {
24-
owner = "pgaudit";
25-
repo = "pgaudit";
26-
rev = source.version;
27-
hash = source.hash;
28-
};
26+
mkPackage =
27+
version: hash:
28+
stdenv.mkDerivation (finalAttrs: {
29+
inherit pname version meta;
2930

30-
buildInputs = [ libkrb5 openssl postgresql ];
31+
src = fetchFromGitHub {
32+
owner = "pgaudit";
33+
repo = "pgaudit";
34+
rev = version;
35+
inherit hash;
36+
};
3137

32-
makeFlags = [ "USE_PGXS=1" ];
38+
buildInputs = [ libkrb5 openssl postgresql ];
3339

34-
installPhase = ''
35-
install -D -t $out/lib pgaudit${postgresql.dlSuffix}
36-
install -D -t $out/share/postgresql/extension *.sql
37-
install -D -t $out/share/postgresql/extension *.control
38-
'';
40+
makeFlags = [ "USE_PGXS=1" ];
3941

40-
meta = with lib; {
41-
description = "Open Source PostgreSQL Audit Logging";
42-
homepage = "https://github.com/pgaudit/pgaudit";
43-
changelog = "https://github.com/pgaudit/pgaudit/releases/tag/${source.version}";
44-
platforms = postgresql.meta.platforms;
45-
license = licenses.postgresql;
42+
postBuild = ''
43+
sed -e "/^default_version =/d" \
44+
-e "s|^module_pathname = .*|module_pathname = '\$libdir/pgaudit'|" \
45+
pgaudit.control > pgaudit--$version.control
46+
'';
47+
48+
installPhase = ''
49+
mkdir -p $out/{lib,share/postgresql/extension}
50+
51+
install -Dm755 pgaudit${postgresql.dlSuffix} $out/lib/pgaudit-$version${postgresql.dlSuffix}
52+
install -Dm644 pgaudit--$version.sql $out/share/postgresql/extension/
53+
install -Dm644 pgaudit--$version.control $out/share/postgresql/extension/
54+
'';
55+
});
56+
57+
packages = lib.listToAttrs (
58+
lib.attrValues (
59+
lib.mapAttrs (version: hash: lib.nameValuePair "v${version}" (mkPackage version hash)) versions
60+
)
61+
);
62+
in
63+
runCommand "${pname}-all" {
64+
inherit pname meta;
65+
version = "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings ["."] ["-"] v) (lib.attrNames versions));
66+
67+
buildInputs = lib.attrValues packages;
68+
69+
passthru = {
70+
inherit packages;
4671
};
47-
}
72+
} ''
73+
mkdir -p $out/{lib,share/postgresql/extension,bin}
74+
75+
# Install all versions
76+
for drv in ''${buildInputs[@]}; do
77+
ln -sv $drv/lib/* $out/lib/
78+
cp -v --no-clobber $drv/share/postgresql/extension/* $out/share/postgresql/extension/ || true
79+
done
80+
81+
# Create default symlinks
82+
latest_control=$(ls -v $out/share/postgresql/extension/pgaudit--*.control | tail -n1)
83+
latest_version=$(basename "$latest_control" | sed -E 's/pgaudit--([0-9.]+).control/\1/')
84+
85+
# Create main control file with default_version
86+
echo "default_version = '$latest_version'" > $out/share/postgresql/extension/pgaudit.control
87+
cat "$latest_control" >> $out/share/postgresql/extension/pgaudit.control
88+
89+
# Library symlink
90+
ln -sfnv pgaudit-$latest_version${postgresql.dlSuffix} $out/lib/pgaudit${postgresql.dlSuffix}
91+
''

0 commit comments

Comments
 (0)