Este documento define as práticas de versionamento para os Helm Charts do repositório Tech-Preta/charts.
- Estratégia de Versionamento
- Semantic Versioning
- Versionamento de Charts vs Apps
- Ambientes e Versões
- Processo de Release
- Exemplos Práticos
Seguimos o padrão Semantic Versioning 2.0.0 para todos os charts:
MAJOR.MINOR.PATCH
- MAJOR: Mudanças incompatíveis com versões anteriores
- MINOR: Novas funcionalidades mantendo compatibilidade
- PATCH: Correções de bugs mantendo compatibilidade
Cada chart possui duas versões independentes:
- Chart Version (
version): Versão do próprio chart - App Version (
appVersion): Versão da aplicação que o chart instala
# Chart.yaml
apiVersion: v2
name: meu-chart
version: 1.2.3 # Versão do chart
appVersion: "2.1.0" # Versão da aplicaçãoIncremente quando houver:
- ✅ Breaking changes em valores do
values.yaml - ✅ Remoção de recursos ou funcionalidades
- ✅ Mudanças incompatíveis na API do Kubernetes
- ✅ Alterações que quebram instalações existentes
Exemplo:
# v1.x.x
values:
database:
host: localhost
port: 5432
# v2.0.0 - Breaking change
values:
database:
connection:
host: localhost
port: 5432Incremente quando houver:
- ✅ Novas funcionalidades opcionais
- ✅ Novos valores no
values.yaml(com defaults) - ✅ Melhorias que mantêm compatibilidade
- ✅ Novos recursos opcionais do Kubernetes
Exemplo:
# v1.1.0 - Nova funcionalidade
values:
monitoring:
enabled: false # Novo recurso opcional
serviceMonitor:
enabled: falseIncremente quando houver:
- ✅ Correções de bugs
- ✅ Atualizações de documentação
- ✅ Melhorias internas sem impacto na API
- ✅ Correções de segurança
Exemplo:
# v1.1.1 - Correção de bug
# Corrigido: resource limits não sendo aplicados corretamenteControla a evolução do próprio chart:
# Chart.yaml
version: 1.2.3 # Versão do chartQuando incrementar:
- Mudanças nos templates
- Modificações no values.yaml
- Atualizações na documentação
- Correções de bugs no chart
Representa a versão da aplicação empacotada:
# Chart.yaml
appVersion: "2.1.0" # Versão da aplicaçãoQuando incrementar:
- Nova versão da aplicação disponível
- Atualização da imagem Docker
- Mudança na versão da aplicação principal
| Chart Version | App Version | Kubernetes | Helm |
|---|---|---|---|
| 1.0.x | 1.x.x | 1.19+ | 3.0+ |
| 1.1.x | 1.x.x | 1.20+ | 3.2+ |
| 2.0.x | 2.x.x | 1.21+ | 3.5+ |
charts/
├── giropops-senhas-dev/ # v0.1.x (experimental)
├── giropops-senhas-stg/ # v0.2.x (staging)
└── giropops-senhas-prd/ # v1.0.x (produção)
graph LR
A[Dev v0.1.x] --> B[Staging v0.2.x]
B --> C[Production v1.0.x]
A1[Features] --> A
B1[Integration Tests] --> B
C1[Stable Release] --> C
- Range:
0.1.x - Propósito: Experimentação e desenvolvimento
- Estabilidade: Instável
- Breaking Changes: Permitidos
# charts/giropops-senhas-dev/Chart.yaml
version: 0.1.5
appVersion: "1.16.0-dev"- Range:
0.2.x - Propósito: Testes de integração
- Estabilidade: Beta
- Breaking Changes: Com cuidado
# charts/giropops-senhas-stg/Chart.yaml
version: 0.2.1
appVersion: "1.16.0-rc1"- Range:
1.x.x - Propósito: Ambiente de produção
- Estabilidade: Estável
- Breaking Changes: Evitados
# charts/giropops-senhas-prd/Chart.yaml
version: 1.0.0
appVersion: "1.16.0"# Verificar mudanças
git diff HEAD~1 charts/meu-chart/
# Determinar tipo de mudança
# - Breaking change? → MAJOR
# - Nova feature? → MINOR
# - Bug fix? → PATCH# Editar Chart.yaml
vim charts/meu-chart/Chart.yaml
# Exemplo de incremento MINOR
version: 1.2.0 # era 1.1.5
appVersion: "2.1.0" # atualizada também# CHANGELOG.md
## [1.2.0] - 2025-09-04
### Added
- Nova funcionalidade de monitoramento
- Suporte para ServiceMonitor
- Configuração de alertas
### Changed
- Melhorado template de deployment
- Atualizada documentação
### Fixed
- Corrigido problema com probes de saúde# Lint do chart
helm lint charts/meu-chart/
# Teste de template
helm template test charts/meu-chart/ --debug
# Teste de instalação
helm install test charts/meu-chart/ --dry-run# Commit das mudanças
git add .
git commit -m "release: meu-chart v1.2.0"
# Tag de release (opcional)
git tag meu-chart-v1.2.0
# Push
git push origin main
git push --tagsSituação: Corrigir erro em template de service
# Antes (v1.1.3)
# Bug: porta errada no service
# Depois (v1.1.4)
version: 1.1.4 # PATCH increment
appVersion: "2.0.1" # Mantém app versionSituação: Adicionar suporte para Ingress
# Antes (v1.1.4)
# Não tinha suporte para Ingress
# Depois (v1.2.0)
version: 1.2.0 # MINOR increment
appVersion: "2.0.1" # Mantém app versionvalues.yaml:
# Nova seção adicionada
ingress:
enabled: false # Default compatível
className: ""
annotations: {}Situação: Reestruturar configuração de database
# Antes (v1.2.3)
database:
host: localhost
port: 5432
name: mydb
# Depois (v2.0.0)
version: 2.0.0 # MAJOR increment
appVersion: "2.1.0"values.yaml:
# Breaking change na estrutura
database:
connection:
host: localhost
port: 5432
config:
name: mydb
ssl: trueSituação: Nova versão da aplicação disponível
# Antes
version: 1.2.3
appVersion: "2.0.1"
# Depois
version: 1.2.4 # PATCH: apenas app version mudou
appVersion: "2.0.2" # Nova versão da app# Tag por chart
git tag rundeck-exporter-v0.1.8
git tag giropops-senhas-dev-v0.1.0
git tag giropops-senhas-prd-v1.0.0
# Release geral (opcional)
git tag v2025.09.04O GitHub Actions cria releases automaticamente:
# .github/workflows/release.yml
- name: Create Release
uses: helm/chart-releaser-action@v1.6.0
env:
CR_TOKEN: "${{ secrets.USER_TOKEN }}"- Versão incrementada corretamente
- CHANGELOG.md atualizado
- Documentação atualizada
- Testes passando
- Lint sem erros
- Breaking changes documentados
- Commit com mensagem clara
- Tag criada (se necessário)
- Push realizado
- GitHub Actions executando
- Charts empacotados
- Index.yaml atualizado
- Verificar GitHub Pages
- Testar instalação
- Artifact Hub atualizado
- Documentação publicada
- Comunicar breaking changes
Desenvolvido com ❤️ pela Tech-Preta