@@ -83,6 +83,7 @@ type statusLine struct {
8383 lastbuild time.Time
8484 statuses []status
8585 builderUrl string
86+ lkgb string
8687}
8788
8889type Builds struct {
@@ -99,6 +100,15 @@ type Builds struct {
99100 } `json:"builds"`
100101}
101102
103+ func AnyContains (lst []string , s string ) bool {
104+ for _ , v := range lst {
105+ if v == s {
106+ return true
107+ }
108+ }
109+ return false
110+ }
111+
102112func QueryJSONBuilds (url string ) (* Builds , error ) {
103113 var resp * http.Response
104114 var err error
@@ -144,18 +154,13 @@ func GetStatusFromJson(builderUrl string) (statusLine, error) {
144154 var sl statusLine = statusLine {
145155 builderUrl : builderUrl ,
146156 }
157+ lkgb := 0
158+ lkgbUrl := ""
147159 for _ , b := range builds .Builds {
148160 if ! b .Complete {
149161 continue
150162 }
151- foundForceBuild := false
152- for _ , v := range b .Properties .Reason {
153- if v == "Force Build Form" {
154- foundForceBuild = true
155- break
156- }
157- }
158- if foundForceBuild {
163+ if AnyContains (b .Properties .Reason , "Force Build Form" ) {
159164 continue
160165 }
161166
@@ -165,18 +170,44 @@ func GetStatusFromJson(builderUrl string) (statusLine, error) {
165170 if sl .lastbuild .Before (time ) {
166171 sl .lastbuild = time
167172 }
173+
174+ build , _ := url .Parse (fmt .Sprintf ("../../../#/builders/%d/builds/%d" , b .Builderid , b .Number ))
175+ thisUrl := baseUrl .ResolveReference (build ).String ()
176+
168177 success := 0
169178 if b .Results < 2 {
170179 success = 1
180+ if b .Number > lkgb {
181+ lkgb = b .Number
182+ lkgbUrl = thisUrl
183+ }
171184 } else if b .Results == 2 {
172185 success = - 1
173186 }
174- build , _ := url .Parse (fmt .Sprintf ("../../../#/builders/%d/builds/%d" , b .Builderid , b .Number ))
175- sl .statuses = append (sl .statuses , status {baseUrl .ResolveReference (build ).String (), success })
187+ sl .statuses = append (sl .statuses , status {thisUrl , success })
176188 if len (sl .statuses ) >= 31 {
177189 break
178190 }
179191 }
192+ if lkgb == 0 {
193+ lkgbBuilds , err := QueryJSONBuilds (builderUrl + "/builds?limit=5&order=-number&property=reason&results__lt=2" )
194+ if err != nil {
195+ return sl , nil
196+ }
197+ for _ , b := range lkgbBuilds .Builds {
198+ if AnyContains (b .Properties .Reason , "Force Build Form" ) {
199+ continue
200+ }
201+ if b .Number > lkgb {
202+ build , _ := url .Parse (fmt .Sprintf ("../../../#/builders/%d/builds/%d" , b .Builderid , b .Number ))
203+ lkgbUrl = baseUrl .ResolveReference (build ).String ()
204+ lkgb = b .Number
205+ }
206+ }
207+ }
208+ if lkgbUrl != "" {
209+ sl .lkgb = lkgbUrl
210+ }
180211 return sl , nil
181212}
182213
@@ -279,7 +310,7 @@ func GetStatus(builderUrl string) (statusLine, error) {
279310
280311 statuses = append (statuses , status {buildUrl , success })
281312 }
282- return statusLine {lastbuild , statuses , builderUrl }
313+ return statusLine {lastbuild , statuses , builderUrl , "" }
283314 }
284315 }
285316 }
@@ -496,7 +527,11 @@ $(function() {
496527 style = class (statuses [i ].statuses [0 ].success )
497528 }
498529
499- r += td ("" , a (statuses [i ].builderUrl , span (style , bots [i ].name )))
530+ if statuses [i ].lkgb != "" {
531+ r += td ("" , a (statuses [i ].builderUrl , span (style , bots [i ].name ))+ " " + a (statuses [i ].lkgb , "☆" ))
532+ } else {
533+ r += td ("" , a (statuses [i ].builderUrl , span (style , bots [i ].name )))
534+ }
500535
501536 if errors [i ] != nil {
502537 errStr := errors [i ].Error ()
0 commit comments