update/navibeat
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