Skip to content

Commit 8a8fac4

Browse files
jfrochesamrose
andauthored
feat: support multiple versions of the hypopg extension (#1760)
* feat(hypopg): build multiple versions of the hypopg extension Build multiple versions of the hypopg extension on different PostgreSQL versions. Add test for the extensions and their upgrade on PostgreSQL 15 and 17. * chore: add release suffix for testing * chore: refactor hypopg test Reuse the common nixos test for testing PostgreSQL extensions. * chore: bump version for release --------- Co-authored-by: Sam Rose <[email protected]>
1 parent 9898ced commit 8a8fac4

File tree

4 files changed

+108
-32
lines changed

4 files changed

+108
-32
lines changed

ansible/vars.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ postgres_major:
99

1010
# Full version strings for each major version
1111
postgres_release:
12-
postgresorioledb-17: "17.5.1.025-orioledb"
13-
postgres17: "17.6.1.004"
14-
postgres15: "15.14.1.004"
12+
postgresorioledb-17: "17.5.1.026-orioledb"
13+
postgres17: "17.6.1.005"
14+
postgres15: "15.14.1.005"
1515

1616
# Non Postgres Extensions
1717
pgbouncer_release: "1.19.0"

nix/ext/hypopg.nix

Lines changed: 79 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,95 @@
11
{
22
lib,
33
stdenv,
4+
buildEnv,
45
fetchFromGitHub,
56
postgresql,
67
}:
78

8-
stdenv.mkDerivation rec {
9+
let
910
pname = "hypopg";
10-
version = "1.4.1";
11+
allVersions = (builtins.fromJSON (builtins.readFile ./versions.json)).${pname};
12+
supportedVersions = lib.filterAttrs (
13+
_: value: builtins.elem (lib.versions.major postgresql.version) value.postgresql
14+
) allVersions;
15+
versions = lib.naturalSort (lib.attrNames supportedVersions);
16+
latestVersion = lib.last versions;
17+
numberOfVersions = builtins.length versions;
18+
build =
19+
version: hash:
20+
stdenv.mkDerivation rec {
21+
inherit pname version;
1122

12-
buildInputs = [ postgresql ];
23+
buildInputs = [ postgresql ];
1324

14-
src = fetchFromGitHub {
15-
owner = "HypoPG";
16-
repo = pname;
17-
rev = "refs/tags/${version}";
18-
hash = "sha256-88uKPSnITRZ2VkelI56jZ9GWazG/Rn39QlyHKJKSKMM=";
19-
};
25+
src = fetchFromGitHub {
26+
owner = "HypoPG";
27+
repo = pname;
28+
rev = "refs/tags/${version}";
29+
inherit hash;
30+
};
31+
32+
installPhase = ''
33+
mkdir -p $out/{lib,share/postgresql/extension}
34+
35+
mv ${pname}${postgresql.dlSuffix} $out/lib/${pname}-${version}${postgresql.dlSuffix}
36+
37+
create_sql_files() {
38+
echo "Creating SQL files for previous versions..."
39+
if [[ "${version}" == "${latestVersion}" ]]; then
40+
cp *.sql $out/share/postgresql/extension
41+
fi
42+
}
43+
44+
create_control_files() {
45+
sed -e "/^default_version =/d" \
46+
-e "s|^module_pathname = .*|module_pathname = '\$libdir/${pname}'|" \
47+
${pname}.control > $out/share/postgresql/extension/${pname}--${version}.control
48+
49+
if [[ "${version}" == "${latestVersion}" ]]; then
50+
{
51+
echo "default_version = '${latestVersion}'"
52+
cat $out/share/postgresql/extension/${pname}--${latestVersion}.control
53+
} > $out/share/postgresql/extension/${pname}.control
54+
ln -sfn ${pname}-${latestVersion}${postgresql.dlSuffix} $out/lib/${pname}${postgresql.dlSuffix}
55+
fi
56+
}
2057
21-
installPhase = ''
22-
mkdir -p $out/{lib,share/postgresql/extension}
58+
create_sql_files
59+
create_control_files
60+
'';
2361

24-
cp *${postgresql.dlSuffix} $out/lib
25-
cp *.sql $out/share/postgresql/extension
26-
cp *.control $out/share/postgresql/extension
62+
meta = with lib; {
63+
description = "Hypothetical Indexes for PostgreSQL";
64+
homepage = "https://github.com/HypoPG/${pname}";
65+
license = licenses.postgresql;
66+
inherit (postgresql.meta) platforms;
67+
};
68+
};
69+
packages = builtins.attrValues (
70+
lib.mapAttrs (name: value: build name value.hash) supportedVersions
71+
);
72+
in
73+
buildEnv {
74+
name = pname;
75+
paths = packages;
76+
pathsToLink = [
77+
"/lib"
78+
"/share/postgresql/extension"
79+
];
80+
postBuild = ''
81+
# checks
82+
(set -x
83+
test "$(ls -A $out/lib/${pname}*${postgresql.dlSuffix} | wc -l)" = "${
84+
toString (numberOfVersions + 1)
85+
}"
86+
)
2787
'';
2888

29-
meta = with lib; {
30-
description = "Hypothetical Indexes for PostgreSQL";
31-
homepage = "https://github.com/HypoPG/${pname}";
32-
platforms = postgresql.meta.platforms;
33-
license = licenses.postgresql;
89+
passthru = {
90+
inherit versions numberOfVersions;
91+
pname = "${pname}-all";
92+
version =
93+
"multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions);
3494
};
3595
}

nix/ext/tests/default.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,7 @@ builtins.listToAttrs (
182182
value = extTest extName;
183183
})
184184
[
185+
"hypopg"
185186
"index_advisor"
186187
"pg_cron"
187188
"pg_net"

nix/ext/versions.json

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,27 @@
11
{
2-
"wrappers": {
3-
"0.5.4": {
2+
"index_advisor": {
3+
"0.2.0": {
44
"postgresql": [
55
"15",
66
"17",
77
"orioledb-17"
88
],
9-
"hash": "sha256-W1RokXH4Vfj2FIuEzGEP5SzzWsv2Pbzfa816nXKnSoc=",
10-
"pgrx": "0.14.3",
11-
"rust": "1.87.0"
9+
"hash": "sha256-G0eQk2bY5CNPMeokN/nb05g03CuiplRf902YXFVQFbs="
1210
}
1311
},
14-
"index_advisor": {
15-
"0.2.0": {
12+
"hypopg": {
13+
"1.3.1": {
14+
"postgresql": [
15+
"15"
16+
],
17+
"hash": "sha256-AIBXy+LxyHUo+1hd8gQTwaBdFiTEzKaCVc4cx5tZgME="
18+
},
19+
"1.4.1": {
1620
"postgresql": [
1721
"15",
18-
"17",
19-
"orioledb-17"
22+
"17"
2023
],
21-
"hash": "sha256-G0eQk2bY5CNPMeokN/nb05g03CuiplRf902YXFVQFbs="
24+
"hash": "sha256-88uKPSnITRZ2VkelI56jZ9GWazG/Rn39QlyHKJKSKMM="
2225
}
2326
},
2427
"pg_cron": {
@@ -177,5 +180,17 @@
177180
],
178181
"hash": "sha256-JsZV+I4eRMypXTjGmjCtMBXDVpqTIPHQa28ogXncE/Q="
179182
}
183+
},
184+
"wrappers": {
185+
"0.5.4": {
186+
"postgresql": [
187+
"15",
188+
"17",
189+
"orioledb-17"
190+
],
191+
"hash": "sha256-W1RokXH4Vfj2FIuEzGEP5SzzWsv2Pbzfa816nXKnSoc=",
192+
"pgrx": "0.14.3",
193+
"rust": "1.87.0"
194+
}
180195
}
181196
}

0 commit comments

Comments
 (0)