diff --git a/Home.md b/Home.md index 0d88a1d..ef2c1fd 100644 --- a/Home.md +++ b/Home.md @@ -6,6 +6,11 @@ Documentação da automação de deploy GitOps (Gitea + Multi-VPS) usada no ecos - [Deploy V.1.0.0](Deploy-V.1.0.0) — versão inicial: listener de webhook, modelos A/B de deploy, configuração no Gitea e segurança. +## Documentação complementar +- [Versionamento](Versionamento) — como o servidor e o cliente Windows controlam versões, + onde cada número é definido, problemas atuais de dessincronização e como garantir que + as clínicas recebem o update correto. + ## Repositório de exemplos Scripts e instruções de referência (sanitizados) estão no repositório [`ruicesar/Deploy-Automatico`](http://10.99.0.3:3000/ruicesar/Deploy-Automatico): diff --git a/Versionamento.md b/Versionamento.md new file mode 100644 index 0000000..a228b47 --- /dev/null +++ b/Versionamento.md @@ -0,0 +1,170 @@ +# 🔢 Versionamento — rx.scoreodonto.com + +Documentação completa do sistema de versões do **servidor web** e do **cliente Windows**, +como identificar a versão em produção e como garantir que mudanças são detectadas corretamente. + +> **Modelo de referência:** `rx.scoreodonto.com` (servidor) + `rx.scoreodonto.com-client` (cliente Windows Electron). + +--- + +## 1. Servidor — `rx.scoreodonto.com` + +### Onde a versão é definida + +O servidor tem **três lugares** onde a versão aparece — e hoje estão **dessincronizados** (problema documentado abaixo): + +| Arquivo | Valor atual | Propósito | +|---|---|---| +| `dental-server/version.txt` | `2.1.0` | Arquivo lido em runtime pelo servidor | +| `dental-server/package.json` → `"version"` | `2.0.5` | Metadado do pacote Node | +| `dental-server/public/index.html` linha 33 | `v2.1.2` | Exibido na sidebar do painel web | + +**A versão visível ao usuário** (sidebar do painel) é a do `index.html` — hardcoded diretamente no HTML: +```html +

RF Dental v2.1.2

