# LA StressLab — Guia TOTAL do Updater (para leigo)

Objetivo: toda vez que você gerar uma versão nova, o app no pendrive
descobre sozinho, pergunta “Atualizar agora?”, baixa e se reinicia.

Você NÃO precisa regravar o pendrive a cada correção (só na 1ª vez
com o update.json).

================================================================
PARTE A — Uma vez só: criar a “nuvem” (Cloudflare R2)
================================================================

A1) Conta Cloudflare
--------------------
1. Abra https://dash.cloudflare.com e crie/entre na conta.
2. No menu esquerdo: R2 Object Storage.
3. Se pedir, ative o R2 (plano free costuma bastar no começo).

A2) Criar o “armário” (bucket)
-----------------------------
1. Em R2 → Create bucket.
2. Nome sugerido: lastresslab-updates
3. Create bucket.

A3) Deixar o armário público (para o app baixar)
-----------------------------------------------
O app precisa de um link HTTPS que qualquer PC abra sem login.

Opção mais fácil (recomendado no começo):

1. Abra o bucket lastresslab-updates.
2. Aba Settings (Configurações).
3. Procure “Public access” / “R2.dev subdomain” / “Allow Access”.
4. Ative o acesso público do bucket (ou o subdomínio r2.dev).
5. A Cloudflare mostra uma URL parecida com:
      https://pub-XXXXXXXX.r2.dev
   Anote isso. Vamos chamar de BASE_PUBLICA.
   Exemplo: https://pub-abc123.r2.dev

(Depois você pode trocar por um domínio seu, tipo
 https://updates.lucasallan.com — opcional.)

A4) Criar chave para VOCÊ enviar arquivos (não vai no pendrive!)
---------------------------------------------------------------
1. No painel R2 → Overview → Manage R2 API Tokens
   (ou “API” → “Manage API tokens” do R2).
2. Create API token.
3. Permissões: Object Read & Write no bucket lastresslab-updates
   (ou Admin Read & Write se for mais simples).
4. Anote em um bloco de notas SEGURO (não manda no Telegram/cliente):
   - Access Key ID
   - Secret Access Key
5. Ainda anote o Account ID (aparece no painel R2, canto direito /
   Overview).

================================================================
PARTE B — Uma vez só: configurar o seu PC Windows
================================================================

B1) Variáveis de ambiente (só na SUA máquina)
--------------------------------------------
1. Tecla Windows → digite “variáveis de ambiente” →
   “Editar as variáveis de ambiente do sistema”.
2. “Variáveis de Ambiente…” → em “Variáveis do usuário” → Novo
   (crie UMA por uma):

   Nome: LASTRESS_R2_ACCOUNT_ID
   Valor: (seu Account ID)

   Nome: LASTRESS_R2_ACCESS_KEY_ID
   Valor: (Access Key ID)

   Nome: LASTRESS_R2_SECRET_ACCESS_KEY
   Valor: (Secret Access Key)

   Nome: LASTRESS_R2_BUCKET
   Valor: lastresslab-updates

   Nome: LASTRESS_UPDATE_PUBLIC_BASE
   Valor: (sua BASE_PUBLICA do A3, SEM barra no final)
   Exemplo: https://pub-abc123.r2.dev

3. OK em tudo.
4. FECHE e REABRA o Prompt/PowerShell/Cursor (senão não pega).

B2) (Opcional) boto3 para upload automático
------------------------------------------
No Prompt:

  py -3 -m pip install boto3

Se não instalar, o publish ainda gera os arquivos; você sobe na mão
pelo painel Cloudflare (Parte D alternativa).

================================================================
PARTE C — Toda vez que for lançar uma versão nova
================================================================

Pasta do projeto (exemplo):
  ...\NotebookStress\

C1) Subir o número da versão
---------------------------
1. Abra branding.py no Bloco de Notas / Cursor.
2. Mude a linha:
      APP_VERSION = "1.0.1"
   para a próxima, por exemplo:
      APP_VERSION = "1.0.2"
3. Salve.
   (1.0.2 = correção; 1.1.0 = novidade; 2.0.0 = mudança grande)

C2) Gerar o pendrive/build
-------------------------
1. Dê dois cliques em build.bat
   (ou rode no Prompt dentro da pasta NotebookStress).
2. Espere terminar.
3. Confirme que existe:
   dist\LAStressLab_USB\LAStressLab.exe

