package validation
import (
"net/url"
errs "github.com/GoogleCloudPlatform/kubernetes/pkg/api/errors"
"github.com/openshift/origin/pkg/build/api"
)
// ValidateBuild tests required fields for a Build.
func ValidateBuild(build *api.Build) errs.ErrorList {
allErrs := errs.ErrorList{}
if len(build.ID) == 0 {
allErrs = append(allErrs, errs.NewFieldRequired("id", build.ID))
}
allErrs = append(allErrs, validateBuildInput(&build.Input).Prefix("input")...)
return allErrs
}
// ValidateBuildConfig tests required fields for a Build.
func ValidateBuildConfig(config *api.BuildConfig) errs.ErrorList {
allErrs := errs.ErrorList{}
if len(config.ID) == 0 {
allErrs = append(allErrs, errs.NewFieldRequired("id", config.ID))
}
allErrs = append(allErrs, validateBuildInput(&config.DesiredInput).Prefix("desiredInput")...)
return allErrs
}
func validateBuildInput(input *api.BuildInput) errs.ErrorList {
allErrs := errs.ErrorList{}
if len(input.SourceURI) == 0 {
allErrs = append(allErrs, errs.NewFieldRequired("sourceURI", input.SourceURI))
} else if !isValidURL(input.SourceURI) {
allErrs = append(allErrs, errs.NewFieldInvalid("sourceURI", input.SourceURI))
}
if len(input.ImageTag) == 0 {
allErrs = append(allErrs, errs.NewFieldRequired("imageTag", input.ImageTag))
}
if input.STIInput != nil {
allErrs = append(allErrs, validateSTIBuild(input.STIInput).Prefix("stiBuild")...)
}
return allErrs
}
func validateSTIBuild(sti *api.STIBuildInput) errs.ErrorList {
allErrs := errs.ErrorList{}
if len(sti.BuilderImage) == 0 {
allErrs = append(allErrs, errs.NewFieldRequired("builderImage", sti.BuilderImage))
}
return allErrs
}
func isValidURL(uri string) bool {
_, err := url.Parse(uri)
return err == nil
}