#!/usr/bin/env nix-shell #! nix-shell -p curl jq minisign -i sh set -e # The well known public key for Zig PUBLIC_KEY="RWSGOq2NVecA2UPNdBUZykf1CCb147pkmdtYxgb3Ti+JO/wCYvhbAb/U" # Grab the JSON and parse the version curl -s 'https://ziglang.org/download/index.json' > index.json VERSION=$(cat index.json | jq -r '.master.version') echo "Parsing master version: ${VERSION}" # Verify the signature of the JSON before we parse it curl -s "https://ziglang.org/builds/zig-${VERSION}-index.json.minisig" > index.json.minisig minisign -V -P ${PUBLIC_KEY} -x index.json.minisig -m index.json # Build our new sources.json cat index.json | jq ' ["aarch64-linux", "x86_64-linux", "aarch64-macos", "x86_64-macos", "aarch64-windows", "x86_64-windows"] as $targets | def todarwin(x): x | gsub("macos"; "darwin"); def toentry(vsn; x): [(vsn as $version | .value | to_entries[] | select(.key as $key | any($targets[]; . == $key)) | { (todarwin(.key)): { "url": .value.tarball, "sha256": .value.shasum, "version": $version, } } )] | add | first(values, {}); reduce to_entries[] as $entry ({}; . * ( $entry | { (.key): ( if (.key != "master") then toentry(.key; .value) else { "latest": toentry(.value.version; .value), (.value.date): toentry(.value.version; .value), } end ) } )) ' > sources.new.json # For debugging # cat sources.new.json # exit # Copy the old file since jq can't modify in-place. This is also a backup. cp sources.json sources.old.json # Recursive merge jq -s '.[0] * .[1]' sources.old.json sources.new.json > sources.json