--- name: samsung-release description: Atualizar TODAS as builds Samsung do Nuvio de uma vez (.wgt WASM + os quatro .tpk nativos + anexos de auto-atualizacao) dentro do release normal vX.Y.Z, junto do .ipk da LG — ordem, ferramenta, o que conferir, onde publicar e como avisar. Use quando o dono pedir "atualiza as builds da Samsung", "sai versao nova", ao fazer a release da 1.6 ou depois de um release da LG. --- # Todas as builds Samsung Desde a 1.5.4 (30/09/2026) o release normal `vX.Y.Z` leva a Samsung INTEIRA: | Arquivo | TVs | Estado | |---|---|---| | `NuvioTV--tizen.wgt` | Tizen 5.5+ (2020+) | WASM, o de sempre | | `Nuvio--NuvioTpk40.tpk` | Tizen 4.0–5.5 (2018–2020) | nativo, provado em 2x 4.0 e 2x 5.0 | | `Nuvio--NuvioTpk60.tpk` | Tizen 6.0 (2021) | nativo, provado | | `Nuvio--NuvioTpk65.tpk` | Tizen 6.5–7 (2022–2023) | nativo, sem relato forte | | `Nuvio--NuvioTpk.tpk` | Tizen 8–9 (2024+) | nativo (GLView), provado em 3 TVs 9.0 | | `libnuvio--tpk-arm.so` | todos os `.tpk` 6+ | anexo da auto-atualizacao | | `libnuvio--tpk40-arm.so` | `.tpk` 4/5 | anexo da auto-atualizacao do 4/5 | Detalhe de cada alvo: skills `samsung-wgt`, `samsung-tpk`, `samsung-tpk-legacy`. ## A ferramenta ```bash git worktree add --detach ../nuvio-build- cd ../nuvio-build- NUVIO_PROPERTIES="/Users/hrocha/Projetos/Pessoal/LG WEB/NuvioWeb-0.3.38-beta/local.properties" \ bash tools/release-samsung.sh ``` `tools/release-samsung.sh` compila o `.wgt` e os quatro `.tpk`, e RECUSA: arvore suja; versao diferente entre `appinfo.json` e `tizen-config.xml`; arquivo de pessoa em qualquer pacote; `drminfo` no 4/5; lib do 4/5 com TLS; manifesto com outra versao; anexo `.so` diferente da `.so` do pacote. Sai em `build/release-/` com `SHA256SUMS-samsung`. NAO publica. Numa worktree nova o `.wgt` para em "libass WASM ausente": faca `ln -s "/build/ass-wasm" build/ass-wasm` (dependencia ja compilada, gitignorada; symlink e nao copia, porque o `tizen.sh` confere que o atalho temporario `$TMPDIR/nuvio-ass-wasm-root-` aponta para o mesmo lugar) ou rode `tools/build-ass-wasm.sh` com o emsdk ativo. `NUVIO_PROPERTIES` so e preciso fora do checkout principal (o `tools/env.sh` procura `../NuvioWeb-0.3.38-beta` dois niveis acima, e da worktree o caminho nao existe: o pacote sairia sem servidor e sem login). ## Ordem 0. **Auditoria**: `bash tools/auditoria-release.sh` na arvore que vai sair (docs/auditoria-release.md). FAIL para a release; NAO VERIFICADO se explica. 1. **Versao**: `deploy/app/appinfo.json` e `tools/tizen-config.xml`. Commit `vX.Y.Z`. O `.tpk` pega sozinho (`tools/tpk.sh` reescreve os manifestos no build e a ferramenta devolve o original depois). 2. **LG**: receita da LG (`arm.sh --ipk`, as duas variantes `_arm.ipk` e `_arm-highcache.ipk`, `hb-repo.sh` -> `repo.json` + `webosbrew.manifest.json`). 3. **Samsung**: `tools/release-samsung.sh` (acima). 4. **Android**: `tools/release-android.sh` na mesma worktree (skill `android-release`). Sai `Nuvio--android.apk` + `SHA256SUMS-android` em `build/release-/`. Precisa da chave de release em `~/.nuvio-android/`. 5. **Publicar TUDO no mesmo `gh release create vX.Y.Z`**: `.ipk` x2, `repo.json`, `webosbrew.manifest.json`, `.wgt`, os 4 `.tpk`, os 2 `libnuvio-*.so`, o `Nuvio--android.apk`, e o `SHA256SUMS` unindo LG + `SHA256SUMS-samsung` + `SHA256SUMS-android`. Release normal vira latest (o app e o Homebrew Channel leem `releases/latest`). Sem os `.so` anexados, os `.tpk` instalados nao se atualizam sozinhos. 6. **Notas** em ingles, `## Added` / `## Fixed` / `## Notes`, balas curtas (o app mostra 3 linhas por bala). Toda release termina com a TABELA "Which file do I need?" (pedido do dono, 29/09/2026), LG e Samsung juntas, com o nome EXATO de cada anexo. Ela vai DEPOIS de `## Notes`: o cartao de atualizacao (atualizacao.c) para de ler em "Notes", entao os `|` da tabela nunca chegam a tela da TV. Diga que o nativo Samsung e opt-in (quem prefere segue no `.wgt`). Modelo (troque X.Y.Z): ```markdown ## Which file do I need? | TV | System | File | |---|---|---| | LG 2016 and newer | webOS 3 or newer | `space.nuvio.native.legacy_X.Y.Z_arm.ipk` | | LG with 2 GB of RAM or more | webOS 3 or newer | `space.nuvio.native.legacy_X.Y.Z_arm-highcache.ipk` (bigger image cache) | | Samsung 2018–2020 | Tizen 4.0 / 5.0 / 5.5 | `Nuvio-X.Y.Z-NuvioTpk40.tpk` (native) | | Samsung 2021 | Tizen 6.0 | `Nuvio-X.Y.Z-NuvioTpk60.tpk` (native) | | Samsung 2022–2023 | Tizen 6.5 / 7.0 | `Nuvio-X.Y.Z-NuvioTpk65.tpk` (native) | | Samsung 2024 and newer | Tizen 8.0 / 9.0 | `Nuvio-X.Y.Z-NuvioTpk.tpk` (native) | | Samsung 2020 and newer | Tizen 5.5 or newer | `NuvioTV-X.Y.Z-tizen.wgt` (web version) | You don't need `libnuvio-*.so`, `repo.json`, `webosbrew.manifest.json` or `SHA256SUMS`: they're for self-update, the Homebrew Channel and checksums. ``` ANDROID AINDA E SEGREDO (dono, 30/09/2026): o `.apk` vai como anexo, mas sem linha na tabela e sem mencao nas notas ate o dono liberar (skill `android-release`). 7. **Avisar**: issues curtas em ingles, so dizer "fixed" com a release no ar. `avisos.json` no master (`plataforma` `tizen` alcanca `.wgt` e `.tpk`; `tizen-tpk` so o `.tpk`; ids com `tpk-preview` sao ignorados pelo `.tpk`). ## Cartao de novidades da versao (um .inc por release) O cartao "Novidades da X.Y.Z" NAO se copia mais por versao. O motor (`src/novidades_cartao.c/.h`: desenho, paginas, botoes, foco, ponteiro, os QRs de `apoio.h`, a marca de "ja visto") e unico; o que muda e o CONTEUDO em `src/novidades/.inc`. O `app.c` tem um gancho so (`novcartao_*`) e nao se mexe. Para o cartao da versao X: 1. `cp src/novidades/.inc src/novidades/X.inc` e troque `.versao`, `.arquivo` (`novidades-X.txt`: a marca de "ja visto" desta versao), `.subtitulo`, a lista `ITENS_*` (grupo, icone `aj_*` que existe em `deploy/app/art/icones`, nome, frase, `.linhas`, `.plataformas` com `NOV_LG|NOV_TPK|NOV_WGT|NOV_ANDROID`) e as cenas da previa (`CENAS_*`). Se a previa e uma tela do app, chame o desenho DELA (como `cenaDv` chama `dvtela_previa_desenhar`), nunca um desenho a parte. 2. Em `src/novidades_cartao.c` troque a linha `#include "novidades/.inc"`. 3. Toda frase nova entra na tabela: `src/idioma_tab.h` (ordem por bytes) e as 28 irmas (`python3 tools/idiomas.py --sincronizar` cria as linhas vazias; preencha e rode `python3 tools/idiomas.py` ate passar). Frase de UMA linha tem de caber em ~45 letras latinas (menos em cirilico, grego e japones): a captura reprova reticencias. 4. `tests/novidades_cartao.c`: a versao esperada em `main` e as contas por plataforma em `plataformas()`. 5. `bash tests/novidades_cartao.sh` e a captura, com a fonte da TV: `NUVIO_SHOT_FONTE=3 bash tests/novidades_cartao_shot.sh /tmp/nuvio-novcartao` (mede os 30 idiomas em 3 plataformas; manda o PNG ao dono para aprovar; o da 2.0.3 esta em `docs/releases/2.0.3/`). 6. `docs/releases/X/NOTAS.md`: a PRIMEIRA linha de conteudo e a frase-resumo da versao, a mesma do `.subtitulo`. ## Pre-releases (canarios) Mudanca de HOST (.NET, `tizen-tpk/*.cs`) ainda nao vista numa TV vai antes num canario: `bash tools/tpk.sh` na branch do canario, copiar de `build/tpk/` com sufixo (`Nuvio--NuvioTpk60-canario-.tpk`), conferir credenciais, `gh release create canario--tpk.N --prerelease --latest=false`, e um testador com aquela TV confirma. (`NV_TPK_NIVEL=1|2` e o unico canario que o `tpk.sh` ja faz sozinho: nivel de GPU forcado.) So entao entra no `vX.Y.Z`. NUNCA marcar pre-release como latest. ## Release da 1.6 (ou qualquer outra depois da 1.5.4) A 1.6 foi feita em branches que NAO tem o trabalho Samsung da 1.5.4 (`feat/novidades160`, `feat/home-hero-cheio`, `fix/pos-152`, `feat/entre-amigos`, `feat/home-decisoes`, `feat/agenda-modal-noticias`, `feat/notas-fontes`). 1. Parta do `master` (que tem a 1.5.4) e mescle as branches da 1.6 nele — nunca o contrario, e nunca volte a partir do `v1.5.3`. 2. Conflitos provaveis e como resolver: - `src/ajustes.c`: o enum `AJ_*`, `OPCOES`, `CHAVE` e `valor[]` sao POSICIONAIS. A 1.5.4 acrescentou `AJ_GPU_EFEITOS` NO FIM. Qualquer ajuste novo da 1.6 vai DEPOIS dele, nas quatro listas, na mesma ordem. O `_Static_assert` pega lista curta, nao lista trocada: confira a ordem. - `src/idioma_tab.h`: tabela ordenada por BYTES UTF-8 (busca binaria). Ao juntar chaves, reordene; `tests/i18n.sh` acusa. - `src/main.c`, `src/gfx.c`, `src/home.c`, `src/detail.c`, `src/player.c`: a 1.5.4 mexeu nesses arquivos com `#ifdef NV_TPK`. Preserve os blocos `NV_TPK` / `NV_TPK40` inteiros. - `src/rede.c` / `rede.h`: o 4/5 troca `_Thread_local` por `pthread_key` sob `NV_TPK40`. Variavel nova por fio na 1.6 precisa ir para dentro da struct `RedeFio`, senao volta o TLS e `tests/tpk40_tls.sh` falha. 3. `bash tools/testa-tudo.sh` (6 falhas conhecidas desde a 1.5.3: `home`, `syncordem`, `salvos_segurar`, `gifbanco-tizen`, `home-trailer-timer`, `tizen-globalthis` — compare com o `master` antes de culpar a 1.6). 4. `bash tools/tpk-testa.sh 60` (host falso) e `tests/tpk40_tls.sh`. 5. Se a 1.6 mudou algo em `tizen-tpk/*.cs`: canario antes (regra acima). 6. Siga a Ordem acima. ## Logs dos testadores D1 `nuvio-recomendacoes`, tabela `registro` (`plataforma` `tizen` e `tizen-tpk`). O `.tpk` escreve `[host] [tv] modelo=... tizen=... host=api8|api9|api11` ~3 s apos abrir, e `[etapa]` / `[etapa-anterior]` com cada passo do arranque (o arquivo `data/tpk-etapas.txt` da abertura anterior sobe no log seguinte). Ler de `servidor/recomendacoes`: `export npm_config_cache="$TMPDIR/npmcache"; npx wrangler d1 execute nuvio-recomendacoes --remote --json --command "..."` (saida com lixo: recorte do primeiro `[` e `json.JSONDecoder().raw_decode`). Apagar registros e irreversivel: so com o ok do dono.