Native Windows-Auslieferung statt Container
Docker faellt weg. Das Projekt hat keine npm-Abhaengigkeiten und Node fuehrt TypeScript direkt aus - der Container schrieb nur noch drei Programme fest, und dafuer braucht es keine Virtualisierung, sondern einen Ordner. Der Anlass war, dass ADR-0004 zwar `docker compose pull` versprach, es aber nie ein veroeffentlichtes Image gab. Wer installieren wollte, musste whisper.cpp aus dem Quelltext uebersetzen. Plattformschicht (packages/core/src/platform.ts): - Programme werden neben der Anwendung gesucht, nicht im PATH - Daten unter %LOCALAPPDATA%, damit Installation und Update ohne Administratorrechte auskommen - Schriften mitgeliefert: ohne fontsdir setzt libass wortlos eine Ersatzschrift ein - gemessen 720 statt 826 Pixel Zeilenbreite Windows-Eigenheiten, an echtem ffmpeg 8.1 durchprobiert: - Pfade im Filtergraphen brauchen alle drei Schritte (Vorwaertsschraegstriche, escapter Doppelpunkt, Anfuehrungszeichen); je zwei davon reichen nicht - `nice` gibt es nicht, ersetzt durch os.setPriority Auslieferung: - scripts/build-package.ts baut das Paket, laeuft auch unter Linux - install.ps1 ohne Administratorrechte, Autostart ueber den Aufgabenplaner - update legt neue Fassungen bereit; eingespielt wird beim naechsten Start, nie mitten im Stream - ZIP lesen und schreiben ohne Abhaengigkeiten (packages/core/src/zip.ts) Kein `irm ... | iex`-Einzeiler: git.zeasy.dev antwortete instanzweit mit einer Umleitung auf /user/login, und `iex` fuehrte die Anmeldeseite als PowerShell aus. Der Updater verfolgt Umleitungen jetzt nicht und hat keine erfundene Vorgabeadresse mehr. Ausserdem: backup.ps1 war an zwei Stellen dokumentiert, aber nie geschrieben. ADR-0007 ersetzt ADR-0004. 84 Tests, Typpruefung sauber. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AhVSfMFdWnXKCv5JfLnArZ
This commit is contained in:
1 parent
71dd660d01
commit
5f6301268a
41 files changed
+2254
-312
No files matched your search
@@ -0,0 +1,44 @@
|
||||
// Tests fuer den Updater. Der Anlass fuer `looksLikeLogin` war ein echter
|
||||
// Fehlschlag: git.zeasy.dev verlangt instanzweit eine Anmeldung und antwortet
|
||||
// auf jede Adresse mit 303 auf /user/login. `irm ... | iex` folgte der
|
||||
// Umleitung und versuchte, die Anmeldeseite als PowerShell auszufuehren.
|
||||
|
||||
import { test } from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { isNewer, looksLikeLogin } from './update.ts';
|
||||
|
||||
test('vergleicht Versionen als Zahlen, nicht als Text', () => {
|
||||
// Der Fall, der bei Zeichenkettenvergleich falsch herauskaeme
|
||||
assert.equal(isNewer('2026.10.1', '2026.9.9'), true);
|
||||
assert.equal(isNewer('2026.9.9', '2026.10.1'), false);
|
||||
assert.equal(isNewer('0.5.1', '0.5.0'), true);
|
||||
assert.equal(isNewer('0.5.0', '0.5.0'), false);
|
||||
assert.equal(isNewer('0.10.0', '0.9.0'), true);
|
||||
});
|
||||
|
||||
test('fehlende Stellen zaehlen als Null', () => {
|
||||
assert.equal(isNewer('1.1', '1'), true);
|
||||
assert.equal(isNewer('1', '1.0.0'), false);
|
||||
});
|
||||
|
||||
test('erkennt eine Anmeldeseite am Inhaltstyp', () => {
|
||||
assert.equal(looksLikeLogin('text/html; charset=utf-8', Buffer.from('x')), true);
|
||||
assert.equal(looksLikeLogin('application/json', Buffer.from('{"version":"1"}')), false);
|
||||
assert.equal(looksLikeLogin('application/zip', Buffer.from([0x50, 0x4b, 3, 4])), false);
|
||||
});
|
||||
|
||||
test('erkennt sie auch, wenn der Inhaltstyp schweigt', () => {
|
||||
// Genau die Antwort, die git.zeasy.dev geliefert hat
|
||||
const gitea = Buffer.from(
|
||||
'<a href="/user/login?redirect_to=%2FZeasyAlex%2Fabdulive">See Other</a>.');
|
||||
assert.equal(looksLikeLogin(null, gitea), true);
|
||||
assert.equal(looksLikeLogin(null, Buffer.from('<!DOCTYPE html><html>')), true);
|
||||
});
|
||||
|
||||
test('haelt ein echtes Manifest nicht faelschlich fuer HTML', () => {
|
||||
const manifest = Buffer.from(JSON.stringify({
|
||||
version: '0.5.0', datei: 'abdulive-0.5.0-win-x64.zip', groesse: 119_000_000,
|
||||
sha256: 'a'.repeat(64),
|
||||
}));
|
||||
assert.equal(looksLikeLogin(null, manifest), false);
|
||||
});
|
||||
Reference in new issue
Block a user