Escaneie onde o código está.
A CLI lê os seus repositórios em um notebook ou no CI, encontra as rotas, as chamadas, as filas e os modelos e envia só o grafo resultante para o seu workspace. É o mesmo scanner que o nosso runner hospedado usa, então os dois chegam ao mesmo resultado. Em um pull request, ela diz o que a mudança quebra.
$ npm install -g kuuhaku $ kuuhaku login --token <token from the app> $ kuuhaku scan ~/work/company --push $ kuuhaku check ~/work/company
Instalação
O npm é o melhor caminho: um comando em qualquer sistema com Node 18 ou mais recente, e as atualizações vêm com npm update -g.
Depois de uma instalação, o comando funciona em qualquer pasta.
npm install -g kuuhaku
O npm baixa o pacote a cada execução; bom para CI e para um primeiro teste.
npx kuuhaku scan . --push
Um arquivo para Windows, macOS ou Linux. Sem precisar de Node: baixe, coloque no PATH e rode.
kuuhaku.exe scan C:\work --push
Para sistemas de CI que só rodam contêineres. A pasta é montada como somente leitura.
docker run --rm -v "$PWD:/code:ro" \ -e KUUHAKU_TOKEN kuuhaku/cli \ scan /code --push
Pelo gerenciador de pacotes do sistema, atualizado junto com o resto da máquina.
brew install kuuhaku scoop install kuuhaku
Conecte uma máquina
- Pegue o token de push do workspace.
No app, na página da CLI ou em Configurações, Varredura. O token só pode enviar grafos para esse workspace e aparece uma única vez.
- Faça login pelo terminal.
Uma vez por máquina. O token fica guardado em
~/.kuuhaku, legível só pelo seu usuário.$ kuuhaku login --token <token> --api https://api.your-domain - Escaneie e envie.
Aponte para uma pasta de repositórios ou para um architecture.yaml. A máquina aparece na página da CLI do workspace com o sistema, a versão e o último envio.
$ kuuhaku scan ~/work/company --push
Comandos
kuuhaku scan [folder | architecture.yaml]Escaneia e grava o graph.json. Com uma pasta de repositórios, escaneia cada repositório git dentro dela, até três níveis abaixo; com um repositório, escaneia os serviços dele.
kuuhaku check [folder | architecture.yaml]O que as mudanças nos seus repositórios quebram: rotas que somem para quem as chama, chamadas que nenhuma rota atende, filas que ficam sem publicador. Cada repositório é comparado com a sua branch base, nada é enviado, e o comando sai com código 1 quando algo quebra.
kuuhaku login --token <token> [--api <url>]Conecta esta máquina a um workspace e já confere o token.
kuuhaku push [graph.json]Envia um grafo gravado antes; a última varredura quando nenhum arquivo é informado.
kuuhaku statusEsta máquina, a API e se o token ainda abre o workspace.
kuuhaku init [folder]Grava um architecture.yaml com os repositórios encontrados, para você acrescentar hosts, pastas de documentação e conexões que o código não consegue mostrar.
kuuhaku logoutEsquece o token. A máquina mantém o seu id, então continua sendo uma única entrada no workspace.
--pushEnvia o grafo quando a varredura termina.
--networkVersões mais recentes e alertas de segurança do registro do npm e do OSV. Os nomes dos pacotes saem da máquina; nada mais sai.
--out <dir>Para onde vai o graph.json; ~/.kuuhaku/out/<name> por padrão.
--base <ref>check: a branch ou o commit com que comparar. Quando não informado, a branch padrão do remoto.
--markdown <file>check: também grava o relatório como comentário de pull request, com cada arquivo e linha ligados ao host do repositório.
KUUHAKU_TOKENEnvia sem login, para CI.
KUUHAKU_HOMEOnde a CLI guarda a pasta dela, para runners com a home somente leitura.
KUUHAKU_MACHINE_NAMEO nome que esta máquina recebe no workspace.
No CI
Escaneie a cada push na main. Salve o token como o secret KUUHAKU_TOKEN do repositório; o job aparece como uma máquina, com o nome do repositório.
name: Kuuhaku
on:
push:
branches: [main]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 400
- uses: actions/setup-node@v4
with:
node-version: 22
- run: npx kuuhaku scan . --push --api https://api.your-domain
env:
KUUHAKU_TOKEN: ${{ secrets.KUUHAKU_TOKEN }}
Verifique cada pull request. O job falha quando a mudança quebra quem chama, e o relatório vai para o pull request como um comentário que a próxima execução atualiza. Nada é enviado, então nenhum token é necessário.
name: Kuuhaku check
on: pull_request
permissions:
contents: read
pull-requests: write
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-node@v4
with:
node-version: 22
- run: npx kuuhaku check . --base origin/${{ github.base_ref }} --markdown check.md
- if: always() && hashFiles('check.md') != ''
run: gh pr comment ${{ github.event.pull_request.number }} --edit-last --body-file check.md || gh pr comment ${{ github.event.pull_request.number }} --body-file check.md
env:
GH_TOKEN: ${{ github.token }}
No Bitbucket Pipelines, busque antes a branch de destino, já que um pipeline só clona a própria: git fetch origin "+refs/heads/$BITBUCKET_PR_DESTINATION_BRANCH:refs/remotes/origin/$BITBUCKET_PR_DESTINATION_BRANCH", depois npx kuuhaku check . --base origin/$BITBUCKET_PR_DESTINATION_BRANCH. Um workspace com vários repositórios precisa dos outros clonados ao lado do que mudou; eles só são lidos.
O que sai da máquina
O graph.json e mais nada. Você pode abri-lo antes de enviar: kuuhaku scan sem --push grava o arquivo e para.
- Caminhos e métodos das rotas, com arquivo e linha
- Pontos de chamada, nomes de filas e de sockets, campos dos modelos
- Três linhas de código em volta de cada item deixado para revisão
- Nomes das chaves de ambiente, nunca os valores
- Nomes e versões das dependências
- Contagem de commits e nomes dos autores por repositório
- Arquivos de código-fonte inteiros
- Valores de variáveis de ambiente e segredos
- Conteúdo dos bancos de dados
O runner hospedado é a outra forma de escanear: ele clona com a sua chave somente leitura numa pasta temporária, escaneia, guarda o grafo e apaga o checkout. Com a CLI, só o grafo chega até nós. Mais na página de segurança.