mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-09-28 10:50:15 +00:00
81 lines
2.6 KiB
Bash
Executable File
81 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env nix-shell
|
|
#!nix-shell -i bash -p bash common-updater-scripts coreutils curl jq nix perl
|
|
|
|
set -euo pipefail
|
|
|
|
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
|
|
nixpkgs="$(cd "$script_dir/../../../.." >/dev/null 2>&1 && pwd)"
|
|
nix_file="$script_dir/package.nix"
|
|
attr="stellar-core"
|
|
github_repo="stellar/stellar-core"
|
|
|
|
cd "$nixpkgs"
|
|
|
|
old_version="$(nix-instantiate --eval --raw -A "$attr.version")"
|
|
latest_tag="$(curl -fsS ${GITHUB_TOKEN:+-u ":$GITHUB_TOKEN"} "https://api.github.com/repos/$github_repo/releases/latest" | jq -r '.tag_name')"
|
|
latest_version="${latest_tag#v}"
|
|
fake_hash="$(nix-instantiate --eval --raw -A lib.fakeHash)"
|
|
|
|
soroban_revs() {
|
|
local version_tag="$1"
|
|
|
|
curl -fsS ${GITHUB_TOKEN:+-u ":$GITHUB_TOKEN"} "https://api.github.com/repos/$github_repo/git/trees/$version_tag?recursive=1" \
|
|
| jq '
|
|
reduce (
|
|
.tree[]
|
|
| select(.mode == "160000" and (.path | test("^src/rust/soroban/p[0-9]+$")))
|
|
) as $submodule ({};
|
|
.[$submodule.path | sub("^src/rust/soroban/"; "")] = $submodule.sha
|
|
)
|
|
'
|
|
}
|
|
|
|
current_soroban_hashes="$(nix-instantiate --eval --json -A "$attr.cargoDeps.sorobanProtocolHashes")"
|
|
old_soroban_revs="{}"
|
|
new_soroban_revs="$(soroban_revs "$latest_tag")"
|
|
|
|
if [[ "$(jq length <<< "$new_soroban_revs")" -eq 0 ]]; then
|
|
echo "Could not find Soroban protocol submodules in $latest_tag" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [[ "$old_version" != "$latest_version" ]]; then
|
|
old_soroban_revs="$(soroban_revs "v$old_version")"
|
|
fi
|
|
|
|
protocols="$(
|
|
jq --compact-output \
|
|
--arg fake_hash "$fake_hash" \
|
|
--argjson hashes "$current_soroban_hashes" \
|
|
--argjson old "$old_soroban_revs" \
|
|
'
|
|
. as $new
|
|
| keys
|
|
| sort_by(ltrimstr("p") | tonumber)
|
|
| map({
|
|
protocol: .,
|
|
hash: ($hashes[.] // $fake_hash),
|
|
needsUpdate: ($hashes[.] == null or ($old[.] != null and $old[.] != $new[.]))
|
|
})
|
|
' <<< "$new_soroban_revs"
|
|
)"
|
|
soroban_hash_lines="$(jq -r '.[] | " \(.protocol) = \"\(.hash)\";"' <<< "$protocols")"
|
|
mapfile -t soroban_protocols_to_update < <(jq -r '.[] | select(.needsUpdate).protocol' <<< "$protocols")
|
|
|
|
update-source-version "$attr" "$latest_version"
|
|
|
|
SOROBAN_HASH_LINES="$soroban_hash_lines" \
|
|
perl -0pi -e '
|
|
s/(sorobanProtocolHashes = \{\n).*?(\n[[:space:]]+\};)/$1$ENV{SOROBAN_HASH_LINES}$2/s;
|
|
' "$nix_file"
|
|
|
|
update-source-version "$attr" \
|
|
--ignore-same-version \
|
|
--source-key=cargoDeps.mainCargoDeps.vendorStaging
|
|
|
|
for protocol in "${soroban_protocols_to_update[@]}"; do
|
|
update-source-version "$attr" \
|
|
--ignore-same-version \
|
|
--source-key="cargoDeps.sorobanCargoDeps.$protocol.vendorStaging"
|
|
done
|