name: CI "on": push: pull_request: permissions: contents: read jobs: verify: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: pnpm/action-setup@v6 - uses: actions/setup-node@v6 with: node-version: 22 cache: pnpm - run: pnpm install --frozen-lockfile - run: pnpm lint - run: pnpm typecheck - run: pnpm test -- --runInBand - run: pnpm build - run: pnpm audit --prod --audit-level=high - run: pnpm audit --dev --audit-level=high e2e: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: pnpm/action-setup@v6 - uses: actions/setup-node@v6 with: node-version: 22 cache: pnpm - run: pnpm install --frozen-lockfile - run: pnpm exec playwright install --with-deps chromium - run: pnpm build - name: Subir o servidor de produção run: pnpm start -p 3001 & - name: Esperar a porta 3001 run: | for attempt in $(seq 1 60); do if curl --silent --fail --output /dev/null http://localhost:3001/; then exit 0 fi sleep 2 done echo "O servidor não respondeu na porta 3001 em 120 s" >&2 exit 1 - name: Testes de ponta a ponta run: pnpm test:e2e env: BASE_URL: http://localhost:3001 - name: Publicar test-results/ if: ${{ !cancelled() }} uses: actions/upload-artifact@v4 with: name: e2e-test-results path: test-results/ if-no-files-found: ignore retention-days: 7