Files
homelab-updaterandClaude Sonnet 5 3726984991
ci / check (push) Successful in 33s
ci / publish (push) Successful in 29s
deploy: driver runs the real dry run behind a read-only Docker socket proxy
The image gets the docker client and compose plugin (static, pinned by digest from
docker:28.5.2-cli). The driver reads the compose projects read-only and talks to
docker-proxy (tecnativa/docker-socket-proxy 0.3.0, GET on containers only) over an
internal network; nothing in the driver can start, stop or change a container.
DEPLOY.md describes the dry run, its limits and the one-time switch from demo data.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-19 12:15:34 +02:00

2.7 KiB

Rozwój lokalny

Stan: fundamenty plus tryb „na sucho” (DEMO nieustawione): prawdziwe, tylko-odczytowe handlery plan, status, image_tags, image_resolve (src/app/dry-run/) i konfiguracja aplikacji z config/apps.json. Z DEMO=1 działają fałszywe handlery demo. Nic nie zmienia Dockera, nie używa modelu ani skryptów starego repo.

Uruchomienie

. ~/.nvm/nvm.sh && nvm use        # Node 24 (.nvmrc)
npm ci
npm run check                     # typecheck + lint + testy: musi być zielone przed commitem

Dwa procesy z jednego kodu, wspólna baza SQLite (WAL):

npm run build:web                 # frontend do dist/web (serwer go serwuje)
DEMO=1 npm run start:driver       # driver: bierze kroki z kolejki; bez DEMO=1 odmawia startu
npm run start:server              # appka: http://127.0.0.1:8080

Podczas pracy nad frontendem: npm run dev:web (Vite, proxy /api na port 8080). Zmiany w kodzie backendu: npm run dev:driver / npm run dev:server (node --watch).

Backend działa bez kroku budowania: Node 24 uruchamia .ts natywnie (importy z rozszerzeniem .ts, bez enum i parametrów-właściwości; pilnuje tego erasableSyntaxOnly).

Zmienne środowiskowe

Zmienna Domyślnie Znaczenie
DB_PATH ./data/queue.sqlite plik bazy (współdzielony przez oba procesy)
HOST / PORT 127.0.0.1 / 8080 adres serwera; w kontenerze ustaw HOST=0.0.0.0
WEB_DIR dist/web zbudowany frontend
DRIVER_IDLE_MS 60000 jak często driver sprawdza pustą kolejkę (w dev np. 1000)
DEMO 0 1 = uruchom fałszywe handlery i zasiej konfigurację demo

Wartości zmiennych o nazwach kończących się na TOKEN, SECRET, PASSWORD, API_KEY, _KEY driver maskuje dosłownie w każdym detail.

Układ kodu

src/domain   typy, reguły, porty (bez I/O)              -> nic
src/app      driver, przypadki użycia, demo handlery     -> domain
src/infra    SQLite (node:sqlite), zegar, logger         -> domain, app
src/http     Fastify, kontrakt zod, SSE                  -> domain, app, infra
src/web      Preact (przeglądarka)                       -> domain, http/contract.ts
src/main     punkty wejścia procesów, e2e                -> wszystko
src/testing  fejki portów i baza w pamięci (tylko testy)

Granice pilnuje ESLint (tools/layer-rules.ts, przetestowane w tools/layer-rules.test.ts). src/main, src/testing i *.test.* są z reguły wyłączone, bo składają warstwy.

Wersje narzędzi

TypeScript jest przypięty do ~6.0.3: typescript-eslint 8.70 deklaruje typescript <6.1.0, więc 7.x zepsułoby lint. Do ponownego sprawdzenia przy aktualizacji typescript-eslint.