Skip to content

Commit

Permalink
Merge pull request #13203 from coreydaley/bugzilla_1419810_invalid_br…
Browse files Browse the repository at this point in the history
…anch_build_failure_reason

Merged by openshift-bot
  • Loading branch information
OpenShift Bot committed Mar 3, 2017
2 parents d5e43cf + db040e1 commit 1ae364e
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 6 deletions.
5 changes: 5 additions & 0 deletions pkg/build/api/types.go
Expand Up @@ -312,6 +312,10 @@ const (
// build has failed.
StatusReasonFetchSourceFailed StatusReason = "FetchSourceFailed"

// StatusReasonInvalidContextDirectory indicates that the supplied
// contextDir does not exist
StatusReasonInvalidContextDirectory StatusReason = "InvalidContextDirectory"

// StatusReasonCancelledBuild indicates that the build was cancelled by the
// user.
StatusReasonCancelledBuild StatusReason = "CancelledBuild"
Expand All @@ -338,6 +342,7 @@ const (
StatusMessagePushImageToRegistryFailed = "Failed to push the image to the registry."
StatusMessagePullBuilderImageFailed = "Failed pulling builder image."
StatusMessageFetchSourceFailed = "Failed to fetch the input source."
StatusMessageInvalidContextDirectory = "The supplied context directory does not exist."
StatusMessageCancelledBuild = "The build was cancelled by the user."
StatusMessageDockerBuildFailed = "Docker build strategy has failed."
StatusMessageBuildPodExists = "The pod for this build already exists and is older than the build."
Expand Down
14 changes: 11 additions & 3 deletions pkg/build/builder/docker.go
Expand Up @@ -68,9 +68,17 @@ func (d *DockerBuilder) Build() error {
}
sourceInfo, err := fetchSource(d.dockerClient, buildDir, d.build, initialURLCheckTimeout, os.Stdin, d.gitClient)
if err != nil {
d.build.Status.Phase = api.BuildPhaseFailed
d.build.Status.Reason = api.StatusReasonFetchSourceFailed
d.build.Status.Message = api.StatusMessageFetchSourceFailed
switch err.(type) {
case contextDirNotFoundError:
d.build.Status.Phase = api.BuildPhaseFailed
d.build.Status.Reason = api.StatusReasonInvalidContextDirectory
d.build.Status.Message = api.StatusMessageInvalidContextDirectory
default:
d.build.Status.Phase = api.BuildPhaseFailed
d.build.Status.Reason = api.StatusReasonFetchSourceFailed
d.build.Status.Message = api.StatusMessageFetchSourceFailed
}

handleBuildStatusUpdate(d.build, d.client, nil)
return err
}
Expand Down
11 changes: 11 additions & 0 deletions pkg/build/builder/source.go
Expand Up @@ -35,6 +35,7 @@ const (

type gitAuthError string
type gitNotFoundError string
type contextDirNotFoundError string

func (e gitAuthError) Error() string {
return fmt.Sprintf("failed to fetch requested repository %q with provided credentials", string(e))
Expand All @@ -44,6 +45,10 @@ func (e gitNotFoundError) Error() string {
return fmt.Sprintf("requested repository %q not found", string(e))
}

func (e contextDirNotFoundError) Error() string {
return fmt.Sprintf("provided context directory does not exist: %s", string(e))
}

// fetchSource retrieves the inputs defined by the build source into the
// provided directory, or returns an error if retrieval is not possible.
func fetchSource(dockerClient DockerClient, dir string, build *api.Build, urlTimeout time.Duration, in io.Reader, gitClient GitClient) (*git.SourceInfo, error) {
Expand Down Expand Up @@ -92,6 +97,12 @@ func fetchSource(dockerClient DockerClient, dir string, build *api.Build, urlTim
}
}

if len(build.Spec.Source.ContextDir) > 0 {
if _, err := os.Stat(filepath.Join(dir, build.Spec.Source.ContextDir)); os.IsNotExist(err) {
return sourceInfo, contextDirNotFoundError(build.Spec.Source.ContextDir)
}
}

// a Dockerfile has been specified, create or overwrite into the destination
if dockerfileSource := build.Spec.Source.Dockerfile; dockerfileSource != nil {
baseDir := dir
Expand Down
13 changes: 10 additions & 3 deletions pkg/build/builder/sti.go
Expand Up @@ -116,9 +116,16 @@ func (s *S2IBuilder) Build() error {
// fetch source
sourceInfo, err := fetchSource(s.dockerClient, srcDir, s.build, initialURLCheckTimeout, os.Stdin, s.gitClient)
if err != nil {
s.build.Status.Phase = api.BuildPhaseFailed
s.build.Status.Reason = api.StatusReasonFetchSourceFailed
s.build.Status.Message = api.StatusMessageFetchSourceFailed
switch err.(type) {
case contextDirNotFoundError:
s.build.Status.Phase = api.BuildPhaseFailed
s.build.Status.Reason = api.StatusReasonInvalidContextDirectory
s.build.Status.Message = api.StatusMessageInvalidContextDirectory
default:
s.build.Status.Phase = api.BuildPhaseFailed
s.build.Status.Reason = api.StatusReasonFetchSourceFailed
s.build.Status.Message = api.StatusMessageFetchSourceFailed
}
handleBuildStatusUpdate(s.build, s.client, nil)
return err
}
Expand Down

0 comments on commit 1ae364e

Please sign in to comment.