name: Checks on: [push, pull_request] permissions: contents: read jobs: test: runs-on: ubuntu-latest services: postgres: image: postgres:17 env: POSTGRES_PASSWORD: test-only POSTGRES_DB: meguri_test ports: ["5432:5432"] options: >- --health-cmd "pg_isready -U postgres" --health-interval 5s --health-timeout 5s --health-retries 10 env: MEGURI_TEST_DATABASE_URL: postgresql://postgres:test-only@127.0.0.1:5432/meguri_test steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@1.97.0 with: components: rustfmt, clippy - uses: Swatinem/rust-cache@v2 - run: cargo fmt --check - run: cargo clippy --locked --all-targets -- -D warnings - run: cargo test --locked - run: cargo test --locked --test integration -- --ignored --test-threads=1 - uses: actions/setup-node@v4 with: node-version: 22 cache: npm - run: npm ci - run: npx playwright install --with-deps chromium - name: Browser and API checks env: DATABASE_URL: postgresql://postgres:test-only@127.0.0.1:5432/meguri_test MEGURI_SEED_DEMO: "true" MEGURI_ALLOW_SIGNUP: "true" MEGURI_BROWSER_CHANNEL: chromium run: | cargo build --locked target/debug/meguri > server.log 2>&1 & for i in $(seq 1 60); do curl -fsS http://127.0.0.1:3000/health/ready && break || sleep 1; done npm run test:browser - uses: actions/upload-artifact@v4 if: always() with: name: browser-evidence path: | test-results/ server.log