Skip to content

Commit ae51c37

Browse files
committed
No failure reason displayed when build failed using invalid contextDir
Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1419810
1 parent 45bf13e commit ae51c37

File tree

4 files changed

+37
-6
lines changed

4 files changed

+37
-6
lines changed

pkg/build/api/types.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,10 @@ const (
312312
// build has failed.
313313
StatusReasonFetchSourceFailed StatusReason = "FetchSourceFailed"
314314

315+
// StatusReasonInvalidContextDirectory indicates that the supplied
316+
// contextDir does not exist
317+
StatusReasonInvalidContextDirectory StatusReason = "InvalidContextDirectory"
318+
315319
// StatusReasonCancelledBuild indicates that the build was cancelled by the
316320
// user.
317321
StatusReasonCancelledBuild StatusReason = "CancelledBuild"
@@ -338,6 +342,7 @@ const (
338342
StatusMessagePushImageToRegistryFailed = "Failed to push the image to the registry."
339343
StatusMessagePullBuilderImageFailed = "Failed pulling builder image."
340344
StatusMessageFetchSourceFailed = "Failed to fetch the input source."
345+
StatusMessageInvalidContextDirectory = "The supplied context directory does not exist."
341346
StatusMessageCancelledBuild = "The build was cancelled by the user."
342347
StatusMessageDockerBuildFailed = "Docker build strategy has failed."
343348
StatusMessageBuildPodExists = "The pod for this build already exists and is older than the build."

pkg/build/builder/docker.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,17 @@ func (d *DockerBuilder) Build() error {
6868
}
6969
sourceInfo, err := fetchSource(d.dockerClient, buildDir, d.build, initialURLCheckTimeout, os.Stdin, d.gitClient)
7070
if err != nil {
71-
d.build.Status.Phase = api.BuildPhaseFailed
72-
d.build.Status.Reason = api.StatusReasonFetchSourceFailed
73-
d.build.Status.Message = api.StatusMessageFetchSourceFailed
71+
switch err.(type) {
72+
case contextDirNotFoundError:
73+
d.build.Status.Phase = api.BuildPhaseFailed
74+
d.build.Status.Reason = api.StatusReasonInvalidContextDirectory
75+
d.build.Status.Message = api.StatusMessageInvalidContextDirectory
76+
default:
77+
d.build.Status.Phase = api.BuildPhaseFailed
78+
d.build.Status.Reason = api.StatusReasonFetchSourceFailed
79+
d.build.Status.Message = api.StatusMessageFetchSourceFailed
80+
}
81+
7482
handleBuildStatusUpdate(d.build, d.client, nil)
7583
return err
7684
}

pkg/build/builder/source.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ const (
3535

3636
type gitAuthError string
3737
type gitNotFoundError string
38+
type contextDirNotFoundError string
3839

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

48+
func (e contextDirNotFoundError) Error() string {
49+
return fmt.Sprintf("provided context directory does not exist: %s", string(e))
50+
}
51+
4752
// fetchSource retrieves the inputs defined by the build source into the
4853
// provided directory, or returns an error if retrieval is not possible.
4954
func fetchSource(dockerClient DockerClient, dir string, build *api.Build, urlTimeout time.Duration, in io.Reader, gitClient GitClient) (*git.SourceInfo, error) {
@@ -92,6 +97,12 @@ func fetchSource(dockerClient DockerClient, dir string, build *api.Build, urlTim
9297
}
9398
}
9499

100+
if len(build.Spec.Source.ContextDir) > 0 {
101+
if _, err := os.Stat(filepath.Join(dir, build.Spec.Source.ContextDir)); os.IsNotExist(err) {
102+
return sourceInfo, contextDirNotFoundError(build.Spec.Source.ContextDir)
103+
}
104+
}
105+
95106
// a Dockerfile has been specified, create or overwrite into the destination
96107
if dockerfileSource := build.Spec.Source.Dockerfile; dockerfileSource != nil {
97108
baseDir := dir

pkg/build/builder/sti.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,9 +116,16 @@ func (s *S2IBuilder) Build() error {
116116
// fetch source
117117
sourceInfo, err := fetchSource(s.dockerClient, srcDir, s.build, initialURLCheckTimeout, os.Stdin, s.gitClient)
118118
if err != nil {
119-
s.build.Status.Phase = api.BuildPhaseFailed
120-
s.build.Status.Reason = api.StatusReasonFetchSourceFailed
121-
s.build.Status.Message = api.StatusMessageFetchSourceFailed
119+
switch err.(type) {
120+
case contextDirNotFoundError:
121+
s.build.Status.Phase = api.BuildPhaseFailed
122+
s.build.Status.Reason = api.StatusReasonInvalidContextDirectory
123+
s.build.Status.Message = api.StatusMessageInvalidContextDirectory
124+
default:
125+
s.build.Status.Phase = api.BuildPhaseFailed
126+
s.build.Status.Reason = api.StatusReasonFetchSourceFailed
127+
s.build.Status.Message = api.StatusMessageFetchSourceFailed
128+
}
122129
handleBuildStatusUpdate(s.build, s.client, nil)
123130
return err
124131
}

0 commit comments

Comments
 (0)