gitlab-sim/internal/model/pipeline.go
2026-06-05 01:29:07 +02:00

84 lines
2.8 KiB
Go

package model
// Pipeline represents the top-level structure of a .gitlab-ci.yml file.
// Unknown top-level keys are collected into Jobs.
type Pipeline struct {
Stages []string `yaml:"stages"`
Variables map[string]string `yaml:"variables"`
Default *DefaultConfig `yaml:"default"`
Include []any `yaml:"include"`
Workflow *Workflow `yaml:"workflow"`
// Jobs holds every non-reserved top-level key (i.e. job definitions).
Jobs map[string]Job `yaml:"-"`
RawJobs map[string]map[string]any `yaml:"-"` // pre-resolution raw maps, used by the resolver
}
type DefaultConfig struct {
Image string `yaml:"image"`
BeforeScript []string `yaml:"before_script"`
AfterScript []string `yaml:"after_script"`
Cache any `yaml:"cache"`
Artifacts any `yaml:"artifacts"`
Retry any `yaml:"retry"`
Timeout string `yaml:"timeout"`
Tags []string `yaml:"tags"`
}
type Workflow struct {
Rules []Rule `yaml:"rules"`
}
type Job struct {
Name string // set by parser, not from YAML
Stage string `yaml:"stage"`
Script []string `yaml:"script"`
Run any `yaml:"run"` // alternative to script (CI steps)
BeforeScript []string `yaml:"before_script"`
AfterScript []string `yaml:"after_script"`
Image any `yaml:"image"`
Services []any `yaml:"services"`
Variables map[string]string `yaml:"variables"`
Rules []Rule `yaml:"rules"`
Only any `yaml:"only"`
Except any `yaml:"except"`
Needs []any `yaml:"needs"`
Dependencies []string `yaml:"dependencies"`
Artifacts any `yaml:"artifacts"`
Cache any `yaml:"cache"`
Tags []string `yaml:"tags"`
Allow any `yaml:"allow_failure"`
When string `yaml:"when"`
StartIn string `yaml:"start_in"`
Timeout string `yaml:"timeout"`
Retry any `yaml:"retry"`
Parallel any `yaml:"parallel"`
Extends any `yaml:"extends"`
Trigger any `yaml:"trigger"`
Inherit any `yaml:"inherit"`
Environment any `yaml:"environment"`
Release any `yaml:"release"`
Coverage string `yaml:"coverage"`
Secrets any `yaml:"secrets"`
IDTokens any `yaml:"id_tokens"`
Pages any `yaml:"pages"`
Interruptible any `yaml:"interruptible"`
ResourceGroup string `yaml:"resource_group"`
}
type Rule struct {
If string `yaml:"if"`
When string `yaml:"when"`
Changes []string `yaml:"changes"`
Exists []string `yaml:"exists"`
}
// ReservedKeys are top-level GitLab CI keys that are NOT job definitions.
var ReservedKeys = map[string]bool{
"stages": true,
"variables": true,
"default": true,
"include": true,
"workflow": true,
"spec": true, // CI component spec header
}