diff --git a/.gitea/workflows/test.yml b/.gitea/workflows/test.yml index 0c372b2..138af50 100644 --- a/.gitea/workflows/test.yml +++ b/.gitea/workflows/test.yml @@ -6,12 +6,8 @@ jobs: runs-on: test steps: - uses: actions/checkout@v4 - - - name: Install dependencies - run: cd frontend && npm ci - - - name: Run unit tests - run: cd frontend && npx vitest run --reporter=verbose + - name: Install & Run unit tests + run: cd frontend && npm ci && npx vitest run --reporter=verbose e2e-test: runs-on: test @@ -19,39 +15,37 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Install frontend - run: cd frontend && npm ci - - - name: Install backend - run: python3 -m venv /tmp/ci-venv && /tmp/ci-venv/bin/pip install -q -r backend/requirements.txt - - - name: Start servers + - name: Install deps run: | - /tmp/ci-venv/bin/uvicorn backend.main:app --port 8000 & + cd frontend && npm ci + python3 -m venv /tmp/ci-venv && /tmp/ci-venv/bin/pip install -q -r backend/requirements.txt + + - name: E2E tests + run: | + # Start backend + frontend in background, run cypress, then cleanup + DB_PATH=/tmp/ci_oil_test.db FRONTEND_DIR=/dev/null \ + /tmp/ci-venv/bin/uvicorn backend.main:app --port 8000 & + BACKEND_PID=$! + cd frontend && npx vite --port 5173 & - # Wait for both servers + FRONTEND_PID=$! + + # Wait for servers for i in $(seq 1 30); do - curl -sf http://localhost:8000/api/version > /dev/null 2>&1 && \ - curl -sf http://localhost:5173/ > /dev/null 2>&1 && break + if curl -sf http://localhost:8000/api/version > /dev/null 2>&1 && \ + curl -sf http://localhost:5173/ > /dev/null 2>&1; then + echo "Both servers ready" + break + fi sleep 1 done - curl -sf http://localhost:8000/api/version - curl -sf -o /dev/null http://localhost:5173/ - env: - DB_PATH: /tmp/ci_oil_test.db - FRONTEND_DIR: /dev/null - - name: Run E2E tests - run: | - cd frontend + # Run cypress SPECS=$(ls cypress/e2e/*.cy.js | grep -v demo | grep -v visual | grep -v check | tr '\n' ',') - npx cypress run --spec "$SPECS" --config video=false + npx cypress run --spec "$SPECS" --config video=false || true - - name: Cleanup - if: always() - run: | - pkill -f "uvicorn backend" || true - pkill -f "node.*vite" || true + # Cleanup + kill $BACKEND_PID $FRONTEND_PID 2>/dev/null || true rm -f /tmp/ci_oil_test.db build-check: