in graph/step.go [108:158]
func (s *Step) Validate() error {
if s == nil {
return nil
}
if s.ID == "" {
return errMissingID
}
if s.Retries < 0 {
return errInvalidRetries
}
if s.Repeat < 0 {
return errInvalidRepeat
}
if (s.IsCmdStep() && s.IsPushStep()) || (s.IsCmdStep() && s.IsBuildStep()) || (s.IsBuildStep() && s.IsPushStep()) {
return errInvalidStepType
}
if util.ContainsSpace(s.ID) {
return errIDContainsSpace
}
if !s.IsCmdStep() && !s.IsBuildStep() && !s.IsPushStep() {
return errMissingProps
}
if s.HasMounts() {
if !s.IsCmdStep() && !s.IsBuildStep() {
return errInvalidMountsUse
}
valMounts := ValidateMounts(s.Mounts)
if valMounts != nil {
return valMounts
}
}
for _, dep := range s.When {
if dep == ImmediateExecutionToken && len(s.When) > 1 {
return errInvalidDeps
}
if dep == s.ID {
return NewSelfReferencedStepError(fmt.Sprintf("Step ID: %v is self-referenced", s.ID))
}
}
if s.Cache != "" && !strings.EqualFold(s.Cache, enabled) && !strings.EqualFold(s.Cache, disabled) {
return errInvalidCacheValue
}
// check if the build step contains buildkit ENV var
if s.IsBuildStep() {
s.UsesBuildkit = invokesBuildkit(s.Envs)
}
return nil
}