Files
DeskcommCRM/tsconfig.json
T
Rafael MelgaçoandClaude Opus 5 d6ae200192 fix(imagem): o build de produção para de typechecar teste — e o PR passa a gatear a imagem
A imagem Docker do self-host quebrou na `main` e nenhum check obrigatório viu.

## O defeito

`.dockerignore` deixa `tests/` fora da imagem, de propósito. Mas há 7 arquivos
`*.test.ts` COLOCADOS (dentro de `app/`, `components/`, `lib/`) que importam
`@/tests/helpers/*` e `@/tests/support/*`. A partir do next 16.3, o `next build`
typecheca esses colocados — e dentro da imagem os módulos não existem.

Causa estabelecida com uma variável só, mesma árvore, sem `tests/`:

    next 16.2.12  → build exit 0
    next 16.3.0   → build exit 1, 7× TS2307 "Cannot find module '@/tests/...'"

A primeira tentativa de conserto foi manter `tests/helpers` no contexto. É
remendo: passa do TS2307 e cai no TS2339 do jest-dom, cuja augmentação de tipos
também mora em `tests/`. Preservar teste dentro da imagem é perseguir o
sintoma — o build de produção não tem por que compilar teste.

## O conserto

`tsconfig.json` (o que o `next build` usa) exclui `**/*.test.ts(x)` e `tests/**`.
`tsconfig.typecheck.json` reinclui tudo, e é para ele que o `pnpm typecheck`
aponta. A imagem fica hermética sem perder um arquivo de cobertura de tipos.

Medido:

    build sem tests/                                   → exit 0, 0 erros TS
    erro de tipo em tests/unit/rbac-matrix.test.ts     → typecheck exit 2 (TS2322)
    erro de tipo em app/.../version/route.test.ts      → typecheck exit 2 (TS2322)
    ambos restaurados                                  → typecheck exit 0

O segundo e o terceiro são o que impede este commit de ser "apagar a guarda":
os dois lados da fronteira continuam vigiados.

## A catraca

`publish-image.yml` rodava só em push na `main`, em tag e em release — nunca em
`pull_request`. Nenhum PR conseguia revelar que quebrava a imagem, e foi por
isso que um bump passou pelos quatro obrigatórios e derrubou o artefato que o
cliente instala. Agora o PR CONSTRÓI a imagem (o gate) e não publica
(`push: false` em PR, login pulado) — fork não tem escrita no GHCR, e publicar
código não revisado seria pior que não gatear.

Falta um passo que é do mantenedor: incluir este check na branch protection.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L2dRaL9UCKhhwJLUbFTsHW
2026-08-12 09:19:11 -03:00

50 lines
883 B
JSON

{
"compilerOptions": {
"target": "ES2022",
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"allowJs": false,
"skipLibCheck": true,
"strict": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "react-jsx",
"incremental": true,
"forceConsistentCasingInFileNames": true,
"noUncheckedIndexedAccess": true,
"plugins": [
{
"name": "next"
}
],
"paths": {
"@/*": [
"./*"
]
}
},
"include": [
"next-env.d.ts",
"**/*.ts",
"**/*.tsx",
".next/types/**/*.ts",
".next/dev/types/**/*.ts"
],
"exclude": [
"node_modules",
".next",
"dist",
"scripts/**",
"**/*.test.ts",
"**/*.test.tsx",
"tests/**"
]
}