diff --git a/scripts/build-package.ts b/scripts/build-package.ts index f53a598..cce9237 100644 --- a/scripts/build-package.ts +++ b/scripts/build-package.ts @@ -72,15 +72,31 @@ const COMPONENTS: Component[] = [ }, ]; +/** + * Das neueste Archiv, das zum Muster passt. Bewusst nicht nur `releases/latest`: + * whisper.cpp legt seit 2026-09 die Programme in eine eigene Veroeffentlichung + * `b` am selben Tag wie die Version, und die Version selbst (z. B. + * v1.9.5, "latest") hat gar keine Archive. Die `b`-Staende sind mal als + * Vorabversion markiert, mal nicht - wer Vorabversionen ueberspringt, landet + * bei einem Stand von vor zwei Versionen. Der erste Lauf der Pipeline ist + * genau daran gescheitert. + */ async function githubAsset(repoName: string, pattern: RegExp): Promise { - const res = await fetch(`https://api.github.com/repos/${repoName}/releases/latest`, { + const res = await fetch(`https://api.github.com/repos/${repoName}/releases?per_page=30`, { headers: { 'user-agent': 'abdulive-build' }, }); if (!res.ok) throw new Error(`GitHub-API ${res.status} fuer ${repoName}`); - const rel = await res.json() as { assets: Array<{ name: string; browser_download_url: string }> }; - const asset = rel.assets.find((a) => pattern.test(a.name)); - if (!asset) throw new Error(`Kein passendes Archiv in ${repoName} (${pattern})`); - return asset.browser_download_url; + const rels = await res.json() as Array<{ + tag_name: string; draft: boolean; + assets: Array<{ name: string; browser_download_url: string }>; + }>; + // Die API liefert die neuesten zuerst. + for (const rel of rels) { + if (rel.draft) continue; + const asset = rel.assets.find((a) => pattern.test(a.name)); + if (asset) return asset.browser_download_url; + } + throw new Error(`Kein passendes Archiv in ${repoName} (${pattern})`); } // ---------------------------------------------------------------- Werkzeug @@ -159,7 +175,9 @@ async function main(): Promise { // html/css/js gehoeren seit den Overlay-Seiten dazu: die liegen in // apps/overlay-web/public und werden zur Laufzeit von der Platte // gelesen. Fehlen sie im Paket, liefert der Server 404 statt Overlay. - if (!/\.(ts|sql|json|html|css|js|svg|png|woff2)$/.test(rel)) continue; + // Dieselben Endungen, die der Overlay-Server ausliefert (TYPES in + // apps/overlay-server/src/server.ts) - sonst fehlt z. B. das Manifest des Pults. + if (!/\.(ts|sql|json|html|css|js|svg|png|jpg|woff2|webmanifest)$/.test(rel)) continue; files.push({ name: `app/${dir}/${rel}`, data: await fs.readFile(path.join(repo, dir, rel)) }); } }