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"` // В реальном GitLab CI конфигурация может позволять // описывать job'ы не только в секции "jobs", но и на верхнем уровне. // Для упрощения в этом примере предполагаем, что все job'ы // расположены под ключом "jobs". } // Job описывает структуру задачи (job). type Job struct { Name string `yaml:"-"` Stage string `yaml:"stage,omitempty"` Dependencies []string `yaml:"dependencies,omitempty"` Needs []*Need `yaml:"needs,omitempty"` Script interface{} `yaml:"script,omitempty"` // может быть строкой или списком строк Run interface{} `yaml:"run,omitempty"` // для альтернативного описания шагов Rules interface{} `yaml:"rules,omitempty"` // для динамических правил // ... могут быть и другие поля Line int `yaml:"-"` // Строка в файле Column int `yaml:"-"` // Позиция в строке DependencyLines map[string]struct { Line int Column int } `yaml:"-"` // Строки и позиции зависимостей } // Need описывает одну зависимость в разделе needs type Need struct { Name string `yaml:"name"` // могут быть и другие поля, напр. "artifacts: true/false" и т.д. } // MaxJobNameLength здесь зададим некоторые константы, используемые для валидации const ( MaxJobNameLength = 63 // Примерно, как Ci::BuildNeed::MAX_JOB_NAME_LENGTH )