Workflow .gitea/workflows/backend.yaml z trzema jobami: - lint ruff check oraz ruff format --check --diff - test testy jednostkowe i kontrakt API, plus compileall całego pakietu - image testowy build obrazu; job czeka na lint i test Job image nie poprzestaje na zbudowaniu obrazu - uruchamia kontener bez prawdziwego tokenu Discorda i czeka, aż /api/status odpowie. Panel łączy się z backendem po sieci, więc sam start procesu niczego nie dowodzi. Zapytanie leci z wnętrza kontenera, dzięki czemu krok nie zależy od tego, czy runner ma zainstalowanego curla albo wgeta. Filtry paths ograniczają uruchomienia do zmian w kodzie Pythona, zależnościach, konfiguracji lintera, Dockerfile i samym workflow. Zależności instalują się z gotowych kółek, więc obraz CI nie potrzebuje kompilatora. ffmpeg i libopus są wymagane dopiero przy odtwarzaniu, a testy nie dotykają warstwy audio. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>