From 381ea404fd33ed0863d5a2d7eac9e7d7b9762df5 Mon Sep 17 00:00:00 2001 From: JGZYES Date: Wed, 2 Sep 2026 22:12:11 +0800 Subject: [PATCH] git.php: release assets link to local /releases//... (GitHub-style per-version store); downloader script tools/fetch-releases.sh --- .gitignore | 1 + tools/fetch-releases.sh | 14 ++++++++++++++ web/git.php | 13 +++++++++---- 3 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 tools/fetch-releases.sh diff --git a/.gitignore b/.gitignore index 2032090..e80e135 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,4 @@ # source browser cache clone web/.src/ web/git/ +web/releases/ diff --git a/tools/fetch-releases.sh b/tools/fetch-releases.sh new file mode 100644 index 0000000..03cd0a6 --- /dev/null +++ b/tools/fetch-releases.sh @@ -0,0 +1,14 @@ +#!/bin/bash +# Download every PMM release asset (except the huge mirror.zip snapshots) into +# web/releases// so the git.php Releases page links to this server. +set -u +REPO=JGZYES/ParlzPackageManger +DEST="web/releases" +PATTERNS=(-p 'pmm' -p 'pmm.exe' -p 'pmm-*.zip' -p 'install.sh' -p '*_amd64.deb' -p '*_amd64.rpm' -p '*.pdm' -p 'pdm' -p 'pdm.exe') +mkdir -p "$DEST" +for tag in $(gh api "repos/$REPO/releases" --paginate -q '.[].tag_name'); do + echo "== $tag ==" + mkdir -p "$DEST/$tag" + gh release download "$tag" -R "$REPO" -D "$DEST/$tag" "${PATTERNS[@]}" 2>&1 | tail -1 || echo " (skip/err $tag)" +done +echo "done. Total: $(find "$DEST" -type f | wc -l) files, $(du -sh "$DEST" | cut -f1)" diff --git a/web/git.php b/web/git.php index d715163..438c878 100644 --- a/web/git.php +++ b/web/git.php @@ -72,12 +72,17 @@ function gh_api(string $url): array { return is_array($d) ? $d : []; } /* Prefer a local copy of a release asset on this server; fall back to GitHub. */ -function local_asset(string $name): ?string { - $cands = [__DIR__ . '/downloads/' . $name, __DIR__ . '/mirror/packages/pmm/' . $name, __DIR__ . '/' . $name]; +/* Prefer a local copy of a release asset (web/releases//, web/downloads/, + * web/mirror/, web root) on this server; fall back to GitHub. */ +function local_asset(string $name, string $tag = ''): ?string { + $cands = []; + if ($tag !== '') $cands[] = __DIR__ . '/releases/' . $tag . '/' . $name; + $cands = array_merge($cands, [__DIR__ . '/downloads/' . $name, __DIR__ . '/mirror/packages/pmm/' . $name, __DIR__ . '/' . $name]); $base = realpath(__DIR__); foreach ($cands as $p) { if (@is_file($p)) { $rp = realpath($p); + if (strpos($rp, $base) !== 0) continue; return '/' . str_replace('\\', '/', substr(str_replace('\\', '/', $rp), strlen($base) + 1)); } } @@ -109,8 +114,8 @@ function render_releases(): void {