Dependências de Caminho de Arquivo
Dependências de caminho de arquivo verificam se arquivos ou diretórios necessários existem antes que seu comando seja executado. Você também pode verificar permissões específicas.
Uso Básico
depends_on: {
filepaths: [
{alternatives: ["go.mod"]}
]
}
Se o arquivo não existir:
✗ Dependencies not satisfied
Command 'build' has unmet dependencies:
Missing Files:
• go.mod - file not found
Ensure the required files exist and try again.
Alternativas (Semântica OU)
Especifique múltiplas alternativas quando qualquer caminho funcionar:
depends_on: {
filepaths: [
{alternatives: ["config.yaml", "config.json"], readable: true},
{alternatives: ["./output"], writable: true},
{alternatives: [".env"], readable: true}
]
}
O Invowk™ verifica as alternativas em ordem e para na primeira correspondência.
Tipos de Caminho
Caminhos Relativos
Relativo à localização do invowkfile:
depends_on: {
filepaths: [
{alternatives: ["./src/main.go"]},
{alternatives: ["../shared/utils.go"]},
{alternatives: ["scripts/build.sh"]},
]
}
Caminhos Absolutos
Caminhos completos do sistema:
depends_on: {
filepaths: [
{alternatives: ["/etc/myapp/config.yaml"]},
{alternatives: ["/usr/local/bin/mytool"]},
]
}
Variáveis de Ambiente em Caminhos
Expanda variáveis de ambiente:
depends_on: {
filepaths: [
{alternatives: ["${HOME}/.config/myapp/config.yaml"]},
{alternatives: ["${XDG_CONFIG_HOME}/myapp/config.yaml", "${HOME}/.myapprc"]},
]
}
Verificações de Permissão
Verifique permissões específicas de arquivo:
Legível
depends_on: {
filepaths: [
{alternatives: ["secrets.env"], readable: true}
]
}
Gravável
depends_on: {
filepaths: [
{alternatives: ["./output", "./dist"], writable: true}
]
}
Executável
depends_on: {
filepaths: [
{alternatives: ["./scripts/deploy.sh"], executable: true}
]
}
Permissões Combinadas
depends_on: {
filepaths: [
// Script deve ser legível E executável
{
alternatives: ["./scripts/run.sh"]
readable: true
executable: true
}
]
}
Diretórios vs Arquivos
Verificações de caminho funcionam tanto para arquivos quanto para diretórios:
depends_on: {
filepaths: [
// Verificar um arquivo
{alternatives: ["package.json"]},
// Verificar um diretório
{alternatives: ["node_modules"]},
// Verificar se diretório é gravável
{alternatives: ["./build"], writable: true},
]
}
Exemplos do Mundo Real
Projeto Go
{
name: "build"
depends_on: {
filepaths: [
{alternatives: ["go.mod"]},
{alternatives: ["go.sum"]},
{alternatives: ["cmd/main.go", "main.go"]},
]
}
implementations: [{
script: "go build ./..."
runtimes: [{name: "native"}]
}]
}
Projeto Node.js
{
name: "build"
depends_on: {
filepaths: [
{alternatives: ["package.json"]},
// Qualquer arquivo lock serve
{alternatives: ["pnpm-lock.yaml", "package-lock.json", "yarn.lock"]},
// Dependências devem estar instaladas
{alternatives: ["node_modules"]},
]
}
implementations: [{
script: "npm run build"
runtimes: [{name: "native"}]
}]
}
Docker Build
{
name: "docker-build"
depends_on: {
filepaths: [
// Precisa de Dockerfile ou Containerfile
{alternatives: ["Dockerfile", "Containerfile"]},
// E um script de build
{alternatives: ["scripts/build.sh"], executable: true},
]
}
implementations: [{
script: "docker build -t myapp ."
runtimes: [{name: "native"}]
}]
}
Arquivos de Configuração
{
name: "deploy"
depends_on: {
filepaths: [
// Verificar config em ordem de preferência
{
alternatives: [
"./config/production.yaml",
"./config/default.yaml",
"${HOME}/.myapp/config.yaml"
]
readable: true
},
// Diretório de saída gravável
{alternatives: ["./deploy-output"], writable: true},
]
}
implementations: [{
script: "./scripts/deploy.sh"
runtimes: [{name: "native"}]
}]
}
Contexto de Container
Para runtime container, verificações de caminho são validadas dentro do container:
{
name: "build"
implementations: [{
script: "go build ./..."
runtimes: [{name: "container", image: "golang:1.21"}]
depends_on: {
filepaths: [
// Estes são verificados DENTRO do container
// /workspace é onde seu projeto está montado
{alternatives: ["/workspace/go.mod"]},
{alternatives: ["/workspace/go.sum"]},
]
}
}]
}
Caminhos Específicos de Plataforma
Use múltiplas implementações para caminhos específicos de plataforma:
{
name: "read-config"
implementations: [
{
script: "cat $CONFIG_PATH"
runtimes: [{name: "native"}]
platforms: [{name: "linux"}]
depends_on: {
filepaths: [{alternatives: ["/etc/myapp/config.yaml"]}]
}
},
{
script: "cat $CONFIG_PATH"
runtimes: [{name: "native"}]
platforms: [{name: "macos"}]
depends_on: {
filepaths: [{alternatives: ["/usr/local/etc/myapp/config.yaml"]}]
}
}
]
}
Mensagens de Erro
Mensagens de erro claras para arquivos faltando:
✗ Dependencies not satisfied
Command 'build' has unmet dependencies:
Missing Files:
• go.mod - file not found
• node_modules - directory not found
Permission Issues:
• ./scripts/deploy.sh - not executable
• ./output - not writable
Ensure the required files exist with proper permissions and try again.
Melhores Práticas
- Use alternativas para arquivos de config:
{alternatives: ["config.yaml", "config.json"]} - Verifique permissões quando necessário: Especialmente para scripts e diretórios de saída
- Considere diferenças de plataforma: Use variáveis de ambiente ou múltiplas implementações
- Verifique dependências primeiro: Verifique
node_modulesantes de executar scripts npm
Próximos Passos
- Commands - Depender de outros comandos Invowk
- Environment Variables - Verificar variáveis de ambiente requeridas