Adopt Bun runtime across build pipelines
This commit is contained in:
parent
281ecd5f6f
commit
c3237dfb64
6 changed files with 44 additions and 10 deletions
5
.github/workflows/ci-cd-web-desktop.yml
vendored
5
.github/workflows/ci-cd-web-desktop.yml
vendored
|
|
@ -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: |
|
||||||
|
|
|
||||||
10
.github/workflows/quality-checks.yml
vendored
10
.github/workflows/quality-checks.yml
vendored
|
|
@ -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
|
||||||
|
|
|
||||||
17
README.md
17
README.md
|
|
@ -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)
|
||||||
|
|
|
||||||
4
convex/_generated/api.d.ts
vendored
4
convex/_generated/api.d.ts
vendored
|
|
@ -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;
|
||||||
|
|
|
||||||
10
docs/DEV.md
10
docs/DEV.md
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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",
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue