merge: integra o deploy da Vercel e unifica CI e deploy num pipeline
Traz da main do Gitea o deploy pela Vercel (vercel.json) e o README redesenhado, atualizado para a stack atual (sem Motion, GSAP, React Three Fiber, Drei, Cobe, clsx e tailwind-merge). CI e deploy passam a viver em .gitea/workflows/ci.yml, porque o Gitea ignora .github/workflows quando .gitea/workflows existe: verify (lint, tipos, testes, build) -> deploy na Vercel (padrão -> produção, demais -> preview, PR não publica); audit e e2e em jobs próprios. Vercel CLI fixo em 61.1.0.
This commit is contained in:
commit
34c7eb7f8c
4 files changed
+269
-218
No files matched your search
@@ -0,0 +1,107 @@
|
||||
# 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 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 [email protected]
|
||||
- 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"
|
||||
Reference in new issue
Block a user