Documentation
¶
Overview ¶
Package workflow (application) traduz o arquivo YAML para o dominio.
A separacao existe porque a secao 22 do plano e explicita: depois de publicado, o banco e a fonte da verdade, nao o arquivo. O YAML e ENTRADA de publicacao — entra aqui, vira dominio, e o dominio e que persiste. Mudar o formato do arquivo nao deve tocar as invariantes do grafo.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type ParamSpec ¶
type ParamSpec struct {
Name string `yaml:"name"`
Type string `yaml:"type"`
Default string `yaml:"default"`
Description string `yaml:"description"`
Enum []string `yaml:"enum"`
Pattern string `yaml:"pattern"`
}
ParamSpec e um parametro de execucao como escrito no arquivo.
params:
- name: load_full
type: boolean
default: "false"
- name: start_date
type: string
pattern: '^\d{4}-\d{2}-\d{2}$'
type ResourceSpec ¶
type ResourceSpec struct {
CPU string `yaml:"cpu"`
Memory string `yaml:"memory"`
Limits struct {
CPU string `yaml:"cpu"`
Memory string `yaml:"memory"`
} `yaml:"limits"`
}
ResourceSpec e o pedido de CPU e memoria no formato do Kubernetes.
`limits` separado de `requests` porque a diferenca entre os dois e a diferenca entre "quanto reservo" e "quando me matam": um dbt que estoura o limite morre com OOMKilled, um que so passa do request continua rodando.
type Spec ¶
type Spec struct {
Name string `yaml:"name"`
Schedule string `yaml:"schedule"`
Type string `yaml:"type"`
Tags []string `yaml:"tags"`
Image string `yaml:"image"`
Resources ResourceSpec `yaml:"resources"`
Params []ParamSpec `yaml:"params"`
// Env e Secrets valem para todo passo; o passo sobrescreve nome a nome.
Env map[string]string `yaml:"env"`
Secrets map[string]string `yaml:"secrets"`
// Concurrency e o `concurrency.limit` do Kestra, com o mesmo nome que a
// maioria dos orquestradores usa.
Concurrency int `yaml:"concurrency"`
Steps []StepSpec `yaml:"steps"`
}
Spec espelha o YAML, e so isso. Campos frouxos aqui, invariantes no dominio.
type StepSpec ¶
type StepSpec struct {
ID string `yaml:"id"`
Run string `yaml:"run"`
Action string `yaml:"action"`
With map[string]any `yaml:"with"`
DependsOn []string `yaml:"depends_on"`
// Image e Resources sobrescrevem os do workflow. Ausentes = herda.
Image string `yaml:"image"`
Resources ResourceSpec `yaml:"resources"`
// Env sao variaveis com valor literal no arquivo.
//
// env:
// BREVIS_LOG_LEVEL: info
Env map[string]string `yaml:"env"`
// Secrets sao variaveis cujo valor NAO esta no arquivo: a chave e o nome
// da variavel, o valor e onde encontra-la.
//
// secrets:
// GABRIEL_SESSION_COOKIE: gabriel-session/cookie
Secrets map[string]string `yaml:"secrets"`
// Shell: ponteiro para distinguir "nao declarou" de "declarou false". Sem o
// ponteiro, todo passo sem a chave viraria `shell: false` e as imagens com
// shell — a maioria — passariam a receber argv, quebrando qualquer comando
// com pipe ou variavel.
Shell *bool `yaml:"shell"`
}
StepSpec e um passo como escrito no arquivo.