Dependências de Capacidades
Dependências de capacidades verificam se capacidades de sistema necessárias estão disponíveis antes que seu comando seja executado. O Invowk™ suporta conectividade de rede, disponibilidade de engine de containers e verificação de TTY interativo.
Capacidades Disponíveis
| Capacidade | Descrição |
|---|---|
local-area-network | Verifica conectividade de rede local (LAN) |
internet | Verifica conectividade com a internet |
containers | Verifica se Docker ou Podman está instalado e respondendo |
tty | Verifica se o Invowk está rodando em um TTY interativo |
Uso Básico
depends_on: {
capabilities: [
{alternatives: ["internet"]},
{alternatives: ["local-area-network"]}
]
}
Se a conectividade com a internet não estiver disponível:
✗ Dependencies not satisfied
Command 'deploy' has unmet dependencies:
Missing Capabilities:
• internet - no internet connectivity
Ensure the required capabilities are available and try again.
Conectividade com a Internet
Verifique se há acesso à internet funcionando:
depends_on: {
capabilities: [
{alternatives: ["internet"]}
]
}
Isso verifica:
- Resolução de DNS está funcionando
- Consegue alcançar hosts externos
- Rede não está bloqueada
Casos de Uso
// Download dependencies
{
name: "deps"
depends_on: {
capabilities: [{alternatives: ["internet"]}]
}
implementations: [{
script: "go mod download"
runtimes: [{name: "native"}]
platforms: [{name: "linux"}, {name: "macos"}]
}]
}
// Deploy to cloud
{
name: "deploy"
depends_on: {
capabilities: [{alternatives: ["internet"]}]
}
implementations: [{
script: "kubectl apply -f k8s/"
runtimes: [{name: "native"}]
platforms: [{name: "linux"}, {name: "macos"}]
}]
}
// Fetch remote data
{
name: "sync"
depends_on: {
capabilities: [{alternatives: ["internet"]}]
}
implementations: [{
script: "curl -o data.json https://api.example.com/data"
runtimes: [{name: "native"}]
platforms: [{name: "linux"}, {name: "macos"}]
}]
}
Rede Local (LAN)
Verifique conectividade de rede local:
depends_on: {
capabilities: [
{alternatives: ["local-area-network"]}
]
}
Isso verifica:
- Interface de rede está ativa
- Pode comunicar na rede local
- Útil para serviços on-premise
Casos de Uso
// Connect to local database
{
name: "db connect"
depends_on: {
capabilities: [{alternatives: ["local-area-network"]}]
}
implementations: [{
script: "psql -h db.local -U admin"
runtimes: [{name: "native"}]
platforms: [{name: "linux"}, {name: "macos"}]
}]
}
// Access local services
{
name: "check services"
depends_on: {
capabilities: [{alternatives: ["local-area-network"]}]
}
implementations: [{
script: "curl http://service.local:8080/health"
runtimes: [{name: "native"}]
platforms: [{name: "linux"}, {name: "macos"}]
}]
}
Engine de Containers
Verifique se um engine de containers está instalado e pronto:
depends_on: {
capabilities: [
{alternatives: ["containers"]}
]
}
Isso verifica:
- Docker ou Podman está no PATH
- O engine responde ao comando de versão
Casos de Uso
Use isso quando um comando chama Docker/Podman diretamente ou precisa de builds de container.
TTY Interativo
Verifique se o Invowk está rodando em um terminal interativo:
depends_on: {
capabilities: [
{alternatives: ["tty"]}
]
}
Isso verifica:
stdiné um terminalstdouté um terminal
Casos de Uso
Use isso para prompts interativos, componentes TUI ou scripts que exigem entrada de teclado.
Alternativas (Semântica OU)
Requer qualquer uma das capacidades:
depends_on: {
capabilities: [
// Either internet OR LAN is fine
{alternatives: ["internet", "local-area-network"]}
]
}
Isso é útil quando um comando pode funcionar com:
- Serviços de nuvem remotos (internet)
- Serviços on-premise locais (LAN)
Exemplos do Mundo Real
Instalação de Pacotes
{
name: "install"
description: "Install project dependencies"
depends_on: {
capabilities: [{alternatives: ["internet"]}]
tools: [{alternatives: ["npm", "pnpm", "yarn"]}]
}
implementations: [{
script: "npm install"
runtimes: [{name: "native"}]
platforms: [{name: "linux"}, {name: "macos"}]
}]
}
Pipeline de CI
{
name: "ci"
description: "Run CI pipeline with remote checks"
depends_on: {
capabilities: [
{alternatives: ["internet"]} // For dependency download
]
tools: [
{alternatives: ["go"]},
{alternatives: ["git"]},
]
}
implementations: [{
script: """
go mod download
go build ./...
go test ./...
"""
runtimes: [{name: "native"}]
platforms: [{name: "linux"}, {name: "macos"}]
}]
}
Ambiente Híbrido
{
name: "backup"
description: "Backup to available storage"
depends_on: {
// Can backup to cloud (internet) or NAS (LAN)
capabilities: [{alternatives: ["internet", "local-area-network"]}]
}
implementations: [{
script: """
if ping -c 1 nas.local > /dev/null 2>&1; then
rsync -av ./data nas.local:/backup/
else
aws s3 sync ./data s3://my-backup-bucket/
fi
"""
runtimes: [{name: "native"}]
platforms: [{name: "linux"}, {name: "macos"}]
}]
}
Padrão Offline-First
Projete comandos que funcionam offline quando possível:
cmds: [
// Online version - downloads latest
{
name: "update deps"
depends_on: {
capabilities: [{alternatives: ["internet"]}]
}
implementations: [{
script: "go mod download"
runtimes: [{name: "native"}]
platforms: [{name: "linux"}, {name: "macos"}]
}]
},
// Offline version - uses cache
{
name: "build"
// No internet requirement - uses cached dependencies
depends_on: {
filepaths: [{alternatives: ["go.mod"]}]
}
implementations: [{
script: "go build -mod=readonly ./..."
runtimes: [{name: "native"}]
platforms: [{name: "linux"}, {name: "macos"}]
}]
}
]
Contexto de Container
Para runtime container, verificações de capacidade são realizadas no host, não dentro do container:
{
name: "deploy"
depends_on: {
// Internet check happens on HOST
capabilities: [{alternatives: ["internet"]}]
}
implementations: [{
script: """
apt-get update && apt-get install -y kubectl
kubectl apply -f k8s/
"""
runtimes: [{name: "container", image: "debian:stable-slim"}]
platforms: [{name: "linux"}]
}]
}
Isso faz sentido porque:
- Rede do container herda do host
- Você está verificando se o deploy pode alcançar serviços externos
- Rede do container é efêmera
Melhores Práticas
- Verifique apenas quando necessário: Não exija internet para tarefas que funcionam offline
- Use alternativas: Quando serviços locais ou de nuvem são intercambiáveis
- Falhe rápido: Verifique conectividade antes de iniciar operações longas
- Forneça fallbacks: Ofereça alternativas offline quando possível
Próximos Passos
- Environment Variables - Verificar variáveis de ambiente requeridas
- Custom Checks - Escrever scripts de validação personalizados