brevis

module
v0.6.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 6, 2026 License: MIT

README

Brevis

Code Quality Go Reference Go Report Card SDK

Engine de transformação e orquestração de dados, em Go. Substitui o par Kestra/Leoflow (orquestração) e o dbt (transformação) por um binário único, com execução em pod no Kubernetes.

Arquitetura e faseamento: docs/plan.md. Referência da linha de comando: docs/COMANDOS.md. Relatórios por fase: docs/phases/.

SDK

go get github.com/AreteAcademy/brevis/sdk@latest

Extração HTTP com retry, timeout, guard e paginação; carga em lote para o BigQuery. Requer Go 1.23+.

Não use a v0.1.0. Ela foi publicada com um go.mod quebrado e o proxy do Go é imutável, então não há como corrigi-la. Comece na v0.1.1.

CLI do SDK: cmd/brevis-sdk/go install github.com/AreteAcademy/brevis/cmd/brevis-sdk@latest

O binário do Brevis em si (serve, scheduler, migrate, publish) é cmd/brevis/, construído com make build.

Estado: PHASE 6 concluída. Workflows em YAML, fila persistente, scheduler com cron, backfill, UI server-rendered (Overview com métricas e gráficos, lista de workflows com busca/filtros/pausar/executar) e visualização da DAG com o estado de cada passo ao vivo — ver docs/phases/.

A interface segue a identidade da Aretê Academy: pergaminho, ouro e serifa. Fontes e bundles são servidos do próprio binário — a UI funciona sem saída para a internet.

Marca branca: título, subtítulo, frase e paleta saem de um YAML (brand.example.yamlbrand.yaml, ou BREVIS_BRAND_FILE). As cores sobrescrevem as variáveis CSS em tempo de execução, então trocar o tema não recompila nada. O rodapé "Powered by Brevis" não vem da configuração — vem do código.

brevis validate examples/            # valida sem banco, serve na CI
brevis run examples/hello.yaml       # executa agora, na propria instancia

brevis publish examples/hello.yaml   # grava workflow e agenda no banco
brevis scheduler --concurrency 5     # materializa slots e executa
brevis backfill diario --from 2026-01-01 --to 2026-01-31

O scheduler cria runs; a fila os executa. Os dois laços são independentes: um pode cair sem afetar o outro.

Os dez subcomandos, com flags, variáveis de ambiente, endpoints e alvos do Makefile: docs/COMANDOS.md.

Em Kubernetes, cada passo vira um pod com a imagem declarada no YAML — não há worker genérico esperando trabalho, é o trabalho que traz o seu runtime. O mesmo arquivo roda local como processo. Ver docs/KUBERNETES.md.

As imagens são por papel, não por projeto: 5,8 MB para um passo em Go, 118 MB para Python, 620 MB para dbt (com o parse já embutido, 2,7 s a menos por pod). Ver docs/IMAGENS.md.

Um workflow pode declarar parâmetros de execução — o que muda entre dois disparos sem editar o arquivo:

params:
  - name: load_full
    type: boolean
    default: "false"
  - name: start_date
    type: string
    pattern: '^\d{4}-\d{2}-\d{2}$'

steps:
  - id: run
    run: dbt build --vars '{"load_full":"{{ .load_full }}"}' --select bronze_x+
brevis run wf.yaml --param load_full=true
brevis backfill diario --from 2026-01-01 --to 2026-01-31 --param load_full=true

Na UI, um workflow com params ganha formulário no lugar do botão simples.

concurrency: 1 limita execuções simultâneas do mesmo workflow — o que impede um */15 de se sobrepor a si mesmo.

O YAML aceita type: chain (ordem do arquivo) ou type: dag com depends_on. chain é açúcar: vira arestas no parser, e o motor conhece apenas DAG.

examples/hello.yaml é o único que roda em qualquer lugar — os outros dois vieram do plano e mostram o formato, chamando python, docker.run e ./notify.sh, que não existem na imagem do worker.

Imagem

