feat(gitlab-sim): ✨ first commit
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user