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 must be readable AND executable
{
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: [
// Check for a file
{alternatives: ["package.json"]},
// Check for a directory
{alternatives: ["node_modules"]},
// Check directory is writable
{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"}]
platforms: [{name: "linux"}, {name: "macos"}]
}]
}
Projeto Node.js
{
name: "build"
depends_on: {
filepaths: [
{alternatives: ["package.json"]},
// Any lock file is fine
{alternatives: ["pnpm-lock.yaml", "package-lock.json", "yarn.lock"]},
// Dependencies must be installed
{alternatives: ["node_modules"]},
]
}
implementations: [{
script: "npm run build"
runtimes: [{name: "native"}]
platforms: [{name: "linux"}, {name: "macos"}]
}]
}
Docker Build
{
name: "docker-build"
depends_on: {
filepaths: [
// Need either Dockerfile or Containerfile
{alternatives: ["Dockerfile", "Containerfile"]},
// And a build script
{alternatives: ["scripts/build.sh"], executable: true},
]
}
implementations: [{
script: "docker build -t myapp ."
runtimes: [{name: "native"}]
platforms: [{name: "linux"}, {name: "macos"}]
}]
}
Arquivos de Configuração
{
name: "deploy"
depends_on: {
filepaths: [
// Check for config in order of preference
{
alternatives: [
"./config/production.yaml",
"./config/default.yaml",
"${HOME}/.myapp/config.yaml"
]
readable: true
},
// Writable output directory
{alternatives: ["./deploy-output"], writable: true},
]
}
implementations: [{
script: "./scripts/deploy.sh"
runtimes: [{name: "native"}]
platforms: [{name: "linux"}, {name: "macos"}]
}]
}
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.26"}]
platforms: [{name: "linux"}]
depends_on: {
filepaths: [
// These are checked INSIDE the container
// /workspace is where your project is mounted
{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