Adopt Bun runtime across build pipelines

This commit is contained in:
Esdras Renan 2025-11-04 22:52:46 -03:00
parent 281ecd5f6f
commit c3237dfb64
6 changed files with 44 additions and 10 deletions

View file

@ -80,6 +80,9 @@ jobs:
node-version: 20 node-version: 20
cache: 'pnpm' cache: 'pnpm'
- name: Verify Bun runtime
run: bun --version
- name: Permissions diagnostic (server paths) - name: Permissions diagnostic (server paths)
run: | run: |
set +e set +e
@ -189,7 +192,7 @@ jobs:
corepack enable || true corepack enable || true
pnpm --filter web install --no-frozen-lockfile pnpm --filter web install --no-frozen-lockfile
pnpm prisma:generate pnpm prisma:generate
pnpm build pnpm build:bun
- name: Publish build to stable APP_DIR directory - name: Publish build to stable APP_DIR directory
run: | run: |

View file

@ -33,6 +33,14 @@ jobs:
node-version: 20 node-version: 20
cache: pnpm cache: pnpm
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: 1.3.1
- name: Verify Bun
run: bun --version
- name: Install dependencies - name: Install dependencies
run: pnpm install --frozen-lockfile run: pnpm install --frozen-lockfile
@ -55,4 +63,4 @@ jobs:
run: pnpm test run: pnpm test
- name: Build - name: Build
run: pnpm build run: pnpm build:bun

View file

