Validando Módulos
Valide seus módulos para garantir que estão estruturados corretamente e prontos para distribuição.
Validação Básica
invowk module validate ./mytools.invkmod
Saída para um módulo válido:
Module Validation
• Path: /home/user/mytools.invkmod
• Name: mytools
✓ Module is valid
✓ Structure check passed
✓ Naming convention check passed
✓ Required files present
Validação Profunda
Adicione --deep para também fazer parse e validar o invkfile (quando presente):
invowk module validate ./mytools.invkmod --deep
Saída:
Module Validation
• Path: /home/user/mytools.invkmod
• Name: mytools
✓ Module is valid
✓ Structure check passed
✓ Naming convention check passed
✓ Required files present
✓ Invkfile parses successfully
O que é Validado
Checagens de Estrutura
- Diretório do módulo existe
invkmod.cueobrigatório na raizinvkfile.cueé opcional (módulos apenas de biblioteca são permitidos)- Sem módulos aninhados (exceto dentro de
invk_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
.invkmod - Prefixo do nome segue as regras (começa com letra, alfanumérico + pontos)
- ID do módulo em
invkmod.cuecorresponde ao prefixo do nome da pasta - Sem caracteres inválidos (hífens, underscores)
Checagens Profundas (com --deep)
- Invkfile faz parse sem erros (se presente)
- Sintaxe CUE é válida
- Restrições do schema são atendidas
Erros de Validação
Invkmod Ausente
Module Validation
• Path: /home/user/bad.invkmod
✗ Module validation failed with 1 issue(s)
1. [structure] missing required invkmod.cue
Nome Inválido
Module Validation
• Path: /home/user/my-tools.invkmod
✗ 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.invkmod
✗ Module validation failed with 1 issue(s)
1. [structure] nested.invkmod: nested modules are not allowed (except in invk_modules/)
Invkfile Inválido (deep)
Module Validation
• Path: /home/user/broken.invkmod
✗ Module validation failed with 1 issue(s)
1. [invkfile] 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/*.invkmod; do
invowk module validate "$mod" --deep
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/*.invkmod; do
invowk module validate "$mod" --deep
done
Problemas Comuns
Separadores de Caminho Errados
// Bad - Windows-style
script: "scripts\\build.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
- Use
--deep: Captura erros de invkfile - 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