Pular para o conteúdo principal
Versão: 0.4.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 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

  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