+``` + +### ⚠️ Problema atual: três fontes, três valores diferentes + +``` +version.txt → 2.1.0 +package.json → 2.0.5 +index.html → v2.1.2 ← o que o usuário vê +``` + +Não existe nenhum script que sincronize esses três valores automaticamente. A versão do `index.html` +é editada **manualmente** a cada deploy, e pode ficar para trás (ou ser bumped fora de ordem). + +### Como saber a versão em produção (hoje) + +```bash +# O que o usuário vê no painel: +ssh deploy@10.99.0.1 "grep 'v2\.' /home/deploy/stack/rx.scoreodonto.com/dental-server/public/index.html | grep span | head -1" + +# O que o servidor lê no arquivo: +ssh deploy@10.99.0.1 "cat /home/deploy/stack/rx.scoreodonto.com/dental-server/version.txt" +``` + +### Como bumpar a versão do servidor (processo atual) + +1. Editar **manualmente** os três arquivos para o novo número. +2. Rodar `./deploy-prod.sh` (processo manual, sem webhook). +3. Verificar no painel web se a versão exibida mudou. + +--- + +## 2. Cliente Windows — `rx.scoreodonto.com-client` + +### Onde a versão é definida + +O cliente tem **uma fonte única de verdade** — o `package.json`: + +```json +// rx.scoreodonto.com-client/package.json +{ + "version": "1.2.7" +} +``` + +O `electron-builder` lê esse valor na hora do build e: +- Nomeia o instalador: `ScoreOdonto Dental Client Setup 1.2.7.exe` +- Grava no `latest.yml` que vai para a pasta `updates/`: + +```yaml +# dental-server/updates/latest.yml +version: 1.2.6 ← versão que está no ar nas clínicas hoje +files: + - url: ScoreOdonto Dental Client Setup 1.2.6.exe + sha512: zEYuIRBUTlpGa1... + size: 102459655 +``` + +### ⚠️ Problema atual: `latest.yml` aponta para 1.2.6, mas 1.2.7 já foi buildado + +| Local | Versão | +|---|---| +| `package.json` na VPS 4 | **1.2.7** | +| `.exe` mais recente em `dist/` (VPS 4) | **1.2.7** | +| `latest.yml` em `updates/` (VPS 1) | **1.2.6** | +| O que as clínicas recebem via auto-update | **1.2.6** | + +O `deploy-client.sh` foi rodado para gerar o `1.2.7.exe` mas o `rsync` para a VPS 1 +**não foi executado** (ou foi executado com `--delete` e o `latest.yml` não foi atualizado). +As clínicas **nunca receberão o 1.2.7** enquanto o `latest.yml` disser `1.2.6`. + +### Como o auto-update funciona (fluxo completo) + +``` +Clínica (Windows) + └─► electron-updater verifica: GET https://rx.scoreodonto.com/updates/latest.yml + │ + ├─ version no yml > version instalada? + │ SIM → baixa o .exe silenciosamente → instala ao reiniciar + └─ NÃO → nada acontece +``` + +**Portanto:** a versão que as clínicas têm é determinada pelo `latest.yml` em produção, não pelo +`package.json` nem pelo `.exe` na VPS 4. Se o `latest.yml` não for atualizado, **nenhuma clínica +recebe a nova versão**. + +### Como bumpar a versão do cliente (processo correto) + +```bash +# 1. Editar o package.json com a nova versão +nano /home/deploy/stack/rx.scoreodonto.com-client/package.json +# Ex: "version": "1.2.7" → "1.2.8" + +# 2. Rodar o deploy (build + rsync para VPS1) +cd /home/deploy/stack/rx.scoreodonto.com-client +./deploy-client.sh + +# 3. Confirmar que o latest.yml foi atualizado na VPS1 +ssh deploy@10.99.0.1 "cat /home/deploy/stack/rx.scoreodonto.com/dental-server/updates/latest.yml" +# → version: deve mostrar a nova versão + +# 4. Confirmar a URL pública (o que as clínicas acessam) +curl -s https://rx.scoreodonto.com/updates/latest.yml +``` + +### Histórico de versões observado (dist/ na VPS 4) + +| Versão | Data build | +|---|---| +| 1.2.0 | 28/05/2026 02:59 | +| 1.2.1 | 28/05/2026 03:09 | +| 1.2.2 | 28/05/2026 03:18 | +| 1.2.3 | 28/05/2026 03:32 | +| 1.2.4 | 28/05/2026 03:56 | +| 1.2.5 | 28/05/2026 05:34 | +| 1.2.6 | 28/05/2026 05:45 ← **em produção (VPS1)** | +| 1.2.7 | 28/05/2026 20:38 ← **buildado, não publicado** | + +--- + +## 3. Comparativo e regra de ouro + +| | Servidor | Cliente Windows | +|---|---|---| +| **Fonte de verdade** | `index.html` (exibição) + `version.txt` (runtime) | `package.json` → `latest.yml` | +| **Onde o usuário vê** | Sidebar do painel web | Bandeja do Windows (ícone) | +| **O que determina se há update** | Deploy manual (rebuild Docker) | `latest.yml` na pasta `updates/` | +| **Risco atual** | Três arquivos dessincronizados | `latest.yml` desatualizado → clínicas presas na versão anterior | + +> **Regra de ouro:** no cliente, **a única versão que importa para as clínicas é a do `latest.yml` +> em produção**. O `.exe` na VPS 4 não vale nada se o `latest.yml` não for sobrescrito com a nova +> versão. Sempre confirmar com `curl https://rx.scoreodonto.com/updates/latest.yml` após o deploy. + +--- + +## 4. Melhorias recomendadas (sem aplicar — apenas registro) + +### Servidor +- Criar um `update-version.js` na raiz do projeto que escreva o mesmo número nos três arquivos + (`version.txt`, `package.json`, `index.html`) atomicamente — elimina a dessincronização. +- O `deploy-prod.sh` chamaria esse script antes do rsync. + +### Cliente +- O `deploy-client.sh` já tem a estrutura certa; falta apenas garantir que o `rsync` com `--delete` + inclua **sempre** o `latest.yml` mais novo (não usar `|| fallback` sem `--delete` em versões parciais). +- Com a automação GitOps: o push para `main` dispara o build + deploy automaticamente, eliminando + o risco de esquecer de rodar o script.