Validando Módulos
Valide seus módulos para garantir que estão estruturados corretamente e prontos para distribuição.
Validando um Módulo
invowk validate ./mytools.invowkmod
Saída para um módulo válido com um invowkfile:
Module Validation
• Path: /home/user/mytools.invowkmod
• Name: mytools
✓ Module is valid
✓ Structure check passed
✓ Naming convention check passed
✓ Required files present
✓ Invowkfile parses successfully
invowk validate sempre executa validação completa, incluindo parsing de invowkfile e verificações da árvore de comandos quando o módulo contém um invowkfile.cue.
O que é Validado
Checagens de Estrutura
- Diretório do módulo existe
invowkmod.cueobrigatório na raizinvowkfile.cueé opcional (módulos apenas de biblioteca são permitidos)- Sem módulos aninhados (exceto dentro de
invowk_modules/)
Checagens de Segurança
- Sem symlinks: Symlinks não são permitidos em módulos por motivos de segurança. Eles podem escapar do diretório do módulo durante extração (vulnerabilidade zip-slip).
Checagens de Compatibilidade
- Nomes reservados no Windows: Arquivos chamados
CON,PRN,AUX,NUL,COM1-COM9ouLPT1-LPT9geram um aviso de compatibilidade. Esses nomes são reservados no Windows e podem causar problemas ao extrair módulos em sistemas Windows.
Checagens de Nomenclatura
- Nome da pasta termina com
.invowkmod - Prefixo do nome segue as regras (começa com letra, alfanumérico + pontos)
- ID do módulo em
invowkmod.cuecorresponde ao prefixo do nome da pasta - Sem caracteres inválidos (hífens, underscores)
Checagens de Invowkfile
Quando o módulo contém um invowkfile.cue, estas são sempre verificadas:
- Invowkfile faz parse sem erros
- Sintaxe CUE é válida
- Restrições do schema são atendidas
- Estrutura da árvore de comandos é válida (sem conflitos args + subcomandos)
Erros de Validação
Invowkmod Ausente
Module Validation
• Path: /home/user/bad.invowkmod
✗ Module validation failed with 1 issue(s)
1. [structure] missing required invowkmod.cue
Nome Inválido
Module Validation
• Path: /home/user/my-tools.invowkmod
✗ Module validation failed with 1 issue(s)
1. [naming] module name 'my-tools' contains invalid characters (hyphens not allowed)
Módulo Aninhado
Module Validation
• Path: /home/user/parent.invowkmod
✗ Module validation failed with 1 issue(s)
1. [structure] nested.invowkmod: nested modules are not allowed (except in invowk_modules/)
Invowkfile Inválido
Module Validation
• Path: /home/user/broken.invowkmod
✗ Module validation failed with 1 issue(s)
1. [invowkfile] parse error at line 15: expected '}', found EOF
Validação em Lote
Valide múltiplos módulos:
# Validate all modules in a directory
for mod in ./modules/*.invowkmod; do
invowk validate "$mod"
done
Integração com CI
Adicione validação de módulos no seu pipeline de CI:
# GitHub Actions example
- name: Validate modules
run: |
for mod in modules/*.invowkmod; do
invowk validate "$mod"
done
Problemas Comuns
Separadores de Caminho Errados
// Bad - Windows-style
script: "scriptsuild.sh"
// Good - Forward slashes
script: "scripts/build.sh"
Escapando o Diretório do Módulo
// Bad - tries to access parent
script: "../outside/script.sh"
// Good - stays within module
script: "scripts/script.sh"
Caminhos Absolutos
// Bad - absolute path
script: "/usr/local/bin/script.sh"
// Good - relative path
script: "scripts/script.sh"
Melhores Práticas
- Valide antes de commitar: Detecte problemas cedo
- Valide no CI: Impede módulos quebrados de sair
- Corrija problemas imediatamente: Não deixe dívida de validação acumular
Próximos Passos
- Criando Módulos - Estruture seu módulo
- Distribuindo - Compartilhe seu módulo