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

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

ValorDescrição
linuxDistribuições Linux
macosmacOS (Darwin)
windowsWindows

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 with platform-specific env
{
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 with platform-specific env
{
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%myappconfig.yaml"
CACHE_DIR: "%LOCALAPPDATA%myappcache"
}
}
}
]
}

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 invowkfile:
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

  1. Comece com multiplataforma: Adicione específico de plataforma apenas quando necessário
  2. Use variáveis de ambiente: Abstraia diferenças de plataforma
  3. Teste em todas as plataformas: CI deve cobrir todas as plataformas suportadas
  4. Documente limitações: Note quais plataformas são suportadas

Próximos Passos