Skip to content

Commit 88fe61e

Browse files
committed
chore: refactor based on review
1 parent 6c3e993 commit 88fe61e

File tree

1 file changed

+76
-80
lines changed

1 file changed

+76
-80
lines changed

nix/ext/pg_cron.nix

+76-80
Original file line numberDiff line numberDiff line change
@@ -1,92 +1,96 @@
1-
{ lib, stdenv, fetchFromGitHub, postgresql }:
1+
{
2+
lib,
3+
stdenv,
4+
fetchFromGitHub,
5+
postgresql,
6+
runCommand
7+
}:
28

39
let
4-
allVersions = {
5-
"1.3.1" = {
6-
rev = "v1.3.1";
7-
hash = "sha256-rXotNOtQNmA55ErNxGoNSKZ0pP1uxEVlDGITFHuqGG4=";
8-
patches = [ ./pg_cron-1.3.1-pg15.patch ];
9-
};
10-
"1.4.2" = {
11-
rev = "v1.4.2";
12-
hash = "sha256-P0Fd10Q1p+KrExb35G6otHpc6pD61WnMll45H2jkevM=";
13-
};
14-
"1.6.4" = {
15-
rev = "v1.6.4";
16-
hash = "sha256-t1DpFkPiSfdoGG2NgNT7g1lkvSooZoRoUrix6cBID40=";
17-
};
18-
"1.5.2" = {
19-
rev = "v1.5.2";
20-
hash = "sha256-+quVWbKJy6wXpL/zwTk5FF7sYwHA7I97WhWmPO/HSZ4=";
21-
};
22-
};
23-
24-
# Simple version string that concatenates all versions with dashes
25-
versionString = "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings ["."] ["-"] v) (lib.attrNames allVersions));
26-
27-
mkPgCron = pgCronVersion: { rev, hash, patches ? [] }: stdenv.mkDerivation {
28-
pname = "pg_cron";
29-
version = "${pgCronVersion}-pg${lib.versions.major postgresql.version}";
10+
pname = "pg_cron";
3011

31-
buildInputs = [ postgresql ];
32-
inherit patches;
33-
34-
src = fetchFromGitHub {
35-
owner = "citusdata";
36-
repo = "pg_cron";
37-
inherit rev hash;
38-
};
12+
meta = with lib; {
13+
description = "Run Cron jobs through PostgreSQL (multi-version compatible)";
14+
homepage = "https://github.com/citusdata/${pname}";
15+
inherit (postgresql.meta) platforms;
16+
license = licenses.postgresql;
17+
};
3918

40-
buildPhase = ''
41-
make PG_CONFIG=${postgresql}/bin/pg_config
42-
43-
# Create version-specific SQL file
44-
cp pg_cron.sql pg_cron--${pgCronVersion}.sql
45-
46-
# Create versioned control file with modified module path
47-
sed -e "/^default_version =/d" \
48-
-e "s|^module_pathname = .*|module_pathname = '\$libdir/pg_cron'|" \
49-
pg_cron.control > pg_cron--${pgCronVersion}.control
50-
'';
51-
52-
installPhase = ''
53-
mkdir -p $out/{lib,share/postgresql/extension,bin}
54-
55-
# Install versioned library
56-
install -Dm755 pg_cron${postgresql.dlSuffix} $out/lib/pg_cron-${pgCronVersion}${postgresql.dlSuffix}
57-
58-
# Install version-specific files
59-
install -Dm644 pg_cron--${pgCronVersion}.sql $out/share/postgresql/extension/
60-
install -Dm644 pg_cron--${pgCronVersion}.control $out/share/postgresql/extension/
61-
62-
# Install upgrade scripts
63-
find . -name 'pg_cron--*--*.sql' -exec install -Dm644 {} $out/share/postgresql/extension/ \;
64-
'';
19+
allVersions = {
20+
"1.6.4" = "sha256-t1DpFkPiSfdoGG2NgNT7g1lkvSooZoRoUrix6cBID40=";
21+
"1.5.2" = "sha256-+quVWbKJy6wXpL/zwTk5FF7sYwHA7I97WhWmPO/HSZ4=";
22+
"1.4.2" = "sha256-P0Fd10Q1p+KrExb35G6otHpc6pD61WnMll45H2jkevM=";
6523
};
6624

6725
getVersions = pg:
6826
if lib.versionAtLeast pg.version "17"
6927
then { "1.6.4" = allVersions."1.6.4"; }
7028
else allVersions;
7129

72-
allVersionsForPg = lib.mapAttrs mkPgCron (getVersions postgresql);
30+
mkPackage = version: hash:
31+
stdenv.mkDerivation (finalAttrs: {
32+
inherit pname meta;
33+
version = "${version}-pg${lib.versions.major postgresql.version}";
7334

74-
in
75-
stdenv.mkDerivation {
76-
pname = "pg_cron-all";
77-
version = versionString;
35+
src = fetchFromGitHub {
36+
owner = "citusdata";
37+
repo = pname;
38+
rev = "refs/tags/v${version}";
39+
inherit hash;
40+
};
41+
42+
buildInputs = [ postgresql ];
7843

79-
buildInputs = lib.attrValues allVersionsForPg;
44+
buildPhase = ''
45+
make PG_CONFIG=${postgresql}/bin/pg_config
46+
47+
# Create version-specific SQL file
48+
cp pg_cron.sql pg_cron--${version}.sql
49+
50+
# Create versioned control file with modified module path
51+
sed -e "/^default_version =/d" \
52+
-e "s|^module_pathname = .*|module_pathname = '\$libdir/pg_cron'|" \
53+
pg_cron.control > pg_cron--${version}.control
54+
'';
55+
56+
installPhase = ''
57+
mkdir -p $out/{lib,share/postgresql/extension}
58+
59+
# Install versioned library
60+
install -Dm755 pg_cron${postgresql.dlSuffix} $out/lib/pg_cron-${version}${postgresql.dlSuffix}
61+
62+
# Install version-specific files
63+
install -Dm644 pg_cron--${version}.sql $out/share/postgresql/extension/
64+
install -Dm644 pg_cron--${version}.control $out/share/postgresql/extension/
65+
66+
# Install upgrade scripts
67+
find . -name 'pg_cron--*--*.sql' -exec install -Dm644 {} $out/share/postgresql/extension/ \;
68+
'';
69+
});
70+
71+
packages = lib.listToAttrs (
72+
lib.attrValues (
73+
lib.mapAttrs (version: hash: lib.nameValuePair "v${version}" (mkPackage version hash)) (getVersions postgresql)
74+
)
75+
);
76+
77+
in
78+
runCommand "${pname}-all"
79+
{
80+
inherit pname meta;
81+
version = "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings ["."] ["-"] v) (lib.attrNames (getVersions postgresql)));
8082

81-
dontUnpack = true;
82-
dontConfigure = true;
83-
dontBuild = true;
83+
buildInputs = lib.attrValues packages;
8484

85-
installPhase = ''
85+
passthru = {
86+
inherit packages;
87+
};
88+
}
89+
''
8690
mkdir -p $out/{lib,share/postgresql/extension,bin}
8791
8892
# Install all versions
89-
for drv in ${lib.concatStringsSep " " (lib.attrValues allVersionsForPg)}; do
93+
for drv in ''${buildInputs[@]}; do
9094
ln -sv $drv/lib/* $out/lib/
9195
cp -v --no-clobber $drv/share/postgresql/extension/* $out/share/postgresql/extension/ || true
9296
done
@@ -136,12 +140,4 @@ stdenv.mkDerivation {
136140
EOF
137141
138142
chmod +x $out/bin/switch_pg_cron_version
139-
'';
140-
141-
meta = with lib; {
142-
description = "Run Cron jobs through PostgreSQL (multi-version compatible)";
143-
homepage = "https://github.com/citusdata/pg_cron";
144-
inherit (postgresql.meta) platforms;
145-
license = licenses.postgresql;
146-
};
147-
}
143+
''

0 commit comments

Comments
 (0)