diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b86b86d..beef69c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,9 +2,16 @@ name: CI on: push: - branches: [main] + branches: [main, preview] pull_request: - branches: [main] + branches: [main, preview] + workflow_dispatch: + +# Cancela o run de um commit superado: sem isso, um run antigo pode terminar +# depois de um novo e republicar o playtest com código velho. +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true jobs: ci: @@ -23,6 +30,8 @@ jobs: name: ${{ matrix.name }} steps: - uses: actions/checkout@v4 + with: + persist-credentials: false - uses: pnpm/action-setup@v4 - uses: actions/setup-node@v4 with: @@ -30,3 +39,41 @@ jobs: cache: 'pnpm' - run: pnpm install --frozen-lockfile - run: pnpm ${{ matrix.script }} + + # Publica o link de playtest. Depende do job `ci` inteiro (lint, typecheck, + # test, build), para que nada reprovado vire o link público. + build-pages: + name: build-pages + needs: ci + if: github.ref == 'refs/heads/preview' + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + - uses: pnpm/action-setup@v4 + - uses: actions/setup-node@v4 + with: + node-version-file: '.nvmrc' + cache: 'pnpm' + - run: pnpm install --frozen-lockfile + - run: pnpm build:pages + - uses: actions/upload-pages-artifact@v3 + with: + path: dist + + deploy-pages: + name: deploy-pages + needs: build-pages + runs-on: ubuntu-latest + permissions: + pages: write + id-token: write + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - id: deployment + uses: actions/deploy-pages@v4 diff --git a/AGENTS.md b/AGENTS.md index dd96fa5..3842a21 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -68,6 +68,12 @@ src/ - **Pre-commit hooks**: Prettier + ESLint + typecheck + testes rodam automaticamente. - **Knip**: detecta dependências e código morto. +### Alvo do PR + +- **Todo PR tem `preview` como base.** É a branch de integração, e cada merge nela republica o link de playtest. +- **`main` só com pedido explícito do Vinícius.** `main` é produção na Vercel; promover `preview` → `main` é decisão dele, não passo automático de quem entrega uma feature. +- Na dúvida, abra contra `preview`. + --- ## 5. Ferramentas diff --git a/README.md b/README.md index a69efb1..1f5be2e 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,23 @@ Jogo de cartas brasileiro online. Gratuito, open-source, multiplayer P2P via bro - Browser game (mobile-first). - Multiplayer P2P via WebRTC. -- Deploy no Vercel. +- Deploy no Vercel (produção) e no GitHub Pages (playtest). + +## Onde jogar + +| Link | Branch | Para quê | +| -------------------------------------- | --------- | -------------------------------------------- | +| https://fdp-online.vercel.app | `main` | Produção. | +| https://dhinihan.github.io/fdp-online/ | `preview` | Playtest: balanceamento, diversão, feedback. | + +Os dois guardam ranking e troféus separados, porque `localStorage` é por origem. +Acrescente `?debug=1` a qualquer um dos links para ligar o modo de depuração. + +### Fluxo de branches + +PRs têm `preview` como base, e cada merge nela republica o link de playtest. +Promover `preview` → `main` (isto é, para produção) é decisão explícita, nunca +parte de entregar uma feature. ## Regras completas diff --git a/package.json b/package.json index 29cb2ac..7c39312 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "scripts": { "dev": "vite", "build": "tsc && vite build", + "build:pages": "tsc && vite build --base=/fdp-online/", "preview": "vite preview", "lint": "eslint .", "lint:fix": "eslint . --fix",