Paketbau: whisper-Archiv auch in den b-Veroeffentlichungen suchen, Manifest mitnehmen
Paket bauen und veroeffentlichen / paket (push) Successful in 43s

whisper.cpp v1.9.5 ist als latest markiert, hat aber keine Archive; die
Windows-Programme liegen in b5454. Daran ist der erste Lauf der Pipeline
gescheitert. Dazu fehlte manifest.webmanifest im Paket.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ZeasyAlexandClaude Opus 5.5 committed 2026-10-26 11:58:01 +01:00
1 parent 8be195d938
commit 5eaae9129f
1 file changed
+24 -6
+24 -6
View File
@@ -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<nummer>` 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<string> { async function githubAsset(repoName: string, pattern: RegExp): Promise<string> {
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' }, headers: { 'user-agent': 'abdulive-build' },
}); });
if (!res.ok) throw new Error(`GitHub-API ${res.status} fuer ${repoName}`); 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 rels = await res.json() as Array<{
const asset = rel.assets.find((a) => pattern.test(a.name)); tag_name: string; draft: boolean;
if (!asset) throw new Error(`Kein passendes Archiv in ${repoName} (${pattern})`); assets: Array<{ name: string; browser_download_url: string }>;
return asset.browser_download_url; }>;
// 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 // ---------------------------------------------------------------- Werkzeug
@@ -159,7 +175,9 @@ async function main(): Promise<void> {
// html/css/js gehoeren seit den Overlay-Seiten dazu: die liegen in // html/css/js gehoeren seit den Overlay-Seiten dazu: die liegen in
// apps/overlay-web/public und werden zur Laufzeit von der Platte // apps/overlay-web/public und werden zur Laufzeit von der Platte
// gelesen. Fehlen sie im Paket, liefert der Server 404 statt Overlay. // 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)) }); files.push({ name: `app/${dir}/${rel}`, data: await fs.readFile(path.join(repo, dir, rel)) });
} }
} }