Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5eaae9129f |
@@ -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)) });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user