workflow

package
v0.5.0 Latest Latest
Warning

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

Go to latest
Published: Sep 6, 2026 License: MIT Imports: 5 Imported by: 0

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

func Parse

func Parse(caminho string, conteudo []byte) (dominio.Workflow, error)

Parse le o YAML e devolve o workflow ja validado.

`caminho` serve para dois fins: derivar o slug quando o arquivo nao traz `name`, e citar o arquivo nas mensagens de erro — um erro de grafo sem o nome do arquivo e inutil quando ha dezenas deles.

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.

Jump to

Keyboard shortcuts

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