#!/usr/bin/env bash set -euo pipefail file=$(mktemp) >&2 echo "$file" fetch() { local url="$1" >&2 echo "$url" curl --silent --compressed --user-agent "https://github.com/nix-community/infra" --location "$url" } fetch "https://repology.org/api/v1/projects/?inrepo=nix_unstable&outdated=1" >"$file" append() { sleep 2 local last="$1" local url="https://repology.org/api/v1/projects/$last/?inrepo=nix_unstable&outdated=1" fetch "$url" >>"$file" } while true; do last=$(jq --sort-keys --raw-output 'keys | last' <"$file") append "$last" jq --slurp add "$file" | sponge "$file" final=$(jq --sort-keys --raw-output 'keys | last' <"$file") if [[ $last == "$final" ]]; then break fi done jq -r ' to_entries | map(select(.value | type == "array")) | map({ name: ( .value | map(select(.repo == "nix_unstable")) | .[0] | .srcname ), oldVersion: ( .value | map(select(.repo == "nix_unstable" and .status == "outdated")) | .[0] | .version ), newVersion: ( .value | map(select(.status == "newest" and .version != null)) | .[0] | .version ), url: "https://repology.org/project/\(.key)/versions" }) | map(select(.newVersion != null)) | map("\(.name) \(.oldVersion) \(.newVersion) \(.url)") | join("\n") ' <"$file" | sort