Sobre este projeto
Times que mantêm um produto espalhado em vários repositórios (web, api, mobile, infraestrutura…) acabam com o mesmo ritual repetido todos os dias: atualizar cada repo, subir os servidores certos nas portas certas, mover o card no board, criar a branch com o nome combinado, abrir o PR, rodar os testes E2E contra o ambiente certo, olhar os logs na nuvem.
O Switchyard — o pátio de manobras onde os trens são organizados e despachados — junta tudo isso num só lugar:
- Painel web (Next.js) rodando só em
localhost, para quem prefere clicar. - CLI
syd(Go), com saída--jsone flags não interativas, pensada também para ser operada por agentes de IA. - Um único
switchyard.yamldescreve o projeto: repositórios, comandos de inicialização, ambientes, board e fases, mocks, bancos e testes. Trocar de projeto (ou de board) é trocar o arquivo, não o código.
Ele nasceu como ferramenta interna de um time e está sendo transformado num projeto genérico, sem nada específico de um cliente.
Módulos
| Módulo | O que faz |
|---|---|
| Dev Launcher | Sobe os serviços de cada repositório e monitora as portas configuradas |
| Painel Git | Status de todos os repos, atualização em lote, checkout conjunto, limpeza de branches e locks |
| Azure Boards | Inicia a tarefa (move o card e cria a branch), commit vinculado, code review e retrabalho, com as fases do board definidas na configuração |
| GitHub | PRs do time, checks de CI e disparo de workflows |
| Testes E2E | Descobre e executa os testes Playwright do repositório alvo contra o ambiente escolhido, com log ao vivo e histórico |
| Mocks | Servidores HTTP locais com respostas fixas por rota, para simular integrações externas |
| Banco | Perfis de conexão e catálogo de consultas de diagnóstico |
| Logs na nuvem | Busca e acompanhamento ao vivo dos logs de Azure Container Apps |
| Setup | Diagnóstico e instalação das ferramentas necessárias, segredos fora do repositório |
Configuração
name: Acme Platformrepos: - name: web path: acme-web launch: { command: npm run dev, port: 3000 }azureBoards: organization: acme project: Acme Platform team: Acme Team branchPattern: "{type}/AB#{id}-{slug}" phases: - { name: In Development, role: start } - { name: Code Review, role: review } - { name: Ready for Testing, role: test }