sistema-de-chamados/docs/DEV.md

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 .env da 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) e prisma/.env — usamos DATABASE_URL=... inline nos comandos do Prisma, apontando para ./prisma/db.dev.sqlite apenas no DEV.
    • Resultado: banco prisma/prisma/db.dev.sqlite criado/sincronizado e seed de usuários executado.
  • 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).
  • CI (GitHub Actions) e lockfile

    • Erro resolvido: ERR_PNPM_OUTDATED_LOCKFILE em apps/desktop. Atualizamos o pnpm-lock.yaml para refletir as novas dependências do Desktop.
    • O workflow do desktop usa --frozen-lockfile; manter o lockfile em sincronia evita falhas.

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_URL e VITE_API_BASE_URL — por padrão, use a URL da aplicação web.

Atualizações automáticas (GitHub)

  1. Gere o par de chaves do updater (pnpm tauri signer generate -- -w ~/.tauri/raven.key) e configure as variáveis de ambiente TAURI_SIGNING_PRIVATE_KEY e TAURI_SIGNING_PRIVATE_KEY_PASSWORD antes de rodar pnpm -C apps/desktop tauri build.
  2. Garanta que bundle.createUpdaterArtifacts esteja habilitado (já configurado) para gerar os pacotes .nsis/.AppImage e os arquivos .sig.
  3. Publique os artefatos de cada SO em um release do GitHub e atualize o latest.json público (ex.: no próprio repositório ou em um gist) com version, notes, pub_date e as entradas por plataforma (url e signature).
  4. 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.

  1. Pré-requisitos gerais

    • Node 20 + pnpm 9 (via Corepack)
    • Rust (stable) — rustup instalado
    • Dependências do sistema (Linux):
      • libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev libxdo-dev libssl-dev build-essential curl wget file
  2. 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
  1. 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 em tauri.conf.json.

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 o pnpm-lock.yaml atualizado, o passo --frozen-lockfile passa.
  • ci-cd-web-desktop.yml: já usa pnpm install --no-frozen-lockfile no 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, defina RUN_MACHINE_SMOKE=true.

Troubleshooting

  • Sign-in 500 após db push/seed:

    • Verifique o terminal do app e confirme a existência da tabela AuthUser no Prisma Studio (alvo DEV).
  • ERR_PNPM_OUTDATED_LOCKFILE no Desktop:

    • Atualize pnpm-lock.yaml no root após alterar dependências de apps/desktop/package.json.
    • Alternativa: usar --no-frozen-lockfile (não recomendado para releases reproduzíveis).