C3) Empacotar + enviar para a nuvem
----------------------------------
No Prompt, na pasta NotebookStress:

  publish_update.bat --notes "O que mudou nesta versão" --upload

Exemplos de notes:
  --notes "Print da janela de resultado + DPI"
  --notes "Mapa termico Acer/ASUS/Lenovo"

O script:
  - cria dist\update_out\LAStressLab-1.0.2.zip
  - cria dist\update_out\latest.json
  - (com --upload) sobe os dois para o R2

C4) Conferir se o link abre no navegador
---------------------------------------
Abra no Chrome (troque pela sua BASE_PUBLICA):

  https://pub-abc123.r2.dev/latest.json

Tem que aparecer um texto JSON com "version", "url", "sha256".

Também teste o zip (pode demorar / baixar):

  https://pub-abc123.r2.dev/LAStressLab-1.0.2.zip

Se der 404 / Access Denied: volte no A3 (público) ou revise o nome
do arquivo no painel R2 → Objects.

================================================================
PARTE D — Alternativa: upload MANUAL (se --upload falhar)
================================================================

1. Rode sem upload:
      publish_update.bat --notes "minha nota"
2. Abra dist\update_out\
3. No painel Cloudflare → R2 → lastresslab-updates → Upload:
   - envie LAStressLab-X.Y.Z.zip
   - envie latest.json  (mesmo nome: latest.json)
4. Abra latest.json no Bloco de Notas e confira se o campo "url"
   aponta para o link HTTPS CORRETO do zip na sua BASE_PUBLICA.
   Se estiver "SEU_DOMINIO_PUBLICO", corrija, salve e faça upload
   de novo do latest.json.

================================================================
PARTE E — Pendrive: o que o cliente/oficina precisa
================================================================

E1) Primeira vez (ou pendrive antigo sem updater)
-------------------------------------------------
1. Copie a pasta INTEIRA dist\LAStressLab_USB para o pendrive.
2. Ao lado do LAStressLab.exe, crie o arquivo:
      update.json
   (pode copiar update.json.example e renomear)

3. Conteúdo (troque pela SUA URL real do latest.json):

{
  "manifest_url": "https://pub-abc123.r2.dev/latest.json",
  "check_on_startup": true
}

4. Salve em UTF-8.
5. Confirme que também existem:
   - update_apply.bat
   - LAStressLab.exe
   - pasta _internal

E2) Pendrives que JÁ têm update.json
------------------------------------
Nas próximas versões você NÃO precisa mexer no pendrive.
Só publicar na nuvem (Parte C). Na próxima abertura com internet,
o app avisa.

================================================================
PARTE F — Testar se funciona
================================================================

1. No PC de teste, abra o app pelo pendrive (admin / UAC).
2. Espere ~2 segundos OU vá em:
      Configuração → Avançado → Verificar atualização
3. Se a nuvem tem versão MAIOR que a do EXE:
   - aparece “Atualização disponível”
   - Atualizar agora → baixa → fecha → update_apply.bat → reabre
4. Se já está na mesma versão:
   - “Você já está na versão mais recente”

Problemas comuns:
- Nada acontece na abertura → falta update.json ou manifest_url errada
- “Não foi possível verificar” → sem internet / URL errada / bucket privado
- “Pasta não é gravável” → pendrive com trava de escrita
- Update baixa e falha no SHA256 → latest.json de uma versão e zip de outra
  (publique de novo os DOIS arquivos juntos)

================================================================
PARTE G — Checklist rápido “nova versão”
================================================================

[ ] Subi APP_VERSION em branding.py
[ ] Rodei build.bat
[ ] Rodei publish_update.bat --notes "..." --upload
[ ] Abri BASE_PUBLICA/latest.json no navegador e vi a versão nova
[ ] (1ª vez) Pendrive tem update.json apontando para esse latest.json
[ ] Testei “Verificar atualização” num PC com internet

================================================================
NUNCA faça
================================================================

- NÃO coloque Access Key / Secret no pendrive
- NÃO coloque dump_delivery.json com token no Git público
- NÃO use HTTP (só HTTPS)
- NÃO pule o bump de versão (senão o app acha que já está atualizado)

================================================================
Resumo em uma frase
================================================================

Você sobe zip+latest.json no Cloudflare; o pendrive só precisa saber
o endereço do latest.json (update.json); o app faz o resto.
