#!/usr/bin/env bash set -euo pipefail # Downloads release assets (parts + join.sh) and assembles dle-template.tar.gz. # Requirements: bash, curl, python3 OWNER="VC-HB3-Accelerator" REPO="Docs" TAG="v1.0.3" BASE="https://xn--80aqc0am6d.xn--p1ai/gitea" OUT_DIR="${1:-downloads}" mkdir -p "$OUT_DIR" cd "$OUT_DIR" echo "Fetching release assets list: ${OWNER}/${REPO} ${TAG}" python3 - <<'PY' import json import os import sys import urllib.request base = os.environ.get("BASE") owner = os.environ.get("OWNER") repo = os.environ.get("REPO") tag = os.environ.get("TAG") url = f"{base}/api/v1/repos/{owner}/{repo}/releases/tags/{tag}" with urllib.request.urlopen(url, timeout=60) as r: payload = json.loads(r.read().decode("utf-8")) assets = payload.get("assets") or [] need_prefixes = ( "dle-template.tar.gz.part-", "dle-template.tar.gz.join.sh", ) picked = [] for a in assets: name = a.get("name") or "" if name.startswith(need_prefixes): picked.append((name, a.get("browser_download_url") or "")) if not picked: raise SystemExit("No matching assets found in release (expected join.sh and part-*).") picked.sort(key=lambda t: t[0]) for name, url in picked: if not url: raise SystemExit(f"Missing browser_download_url for asset: {name}") print(f"{name}\t{url}") PY > .assets.tsv export BASE OWNER REPO TAG echo "Downloading assets to: $(pwd)" while IFS=$'\t' read -r name url; do if [[ -f "$name" ]]; then echo "Skip (exists): $name" continue fi echo "Download: $name" curl -fL --retry 5 --retry-delay 2 -o "$name" "$url" done < .assets.tsv if [[ ! -f "dle-template.tar.gz.join.sh" ]]; then echo "ERROR: dle-template.tar.gz.join.sh not found after download" >&2 exit 1 fi echo "Assembling dle-template.tar.gz" bash dle-template.tar.gz.join.sh echo "Done." ls -lh dle-template.tar.gz 2>/dev/null || true