1#!/usr/bin/env nix-shell
 2#!nix-shell -i bash -p jq -p nix
 3# shellcheck shell=bash
 4set -euo pipefail
 5
 6REPO_URL="https://github.com/NelloKudo/spritz-wine"
 7
 8SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
 9JSON="$SCRIPT_DIR/version.json"
10
11# stream name -> tag prefix (before the version part)
12declare -A TAG_PATTERNS=(
13	[cachyos]="wine-cachyos-aagl-v"
14	[dwproton]="wine-dwproton-"
15	[tkg]="spritz-wine-"
16)
17
18# tkg additionally used the wine-tkg-aagl-v naming for older releases.
19declare -A EXTRA_TAG_PATTERNS=(
20	[tkg]="wine-tkg-aagl-v"
21)
22
23TMPDIR=$(mktemp -d)
24trap 'rm -rf "$TMPDIR"' EXIT
25
26git ls-remote --tags "$REPO_URL" | grep -v '\^{}' >"$TMPDIR/tags"
27
28UPDATED=""
29for STREAM in "${!TAG_PATTERNS[@]}"; do
30	OLD_VERSION=$(jq -r ".${STREAM} | keys | .[]" "$JSON" | sort -V | tail -1)
31	ASSET_PREFIX=$(jq -r ".${STREAM}[\"$OLD_VERSION\"].url" "$JSON" | sed 's#.*/##' | sed "s/-${OLD_VERSION}-x86_64.tar.xz$//")
32
33	# Gather (version, tag) pairs from all tag namings of this stream.
34	: >"$TMPDIR/versions-$STREAM"
35	for PAT in "${TAG_PATTERNS[$STREAM]}" ${EXTRA_TAG_PATTERNS[$STREAM]:-}; do
36		while read -r SHA TAG; do
37			VER=${TAG#"refs/tags/$PAT"}
38			if [ "$VER" != "$TAG" ]; then
39				printf '%s\t%s\n' "$VER" "${TAG#refs/tags/}" >>"$TMPDIR/versions-$STREAM"
40			fi
41		done <"$TMPDIR/tags"
42	done
43
44	# All versions strictly newer than the current latest, in version order.
45	NEW_VERSIONS=$(
46		cut -f1 "$TMPDIR/versions-$STREAM" | sort -u -V |
47			awk -v old="$OLD_VERSION" '!f { f = ($0 == old) } f && $0 != old'
48	)
49
50	for VER in $NEW_VERSIONS; do
51		TAG=$(awk -F'\t' -v v="$VER" '$1 == v {print $2; exit}' "$TMPDIR/versions-$STREAM")
52		URL="https://github.com/NelloKudo/spritz-wine/releases/download/$TAG/$ASSET_PREFIX-$VER-x86_64.tar.xz"
53		HASH=$(nix store prefetch-file --json --unpack "$URL" | jq -r .hash)
54		jq ".${STREAM}[\"$VER\"] = { url: \"$URL\", hash: \"$HASH\" }" "$JSON" >"$JSON.tmp"
55		mv "$JSON.tmp" "$JSON"
56		UPDATED="$UPDATED $STREAM:$VER"
57	done
58done
59
60if [ -n "$UPDATED" ]; then
61	echo "spritz-wine-bin:$UPDATED"
62fi