|
15 | 15 | version: hash: rustVersion: pgrxVersion: |
16 | 16 | let |
17 | 17 | cargo = rust-bin.stable.${rustVersion}.default; |
18 | | - previousVersions = lib.filter (v: v != version) versions; # FIXME |
19 | 18 | mkPgrxExtension = callPackages ../cargo-pgrx/mkPgrxExtension.nix { |
20 | 19 | inherit rustVersion pgrxVersion; |
21 | 20 | }; |
|
42 | 41 | # Setting RUSTFLAGS in env to ensure it's available for all phases |
43 | 42 | env = lib.optionalAttrs stdenv.isDarwin { |
44 | 43 | POSTGRES_LIB = "${postgresql}/lib"; |
45 | | - PGPORT = toString ( |
46 | | - 5430 |
47 | | - + (if builtins.match ".*_.*" postgresql.version != null then 1 else 0) |
48 | | - # +1 for OrioleDB |
49 | | - + ((builtins.fromJSON (builtins.substring 0 2 postgresql.version)) - 15) * 2 |
50 | | - ); # +2 for each major version |
51 | 44 | RUSTFLAGS = "-C link-arg=-undefined -C link-arg=dynamic_lookup"; |
52 | 45 | NIX_BUILD_CORES = "4"; # Limit parallel jobs |
53 | 46 | CARGO_BUILD_JOBS = "4"; # Limit cargo parallelism |
54 | 47 | }; |
55 | 48 | CARGO_PROFILE_RELEASE_BUILD_OVERRIDE_DEBUG = true; |
56 | 49 |
|
57 | | - preBuild = '' |
58 | | - echo "Processing git tags..." |
59 | | - echo '${builtins.concatStringsSep "," previousVersions}' | sed 's/,/\n/g' > git_tags.txt |
60 | | - ''; |
61 | | - |
62 | 50 | postInstall = '' |
63 | 51 | mv $out/lib/${pname}${postgresql.dlSuffix} $out/lib/${pname}-${version}${postgresql.dlSuffix} |
64 | 52 |
|
65 | | - create_sql_files() { |
66 | | - echo "Creating SQL files for previous versions..." |
67 | | - current_version="${version}" |
68 | | - sql_file="$out/share/postgresql/extension/${pname}--$current_version.sql" |
69 | | -
|
70 | | - if [ -f "$sql_file" ]; then |
71 | | - while read -r previous_version; do |
72 | | - if [ "$(printf '%s\n' "$previous_version" "$current_version" | sort -V | head -n1)" = "$previous_version" ] && [ "$previous_version" != "$current_version" ]; then |
73 | | - new_file="$out/share/postgresql/extension/${pname}--$previous_version--$current_version.sql" |
74 | | - sed -i 's/create\s\+function/CREATE OR REPLACE FUNCTION/Ig' "$sql_file" |
75 | | - echo "Creating $new_file" |
76 | | - { |
77 | | - echo "DROP EVENT TRIGGER IF EXISTS graphql_watch_ddl;" |
78 | | - echo "DROP EVENT TRIGGER IF EXISTS graphql_watch_drop;" |
79 | | - cat $sql_file |
80 | | - } > "$new_file" |
81 | | - fi |
82 | | - done < git_tags.txt |
83 | | - else |
84 | | - echo "Warning: $sql_file not found" |
85 | | - fi |
86 | | - rm git_tags.txt |
87 | | - } |
88 | | -
|
89 | 53 | create_control_files() { |
90 | 54 | sed -e "/^default_version =/d" \ |
91 | 55 | -e "s|^module_pathname = .*|module_pathname = '\$libdir/${pname}'|" \ |
|
101 | 65 | fi |
102 | 66 | } |
103 | 67 |
|
104 | | - create_sql_files |
105 | 68 | create_control_files |
106 | 69 | ''; |
107 | 70 |
|
@@ -141,6 +104,23 @@ buildEnv { |
141 | 104 | "/share/postgresql/extension" |
142 | 105 | ]; |
143 | 106 | postBuild = '' |
| 107 | + create_sql_files() { |
| 108 | + PREVIOUS_VERSION="" |
| 109 | + while IFS= read -r i; do |
| 110 | + FILENAME=$(basename "$i") |
| 111 | + DIRNAME=$(dirname "$i") |
| 112 | + VERSION="$(grep -oE '[0-9]+\.[0-9]+\.[0-9]+' <<< $FILENAME)" |
| 113 | + if [[ "$PREVIOUS_VERSION" != "" ]]; then |
| 114 | + echo "Processing $i" |
| 115 | + MIGRATION_FILENAME="$DIRNAME/''${FILENAME/$VERSION/$PREVIOUS_VERSION--$VERSION}" |
| 116 | + cp "$i" "$MIGRATION_FILENAME" |
| 117 | + fi |
| 118 | + PREVIOUS_VERSION="$VERSION" |
| 119 | + done < <(find $out -name '*.sql' | sort -V) |
| 120 | + } |
| 121 | +
|
| 122 | + create_sql_files |
| 123 | +
|
144 | 124 | # checks |
145 | 125 | (set -x |
146 | 126 | test "$(ls -A $out/lib/${pname}*${postgresql.dlSuffix} | wc -l)" = "${ |
|
0 commit comments