Release Workflow (UI components)
Fluxo obrigatório para publicar release de qualquer componente com UI (desktop, mobile, web, TV). Tag formato `<área>/<componente>/v*`, secrets necessários, regras pra adicionar/renomear/arquivar componente no pipeline. Distinto de `policies/deploy-feedback.kmd` (notificação pós-deploy) e `specs/releases/packaging.kmd` (formatos de pacote).
Release Policy — Koder Stack
Descreve o fluxo obrigatório para publicar uma release de qualquer componente com UI (desktop, mobile, web, TV) no monorepo Koder/koder.
Fluxo padrão
git tag <area>/<componente>/v<versão>
git push origin <area>/<componente>/v<versão>Isso é tudo. O Koder Flow dispara o pipeline automaticamente:
- Detecta quais plataformas o componente tem implementadas (lê o filesystem)
- Builda cada plataforma disponível
- Cria a release no Flow com todos os artefatos
- Publica os artefatos na Koder Hub
Exemplo:
git tag products/horizontal/kmail/v1.0.4
git push origin products/horizontal/kmail/v1.0.4Convenção de tag
| Área | Componente | Padrão | Exemplo |
|---|---|---|---|
| workspace | kmail | products/horizontal/kmail/v* |
products/horizontal/kmail/v1.0.4 |
| workspace | talk | products/horizontal/talk/v* |
products/horizontal/talk/v2.1.0 |
| foundation | pass | services/foundation/pass/v* |
services/foundation/pass/v1.2.0 |
| dev | kterm | products/dev/kterm/v* |
products/dev/kterm/v1.3.0 |
| ai | kode | services/ai/kode/v* |
services/ai/kode/v1.0.5 |
| industry | lex | products/vertical/lex/v* |
products/vertical/lex/v1.0.0 |
Padrão geral: <área>/<componente>/v<semver>.
A versão em koder.toml e pubspec.yaml deve estar atualizada *ntes*de criar a tag.
Plataformas construídas automaticamente
O pipeline detecta plataformas pelo filesystem — nenhuma configuração explícita necessária:
| Diretório presente no projeto Flutter | Plataforma gerada |
|---|---|
android/app/src/main/AndroidManifest.xml |
APK (arm64, armv7, x86_64) |
linux/CMakeLists.txt |
tar.gz + DEB + RPM + AppImage |
windows/CMakeLists.txt |
MSIX (via WinRM → k.win) |
web/index.html |
tar.gz do bundle web |
tizen/ ou webos/ |
.wgt / .ipk (JS/Vite) |
macOS e iOS são detectados mas *empre pulados*— requerem runner macOS com certs.
Se uma plataforma não estiver implementada (diretório ausente), o pipeline a ignora sem falhar.
Adicionar um novo componente ao pipeline
- Criar o componente com
flutter createou scaffold manual no path<área>/<componente>/app/ - Adicionar
koder.tomlmínimo no diretório do app:[app] slug = "koder-<componente>" name = "Koder <Componente>" version = "1.0.0" - Gerar o workflow de release:
# Adicionar o componente na lista COMPONENTS em .gitea/scripts/gen-release-workflows.py # Re-executar: python3 .gitea/scripts/gen-release-workflows.py - Commitar e fazer push do novo workflow.
- Para ativar o build Windows: registrar o secret
WINRM_PASSno Gitea (ver abaixo).
Renomear um componente no pipeline
- Renomear o diretório no monorepo:
git mv <área>/<nome-antigo> <área>/<nome-novo> - Localizar a entrada antiga na lista
COMPONENTSem.gitea/scripts/gen-release-workflows.pye atualizar todos os campos:
workflow_name,area,tag_prefix,app_path,slug,display_name. - Regenerar os workflows:
python3 .gitea/scripts/gen-release-workflows.py - Deletar o arquivo de workflow do nome antigo:
rm .gitea/workflows/<nome-antigo>-release.yml - Atualizar
koder.tomldo componente: camposslugename. - Commitar e fazer push — inclua o diretório renomeado, os workflows atualizados e o
koder.toml.
Arquivar um componente no pipeline
- Remover a entrada do componente da lista
COMPONENTSemgen-release-workflows.py. - Deletar o arquivo de workflow órfão:
rm .gitea/workflows/<nome>-release.yml - Commitar e fazer push.
O diretório do componente pode ser mantido no monorepo (histórico) ou arquivado num branch separado — a remoção do workflow é o que desativa o pipeline.
Secrets necessários no Koder Flow
Registrar em *ettings → Secrets*do repo Koder/koder:
| Secret | Obrigatório | Descrição |
|---|---|---|
FLOW_TOKEN |
Sim | Token de API do Gitea (cria releases + upload assets) |
KODER_HUB_TOKEN |
Sim | Token da Koder Hub (publica artefatos) |
ANDROID_KEYSTORE_B64 |
Sim | Keystore JKS em base64 para assinar APKs |
ANDROID_STORE_PASSWORD |
Sim | Senha do keystore |
ANDROID_KEY_ALIAS |
Sim | Alias da chave dentro do keystore |
ANDROID_KEY_PASSWORD |
Sim | Senha da chave |
WINRM_PASS |
Para Windows | Senha do administrador em k.win (187.108.204.239) |
Se WINRM_PASS não estiver configurado, o build Windows é pulado com aviso — o restante das plataformas é publicado normalmente.
Documentação e landing page após release
Toda release deve atualizar a documentação do componente e verificar a landing page:
- *ocumentação do Stack*— executar
/k-housekeep <área>/<componente>após a release. O comando atualiza o deep-dive emdocs/stack/modules/com a nova versão/status e regenera os PDFs. - *aridade de conteúdo*— o k-housekeep verifica automaticamente se o hero, features list, version badges e textos de download da landing page estão consistentes com o
koder.tomleCHANGELOG.mdatualizados. - *ão pular*— releases sem esse passo fazem a documentação e a landing page divergirem silenciosamente do componente real.
Se o componente não tiver deepdive ainda, o `/khousekeep área/componente` o cria automaticamente.
Atualizar a versão antes de taggear
*lutter (pubspec.yaml):*
version: 1.0.4+5 # semver+build_number*koder.toml`:*
[app]
version = "1.0.4"Ambos devem estar commitados antes de criar a tag.
Referências técnicas
- Implementação do pipeline:
.gitea/README.md - Formatos de pacote aceitos:
meta/docs/stack/specs/releases/packaging.kmd - Build Windows via WinRM:
meta/docs/stack/policies/windows-builds.kmd
Hub apt como canal canônico de install (.deb)
A partir de *istro#012*(20260520), os pacotes .deb da koder-suite são instalados no Koder Linux via apt-get install contra https://hub.koder.dev/apt stable main. Os tags de release no Flow continuam sendo o *ourceoftruth*dos .debs (a CI publica do Flow release pro Hub apt), mas o *onsumo*acontece via Hub apt:
- Hook
0060-koder-suite.hook.chrootem `infralinuxdistrovariants{desktop,server}hookslive/
fazapt-get install -ydos pacotes listados emkodersuitepackages.txt`. - Hub apt serve
Release+InRelease(clearsigned com a chave v1375BC2537CEE0D8E919DA8D1073EDD7DCCA54EB9) +Packages(gz+xz) +pool/main/<initial>/<slug>/<file>.debperhub-RFC-007 §6.1. - Mapeamento (slug × .deb Package × Flow tag × arch) em
meta/docs/stack/registries/koder-suite-deb-mapping.md. - Bulk
import inicial dos 12 .debs foi feito em hub#139 (202605-20);releases futuras devem disparar
khub publishautomaticamente (hub#103 longterm Gitea Action — atualmente manual, scriptbase preservado em hub#139 closure notes).
Componentes que ainda precisam shipar .deb para Hub:
- *esktop* 12/13 já publicados; só falta
koderumbrella (distro#017— pending first release tag).
- *erver* 0/6 publicados (
koder-id-daemon,koder-reporter,koder-certs,koder-billing,koder-jet,koder-kdb-next— cada componente flipa prarequirednovariants/server/koder-suite-packages.txtquando shipa seu.deb).