fix(docker,s3): corrigir CRLF no entrypoint e região S3 vazia — v2.3.7

- Adicionado .gitattributes com eol=lf para scripts shell e Dockerfile
- Dockerfile: sed -i 's/\r$//' no entrypoint para eliminar CRLF em ambientes Windows/WSL2
- s3-client.ts: substituído ?? por || para tratar string vazia em S3_REGION e demais vars
- CHANGELOG, package.json e lockfile atualizados para v2.3.7

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Felipe Coutinho
2026-04-11 17:50:44 +00:00
parent 9a7ae0fa3d
commit aa85cf8b29
6 changed files with 1492 additions and 1422 deletions

4
.gitattributes vendored Normal file
View File

@@ -0,0 +1,4 @@
# Força LF para arquivos que precisam de line endings Unix no container
*.sh text eol=lf
docker-entrypoint.sh text eol=lf
Dockerfile text eol=lf

View File

@@ -7,6 +7,31 @@ e este projeto adere ao [Versionamento Semântico](https://semver.org/lang/pt-BR
## [Unreleased]
## [2.3.7] - 2026-04-11
### Adicionado
- Dashboard: novos widgets configuráveis — Anexos (resumo de arquivos do período), Inbox (snapshot de pré-lançamentos pendentes) e Tendências de Categoria
- Lançamentos: filtro por status de pagamento (somente pagos / somente não pagos) e filtro por presença de anexo
- Lançamentos: indicador visual no status de liquidação para lançamentos de cartão de crédito com fatura paga — exibe ícone verde com tooltip explicativo
- Scripts: `scripts/install-deps.sh` — script de preparação para servidores Ubuntu 24.04 limpos (instala Docker, Node.js 22, pnpm via Homebrew)
### Alterado
- Fonte: substituída fonte local `America` por `Inter` (Google Fonts, self-hosted pelo Next.js) — elimina arquivos `.woff2` do repositório
- Tipografia: peso tipográfico padronizado de `font-medium` para `font-semibold` em títulos, rótulos e valores monetários em toda a interface
- Parcelas: redesenho do card de grupo de parcelas — expandindo para dialog de detalhes com parcelas pagas/pendentes separadas
- Inbox: redesenho do card de pré-lançamento — logo maior, hierarquia tipográfica melhorada
- Lançamentos: filtros de tipo, condição e forma de pagamento agora usam slugs em URL (ex: `receita` em vez do valor literal com acentos)
- Estabelecimento: popover de autocomplete agora respeita a largura do input ao abrir
- CSP: adicionado `frame-src` para permitir preview de anexos PDF via S3
### Corrigido
- Docker: corrigido crash loop no container com mensagem `exec /app/docker-entrypoint.sh: no such file or directory` causado por CRLF no `docker-entrypoint.sh` em ambientes Windows/WSL2 — adicionado `sed -i 's/\r$//'` no Dockerfile e `.gitattributes` com `eol=lf` para scripts shell
- S3: corrigido `Error: Region is missing` ao usar o app sem S3 configurado — `S3_REGION` vazio (string vazia) não era tratado pelo operador `??`; substituído por `||` em todo o `s3-client.ts`
- i18n: corrigidas mensagens de erro que exibiam "Payer" em inglês em vez de "Pagador"
## [2.3.6] - 2026-04-09
### Corrigido

View File

@@ -87,7 +87,9 @@ COPY --from=builder --chown=nextjs:nodejs /app/src/db ./src/db
# Copiar entrypoint de migrations
COPY docker-entrypoint.sh ./
RUN chmod +x /app/docker-entrypoint.sh && chown nextjs:nodejs /app/docker-entrypoint.sh
RUN sed -i 's/\r$//' /app/docker-entrypoint.sh && \
chmod +x /app/docker-entrypoint.sh && \
chown nextjs:nodejs /app/docker-entrypoint.sh
# Definir variáveis de ambiente de produção
ENV NODE_ENV=production \

View File

@@ -1,6 +1,6 @@
{
"name": "openmonetis",
"version": "2.3.6",
"version": "2.3.7",
"private": true,
"packageManager": "pnpm@10.33.0",
"scripts": {
@@ -17,30 +17,56 @@
"db:push": "drizzle-kit push",
"db:extensions": "tsx scripts/postgres/enable-extensions.ts",
"db:studio": "drizzle-kit studio",
"docker:up": "docker compose up --build",
"postinstall": "cp node_modules/pdfjs-dist/build/pdf.worker.min.mjs public/pdf.worker.min.mjs",
"docker:up:db": "docker compose up -d db",
"// --- Docker ---": "---",
"docker:up:local": "docker compose --profile local up",
"//docker:up:local": "Sobe app + banco PostgreSQL local juntos (imagem do Docker Hub)",
"docker:up": "docker compose up --build",
"//docker:up": "Sobe apenas o app com build local (banco deve estar rodando separado)",
"docker:up:d": "docker compose up --build -d",
"//docker:up:d": "Sobe apenas o app com build local em background (detached)",
"docker:up:db": "docker compose up -d db",
"//docker:up:db": "Sobe apenas o banco PostgreSQL em background",
"docker:down": "docker compose down",
"//docker:down": "Para e remove os containers",
"docker:down:volumes": "docker compose down -v",
"//docker:down:volumes": "Para containers e remove volumes (APAGA os dados!)",
"docker:logs": "docker compose logs -f",
"//docker:logs": "Acompanha logs de todos os containers em tempo real",
"docker:logs:app": "docker compose logs -f app",
"//docker:logs:app": "Acompanha logs do container da aplicação",
"docker:logs:db": "docker compose logs -f db",
"//docker:logs:db": "Acompanha logs do container do banco",
"docker:restart": "docker compose restart",
"//docker:restart": "Reinicia todos os containers",
"docker:rebuild": "docker compose up --build --force-recreate",
"//docker:rebuild": "Rebuild completo forçando recriação dos containers",
"backup": "bash scripts/backup.sh"
},
"dependencies": {
"@ai-sdk/anthropic": "^3.0.65",
"@ai-sdk/google": "^3.0.55",
"@ai-sdk/openai": "^3.0.49",
"@aws-sdk/client-s3": "^3.1022.0",
"@aws-sdk/s3-request-presigner": "^3.1022.0",
"@better-auth/passkey": "^1.5.6",
"@ai-sdk/anthropic": "^3.0.68",
"@ai-sdk/google": "^3.0.61",
"@ai-sdk/openai": "^3.0.52",
"@aws-sdk/client-s3": "^3.1027.0",
"@aws-sdk/s3-request-presigner": "^3.1027.0",
"@better-auth/passkey": "^1.6.2",
"@dnd-kit/core": "^6.3.1",
"@dnd-kit/sortable": "^10.0.0",
"@dnd-kit/utilities": "^3.2.2",
"@openrouter/ai-sdk-provider": "^2.3.3",
"@openrouter/ai-sdk-provider": "^2.5.1",
"@radix-ui/react-alert-dialog": "1.1.15",
"@radix-ui/react-avatar": "1.1.11",
"@radix-ui/react-checkbox": "1.3.3",
@@ -61,11 +87,11 @@
"@radix-ui/react-toggle-group": "1.1.11",
"@radix-ui/react-tooltip": "1.2.8",
"@remixicon/react": "4.9.0",
"@tanstack/react-query": "^5.96.2",
"@tanstack/react-query": "^5.97.0",
"@tanstack/react-table": "8.21.3",
"@tanstack/react-virtual": "^3.13.23",
"ai": "^6.0.143",
"better-auth": "1.5.6",
"ai": "^6.0.154",
"better-auth": "1.6.2",
"canvas-confetti": "^1.9.4",
"class-variance-authority": "0.7.1",
"clsx": "2.1.1",
@@ -75,14 +101,14 @@
"exceljs": "^4.4.0",
"jspdf": "^4.2.1",
"jspdf-autotable": "^5.0.7",
"next": "16.2.2",
"next": "16.2.3",
"next-themes": "0.4.6",
"pdfjs-dist": "^5.6.205",
"pg": "8.20.0",
"radix-ui": "^1.4.3",
"react": "19.2.4",
"react": "19.2.5",
"react-day-picker": "^9.14.0",
"react-dom": "19.2.4",
"react-dom": "19.2.5",
"recharts": "3.8.1",
"resend": "^6.10.0",
"sonner": "2.0.7",
@@ -90,17 +116,22 @@
"vaul": "1.1.2",
"zod": "4.3.6"
},
"pnpm": {
"overrides": {
"defu": "6.1.7"
}
},
"devDependencies": {
"@biomejs/biome": "2.4.10",
"@tailwindcss/postcss": "4.2.2",
"@types/canvas-confetti": "^1.9.0",
"@types/node": "25.5.0",
"@types/node": "25.5.2",
"@types/pg": "^8.20.0",
"@types/react": "19.2.14",
"@types/react-dom": "19.2.3",
"dotenv": "^17.4.0",
"dotenv": "^17.4.1",
"drizzle-kit": "0.31.10",
"knip": "^6.3.0",
"knip": "^6.3.1",
"tailwindcss": "4.2.2",
"tsx": "4.21.0",
"typescript": "6.0.2"

2802
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,13 +1,13 @@
import { S3Client } from "@aws-sdk/client-s3";
export const s3 = new S3Client({
endpoint: process.env.S3_ENDPOINT ?? "",
region: process.env.S3_REGION ?? "auto",
endpoint: process.env.S3_ENDPOINT || "",
region: process.env.S3_REGION || "auto",
credentials: {
accessKeyId: process.env.S3_ACCESS_KEY_ID ?? "",
secretAccessKey: process.env.S3_SECRET_ACCESS_KEY ?? "",
accessKeyId: process.env.S3_ACCESS_KEY_ID || "",
secretAccessKey: process.env.S3_SECRET_ACCESS_KEY || "",
},
forcePathStyle: true,
});
export const S3_BUCKET = process.env.S3_BUCKET ?? "attachments";
export const S3_BUCKET = process.env.S3_BUCKET || "attachments";