@farm-investimentos/farm-cli
v0.1.5
Published
Internal CLI for Farm front platform workflows.
Keywords
Readme
Farm CLI
CLI interna da Farm para acelerar operações recorrentes no workspace frontend de microfrontends.
O farm-cli centraliza comandos que o time executa todos os dias: descobrir serviços, baixar repositórios, validar setup local, subir MFEs, trocar ambiente, verificar status Git e manter o import map local coerente com os metadados da plataforma.
Instalacao
O pacote esta publicado no NPM como @farm-investimentos/farm-cli.
Instalacao global
npm install -g @farm-investimentos/farm-cli
farm listEssa e a forma mais simples para uso no dia a dia.
Uso sem instalar globalmente
npx @farm-investimentos/farm-cli listInstalacao como dependencia de desenvolvimento
npm install -D @farm-investimentos/farm-cli
npx farm listDesenvolvimento local do CLI
Use este fluxo apenas quando estiver contribuindo neste repositório:
npm install
npm run build
node dist/index.js listPara testar o binario localmente:
npm link
farm listVisao Geral
O objetivo do farm-cli e reduzir tempo e atrito nas operações locais do frontend. Ele não muda como cada microfrontend funciona internamente; ele cria uma camada comum para executar tarefas que se repetem entre vários repositórios.
Com ele, o time consegue:
- descobrir serviços e profiles conhecidos pela plataforma
- listar repositórios frontend existentes no GitHub
- clonar repositórios e instalar dependências
- verificar status Git dos repositórios do workspace
- validar setup local antes de subir serviços
- subir, listar e parar MFEs gerenciados pelo CLI
- reiniciar serviços em outro ambiente
- disparar deploy remoto de branches em
developeuat - verificar drift do import map do orquestrador
- rodar revisoes de seguranca frontend orientadas a OWASP e supply-chain
Conceitos
Workspace
O workspace e a pasta que agrupa os repositórios frontend da Farm, por exemplo:
farmtech/
front-mfe-orquestrador/
front-mfe-global/
front-mfe-menu/
front-mfe-loginv2/
front-mfe-credito/O CLI tenta descobrir a raiz do workspace procurando marcadores conhecidos, como front-mfe-orquestrador e front-mfe-menu. Quando necessário, voce pode informar o caminho manualmente:
farm list --workspace /caminho/do/workspaceManifesto
O manifesto e o catálogo operacional dos serviços que o CLI sabe operar com metadados completos.
Ele vive em src/manifest/front.manifest.ts e descreve, para cada serviço:
id: nome curto usado nos comandos, comocreditooumenupath: pasta esperada no workspacerepository: URL Git usada para clonar o repo quando ele estiver ausentedefaultBranch: branch padrão esperadanode: versão de Node recomendada para o repopackageManager:npm,yarnoupnpmscripts: scripts relevantes, comoserve,build,lintetestruntime: porta local, chave de import map, dependências e profiles padrão
O manifesto não e uma lista completa de todos os repositórios existentes no GitHub. Ele e a fonte de verdade para os serviços que o CLI consegue operar de forma padronizada.
Para descobrir repositórios remotos que ainda não estão no manifesto, use:
farm reposPara instalar um repositório que ainda não esta no manifesto, o farm install tambem aceita nomes crus, slugs e URLs Git:
farm install front-mfe-relacionamento
farm install Farm-Investimentos/front-mfe-relacionamento
farm install [email protected]:Farm-Investimentos/front-mfe-relacionamento.gitQuando um repo novo passar a fazer parte dos fluxos padronizados de up, doctor, status, switch ou importmap, ele deve ser adicionado ao manifesto com seus metadados operacionais.
Serviços
Um serviço e um microfrontend ou repositório operacional registrado no manifesto.
Exemplos:
orquestradorglobalmenuloginv2credito
Voce usa o id do serviço nos comandos:
farm up credito
farm down creditoProfiles
Profiles agrupam serviços que costumam ser usados juntos.
Profiles atuais:
baseshell
Hoje ambos resolvem para:
orquestradorglobalmenuloginv2
Exemplo:
farm up shellRuntime Gerenciado
Por padrão, farm up sobe serviços em background. O CLI registra os processos em:
.farm-cli/runtime-processes.json
.farm-cli/logs/<service>.logIsso permite:
farm ps
farm down credito
farm downfarm down sem argumentos interrompe todos os serviços gerenciados.
Ambientes
O CLI suporta ambientes como:
devuatlocalprd
Quando um repo possui serve:<ambiente>, o CLI usa esse script. Quando não possui, usa o script padrão definido no manifesto.
Exemplos:
farm up shell --uat
farm switch --devfarm switch não faz hot swap no browser. Ele para e sobe novamente os serviços gerenciados no ambiente alvo.
Import Map
O orquestrador usa import map para apontar MFEs locais/remotos. O CLI consegue verificar se as entradas gerenciadas estao alinhadas com o manifesto:
farm importmap syncPor padrão, esse comando apenas verifica. Para escrever no arquivo:
farm importmap sync --writeUse --write com cuidado, porque altera arquivo versionado do orquestrador.
Comandos
| Comando | Objetivo |
| --- | --- |
| farm list | Lista serviços e profiles registrados no manifesto |
| farm repos | Lista repositórios remotos front-* e farm-mfe-* no GitHub |
| farm install | Clona repositórios ausentes e garante dependências locais |
| farm status | Mostra status Git dos repositórios do workspace |
| farm doctor | Valida problemas comuns de setup local |
| farm up | Sobe serviços ou profiles localmente |
| farm deploy | Dispara workflow remoto de deploy via GitHub Actions |
| farm ps | Lista processos gerenciados pelo CLI |
| farm down | Para processos gerenciados pelo CLI |
| farm switch | Reinicia serviços em outro ambiente |
| farm importmap sync | Verifica ou sincroniza import map do orquestrador |
| farm security check | Executa revisao automatizada OWASP/supply-chain de um frontend |
| farm security review | Executa revisao completa e gera relatorio Markdown automaticamente |
Fluxos Comuns
Descobrir o workspace
farm list
farm status --changed-only
farm doctorVer repositórios frontend no GitHub
farm repos
farm repos --prefix front-mfe- farm-mfe-
farm repos --jsonfarm repos usa o GitHub CLI (gh). Se o gh não estiver instalado, o CLI mostra instrucoes de instalacao para o sistema atual.
Baixar repositórios e dependências
farm install credito
farm install shell
farm install front-mfe-relacionamento
farm install Farm-Investimentos/front-mfe-relacionamento
farm install [email protected]:Farm-Investimentos/front-mfe-relacionamento.gitComportamentos importantes:
- se o repositório estiver ausente, o CLI tenta clonar via
git clone - se
git clonefalhar em repositórios GitHub eghestiver disponivel, o CLI tentagh repo clone - nomes simples de repo assumem a organizacao
Farm-Investimentos - se
node_modulesestiver ausente, o CLI instala dependências --force-installreinstala dependências mesmo quandonode_modulesja existe
Subir a shell do frontend
farm up shell
farm psSubir em outro ambiente
farm up shell --uat
farm switch --devPublicar uma branch remota
farm deploy cadastros --env-uat --branch uat
farm deploy cadastros --env-dev --branch feature/minha-branchO comando acompanha a execução da action no GitHub e só termina quando o workflow concluir com sucesso ou erro.
Consultar qual branch esta em um ambiente
farm env cadastros --uat
farm env cadastros --devEsse modo consulta a ultima execucao bem-sucedida da workflow do ambiente e mostra a branch e o SHA publicados.
Se voce ainda precisar manter compatibilidade com scripts antigos, o alias legado continua aceito:
farm deploy cadastros --env-uat --status
farm deploy cadastros --env-dev --statusSubir um MFE especifico
farm up credito
farm up credito --soloSem --solo, o CLI pode incluir profiles/dependências padrão definidos no manifesto para que o MFE rode dentro de um contexto local coerente.
Ver logs no terminal
farm up credito -v-v ou --foreground executa anexado ao terminal e mostra logs diretamente.
Parar serviços
farm down credito
farm down orquestrador global menu loginv2
farm downVerificar import map
farm importmap sync
farm importmap sync --writeRodar check de seguranca frontend
farm security review credito
farm security check credito
farm security check credito --output credito.md
farm security check credito --report
farm security check ./front-mfe-credito --audit --output credito.md
farm security check credito --github-security --report
farm security pentest credito --fail-on high --output credito.mdO comando faz uma revisao local orientada a OWASP Top 10 para frontend. Ele procura padroes como HTML dinamico, execucao de codigo, secrets hardcoded, storage de token, dependencias nao pinadas, scripts npm sensiveis, URLs dinamicas, source maps e pontos que exigem confirmacao humana.
Para o fluxo completo do dia a dia, prefira:
farm security review creditoEsse comando roda scan OWASP local, nosso npm supply-chain detector, npm audit, GitHub Security e gera um Markdown na raiz atual. Se quiser desligar alguma etapa:
farm security review credito --no-supply-chain
farm security review credito --no-audit
farm security review credito --no-github-securityOpcoes principais:
--output <path>salva relatorio em.md,.txtou.json--reportgera automaticamente um Markdown na raiz atual--format md|txt|jsondefine o formato quando a extensao nao for suficiente--supply-chainexecuta o detector local@otaviomarcal/npm-supply-chain-detector--auditrodanpm audit --jsonquando houverpackage-lock.json--github-securityconsulta Dependabot, Code Scanning e Secret Scanning via GitHub CLI (gh)--github-repo owner/repoinforma manualmente o repositorio quando o remote local nao for suficiente--external-scriptexecutascripts/security/frontend-owasp-check.shquando existir--fail-on highfaz o comando falhar quando encontrar severidade igual ou maior que o limite
farm security pentest e alias de farm security check. O nome check e preferido porque o comando faz revisao automatizada local; ele nao substitui um pentest manual ou teste exploratorio autenticado.
Quando --github-security estiver ativo, o CLI tenta consultar:
- Dependabot alerts
- Code scanning alerts
- Secret scanning alerts
Se o gh nao estiver instalado, nao estiver autenticado ou o usuario nao tiver permissao nos endpoints de seguranca, o relatorio continua sendo gerado e registra essa indisponibilidade na secao GitHub Security.
No farm security review, o detector de supply-chain roda por padrao. No farm security check, ele roda apenas quando voce passar --supply-chain.
Comportamentos Importantes
farm upsobe em background por padrãofarm deployusa o GitHub CLI (gh) e exige que a branch ja exista remotamentefarm envconsulta a ultima execucao bem-sucedida da workflow como fonte de verdade do ambientefarm deploy --statuscontinua disponivel como alias legado para compatibilidadefarm up -voufarm up --foregroundexecuta anexado ao terminalfarm up --dry-runmostra o plano sem iniciar processosfarm switchreinicia serviços gerenciados no ambiente escolhidofarm status --fetchatualiza refs daoriginantes de comparar branchesfarm doctorvalida setup com base no manifesto e no workspace localfarm installtenta respeitar a versão de Node do repo usandonvm,fnm,asdfouvoltafarm importmap syncapenas verifica por padrãofarm importmap sync --writealtera arquivo versionado do orquestradorfarm security checknao altera arquivos do projeto analisado; apenas imprime resultado e, se solicitado, grava relatorio
Uso Com Agentes De IA
O farm-cli tambem foi pensado para reduzir ambiguidade quando agentes de IA operam o workspace.
Em vez de navegar manualmente por vários repositórios, o agente pode usar comandos previsíveis:
farm list
farm status --changed-only
farm doctor
farm up shell
farm ps
farm security check credito --output credito.mdEste repositório inclui referencias operacionais para agentes:
- skill para Codex em skills/farm-front-workspace/SKILL.md
- skill OWASP para Codex em skills/frontend-owasp-review/SKILL.md
- skill para Claude em .claude/skills/farm-front-workspace/SKILL.md
- skill OWASP para Claude em .claude/skills/frontend-owasp-review/SKILL.md
Codex
Instalacao sugerida da skill:
mkdir -p ~/.codex/skills
ln -s "$(pwd)/skills/farm-front-workspace" ~/.codex/skills/farm-front-workspace
ln -s "$(pwd)/skills/frontend-owasp-review" ~/.codex/skills/frontend-owasp-reviewClaude
Para uso por projeto, basta manter a skill em .claude/skills/ dentro do repositório.
Se quiser instalar globalmente:
mkdir -p ~/.claude/skills
ln -s "$(pwd)/.claude/skills/farm-front-workspace" ~/.claude/skills/farm-front-workspace
ln -s "$(pwd)/.claude/skills/frontend-owasp-review" ~/.claude/skills/frontend-owasp-reviewEstrutura Do Projeto
farm-cli/
src/
commands/
manifest/
services/
utils/
skills/
farm-front-workspace/
SKILL.md
agents/openai.yaml
references/commands.md
frontend-owasp-review/
SKILL.md
agents/openai.yaml
.claude/
skills/
farm-front-workspace/
SKILL.md
references/commands.md
frontend-owasp-review/
SKILL.mdDesenvolvimento
npm install
npm run typecheck
npm run build
npm test
npm run dev -- listAo rodar npm install, o repositório configura automaticamente core.hooksPath=.githooks.
O hook de pre-push executa npm test, que hoje valida:
typecheckbuild
Publicacao
O repositório segue o mesmo fluxo usado no front-mfe-libs-ts: versionamento manual em develop, PR de release para main e publicação no NPM quando main recebe uma versão nova.
Fluxo:
- Rode manualmente o workflow upgrade_version.yml.
- Escolha o tipo de incremento:
patchpara correções, ajustes de manifesto e documentaçãominorpara novas funcionalidades compatíveismajorpara mudanças com quebra de compatibilidade
- O workflow atualiza
package.jsonepackage-lock.json, cria uma branchchore-newversion_<versao>e abre PR paradevelop. - Depois que a versão estiver em
develop, rode manualmente o workflow create_tag.yml. - Esse workflow cria a tag
v<versao>e abre PR dedevelopparamain. - Ao mergear esse PR na
main, o workflow publish.yml:- roda
npm ci - roda
npm test - valida que a versão ainda não existe no NPM
- publica no NPM com
npm publish --access public
- roda
Esse fluxo evita publicar no NPM com uma versão já existente.
Pre-requisitos:
- secret
NPM_TOKENconfigurado no repositório - permissão para o
GITHUB_TOKENcriar branches, tags e pull requests - branch
developatualizada com as mudanças antes de abrir o PR de release paramain
Proximos Passos
Evolucoes naturais da ferramenta:
- adicionar
farm logs <service> - adicionar
farm context <service>para contexto operacional rapido - gerar import map local não versionado para o orquestrador
- expandir o manifesto para outros workflows da plataforma
