# CI e deploy num arquivo só: o Gitea lê .gitea/workflows e ignora .github/workflows quando esta pasta existe. # - verify: lint, tipos, testes e build. O deploy só roda se ele passar. # - audit: alertas de segurança das dependências (fica vermelho sozinho, sem travar o deploy). # - e2e: testes de ponta a ponta na build de produção (informativo). # - deploy: Vercel CLI. Branch padrão -> produção; demais branches -> preview; pull requests não publicam. # Token: secret VERCEL_TOKEN de nível de usuário no Gitea. Projeto na Vercel = nome do repo # (ou a variável VERCEL_PROJECT do repo). O build roda na Vercel; o runner só envia o código. name: CI "on": push: pull_request: workflow_dispatch: 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 test:jogo - run: pnpm build audit: 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 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 deploy: needs: verify if: github.event_name != 'pull_request' runs-on: ubuntu-latest env: VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} VERCEL_SCOPE: asemlk54-1928s-projects steps: - uses: actions/checkout@v6 - uses: actions/setup-node@v6 with: node-version: 22 # versão fixa do CLI: um pacote sem versão num pipeline de produção é risco de cadeia de suprimentos - run: npm install --global vercel@61.1.0 - name: Deploy run: | PROJECT=$(echo "${{ vars.VERCEL_PROJECT || github.event.repository.name }}" | tr '[:upper:]' '[:lower:]') if [ "${{ github.ref_name }}" = "${{ github.event.repository.default_branch }}" ]; then PROD=--prod else PROD= fi vercel link --yes --project "$PROJECT" --scope "$VERCEL_SCOPE" --token "$VERCEL_TOKEN" vercel deploy $PROD --token "$VERCEL_TOKEN"