Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

No failure reason displayed when build failed using invalid contextDir #13206

Merged
merged 1 commit into from
Mar 3, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions pkg/build/api/types.go
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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