name: Testy # Odpala się przy każdym pushu (dowolna gałąź) oraz dla pull requestów do master. on: push: pull_request: branches: [master] jobs: logic-tests: name: Testy warstwy logicznej (silnik) runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Python 3.12 (jak w obrazach Dockera) uses: actions/setup-python@v5 with: python-version: "3.12" cache: pip cache-dependency-path: services/logic/requirements-dev.txt # Jądro efemeryd JPL (de421.bsp, ~17 MB). Cache'ujemy je między runami. - name: Cache jądra efemeryd uses: actions/cache@v4 with: path: services/logic/.ephemeris key: ephemeris-de421 # Pobieramy jawnie (a nie licząc na auto-pobranie przez Skyfield), żeby # brak jądra był twardym błędem, a nie cichym pomijaniem testów. - name: Pobierz jądro efemeryd (gdy brak w cache) run: | mkdir -p services/logic/.ephemeris if [ ! -s services/logic/.ephemeris/de421.bsp ]; then curl -fSL --retry 3 --max-time 300 \ -o services/logic/.ephemeris/de421.bsp \ https://ssd.jpl.nasa.gov/ftp/eph/planets/bsp/de421.bsp fi ls -lh services/logic/.ephemeris/de421.bsp - name: Instalacja zależności run: pip install -r services/logic/requirements-dev.txt # CI=true (ustawiane przez GitHub) sprawia, że brak silnika = błąd, # a nie pominięcie — patrz tests/conftest.py. - name: Testy (pytest) working-directory: services/logic env: PYTHONPATH: . EPHEMERIS_DIR: ${{ github.workspace }}/services/logic/.ephemeris run: pytest tests -q -rs swisseph-image: name: Build obrazu silnika B (swisseph) runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 # Obraz kompiluje pyswisseph ze źródeł (brak wheeli dla cp312), więc ten # build jest realnym testem Dockerfile'a — nie tylko pobraniem paczek. - name: docker build run: docker build -t astrololo/engine-swisseph:ci services/engine-swisseph - name: Smoke test (health + pozycje) run: | docker run -d --name swe -p 8003:8003 astrololo/engine-swisseph:ci for i in $(seq 1 30); do curl -fsS http://localhost:8003/health >/dev/null 2>&1 && break sleep 1 done curl -fsS http://localhost:8003/health echo # Horoskop referencyjny (30.04.1984) — ten sam, na którym opieramy testy # silnika własnego; sprawdzamy, że silnik B faktycznie liczy. curl -fsS -X POST http://localhost:8003/positions \ -H 'Content-Type: application/json' \ -d '{"when_utc":"1984-04-30T09:20:00Z","lat":50.0647,"lon":19.9450}' echo - name: Logi kontenera (gdy coś padło) if: failure() run: docker logs swe || true compile-all: name: Kontrola składni wszystkich warstw runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.12" # Sam kompilator — bez instalowania zależności warstw (w tym AGPL-owego # silnika swisseph, który nie wchodzi do produktu). - name: py_compile run: python -m compileall -q services