docker login -u daniel3843
make image-push            # daniel3843/brevis:<VERSION> e :<VERSION>-worker

Duas imagens do mesmo binário: :<versao> é a API em distroless (não executa nada, então não precisa de shell) e :<versao>-worker é alpine com shell, para os passos run: dos workflows. Detalhes em docs/PUBLICAR.md.

Local

make dev     # hot reload: templ + tailwind + go build a cada mudanca
make up      # Postgres + API
make smoke   # confere /health e /ready
make logs
make down
make check   # gofmt + vet + testes
make build   # binario em bin/

Configuração

variável padrão
BREVIS_DATABASE_URL obrigatória
BREVIS_ENV local local usa log em texto; o resto, JSON
BREVIS_HTTP_ADDR :8080
BREVIS_LOG_LEVEL info
BREVIS_SHUTDOWN_TIMEOUT_SECONDS 15

Endpoints

GET /health liveness — não consulta o banco
GET /ready readiness — consulta, e nomeia a dependência que falhou

A separação é deliberada: liveness que depende de dependência externa faz o Kubernetes matar o pod quando o banco oscila, em vez de apenas tirá-lo do balanceador.

Migrations

brevis migrate up|down|status

Embutidas no binário e aplicadas por subcomando próprio — o serve nunca altera schema.

Directories

Path Synopsis
cmd
brevis command
Command brevis e o binario unico da plataforma.
Command brevis e o binario unico da plataforma.
internal
api
Package api expoe a interface HTTP do Brevis.
Package api expoe a interface HTTP do Brevis.
application/execution
Package execution (application) walks the graph and runs its nodes.
Package execution (application) walks the graph and runs its nodes.
application/workflow
Package workflow (application) translates the YAML file into the domain.
Package workflow (application) translates the YAML file into the domain.
auth
Package auth closes the Brevis interface behind an operator credential.
Package auth closes the Brevis interface behind an operator credential.
branding
Package branding loads the installation's visual identity.
Package branding loads the installation's visual identity.
config
Package config loads and validates the process's configuration from the environment.
Package config loads and validates the process's configuration from the environment.
domain/run
Package run e o modelo de dominio de uma execucao e seus passos.
Package run e o modelo de dominio de uma execucao e seus passos.
domain/schedule
Package schedule decide QUANDO um workflow deve rodar.
Package schedule decide QUANDO um workflow deve rodar.
domain/workflow
Package workflow is the domain model of a flow and its graph.
Package workflow is the domain model of a flow and its graph.
execution
Package execution define o contrato de execucao de tasks.
Package execution define o contrato de execucao de tasks.
execution/kubernetes
Package kubernetes executa cada passo de um workflow como um POD proprio.
Package kubernetes executa cada passo de um workflow como um POD proprio.
execution/local
Package local implementa a execucao de processos no host.
Package local implementa a execucao de processos no host.
graph
Package graph resolve ordem de execucao a partir do grafo do workflow.
Package graph resolve ordem de execucao a partir do grafo do workflow.
infrastructure/postgres
Package postgres e o adaptador de persistencia.
Package postgres e o adaptador de persistencia.
notify
Package notify warns when a run fails.
Package notify warns when a run fails.
observability
Package observability concentra logging, metricas e tracing.
Package observability concentra logging, metricas e tracing.
queue
Package queue is the persistent queue from §8 of the plan.
Package queue is the persistent queue from §8 of the plan.
scheduler
Package scheduler holds the dispatcher from §27 of the plan.
Package scheduler holds the dispatcher from §27 of the plan.
Package migrations embute o SQL de schema no binario.
Package migrations embute o SQL de schema no binario.
sdk module
web
assets
Package assets embute os arquivos estaticos no binario.
Package assets embute os arquivos estaticos no binario.
components
templ: version: v0.3.1020
templ: version: v0.3.1020
layouts
templ: version: v0.3.1020
templ: version: v0.3.1020
pages
templ: version: v0.3.1020
templ: version: v0.3.1020

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL