func validateSource(input *buildapi.BuildSource, isCustomStrategy, isDockerStrategy, isJenkinsPipelineStrategyFromRepo bool, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} // Ensure that Git and Binary source types are mutually exclusive. if input.Git != nil && input.Binary != nil && !isCustomStrategy { allErrs = append(allErrs, field.Invalid(fldPath.Child("git"), "", "may not be set when binary is also set")) allErrs = append(allErrs, field.Invalid(fldPath.Child("binary"), "", "may not be set when git is also set")) return allErrs } // Validate individual source type details if input.Git != nil { allErrs = append(allErrs, validateGitSource(input.Git, fldPath.Child("git"))...) } if input.Binary != nil { allErrs = append(allErrs, validateBinarySource(input.Binary, fldPath.Child("binary"))...) } if input.Dockerfile != nil { allErrs = append(allErrs, validateDockerfile(*input.Dockerfile, fldPath.Child("dockerfile"))...) } if input.Images != nil { for i, image := range input.Images { allErrs = append(allErrs, validateImageSource(image, fldPath.Child("images").Index(i))...) } } if isJenkinsPipelineStrategyFromRepo && input.Git == nil { allErrs = append(allErrs, field.Invalid(fldPath.Child("git"), "", "must be set when using Jenkins Pipeline strategy with Jenkinsfile from a git repo")) } allErrs = append(allErrs, validateSecrets(input.Secrets, isDockerStrategy, fldPath.Child("secrets"))...) allErrs = append(allErrs, validateSecretRef(input.SourceSecret, fldPath.Child("sourceSecret"))...) if len(input.ContextDir) != 0 { cleaned := path.Clean(input.ContextDir) if strings.HasPrefix(cleaned, "..") { allErrs = append(allErrs, field.Invalid(fldPath.Child("contextDir"), input.ContextDir, "context dir must not be a relative path")) } else { if cleaned == "." { cleaned = "" } input.ContextDir = cleaned } } return allErrs }
func validateSource(input *buildapi.BuildSource, isCustomStrategy, isDockerStrategy bool) fielderrors.ValidationErrorList { allErrs := fielderrors.ValidationErrorList{} // Ensure that Git and Binary source types are mutually exclusive. if input.Git != nil && input.Binary != nil && !isCustomStrategy { allErrs = append(allErrs, fielderrors.NewFieldInvalid("git", "", "may not be set when binary is also set")) allErrs = append(allErrs, fielderrors.NewFieldInvalid("binary", "", "may not be set when git is also set")) return allErrs } // Validate individual source type details if input.Git != nil { allErrs = append(allErrs, validateGitSource(input.Git).Prefix("git")...) } if input.Binary != nil { allErrs = append(allErrs, validateBinarySource(input.Binary).Prefix("binary")...) } if input.Dockerfile != nil { allErrs = append(allErrs, validateDockerfile(*input.Dockerfile)...) } if input.Images != nil { for i, image := range input.Images { allErrs = append(allErrs, validateImageSource(image).PrefixIndex(i).Prefix("images")...) } } allErrs = append(allErrs, validateSecrets(input.Secrets, isDockerStrategy).Prefix("secrets")...) allErrs = append(allErrs, validateSecretRef(input.SourceSecret).Prefix("sourceSecret")...) if len(input.ContextDir) != 0 { cleaned := path.Clean(input.ContextDir) if strings.HasPrefix(cleaned, "..") { allErrs = append(allErrs, fielderrors.NewFieldInvalid("contextDir", input.ContextDir, "context dir must not be a relative path")) } else { if cleaned == "." { cleaned = "" } input.ContextDir = cleaned } } return allErrs }
func validateSource(input *buildapi.BuildSource) fielderrors.ValidationErrorList { allErrs := fielderrors.ValidationErrorList{} switch input.Type { case buildapi.BuildSourceGit: if input.Git == nil { allErrs = append(allErrs, fielderrors.NewFieldRequired("git")) } else { allErrs = append(allErrs, validateGitSource(input.Git).Prefix("git")...) } if input.Dockerfile != nil { allErrs = append(allErrs, validateDockerfile(*input.Dockerfile)...) } if input.Binary != nil { allErrs = append(allErrs, fielderrors.NewFieldInvalid("binary", "", "may not be set when type is Git")) } case buildapi.BuildSourceBinary: if input.Binary == nil { allErrs = append(allErrs, fielderrors.NewFieldRequired("binary")) } else { allErrs = append(allErrs, validateBinarySource(input.Binary).Prefix("binary")...) } if input.Dockerfile != nil { allErrs = append(allErrs, validateDockerfile(*input.Dockerfile)...) } if input.Git != nil { allErrs = append(allErrs, fielderrors.NewFieldInvalid("git", "", "may not be set when type is Binary")) } case buildapi.BuildSourceDockerfile: if input.Dockerfile == nil { allErrs = append(allErrs, fielderrors.NewFieldRequired("dockerfile")) } else { allErrs = append(allErrs, validateDockerfile(*input.Dockerfile)...) } switch { case input.Git != nil && input.Binary != nil: allErrs = append(allErrs, fielderrors.NewFieldInvalid("git", "", "may not be set when binary is also set")) allErrs = append(allErrs, fielderrors.NewFieldInvalid("binary", "", "may not be set when git is also set")) case input.Git != nil: allErrs = append(allErrs, validateGitSource(input.Git).Prefix("git")...) case input.Binary != nil: allErrs = append(allErrs, validateBinarySource(input.Binary).Prefix("binary")...) } case "": allErrs = append(allErrs, fielderrors.NewFieldRequired("type")) default: allErrs = append(allErrs, fielderrors.NewFieldInvalid("type", input.Type, fmt.Sprintf("source type must be one of Git, Dockerfile, or Binary"))) } allErrs = append(allErrs, validateSecretRef(input.SourceSecret).Prefix("sourceSecret")...) if len(input.ContextDir) != 0 { cleaned := path.Clean(input.ContextDir) if strings.HasPrefix(cleaned, "..") { allErrs = append(allErrs, fielderrors.NewFieldInvalid("contextDir", input.ContextDir, "context dir must not be a relative path")) } else { if cleaned == "." { cleaned = "" } input.ContextDir = cleaned } } return allErrs }