name: Test on: [push] jobs: build-check: runs-on: test steps: - uses: actions/checkout@v4 - name: Build frontend run: cd frontend && npm ci && npm run build e2e-test: runs-on: test needs: build-check steps: - uses: actions/checkout@v4 - name: Install frontend deps run: cd frontend && npm ci - name: Install backend deps run: python3 -m venv /tmp/ci-venv && /tmp/ci-venv/bin/pip install -q -r backend/requirements.txt - name: E2E tests run: | # Start backend DB_PATH=/tmp/ci_planner_test.db FRONTEND_DIR=/dev/null DATA_DIR=/tmp/ci_planner_data \ /tmp/ci-venv/bin/uvicorn backend.main:app --port 8000 & # Start frontend (cd frontend && npx vite --port 5173) & # Wait for both servers for i in $(seq 1 30); do if curl -sf http://localhost:8000/api/backups > /dev/null 2>&1 && \ curl -sf http://localhost:5173/ > /dev/null 2>&1; then echo "Both servers ready" break fi sleep 1 done # Run core cypress specs cd frontend npx cypress run --spec "\ cypress/e2e/app-load.cy.js,\ cypress/e2e/auth-flow.cy.js,\ cypress/e2e/navigation.cy.js,\ cypress/e2e/api-health.cy.js,\ cypress/e2e/api-crud.cy.js,\ cypress/e2e/notes-flow.cy.js,\ cypress/e2e/tasks-flow.cy.js,\ cypress/e2e/reminders-flow.cy.js\ " --config video=false EXIT_CODE=$? # Cleanup pkill -f "uvicorn backend" || true pkill -f "node.*vite" || true rm -f /tmp/ci_planner_test.db rm -rf /tmp/ci_planner_data exit $EXIT_CODE