|
10 | 10 | # |
11 | 11 | # - `installedExtension`: Function to get the installed extension package for a PostgreSQL version |
12 | 12 | # - `mkDefaultNixosTestNode`: Creates a NixOS test node with standard PostgreSQL setup |
| 13 | +# - `psql_15`: PostgreSQL 15 package with the tested extension |
| 14 | +# - `psql_17`: PostgreSQL 17 package with the tested extension |
| 15 | +# - `versions`: Function to get available extension versions for a PostgreSQL version |
| 16 | +# - `mkPostgresqlWithExtensions`: Builds a PostgreSQL package with a list of extensions |
13 | 17 | # |
14 | 18 | # ## Examples |
15 | 19 | # |
|
31 | 35 | # Example: |
32 | 36 | # installedExtension "15" => derivation |
33 | 37 | installedExtension = |
34 | | - postgresMajorVersion: |
| 38 | + postgresMajorVersion: # The PostgreSQL major version (e.g., "15", "17") |
35 | 39 | self.packages.${pkgs.system}."psql_${postgresMajorVersion}/exts/${testedExtensionName}-all"; |
36 | 40 |
|
37 | 41 | # Create a default NixOS test node with PostgreSQL configured for extension testing. |
|
47 | 51 | # ] |
48 | 52 | mkDefaultNixosTestNode = |
49 | 53 | { |
50 | | - config, # The node's config attribute |
51 | | - psql_15, # PostgreSQL 15 package with extension |
52 | | - psql_17 ? null, # PostgreSQL 17 package with extension (optional) |
| 54 | + config, # The node's config attribute |
| 55 | + psql_15, # PostgreSQL 15 package with extension |
| 56 | + psql_17 ? null, # PostgreSQL 17 package with extension (optional) |
53 | 57 | ... |
54 | 58 | }: |
55 | 59 | { |
@@ -135,4 +139,58 @@ rec { |
135 | 139 | }; |
136 | 140 | }; |
137 | 141 | }; |
| 142 | + |
| 143 | + # Build a PostgreSQL package that includes a list of extensions. |
| 144 | + # |
| 145 | + # The included extension can be accessed via the `testedExtension` attribute. |
| 146 | + # |
| 147 | + mkPostgresqlWithExtensions = |
| 148 | + postgresql: # The PostgreSQL package to extend with the extension |
| 149 | + extensions: # A list of extension packages to include, the first will be the testedExtension |
| 150 | + let |
| 151 | + majorVersion = pkgs.lib.versions.major postgresql.version; |
| 152 | + # Build paths for all extensions |
| 153 | + extensionPaths = map ( |
| 154 | + ext: self.packages.${pkgs.system}."psql_${majorVersion}/exts/${ext}-all" |
| 155 | + ) extensions; |
| 156 | + # Automatically add orioledb if building for OrioleDB |
| 157 | + orioledbPaths = |
| 158 | + pkgs.lib.optional postgresql.isOrioleDB |
| 159 | + self.packages.${pkgs.system}."psql_orioledb-17/exts/orioledb"; |
| 160 | + pkg = pkgs.buildEnv { |
| 161 | + name = "postgresql-${majorVersion}-${testedExtensionName}"; |
| 162 | + paths = [ |
| 163 | + postgresql |
| 164 | + postgresql.lib |
| 165 | + ] ++ extensionPaths ++ orioledbPaths; |
| 166 | + passthru = { |
| 167 | + inherit (postgresql) version psqlSchema; |
| 168 | + lib = pkg; |
| 169 | + testedExtension = builtins.head extensionPaths; |
| 170 | + withPackages = _: pkg; |
| 171 | + }; |
| 172 | + nativeBuildInputs = [ pkgs.makeWrapper ]; |
| 173 | + pathsToLink = [ |
| 174 | + "/" |
| 175 | + "/bin" |
| 176 | + "/lib" |
| 177 | + ]; |
| 178 | + postBuild = '' |
| 179 | + wrapProgram $out/bin/postgres --set NIX_PGLIBDIR $out/lib |
| 180 | + wrapProgram $out/bin/pg_ctl --set NIX_PGLIBDIR $out/lib |
| 181 | + wrapProgram $out/bin/pg_upgrade --set NIX_PGLIBDIR $out/lib |
| 182 | + ''; |
| 183 | + }; |
| 184 | + in |
| 185 | + pkg; |
| 186 | + psql_15 = mkPostgresqlWithExtensions self.packages.${pkgs.system}.postgresql_15 [ |
| 187 | + testedExtensionName |
| 188 | + ]; |
| 189 | + psql_17 = mkPostgresqlWithExtensions self.packages.${pkgs.system}.postgresql_17 [ |
| 190 | + testedExtensionName |
| 191 | + ]; |
| 192 | + # Get available extension versions for a specific PostgreSQL major version. |
| 193 | + versions = |
| 194 | + postgresqlMajorVersion: # The PostgreSQL major version (e.g., "15", "17") |
| 195 | + (installedExtension postgresqlMajorVersion).versions; |
138 | 196 | } |
0 commit comments