chatdesk-ui/postgres_15.8.1.044/nix/tools/sync-exts-versions.sh.in

283 lines
8.5 KiB
Bash

#!/usr/bin/env bash
# shellcheck shell=bash
[ ! -z "$DEBUG" ] && set -x
#pass in env vars supplied by nix
yq=@YQ@
jq=@JQ@
editor=@NIX_EDITOR@
ansible_vars=$($yq '.' $PWD/ansible/vars.yml)
prefetchurl=@NIXPREFETCHURL@
_nix=@NIX@
fetch_source_url() {
local source_url=${1//\"/} # Remove double quotes
source_url=${source_url//\'/} # Remove single quotes
# Check if the source URL is provided
if [ -z "$source_url" ]; then
echo "Usage: fetch_nix_url <source_url>"
return 1
fi
echo "$source_url"
# Run nix-prefetch-url command
local initial_hash=$($prefetchurl --type sha256 "$source_url" --unpack | cut -d ' ' -f 2)
#once we can bump up nix version, we can use nix hash convert --hash-algo sha256
local final_hash=$($_nix hash to-sri --type sha256 $initial_hash)
echo "$final_hash"
}
sync_version() {
local package_name=$1
local version="\"$2\""
local hash="\"$3\""
# Update the version and hash in the Nix expression
$editor $PWD/nix/ext/$package_name.nix version --inplace -v "$version"
$editor $PWD/nix/ext/$package_name.nix src.hash --inplace -v $hash
}
run_sync() {
local varname=$1
local package_name=$2
version=$(echo $ansible_vars | $jq -r '.'$varname'')
echo "$key: $version"
url=$($_nix eval .#psql_15/exts/$package_name.src.url)
hash=$(fetch_source_url $url | tail -n 1)
$(sync_version $package_name $version $hash)
echo "synced $package_name to version $version with hash $hash"
}
#for use where nix uses fetchurl
# instead of fetchFromGithub
fetchurl_source_url() {
local source_url=${1//\"/} # Remove double quotes
source_url=${source_url//\'/} # Remove single quotes
# Check if the source URL is provided
if [ -z "$source_url" ]; then
echo "Usage: fetch_nix_url <source_url>"
return 1
fi
echo "$source_url"
# Run nix-prefetch-url command
local initial_hash=$($prefetchurl --type sha256 "$source_url" | cut -d ' ' -f 2)
#once we can bump up nix version, we can use nix hash convert --hash-algo sha256
local final_hash=$($_nix hash to-sri --type sha256 $initial_hash)
echo "$final_hash"
}
sync_version_fetchurl() {
local package_name=$1
local version="\"$2\""
local hash="\"$3\""
# Update the version and hash in the Nix expression
$editor $PWD/nix/ext/$package_name.nix version --inplace -v "$version"
$editor $PWD/nix/ext/$package_name.nix src.sha256 --inplace -v $hash
}
run_sync_fetchurl() {
local varname=$1
local package_name=$2
version=$(echo $ansible_vars | $jq -r '.'$varname'')
echo "$key: $version"
url=$($_nix eval .#psql_15/exts/$package_name.src.url)
hash=$(fetchurl_source_url $url | tail -n 1)
$(sync_version_fetchurl $package_name $version $hash)
echo "synced $package_name to version $version with hash $hash"
}
#for use on derivations that use cargoHash
update_cargo_vendor_hash() {
local package_name=$1
$editor $PWD/nix/ext/$package_name.nix cargoHash --inplace -v ""
output=$($_nix build .#psql_15/exts/$package_name 2>&1)
# Check if the command exited with an error
if [ $? -ne 0 ]; then
# Extract the hash value after "got: "
hash_value_scraped=$(echo "$output" | grep "got:" | awk '{for (i=1; i<=NF; i++) if ($i ~ /^sha/) print $i}')
hash_value="\"$hash_value_scraped\""
# Continue using the captured hash value
$editor $PWD/nix/ext/$package_name.nix cargoHash --inplace -v $hash_value
echo "Updated cargoHash for $package_name to $hash_value"
else
echo "$package_name builds successfully, moving on..."
fi
}
#iterate values in ansible vars, case statement
# to match ansible var to package name
keys=$(echo "$ansible_vars" | $jq -r 'keys[]')
for key in $keys; do
case $key in
"pg_hashids_release")
varname="pg_hashids_release"
package_name="pg_hashids"
run_sync $varname $package_name
;;
"hypopg_release")
varname="hypopg_release"
package_name="hypopg"
run_sync $varname $package_name
;;
"pg_graphql_release")
varname="pg_graphql_release"
package_name="pg_graphql"
run_sync $varname $package_name
update_cargo_vendor_hash $package_name
;;
"pg_cron_release")
varname="pg_cron_release"
package_name="pg_cron"
run_sync $varname $package_name
;;
"pgsql_http_release")
varname="pgsql_http_release"
package_name="pgsql-http"
run_sync $varname $package_name
;;
"pg_jsonschema_release")
varname="pg_jsonschema_release"
package_name="pg_jsonschema"
run_sync $varname $package_name
update_cargo_vendor_hash $package_name
;;
"pg_net_release")
varname="pg_net_release"
package_name="pg_net"
run_sync $varname $package_name
;;
"pg_plan_filter_release")
varname="pg_plan_filter_release"
package_name="pg_plan_filter"
run_sync $varname $package_name
;;
"pg_safeupdate_release")
varname="pg_safeupdate_release"
package_name="pg-safeupdate"
run_sync $varname $package_name
;;
"pgsodium_release")
varname="pgsodium_release"
package_name="pgsodium"
run_sync $varname $package_name
;;
"pg_repack_release")
varname="pg_repack_release"
package_name="pg_repack"
run_sync $varname $package_name
;;
"pgrouting_release")
varname="pgrouting_release"
package_name="pgrouting"
run_sync $varname $package_name
;;
"ptap_release")
varname="pgtap_release"
package_name="pgtap"
run_sync $varname $package_name
;;
"pg_stat_monitor_release")
varname="pg_stat_monitor_release"
package_name="pg_stat_monitor"
run_sync $varname $package_name
;;
"pg_tle_release")
varname="pg_tle_release"
package_name="pg_tle"
run_sync $varname $package_name
;;
"pgaudit_release")
varname="pgaudit_release"
package_name="pgaudit"
run_sync $varname $package_name
;;
"plpgsql_check_release")
varname="plpgsql_check_release"
package_name="plpgsql-check"
run_sync $varname $package_name
;;
"pgvector_release")
varname="pgvector_release"
package_name="pgvector"
run_sync $varname $package_name
;;
"pgjwt_release")
varname="pgjwt_release"
package_name="pgjwt"
run_sync $varname $package_name
;;
"plv8_release")
varname="plv8_release"
package_name="plv8"
run_sync $varname $package_name
;;
"postgis_release")
varname="postgis_release"
package_name="postgis"
run_sync_fetchurl $varname $package_name
;;
"pgroonga_release")
varname="pgroonga_release"
package_name="pgroonga"
run_sync_fetchurl $varname $package_name
;;
"rum_release")
varname="rum_release"
package_name="rum"
run_sync $varname $package_name
;;
"timescaledb_release")
varname="timescaledb_release"
package_name="timescaledb"
run_sync $varname $package_name
;;
"supautils_release")
varname="supautils_release"
package_name="supautils"
run_sync $varname $package_name
;;
"vault_release")
varname="vault_release"
package_name="vault"
run_sync $varname $package_name
;;
"wal2json_release")
varname="wal2json_release"
package_name="wal2json"
run_sync $varname $package_name
;;
*)
;;
esac
done
# url=$($_nix eval .#psql_16/exts/pgvector.src.url)
# fetch_nix_url "$url"
#res=$editor /home/sam/postgres/nix/ext/pgvector.nix src
#echo $res
# url=$($_nix eval .#psql_16/exts/pgvector.src.url)
# #echo $url
# hash=$(fetch_source_url $url | tail -n 1)
# echo "$hash"