You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ci_validator/gitlabcivalidator/models.go

73 lines
3.3 KiB
Go

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package gitlabcivalidator
// ValidationOptions описывает настройки валидации.
type ValidationOptions struct {
VerifyProjectSHA bool // нужно ли проверять SHA проекта
ProjectSHA string // какой SHA нужно проверить
}
// GitLabCIConfig описывает структуру корневого объекта .gitlab-ci.yml
type GitLabCIConfig struct {
Default interface{} `yaml:"default,omitempty"`
Include interface{} `yaml:"include,omitempty"`
BeforeScript interface{} `yaml:"before_script,omitempty"`
Image interface{} `yaml:"image,omitempty"`
Services interface{} `yaml:"services,omitempty"`
AfterScript interface{} `yaml:"after_script,omitempty"`
Variables interface{} `yaml:"variables,omitempty"`
Stages []string `yaml:"stages,omitempty"`
Cache interface{} `yaml:"cache,omitempty"`
Workflow interface{} `yaml:"workflow,omitempty"`
Jobs map[string]*Job `yaml:"jobs,omitempty"`
Changes interface{} `yaml:"changes,omitempty"`
Paths interface{} `yaml:"paths,omitempty"`
// В реальном GitLab CI конфигурация может позволять
// описывать job'ы не только в секции "jobs", но и на верхнем уровне.
// Для упрощения в этом примере предполагаем, что все job'ы
// расположены под ключом "jobs".
}
type Artifacts struct {
Paths []string `yaml:"paths"`
}
// Job описывает структуру задачи (job).
type Job struct {
Name string `yaml:"-"`
Stage string `yaml:"stage,omitempty"`
Dependencies []string `yaml:"dependencies,omitempty"`
Needs []string `yaml:"-"` // отключаем автоматическое декодирование
Script interface{} `yaml:"script,omitempty"` // может быть строкой или списком строк
Trigger interface{} `yaml:"trigger,omitempty"` // для описания trigger
Run interface{} `yaml:"run,omitempty"` // для альтернативного описания шагов
Rules interface{} `yaml:"rules,omitempty"` // для динамических правил
Artifacts *Artifacts `yaml:"artifacts,omitempty"` // блок artifacts
// ... могут быть и другие поля
When string `yaml:"when,omitempty"`
StartIn string `yaml:"start_in,omitempty"`
Only interface{} `yaml:"only,omitempty"`
OnlyLine int `yaml:"-"`
OnlyColumn int `yaml:"-"`
Except interface{} `yaml:"except,omitempty"`
Line int `yaml:"-"` // Строка в файле
Column int `yaml:"-"` // Позиция в строке
DependencyLines map[string]struct {
Line int
Column int
} `yaml:"-"` // Строки и позиции зависимостей
NeedLines map[string]struct {
Line int
Column int
} `yaml:"-"`
}
// MaxJobNameLength здесь зададим некоторые константы, используемые для валидации
const (
MaxJobNameLength = 63 // Примерно, как Ci::BuildNeed::MAX_JOB_NAME_LENGTH
)