Este documento define a esteira alvo de CI/CD ponta a ponta para o app desktop do Radar Escola.
O objetivo final da CI/CD e permitir que uma pessoa usuaria consiga:
- abrir a pagina de release do projeto;
- baixar o instalador Windows;
- instalar o Radar Escola na maquina desktop;
- abrir o aplicativo;
- usar um banco local;
- validar que a experiencia basica funciona sem depender de infraestrutura tecnica externa.
Essa e a materializacao da regra de UX definida para o produto:
A pessoa usuaria final deve ver instalar, abrir, cadastrar, acompanhar, marcar como resolvido, consultar historico e exportar seguranca.
Ela nao deve precisar saber que existem Tauri, React, TypeScript, Rust, SQLite, CI, GitHub Actions ou banco de dados.
O repositorio OpenEduOps/radar-escola contem a documentacao de produto, o
scaffold tecnico minimo executavel e uma primeira release tecnica publicada.
O workflow .github/workflows/desktop-release.yml ja consegue gerar um
instalador Windows tecnico do scaffold atual por execucao manual e por tag
v*.
A release tecnica atual e:
v0.0.1
Pagina da release:
https://github.com/OpenEduOps/radar-escola/releases/tag/v0.0.1
Esse instalador ainda nao representa a V0 funcional completa. Ele valida a casca desktop, o carregamento do frontend empacotado, o menu nativo Playground e o CRUD de referencia usado por pessoas desenvolvedoras.
Para ativar a esteira desktop, o repositorio do app precisara conter:
package.json
package-lock.json
src-tauri/Cargo.toml
scripts/smoke-windows.ps1
Esses arquivos ja existem no scaffold minimo atual.
O projeto tambem deve expor scripts locais claros:
npm ci
npm run lint
npm run typecheck
npm test
npm run build
npm run tauri build
Scripts podem ser ajustados conforme o scaffold real, mas a intencao deve ser preservada: qualquer pessoa mantenedora precisa conseguir reproduzir localmente o que a CI executa.
O scaffold atual contem:
- interface React/TypeScript minima;
- Vite para build frontend;
- Tauri 2 como casca desktop;
- janela inicial do Radar Escola;
- janela principal configurada para abrir maximizada;
- menu nativo
Playground > Iniciar playground; - CRUD playground master-detail como referencia tecnica;
- icone Windows exigido pelo empacotamento Tauri;
- capability Tauri
core:defaultpara a janela principal; - script de smoke check para instalar, abrir e validar o menu nativo do app;
package-lock.jsonpara dependencias npm reproduziveis.
Ele nao contem regra de negocio, banco local ou fluxos de usuario. Isso e intencional para manter o scaffold honesto.
O workflow Desktop Release deve cobrir:
- preflight do scaffold desktop;
- instalacao de Node e Rust;
- instalacao de dependencias;
- lint, typecheck, testes e build do frontend;
cargo fmt,cargo clippyecargo testna camada Tauri/Rust;- build do instalador Windows;
- smoke test do instalador em runner Windows;
- coleta de
.exeou.msi; - geracao de SHA-256;
- upload de artefato baixavel no GitHub Actions;
- publicacao em GitHub Release quando houver tag
v*.
O arquivo scripts/smoke-windows.ps1 valida o minimo necessario
para confiar que o instalador nao esta quebrado.
Ele testa hoje:
- instalador encontrado;
- instalacao sem erro;
- executavel instalado usa o subsistema Windows GUI, nao Console;
- aplicativo abre sem crash imediato;
- janela principal e criada;
- janela principal abre maximizada;
- menu nativo
Playground > Iniciar playgroundexiste; - comando do menu nativo aciona o fluxo Playground;
- aplicativo permanece aberto apos o comando;
- desinstalacao ou limpeza do runner quando aplicavel.
Ele deve evoluir, quando o MVP funcional existir, para testar tambem:
- banco local criado no local esperado;
- fluxo minimo de primeiro uso;
- criacao e consulta de uma necessidade;
- exportacao/restauracao de seguranca em ambiente controlado.
O smoke test nao substitui teste de UX humano, mas reduz o risco de publicar um instalador que sequer abre.
Cada build de release deve produzir:
Radar.Escola_<versao>_x64-setup.exe
Radar.Escola_<versao>_x64-setup.exe.sha256
Enquanto nao houver assinatura de codigo, a documentacao da release deve avisar que o Windows pode exibir alerta de origem desconhecida.
Pull requests e pushes comuns devem validar qualidade e build.
Tags v* devem publicar release com artefatos baixaveis.
Release tecnica atual:
v0.0.1
O workflow Desktop Release pode ser executado manualmente para conferir o
estado da esteira. Tags v* tambem publicam release quando os checks e o smoke
Windows passam.
O scaffold minimo do app ja existe no repositorio para validar a esteira sem criar funcionalidade falsa de MVP. Ele contem uma tela tecnica simples do Radar Escola, menu nativo Playground e CRUD playground de referencia, sem fluxo de cadastro escolar, banco local ou regras de negocio da V0.
Enquanto o app ainda for apenas scaffold, a esteira gera um instalador tecnico minimo, mas ele deve ser tratado apenas como validacao da casca desktop, do frontend empacotado e do pipeline de release.
Se alguem tentar publicar uma tag v* sem scaffold valido, o preflight deve
falhar. Uma release versionada nao pode ser publicada sem artefato real.
Ainda nao e possivel entregar a experiencia completa de produto porque faltam:
- fluxo funcional do MVP;
- banco SQLite local;
- persistencia real;
- autenticacao local;
- cadastro de pessoas/usuarios;
- registro e acompanhamento de necessidades;
- exportacao/restauracao de seguranca;
Cargo.lockgerado por ambiente Rust valido;- decisao futura sobre assinatura de codigo.
Essas pendencias devem ser resolvidas neste repositorio quando o app Radar Escola evoluir para alem do scaffold.
No ambiente local atual, npm ci, npm run typecheck, npm run build e
npm run tauri -- info foram executados.
O build Tauri completo nao foi executado localmente porque Rust, Cargo e Visual Studio Build Tools/MSVC nao estao instalados nesta maquina. O workflow de release usa runner Windows do GitHub Actions e instala Rust antes do build.
Mesmo assim, o contrato de CI/CD ja deixa claro qual sera o caminho de entrega do produto para a pessoa usuaria final.
Como o ambiente local ainda nao tem toolchain Rust/MSVC, o instalador foi
gerado pelo workflow Desktop Release em runner Windows do GitHub Actions.
Validacao realizada para v0.0.1:
- workflow
Desktop Releaseconcluido com sucesso; - release publicada em
https://github.com/OpenEduOps/radar-escola/releases/tag/v0.0.1; - artefato
Radar.Escola_0.0.1_x64-setup.exepublicado; - artefato
Radar.Escola_0.0.1_x64-setup.exe.sha256publicado; - arquivo
.sha256gerado e conferido localmente; - SHA-256 do instalador:
4ff7f74dcfdce5a4dfb1728c16a10fe488210e9ef2f35bb2d57bd369f08b5c24; - instalacao silenciosa local executada com codigo
0; - executavel instalado em
C:\Users\silva-dev\AppData\Local\Radar Escola\radar-escola.exe; - aplicativo abriu sem crash imediato;
- executavel usa subsistema Windows GUI e nao abre prompt atras da janela;
- janela principal abriu maximizada;
- UI do Radar Escola renderizou no executavel instalado;
- item nativo
Playground > Iniciar playgroundfoi acionado por comando Win32; - tela
Master detalhedo playground apareceu no executavel instalado.
Correcoes aplicadas para chegar nesse estado:
- adicionar
src-tauri/icons/icon.ico; - configurar
base: "./"no Vite para assets relativos no app empacotado; - adicionar capability Tauri
core:defaultpara permitir a ponte de eventos da janela principal. - compilar builds release do Tauri com subsistema Windows GUI para evitar que um prompt apareca atras da janela principal.
- configurar a janela principal para abrir sempre maximizada e validar esse comportamento no smoke test Windows.
O comando abaixo foi executado localmente:
npm run tauri -- build
Resultado:
failed to run 'cargo metadata' ... program not found
Conclusao:
- o build frontend do scaffold esta valido;
- os testes automatizados do CRUD passam;
- o instalador pode ser gerado no GitHub Actions;
- o instalador ainda nao pode ser gerado diretamente nesta maquina;
- a pendencia local imediata e instalar Rust/Cargo;
- a pendencia nativa seguinte e instalar Visual Studio Build Tools/MSVC com as ferramentas C++ exigidas pelo Tauri no Windows.
Quando a toolchain nativa estiver disponivel, o caminho esperado para gerar o instalador continua sendo:
npm run tauri -- build
scripts/smoke-windows.ps1