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
// Baixar dependências
{
name: "deps"
depends_on: {
capabilities: [{alternatives: ["internet"]}]
}
implementations: [{
script: "go mod download"
runtimes: [{name: "native"}]
}]
}
// Deploy para a nuvem
{
name: "deploy"
depends_on: {
capabilities: [{alternatives: ["internet"]}]
}
implementations: [{
script: "kubectl apply -f k8s/"
runtimes: [{name: "native"}]
}]
}
// Buscar dados remotos
{
name: "sync"
depends_on: {
capabilities: [{alternatives: ["internet"]}]
}
implementations: [{
script: "curl -o data.json https://api.example.com/data"
runtimes: [{name: "native"}]
}]
}
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
// Conectar ao banco de dados local
{
name: "db connect"
depends_on: {
capabilities: [{alternatives: ["local-area-network"]}]
}
implementations: [{
script: "psql -h db.local -U admin"
runtimes: [{name: "native"}]
}]
}
// Acessar serviços locais
{
name: "check services"
depends_on: {
capabilities: [{alternatives: ["local-area-network"]}]
}
implementations: [{
script: "curl http://service.local:8080/health"
runtimes: [{name: "native"}]
}]
}
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: [
// Internet OU LAN serve
{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: "Instalar dependências do projeto"
depends_on: {
capabilities: [{alternatives: ["internet"]}]
tools: [{alternatives: ["npm", "pnpm", "yarn"]}]
}
implementations: [{
script: "npm install"
runtimes: [{name: "native"}]
}]
}
Pipeline de CI
{
name: "ci"
description: "Executar pipeline de CI com verificações remotas"
depends_on: {
capabilities: [
{alternatives: ["internet"]} // Para download de dependências
]
tools: [
{alternatives: ["go"]},
{alternatives: ["git"]},
]
}
implementations: [{
script: """
go mod download
go build ./...
go test ./...
"""
runtimes: [{name: "native"}]
}]
}
Ambiente Híbrido
{
name: "backup"
description: "Fazer backup para armazenamento disponível"
depends_on: {
// Pode fazer backup para nuvem (internet) ou 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"}]
}]
}
Padrão Offline-First
Projete comandos que funcionam offline quando possível:
cmds: [
// Versão online - baixa o mais recente
{
name: "update deps"
depends_on: {
capabilities: [{alternatives: ["internet"]}]
}
implementations: [{
script: "go mod download"
runtimes: [{name: "native"}]
}]
},
// Versão offline - usa cache
{
name: "build"
// Sem requisito de internet - usa dependências em cache
depends_on: {
filepaths: [{alternatives: ["go.mod"]}]
}
implementations: [{
script: "go build -mod=readonly ./..."
runtimes: [{name: "native"}]
}]
}
]
Contexto de Container
Para runtime container, verificações de capacidade são realizadas no host, não dentro do container:
{
name: "deploy"
depends_on: {
// Verificação de internet acontece no HOST
capabilities: [{alternatives: ["internet"]}]
}
implementations: [{
script: "kubectl apply -f k8s/"
runtimes: [{name: "container", image: "bitnami/kubectl"}]
}]
}
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