Pular para o conteúdo principal
Versão: 0.1.0

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​

  1. Use alternativas para arquivos de config: {alternatives: ["config.yaml", "config.json"]}
  2. Verifique permissões quando necessário: Especialmente para scripts e diretórios de saída
  3. Considere diferenças de plataforma: Use variáveis de ambiente ou múltiplas implementações
  4. Verifique dependências primeiro: Verifique node_modules antes de executar scripts npm

Próximos Passos​