Buscar K
Aparência
Aparência
Numa esteira, o Lumo CLI serve para validar YAML antes do merge, conferir Decks e Apresentações e disparar Dataflows e agendamentos. Todo comando devolve um código de saída que diz se o job deve falhar.
curl -fsSL https://storage.horusbi.com.br/download/lumo/install.sh | bash -s -- --no-skill
export LUMO_NO_UPDATE_NOTIFIER=1--no-skill pula as skills de agente, que não servem no CI. LUMO_NO_UPDATE_NOTIFIER cala o aviso de versão nova no fim de cada comando.
Guarde o e-mail e a senha como variáveis secretas da esteira, com os nomes que o CLI lê:
| Variável | Para quê |
|---|---|
LUMO_EMAIL | E-mail do usuário |
LUMO_PASSWORD | Senha |
LUMO_OTP | Código de 2FA, se a conta tiver |
LUMO_API_URL | Endereço da API, quando não é o padrão https://api.horusbi.com.br/cli/v2 |
lumo auth login --no-inputCom --no-input, o que faltar vira erro em vez de pergunta: sem e-mail, --email is required (or set LUMO_EMAIL); sem senha, password is required (set LUMO_PASSWORD), os dois com código de saída 2. Uma conta com 2FA recusa o login sem código (código de saída 6), e o código muda a cada login, então ele não cabe numa variável fixa. Leve isso em conta ao escolher o usuário da esteira.
Use um usuário só da esteira, com a função Uso do Lumo CLI e acesso apenas às Mesas de que o job precisa. O login pelo navegador (--web) não funciona aqui: ele precisa de um navegador na mesma máquina.
Passe --no-input em todo comando da esteira. Com ele, um comando que pediria confirmação recusa com erro em vez de seguir:
| Comando | O que exige para seguir sem pergunta |
|---|---|
lumo rm | --force ou --yes |
lumo app publish, quando vai substituir a versão publicada | --force ou --yes |
lumo table truncate | --force ou --yes |
lumo push --force-ours | --i-know-what-im-doing |
Sem --no-input, o lumo rm lê a confirmação da entrada padrão. Num job com a entrada vazia, ele não apaga nada, escreve aborted e sai com código 0, e o job passa como se tivesse apagado.
--format json troca a saída de texto por um envelope JSON, mais fácil de ler num script.
| Portão | Comando | Falha quando | Precisa de login |
|---|---|---|---|
| YAML válido | lumo lint flows/ apps/ --strict | Erro de esquema ou de expressão (código 8); com --strict, também aviso (código 2) | Não |
| Gráficos do Deck resolvem | lumo deck preview deck:<id> | Algum gráfico não roda contra o dado real | Sim |
| Link público no ar | lumo deck check deck:<id>, lumo presentation check presentation:<id> | O link não responde ou o recurso não está publicado | Sim |
| Carga terminou bem | lumo flow run flow:<id> --wait | A execução termina com erro (código 10, ou 7 se for rede) | Sim |
O lint roda offline, sem sessão e sem servidor, o que o torna o portão certo para um merge request. O deck preview confere o Deck salvo no servidor, então rode depois do push. Os dois check só leem o link: não republicam e não pedem permissão de publicar.
lumo lint flows/ apps/ decks/ --strict
lumo auth login --no-input
lumo deck preview deck:8120 --no-input
lumo presentation check presentation:8131 --no-inputA lista completa de códigos de saída está em Comandos.
O cache que o CLI usa para detectar drift (.lumo/state/) fica fora do Git: o .lumo/.gitignore criado pelo init mantém só o workspace.json. Num clone limpo do repositório não há cache, e lumo push <tipo>:<id> recusa com código de saída 12, pedindo um lumo fetch.
CAUTION
Rodar lumo fetch e depois lumo push num clone limpo faz o cache virar o servidor de agora. O push não vê drift e sobrescreve, sem aviso, o que alguém mudou pela tela desde o último commit.
Se a esteira precisa gravar no Tenant, trate o repositório como a única fonte de verdade daqueles recursos e combine com o time que eles não se editam pela tela. Para o resto, deixe o CI validar e o push com quem tem um workspace sincronizado. O que fazer quando o push volta com drift está em Drift e conflitos.