@@ -13,7 +13,12 @@ import (
1313 corev1alpha1 "github.com/pivotal/kpack/pkg/apis/core/v1alpha1"
1414)
1515
16- const BuildRunningReason = "BuildRunning"
16+ const (
17+ BuildRunningReason = "BuildRunning"
18+ ResolverNotReadyReason = "ResolverNotReady"
19+ BuildFailedReason = "BuildFailed"
20+ UpToDateReason = "UpToDate"
21+ )
1722
1823func (c * Reconciler ) reconcileBuild (ctx context.Context , image * buildapi.Image , latestBuild * buildapi.Build , sourceResolver * buildapi.SourceResolver , builder buildapi.BuilderResource , buildCacheName string ) (buildapi.ImageStatus , error ) {
1924 currentBuildNumber , err := buildCounter (latestBuild )
@@ -55,7 +60,7 @@ func (c *Reconciler) reconcileBuild(ctx context.Context, image *buildapi.Image,
5560 case corev1 .ConditionFalse :
5661 return buildapi.ImageStatus {
5762 Status : corev1alpha1.Status {
58- Conditions : noScheduledBuild (result . ConditionStatus , builder , latestBuild , sourceResolver ),
63+ Conditions : noScheduledBuild (result , builder , latestBuild , sourceResolver ),
5964 },
6065 LatestBuildRef : latestBuild .BuildRef (),
6166 LatestBuildReason : latestBuild .BuildReason (),
@@ -70,28 +75,50 @@ func (c *Reconciler) reconcileBuild(ctx context.Context, image *buildapi.Image,
7075 }
7176}
7277
73- func noScheduledBuild (buildNeeded corev1.ConditionStatus , builder buildapi.BuilderResource , build * buildapi.Build , sourceResolver * buildapi.SourceResolver ) corev1alpha1.Conditions {
74- if buildNeeded == corev1 .ConditionUnknown {
75- message := ""
78+ func noScheduledBuild (buildNeeded buildRequiredResult , builder buildapi.BuilderResource , build * buildapi.Build , sourceResolver * buildapi.SourceResolver ) corev1alpha1.Conditions {
79+ if ! builder .Ready () {
80+ return corev1alpha1.Conditions {
81+ {
82+ Type : corev1alpha1 .ConditionReady ,
83+ Status : corev1 .ConditionFalse ,
84+ Reason : buildapi .BuilderNotReady ,
85+ Message : builderError (builder ),
86+ LastTransitionTime : corev1alpha1.VolatileTime {Inner : metav1 .Now ()},
87+ },
88+ builderCondition (builder ),
89+ }
90+ }
91+ if buildNeeded .ConditionStatus == corev1 .ConditionUnknown {
92+ message := "Build status unknown"
7693 if ! sourceResolver .Ready () {
7794 message = fmt .Sprintf ("SourceResolver %s is not ready" , sourceResolver .GetName ())
7895 }
7996 return corev1alpha1.Conditions {
8097 {
8198 Type : corev1alpha1 .ConditionReady ,
8299 Status : corev1 .ConditionUnknown ,
100+ Reason : ResolverNotReadyReason ,
83101 Message : message ,
84102 LastTransitionTime : corev1alpha1.VolatileTime {Inner : metav1 .Now ()},
85103 },
86104 builderCondition (builder ),
87105 }
88106 }
89107
108+ buildReason := UpToDateReason
109+ buildMessage := "Last build succeeded"
110+
111+ if ! build .Status .GetCondition (corev1alpha1 .ConditionSucceeded ).IsTrue () {
112+ buildReason = BuildFailedReason
113+ buildMessage = "Last build did not succeed"
114+ }
115+
90116 return corev1alpha1.Conditions {
91117 {
92118 Type : corev1alpha1 .ConditionReady ,
93119 Status : unknownStatusIfNil (build .Status .GetCondition (corev1alpha1 .ConditionSucceeded )),
94- Message : emptyMessageIfNil (build .Status .GetCondition (corev1alpha1 .ConditionSucceeded )),
120+ Reason : buildReason ,
121+ Message : defaultMessageIfNil (build .Status .GetCondition (corev1alpha1 .ConditionSucceeded ), buildMessage ),
95122 LastTransitionTime : corev1alpha1.VolatileTime {Inner : metav1 .Now ()},
96123 },
97124 builderCondition (builder ),
@@ -106,9 +133,12 @@ func unknownStatusIfNil(condition *corev1alpha1.Condition) corev1.ConditionStatu
106133 return condition .Status
107134}
108135
109- func emptyMessageIfNil (condition * corev1alpha1.Condition ) string {
136+ // Copies the message from the specified condition, or fills in a default message if nil.
137+ // We should always have a message for non-successful conditions, as that conveys
138+ // information to the user about what is expected.
139+ func defaultMessageIfNil (condition * corev1alpha1.Condition , defaultMessage string ) string {
110140 if condition == nil {
111- return ""
141+ return defaultMessage
112142 }
113143 return condition .Message
114144}
@@ -126,6 +156,7 @@ func builderCondition(builder buildapi.BuilderResource) corev1alpha1.Condition {
126156 return corev1alpha1.Condition {
127157 Type : buildapi .ConditionBuilderReady ,
128158 Status : corev1 .ConditionTrue ,
159+ Reason : buildapi .BuilderReady ,
129160 LastTransitionTime : corev1alpha1.VolatileTime {Inner : metav1 .Now ()},
130161 }
131162}
@@ -145,12 +176,14 @@ func scheduledBuildCondition(build *buildapi.Build) corev1alpha1.Conditions {
145176 {
146177 Type : corev1alpha1 .ConditionReady ,
147178 Status : corev1 .ConditionUnknown ,
148- LastTransitionTime : corev1alpha1. VolatileTime { Inner : metav1 . Now ()} ,
179+ Reason : BuildRunningReason ,
149180 Message : fmt .Sprintf ("%s is executing" , build .Name ),
181+ LastTransitionTime : corev1alpha1.VolatileTime {Inner : metav1 .Now ()},
150182 },
151183 {
152184 Type : buildapi .ConditionBuilderReady ,
153185 Status : corev1 .ConditionTrue ,
186+ Reason : buildapi .BuilderReady ,
154187 LastTransitionTime : corev1alpha1.VolatileTime {Inner : metav1 .Now ()},
155188 },
156189 }
@@ -168,10 +201,11 @@ func buildCounter(build *buildapi.Build) (int64, error) {
168201func buildRunningCondition (build * buildapi.Build , builder buildapi.BuilderResource ) corev1alpha1.Conditions {
169202 return corev1alpha1.Conditions {
170203 {
171- Type : corev1alpha1 .ConditionReady ,
172- Status : corev1 .ConditionUnknown ,
173- Reason : BuildRunningReason ,
174- Message : emptyMessageIfNil (build .Status .GetCondition (corev1alpha1 .ConditionSucceeded )),
204+ Type : corev1alpha1 .ConditionReady ,
205+ Status : corev1 .ConditionUnknown ,
206+ Reason : BuildRunningReason ,
207+ Message : defaultMessageIfNil (build .Status .GetCondition (corev1alpha1 .ConditionSucceeded ),
208+ fmt .Sprintf ("%s is executing" , build .Name )),
175209 LastTransitionTime : corev1alpha1.VolatileTime {Inner : metav1 .Now ()},
176210 },
177211 builderCondition (builder ),
0 commit comments