Comandos Específicos de Plataforma
Crie comandos que se comportam diferentemente no Linux, macOS e Windows. O Invowk™ automaticamente seleciona a implementação correta para a plataforma atual.
Plataformas Suportadas
| Valor | Descrição |
|---|---|
linux | Distribuições Linux |
macos | macOS (Darwin) |
windows | Windows |
Direcionamento Básico de Plataforma
Restrinja uma implementação a plataformas específicas:
{
name: "open-browser"
implementations: [
{
script: "xdg-open http://localhost:3000"
runtimes: [{name: "native"}]
platforms: [{name: "linux"}]
},
{
script: "open http://localhost:3000"
runtimes: [{name: "native"}]
platforms: [{name: "macos"}]
},
{
script: "start http://localhost:3000"
runtimes: [{name: "native"}]
platforms: [{name: "windows"}]
}
]
}
Direcionando Todas as Plataformas
Para direcionar todas as plataformas, liste-as explicitamente:
{
name: "build"
implementations: [{
script: "go build ./..."
runtimes: [{name: "native"}]
platforms: [{name: "linux"}, {name: "macos"}, {name: "windows"}]
}]
}
Comandos Apenas Unix
Direcione tanto Linux quanto macOS:
{
name: "check-permissions"
implementations: [{
script: """
chmod +x ./scripts/*.sh
ls -la ./scripts/
"""
runtimes: [{name: "native"}]
platforms: [{name: "linux"}, {name: "macos"}]
}]
}
Ambiente Específico de Plataforma
Defina variáveis de ambiente diferentes por plataforma:
{
name: "configure"
implementations: [
// Linux implementation
{
script: "echo \"Config: $CONFIG_PATH\""
runtimes: [{name: "native"}]
platforms: [{name: "linux"}]
env: {
vars: {
CONFIG_PATH: "/etc/myapp/config.yaml"
CACHE_DIR: "/var/cache/myapp"
}
}
},
// macOS implementation
{
script: "echo \"Config: $CONFIG_PATH\""
runtimes: [{name: "native"}]
platforms: [{name: "macos"}]
env: {
vars: {
CONFIG_PATH: "/usr/local/etc/myapp/config.yaml"
CACHE_DIR: "${HOME}/Library/Caches/myapp"
}
}
},
// Windows implementation
{
script: "echo \"Config: %CONFIG_PATH%\""
runtimes: [{name: "native"}]
platforms: [{name: "windows"}]
env: {
vars: {
CONFIG_PATH: "%APPDATA%\\myapp\\config.yaml"
CACHE_DIR: "%LOCALAPPDATA%\\myapp\\cache"
}
}
}
]
}
Scripts Multiplataforma
Escreva um script que funciona em qualquer lugar:
{
name: "build"
implementations: [
// Unix platforms (same output name)
{
script: "go build -o bin/app ./..."
runtimes: [{name: "native"}]
platforms: [{name: "linux"}, {name: "macos"}]
},
// Windows (different output name)
{
script: "go build -o bin/app.exe ./..."
runtimes: [{name: "native"}]
platforms: [{name: "windows"}]
}
]
}
Templates CUE para Plataformas
Use templates CUE para reduzir repetição:
// Define platform templates
_linux: {name: "linux"}
_macos: {name: "macos"}
_windows: {name: "windows"}
_unix: [{name: "linux"}, {name: "macos"}]
_all: [{name: "linux"}, {name: "macos"}, {name: "windows"}]
cmds: [
{
name: "clean"
implementations: [
// Unix implementation
{
script: "rm -rf build/"
runtimes: [{name: "native"}]
platforms: _unix
},
// Windows implementation
{
script: "rmdir /s /q build"
runtimes: [{name: "native"}]
platforms: [_windows]
}
]
}
]
Listagem de Comandos
A lista de comandos mostra plataformas suportadas:
Available Commands
(* = default runtime)
From current directory:
build - Build the project [native*] (linux, macos, windows)
clean - Clean artifacts [native*] (linux, macos)
deploy - Deploy to cloud [native*] (linux)
Erro de Plataforma Não Suportada
Executar um comando em uma plataforma não suportada mostra um erro claro:
✗ Host not supported
Command 'deploy' cannot run on this host.
Current host: windows
Supported hosts: linux, macos
This command is only available on the platforms listed above.
Exemplos do Mundo Real
Informações do Sistema
{
name: "sysinfo"
implementations: [
{
script: """
echo "Hostname: $(hostname)"
echo "Kernel: $(uname -r)"
echo "Memory: $(free -h | awk '/^Mem:/{print $2}')"
"""
runtimes: [{name: "native"}]
platforms: [{name: "linux"}]
},
{
script: """
echo "Hostname: $(hostname)"
echo "Kernel: $(uname -r)"
echo "Memory: $(sysctl -n hw.memsize | awk '{print $0/1024/1024/1024 "GB"}')"
"""
runtimes: [{name: "native"}]
platforms: [{name: "macos"}]
},
{
script: """
echo Hostname: %COMPUTERNAME%
systeminfo | findstr "Total Physical Memory"
"""
runtimes: [{name: "native"}]
platforms: [{name: "windows"}]
}
]
}
Instalação de Pacotes
{
name: "install-deps"
implementations: [
{
script: "apt-get install -y build-essential"
runtimes: [{name: "native"}]
platforms: [{name: "linux"}]
},
{
script: "brew install coreutils"
runtimes: [{name: "native"}]
platforms: [{name: "macos"}]
},
{
script: "choco install make"
runtimes: [{name: "native"}]
platforms: [{name: "windows"}]
}
]
}
Melhores Práticas
- Comece com multiplataforma: Adicione específico de plataforma apenas quando necessário
- Use variáveis de ambiente: Abstraia diferenças de plataforma
- Teste em todas as plataformas: CI deve cobrir todas as plataformas suportadas
- Documente limitações: Note quais plataformas são suportadas
Próximos Passos
- Interpreters - Usar interpretadores não-shell
- Working Directory - Controlar local de execução