func()

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
}