6 KiB
Guia de DEV — Banco (Prisma), Auth e Desktop (Tauri)
Este guia descreve o que foi corrigido, por quê e como seguir no DEV, incluindo como gerar o executável do Desktop (Tauri) localmente.
O que foi feito e por quê
-
Ajuste do Prisma no DEV (P2021)
- Problema: o Prisma CLI lia o
.envda raiz (produção) e o banco local não tinha as tabelas do Better Auth (ex.:AuthUser,AuthSession). - Decisão: evitar conflito entre
.env(raiz) eprisma/.env— usamosDATABASE_URL=...inline nos comandos do Prisma, apontando para./prisma/db.dev.sqliteapenas no DEV. - Resultado: banco
prisma/prisma/db.dev.sqlitecriado/sincronizado e seed de usuários executado.
- Problema: o Prisma CLI lia o
-
Migração das abas do Desktop para shadcn/Radix
- O Tauri não roda Next.js. Para manter o visual consistente com o web, migramos as abas para um wrapper shadcn-like usando Radix Tabs e Tailwind (
apps/desktop/src/components/ui/tabs.tsx). - Incluímos badge de status equivalente ao web e o botão “Enviar inventário agora” (POST
/api/machines/inventory).
- O Tauri não roda Next.js. Para manter o visual consistente com o web, migramos as abas para um wrapper shadcn-like usando Radix Tabs e Tailwind (
-
CI (GitHub Actions) e lockfile
- Erro resolvido:
ERR_PNPM_OUTDATED_LOCKFILEemapps/desktop. Atualizamos opnpm-lock.yamlpara refletir as novas dependências do Desktop. - O workflow do desktop usa
--frozen-lockfile; manter o lockfile em sincronia evita falhas.
- Erro resolvido:
Fluxo de banco (DEV)
- Banco de DEV:
file:./prisma/db.dev.sqlite(arquivo:prisma/prisma/db.dev.sqlite). - Comandos (forçar alvo de DEV no terminal atual):
DATABASE_URL="file:./prisma/db.dev.sqlite" pnpm exec prisma db push
DATABASE_URL="file:./prisma/db.dev.sqlite" pnpm prisma:generate
DATABASE_URL="file:./prisma/db.dev.sqlite" pnpm auth:seed
- Rodar app local (Next):
pnpm dev
-
Login de teste (DEV):
admin@sistema.dev / admin123 -
Prisma Studio (DEV):
DATABASE_URL="file:./prisma/db.dev.sqlite" pnpm exec prisma studio
Observação: evitar prisma/.env nesse setup, pois causa conflito com o .env da raiz (o Prisma acusa conflitos e falha o comando). Manter o override inline é a forma mais segura de isolar DEV sem tocar produção.
Desktop (Tauri)
-
Onde foram feitas as mudanças principais:
apps/desktop/src/components/ui/tabs.tsx(Tabs Radix + estilos shadcn-like)apps/desktop/src/main.tsx(layout com abas: Resumo/Inventário/Diagnóstico/Configurações; status badge; botão “Enviar inventário agora”; seleção do perfil de acesso colaborador/gestor e sincronização do usuário vinculado).apps/desktop/src-tauri/src/agent.rs(coleta e normalização de hardware, discos, GPUs e inventário estendido por SO).
-
Variáveis de ambiente do Desktop (em tempo de build):
VITE_APP_URLeVITE_API_BASE_URL— por padrão, use a URL da aplicação web.
Atualizações automáticas (GitHub)
- Gere o par de chaves do updater (
pnpm tauri signer generate -- -w ~/.tauri/raven.key) e configure as variáveis de ambienteTAURI_SIGNING_PRIVATE_KEYeTAURI_SIGNING_PRIVATE_KEY_PASSWORDantes de rodarpnpm -C apps/desktop tauri build. - Garanta que
bundle.createUpdaterArtifactsesteja habilitado (já configurado) para gerar os pacotes.nsis/.AppImagee os arquivos.sig. - Publique os artefatos de cada SO em um release do GitHub e atualize o
latest.jsonpúblico (ex.: no próprio repositório ou em um gist) comversion,notes,pub_datee as entradas por plataforma (urlesignature). - O agente já consulta o updater ao iniciar e também possui o botão “Verificar atualizações” na aba Configurações. Ao detectar nova versão o download é feito em segundo plano e o app reinicia automaticamente após o
downloadAndInstall.
Build do executável localmente
Você pode gerar o executável local sem precisar da VPS. O que muda é apenas o sistema operacional alvo (Linux/Windows/macOS). O Tauri recomenda compilar em cada SO para obter o bundle nativo desse SO. Em produção, o GitHub Actions já faz isso em matriz.
-
Pré-requisitos gerais
- Node 20 + pnpm 9 (via Corepack)
- Rust (stable) —
rustupinstalado - Dependências do sistema (Linux):
libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev libxdo-dev libssl-dev build-essential curl wget file
-
Instalar deps do desktop e buildar
corepack enable && corepack prepare pnpm@9 --activate
pnpm -C apps/desktop install
VITE_APP_URL=http://localhost:3000 \
VITE_API_BASE_URL=http://localhost:3000 \
pnpm -C apps/desktop tauri build
- Saída do build
- Os artefatos ficam em:
apps/desktop/src-tauri/target/release/bundle/ - No Linux:
.AppImage/.deb/.rpm(conforme target) - No Windows/macOS: executável/instalador específicos do SO (para assinatura, usar chaves/AC, se desejado)
- Para liberar atualizações OTA, publique release no GitHub com artefatos e
latest.json— o plugin de updater verifica a URL configurada emtauri.conf.json.
- Os artefatos ficam em:
Build na VPS x Local
- Não há diferença funcional além do SO alvo e de possíveis chaves de assinatura. Use a VPS apenas se quiser gerar pacotes Linux em ambiente isolado. Para Windows/macOS, é preferível buildar nesses SOs ou usar a matriz do GitHub Actions (já configurada).
CI/CD — Observações
desktop-release.yml(Tauri): instala dependências, faz build por SO e publica artefatos. Mantendo opnpm-lock.yamlatualizado, o passo--frozen-lockfilepassa.ci-cd-web-desktop.yml: já usapnpm install --no-frozen-lockfileno web, evitando falhas em pipelines de integração.- Smoke de provisionamento pode ser desligado definindo
RUN_MACHINE_SMOKE=false(default); quando quiser exercitar o fluxo complete register/heartbeat, definaRUN_MACHINE_SMOKE=true.
- Smoke de provisionamento pode ser desligado definindo
Troubleshooting
-
Sign-in 500 após
db push/seed:- Verifique o terminal do app e confirme a existência da tabela
AuthUserno Prisma Studio (alvo DEV).
- Verifique o terminal do app e confirme a existência da tabela
-
ERR_PNPM_OUTDATED_LOCKFILEno Desktop:- Atualize
pnpm-lock.yamlno root após alterar dependências deapps/desktop/package.json. - Alternativa: usar
--no-frozen-lockfile(não recomendado para releases reproduzíveis).
- Atualize