@ -6,6 +6,7 @@ Aplicação **Next.js 16 (App Router)** com **React 19**, **Convex** e **Better
- Node.js >= 20 - Node.js >= 20
- pnpm >= 9 (habilite via `corepack prepare pnpm@9 --activate`) - pnpm >= 9 (habilite via `corepack prepare pnpm@9 --activate`)
- (Opcional) Bun >= 1.3 para usar o runtime/test runner do Bun (`bun run --bun ...`). Após instalar via script oficial, adicione `export PATH="$HOME/.bun/bin:$PATH"` ao seu shell (ex.: `.bashrc`) para ter `bun` disponível globalmente.
- CLI do Convex (`pnpm dlx convex dev` instalará automaticamente no primeiro uso) - CLI do Convex (`pnpm dlx convex dev` instalará automaticamente no primeiro uso)
## Configuração rápida ## Configuração rápida
@ -32,12 +33,14 @@ Aplicação **Next.js 16 (App Router)** com **React 19**, **Convex** e **Better
``` ```
6. Em um terminal, execute o backend em tempo real do Convex: 6. Em um terminal, execute o backend em tempo real do Convex:
```bash ```bash
pnpm convex:dev pnpm convex:dev:bun
``` ```
> Alternativa: `pnpm convex:dev` (runtime Node) caso queira manter o comportamento anterior.
7. Em outro terminal, suba o frontend Next.js (Turbopack): 7. Em outro terminal, suba o frontend Next.js (Turbopack):
```bash ```bash
pnpm dev pnpm dev:bun
``` ```
> Fallback: `pnpm dev` (Node) ou `pnpm dev:webpack` caso o Turbopack acione alguma incompatibilidade.
8. Com o Convex ativo, acesse `http://localhost:3000/dev/seed` uma vez para popular dados de demonstração (tickets, usuários, comentários) diretamente no banco do Convex. 8. Com o Convex ativo, acesse `http://localhost:3000/dev/seed` uma vez para popular dados de demonstração (tickets, usuários, comentários) diretamente no banco do Convex.
> Se o CLI perguntar sobre configuração do projeto Convex, escolha criar um novo deployment local (opção padrão) e confirme. As credenciais são armazenadas em `.convex/` automaticamente. > Se o CLI perguntar sobre configuração do projeto Convex, escolha criar um novo deployment local (opção padrão) e confirme. As credenciais são armazenadas em `.convex/` automaticamente.
@ -61,6 +64,10 @@ Para fluxos detalhados de desenvolvimento — banco de dados local (SQLite/Prism
## Scripts úteis ## Scripts úteis
- `pnpm dev:bun` — padrão atual para o Next.js com runtime Bun (`pnpm dev` usa Node como fallback).
- `pnpm convex:dev:bun` — runtime Bun para o Convex (`pnpm convex:dev` mantém o fluxo antigo).
- `pnpm build:bun` / `pnpm start:bun` — build e serve com Bun; use `pnpm build`/`pnpm start` se quiser ficar no Node.
- `pnpm dev:webpack` / `pnpm build:webpack` — fallback oficial caso Turbopack apresente problemas.
- `pnpm lint` — ESLint com as regras do projeto. - `pnpm lint` — ESLint com as regras do projeto.
- `pnpm test` — suíte de testes unitários (Vitest) em modo não interativo. - `pnpm test` — suíte de testes unitários (Vitest) em modo não interativo.
- `pnpm build``next build --turbopack` com otimizações para produção. - `pnpm build``next build --turbopack` com otimizações para produção.
@ -96,6 +103,12 @@ Após executar `pnpm auth:seed`, as credenciais padrão ficam disponíveis confo
Consulte `PROXIMOS_PASSOS.md` para acompanhar o backlog funcional e o progresso das iniciativas planejadas. Consulte `PROXIMOS_PASSOS.md` para acompanhar o backlog funcional e o progresso das iniciativas planejadas.
### Executar com Bun
- `pnpm dev:bun`, `pnpm convex:dev:bun`, `pnpm build:bun` e `pnpm start:bun` já estão configurados; internamente executam `bun run --bun <script>` para usar o runtime do Bun sem abrir mão do `pnpm`. O `cross-env` garante os valores esperados de `NODE_ENV` (`development`/`production`) para evitar warning/bugs no Next.
- Em caso de incompatibilidade do Turbopack (relatada em algumas combinações Bun + Next 16), use `pnpm dev:webpack` ou `pnpm build:webpack` como fallback imediato.
- Os testes continuam sob Vitest (`pnpm test`). Avalie `bun test` somente após validar que os matchers/relatos necessários estão disponíveis.
<!-- ci: smoke test 3 --> <!-- ci: smoke test 3 -->
## Diagnóstico de sessão da dispositivo (Desktop) ## Diagnóstico de sessão da dispositivo (Desktop)

View file

@ -14,8 +14,8 @@ import type * as bootstrap from "../bootstrap.js";
import type * as categories from "../categories.js"; import type * as categories from "../categories.js";
import type * as commentTemplates from "../commentTemplates.js"; import type * as commentTemplates from "../commentTemplates.js";
import type * as companies from "../companies.js"; import type * as companies from "../companies.js";
import type * as dashboards from "../dashboards.js";
import type * as crons from "../crons.js"; import type * as crons from "../crons.js";
import type * as dashboards from "../dashboards.js";
import type * as deviceExportTemplates from "../deviceExportTemplates.js"; import type * as deviceExportTemplates from "../deviceExportTemplates.js";
import type * as deviceFields from "../deviceFields.js"; import type * as deviceFields from "../deviceFields.js";
import type * as devices from "../devices.js"; import type * as devices from "../devices.js";
@ -58,8 +58,8 @@ declare const fullApi: ApiFromModules<{
categories: typeof categories; categories: typeof categories;
commentTemplates: typeof commentTemplates; commentTemplates: typeof commentTemplates;
companies: typeof companies; companies: typeof companies;
dashboards: typeof dashboards;
crons: typeof crons; crons: typeof crons;
dashboards: typeof dashboards;
deviceExportTemplates: typeof deviceExportTemplates; deviceExportTemplates: typeof deviceExportTemplates;
deviceFields: typeof deviceFields; deviceFields: typeof deviceFields;
devices: typeof devices; devices: typeof devices;

View file

@ -5,6 +5,7 @@ Este documento consolida o estado atual do ambiente de desenvolvimento, descreve
## Resumo rápido ## Resumo rápido
- **Node/PNPM**: Node 20.9+ (alinhado ao requisito do Next 15) + pnpm 9 (habilite via `corepack enable && corepack prepare pnpm@9 --activate`). - **Node/PNPM**: Node 20.9+ (alinhado ao requisito do Next 15) + pnpm 9 (habilite via `corepack enable && corepack prepare pnpm@9 --activate`).
- **Bun (runtime padrão)**: 1.3+ já instalado no runner e VPS (`bun --version`). Após instalar localmente, exporte `PATH="$HOME/.bun/bin:$PATH"` para tornar o binário disponível. Use `pnpm dev:bun` / `pnpm convex:dev:bun` / `pnpm build:bun` / `pnpm start:bun` para executar os scripts com `bun run --bun` (scripts Node continuam disponíveis como fallback).
- **Next.js 15.5.5**: Projeto voltou para a versão estável (`next@15.5.5`) com Turbopack como bundler padrão e whitelist de domínios garantida pelo middleware. - **Next.js 15.5.5**: Projeto voltou para a versão estável (`next@15.5.5`) com Turbopack como bundler padrão e whitelist de domínios garantida pelo middleware.
- **Lint/Test/Build**: `pnpm lint`, `pnpm test`, `pnpm build`. O script de testes usa `vitest --run --passWithNoTests`, eliminando o modo watch interativo. - **Lint/Test/Build**: `pnpm lint`, `pnpm test`, `pnpm build`. O script de testes usa `vitest --run --passWithNoTests`, eliminando o modo watch interativo.
- **Banco DEV**: SQLite em `prisma/prisma/db.dev.sqlite`. Defina `DATABASE_URL="file:./prisma/db.dev.sqlite"` ao chamar CLI do Prisma. - **Banco DEV**: SQLite em `prisma/prisma/db.dev.sqlite`. Defina `DATABASE_URL="file:./prisma/db.dev.sqlite"` ao chamar CLI do Prisma.
@ -24,8 +25,9 @@ Este documento consolida o estado atual do ambiente de desenvolvimento, descreve
2. Rode o app Next.js: 2. Rode o app Next.js:
```bash ```bash
pnpm dev pnpm dev:bun
``` ```
> Alternativas: `pnpm dev` (Node) ou `pnpm dev:webpack` se precisar do fallback oficial.
3. Credenciais padrão (seed): `admin@sistema.dev / admin123`. 3. Credenciais padrão (seed): `admin@sistema.dev / admin123`.
4. Herdou dados antigos? Execute `node scripts/remove-legacy-demo-users.mjs` para limpar contas demo legadas. 4. Herdou dados antigos? Execute `node scripts/remove-legacy-demo-users.mjs` para limpar contas demo legadas.
@ -51,6 +53,8 @@ Este documento consolida o estado atual do ambiente de desenvolvimento, descreve
- `pnpm lint`: executa ESLint (flat config) sobre os arquivos do projeto. - `pnpm lint`: executa ESLint (flat config) sobre os arquivos do projeto.
- `pnpm test`: Vitest em modo não interativo (`--run --passWithNoTests`). Use `pnpm test -- --watch` somente quando quiser rodar em watch localmente. Inclui testes de API (rotas `/api/machines/*`) e utilitários de SMTP. - `pnpm test`: Vitest em modo não interativo (`--run --passWithNoTests`). Use `pnpm test -- --watch` somente quando quiser rodar em watch localmente. Inclui testes de API (rotas `/api/machines/*`) e utilitários de SMTP.
- `pnpm build`: `next build --turbopack`. - `pnpm build`: `next build --turbopack`.
- Scripts com Bun (padrão atual): `pnpm dev:bun`, `pnpm convex:dev:bun`, `pnpm build:bun`, `pnpm start:bun`. Eles mantêm o `pnpm` como orquestrador, apenas forçando o runtime do Bun via `bun run --bun`. O `cross-env` garante `NODE_ENV` consistente (`development`/`production`) para evitar warnings/falhas no Next.
- Fallback Webpack disponível via `pnpm dev:webpack` / `pnpm build:webpack` quando Turbopack não coopera (caso observado em combinações Bun + Next 16).
- `pnpm prisma:generate`: necessário antes do build quando o client Prisma muda. - `pnpm prisma:generate`: necessário antes do build quando o client Prisma muda.
### Automação no CI ### Automação no CI
@ -63,13 +67,13 @@ Etapas:
2. `pnpm prisma:generate`. 2. `pnpm prisma:generate`.
3. `pnpm lint`. 3. `pnpm lint`.
4. `pnpm test`. 4. `pnpm test`.
5. `pnpm build`. 5. `pnpm build:bun` (Bun 1.3.1 instalado via `oven-sh/setup-bun`).
O workflow dispara em todo `push`/`pull_request` para `main` e fornece feedback imediato sem depender do pipeline de deploy. O workflow dispara em todo `push`/`pull_request` para `main` e fornece feedback imediato sem depender do pipeline de deploy.
## Testes rápidos via curl (Convites & acessos) ## Testes rápidos via curl (Convites & acessos)
1. Rode `pnpm dev` e autentique-se em `http://localhost:3000/login` usando `admin@sistema.dev / admin123`. 1. Rode `pnpm dev:bun` (ou `pnpm dev` se preferir Node) e autentique-se em `http://localhost:3000/login` usando `admin@sistema.dev / admin123`.
2. Copie o valor do cookie `BETTER_AUTH_SESSION` e exporte no shell: `export COOKIE="BETTER_AUTH_SESSION=<valor>"`. 2. Copie o valor do cookie `BETTER_AUTH_SESSION` e exporte no shell: `export COOKIE="BETTER_AUTH_SESSION=<valor>"`.
### Usuários ### Usuários

View file

@ -4,7 +4,9 @@
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "next dev --turbopack", "dev": "next dev --turbopack",
"dev:webpack": "next dev --webpack",
"build": "next build --turbopack", "build": "next build --turbopack",
"build:webpack": "next build --webpack",
"start": "next start", "start": "next start",
"lint": "eslint", "lint": "eslint",
"prisma:generate": "prisma generate", "prisma:generate": "prisma generate",
@ -15,7 +17,11 @@
"auth:seed": "node scripts/seed-auth.mjs", "auth:seed": "node scripts/seed-auth.mjs",
"queues:ensure": "node scripts/ensure-default-queues.mjs", "queues:ensure": "node scripts/ensure-default-queues.mjs",
"desktop:dev": "pnpm --filter appsdesktop tauri dev", "desktop:dev": "pnpm --filter appsdesktop tauri dev",
"desktop:build": "pnpm --filter appsdesktop tauri build" "desktop:build": "pnpm --filter appsdesktop tauri build",
"dev:bun": "cross-env NODE_ENV=development bun run --bun dev",
"convex:dev:bun": "cross-env NODE_ENV=development bun run --bun convex:dev",
"build:bun": "cross-env NODE_ENV=production bun run --bun build",
"start:bun": "cross-env NODE_ENV=production bun run --bun start"
}, },
"dependencies": { "dependencies": {
"@dnd-kit/core": "^6.3.1", "@dnd-kit/core": "^6.3.1",