|
| 1 | +#!/usr/bin/env bash |
| 2 | +# Pull latest Windows XP release from GitHub into the sofvault HTTP mirror. |
| 3 | +# Intended for cron on the sofvault host (same pull model as sof1maps sync). |
| 4 | +# |
| 5 | +# Example crontab (every 30 minutes): |
| 6 | +# */30 * * * * /path/to/sync_from_github.sh >> /var/log/sofvault-buddy-sync.log 2>&1 |
| 7 | +# |
| 8 | +# Override paths for testing: |
| 9 | +# SOFVAULT_ROOT=/tmp/sof_buddy/releases ./sync_from_github.sh |
| 10 | + |
| 11 | +set -euo pipefail |
| 12 | + |
| 13 | +ROOT="${SOFVAULT_ROOT:-/var/www/html/sofvault.org/sof_buddy/releases}" |
| 14 | +FILES="$ROOT/files" |
| 15 | +TMP="$(mktemp -d)" |
| 16 | +trap 'rm -rf "$TMP"' EXIT |
| 17 | + |
| 18 | +API="https://api.github.com/repos/d3nd3/sof_buddy/releases/latest" |
| 19 | +UA="sofvault-mirror/1.0" |
| 20 | +XP_ZIP="release_windows_xp.zip" |
| 21 | + |
| 22 | +curl -fsSL \ |
| 23 | + -H "Accept: application/vnd.github+json" \ |
| 24 | + -H "X-GitHub-Api-Version: 2022-11-28" \ |
| 25 | + -H "User-Agent: $UA" \ |
| 26 | + "$API" -o "$TMP/release.json" |
| 27 | + |
| 28 | +TAG="$(jq -r '.tag_name // .version // .tag // empty' "$TMP/release.json")" |
| 29 | +ASSET_URL="$(jq -r --arg zip "$XP_ZIP" ' |
| 30 | + [ .assets[]?.browser_download_url |
| 31 | + | select(test("/" + $zip + "$"; "i")) |
| 32 | + ] | first // empty |
| 33 | +' "$TMP/release.json")" |
| 34 | + |
| 35 | +if [[ -z "$TAG" || -z "$ASSET_URL" ]]; then |
| 36 | + echo "No valid release tag or $XP_ZIP asset found" |
| 37 | + exit 1 |
| 38 | +fi |
| 39 | + |
| 40 | +FN="$XP_ZIP" |
| 41 | +mkdir -p "$FILES" |
| 42 | + |
| 43 | +TAG_FILE="$ROOT/.synced_tag" |
| 44 | +NEED_DL=0 |
| 45 | +[[ ! -s "$FILES/$FN" ]] && NEED_DL=1 |
| 46 | +[[ ! -f "$TAG_FILE" || "$(<"$TAG_FILE")" != "$TAG" ]] && NEED_DL=1 |
| 47 | + |
| 48 | +if [[ "$NEED_DL" -eq 1 ]]; then |
| 49 | + curl -fL --retry 3 -H "User-Agent: $UA" "$ASSET_URL" -o "$FILES/$FN.tmp" |
| 50 | + mv "$FILES/$FN.tmp" "$FILES/$FN" |
| 51 | + echo "$TAG" > "$TAG_FILE" |
| 52 | +fi |
| 53 | + |
| 54 | +cat > "$ROOT/latest.json.tmp" <<EOF |
| 55 | +{ |
| 56 | + "tag_name": "$TAG", |
| 57 | + "html_url": "http://sofvault.org/sof_buddy/releases/latest", |
| 58 | + "zip_url": "http://sofvault.org/sof_buddy/releases/files/$FN" |
| 59 | +} |
| 60 | +EOF |
| 61 | +mv "$ROOT/latest.json.tmp" "$ROOT/latest.json" |
| 62 | + |
| 63 | +echo "$TAG" > "$ROOT/latest" |
| 64 | +echo "Synced $TAG -> $FN" |
0 commit comments