73 lines
2.4 KiB
Nix
73 lines
2.4 KiB
Nix
{ lib, stdenv, fetchFromGitHub, postgresql, buildPgrxExtension_0_12_6, cargo, rust-bin }:
|
|
let
|
|
rustVersion = "1.80.0";
|
|
cargo = rust-bin.stable.${rustVersion}.default;
|
|
in
|
|
buildPgrxExtension_0_12_6 rec {
|
|
pname = "pg_jsonschema";
|
|
version = "0.3.3";
|
|
inherit postgresql;
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "supabase";
|
|
repo = pname;
|
|
rev = "v${version}";
|
|
hash = "sha256-Au1mqatoFKVq9EzJrpu1FVq5a1kBb510sfC980mDlsU=";
|
|
};
|
|
|
|
nativeBuildInputs = [ cargo ];
|
|
buildInputs = [ postgresql ];
|
|
# update the following array when the pg_jsonschema version is updated
|
|
# required to ensure that extensions update scripts from previous versions are generated
|
|
|
|
previousVersions = ["0.3.1" "0.3.0" "0.2.0" "0.1.4" "0.1.4" "0.1.2" "0.1.1" "0.1.0"];
|
|
CARGO="${cargo}/bin/cargo";
|
|
#darwin env needs PGPORT to be unique for build to not clash with other pgrx extensions
|
|
env = lib.optionalAttrs stdenv.isDarwin {
|
|
POSTGRES_LIB = "${postgresql}/lib";
|
|
RUSTFLAGS = "-C link-arg=-undefined -C link-arg=dynamic_lookup";
|
|
PGPORT = "5433";
|
|
};
|
|
|
|
cargoLock = {
|
|
lockFile = "${src}/Cargo.lock";
|
|
allowBuiltinFetchGit = false;
|
|
};
|
|
|
|
# FIXME (aseipp): testsuite tries to write files into /nix/store; we'll have
|
|
# to fix this a bit later.
|
|
doCheck = false;
|
|
|
|
preBuild = ''
|
|
echo "Processing git tags..."
|
|
echo '${builtins.concatStringsSep "," previousVersions}' | sed 's/,/\n/g' > git_tags.txt
|
|
'';
|
|
|
|
postInstall = ''
|
|
echo "Creating SQL files for previous versions..."
|
|
current_version="${version}"
|
|
sql_file="$out/share/postgresql/extension/pg_jsonschema--$current_version.sql"
|
|
|
|
if [ -f "$sql_file" ]; then
|
|
while read -r previous_version; do
|
|
if [ "$(printf '%s\n' "$previous_version" "$current_version" | sort -V | head -n1)" = "$previous_version" ] && [ "$previous_version" != "$current_version" ]; then
|
|
new_file="$out/share/postgresql/extension/pg_jsonschema--$previous_version--$current_version.sql"
|
|
echo "Creating $new_file"
|
|
cp "$sql_file" "$new_file"
|
|
fi
|
|
done < git_tags.txt
|
|
else
|
|
echo "Warning: $sql_file not found"
|
|
fi
|
|
rm git_tags.txt
|
|
'';
|
|
|
|
|
|
meta = with lib; {
|
|
description = "JSON Schema Validation for PostgreSQL";
|
|
homepage = "https://github.com/supabase/${pname}";
|
|
maintainers = with maintainers; [ samrose ];
|
|
platforms = postgresql.meta.platforms;
|
|
license = licenses.postgresql;
|
|
};
|
|
} |