Pular para conteúdo

Compatibilidade

O kiln segue o versionamento semântico. Até a v1.0, uma release menor ainda pode quebrar a API; o changelog lista toda mudança desse tipo sob Breaking, e Atualizando explica o que fazer a respeito. A partir da v1.0, o que vale é isto, para toda a v1.

A API. Identificadores exportados do pacote kiln e de dashboard, kilntest, kilnotel, redisbus, cron, memstore, drivertest, e os New, Migrate e opções dos stores, não são removidos nem alterados. Novos podem aparecer, e os tipos struct podem ganhar campos, então construa structs usando os nomes dos campos.

A interface do store. Os métodos de driver.Store e das interfaces que ele embute não mudam. Uma capacidade adicionada depois chega como uma nova interface opcional, do mesmo jeito que driver.Console e driver.LimitReader chegaram, que o kiln verifica e funciona sem elas. Um store escrito para a v1.0 continua compilando, e os casos de conformidade de uma nova interface pulam os stores que não a implementam.

O schema. Toda mudança de schema dentro da v1 é aditiva (tabelas novas, colunas anuláveis, índices) e é aplicada por New, ou por Migrate quando a aplicação roda com NoMigrate. Servidores em duas versões menores consecutivas rodam lado a lado durante um rolling deploy; o módulo compat verifica isso em toda release, no PostgreSQL, MySQL e SQLite. Releases de patch nunca mudam o schema.

O dashboard. Campos da sua API JSON são adicionados, nunca renomeados ou removidos. As páginas HTML podem mudar em qualquer release.

Comportamento. O que a documentação diz faz parte da API. Fazer o código bater com a documentação é uma correção, não uma mudança que quebra compatibilidade.

Módulos. Todo módulo no repositório é lançado junto, sob a mesma versão. Atualize-os juntos.

Go. O kiln precisa de uma versão do Go que o time do Go ainda dê suporte, Go 1.27 ou mais recente por enquanto: o código dele constrói structs com promoted fields, algo que o Go 1.27 introduziu. O mínimo só muda em releases menores, e nunca passa da mais antiga das duas últimas releases do Go.