diff --git a/src/cuirass/database.scm b/src/cuirass/database.scm index d2439e4aef01423a595ac5d39429ca5cf5d12893..74e73bc56f37297ab4de1307822f67d5c6bafbea 100644 --- a/src/cuirass/database.scm +++ b/src/cuirass/database.scm @@ -926,6 +926,7 @@ FILTERS is an assoc list whose possible keys are 'derivation | 'id | 'jobset | (lambda (inner) (match (assq 'order filters) (('order . 'build-id) "Builds.id ASC") + (('order . 'evaluation) "Builds.evaluation DESC") (('order . 'finish-time) "stoptime DESC") (('order . 'finish-time+build-id) (if inner diff --git a/src/cuirass/http.scm b/src/cuirass/http.scm index a37c63a94ac02d6789c6c60c8b5554b06af04fff..fab988863626492e333bb293f3ead2a1018302f8 100644 --- a/src/cuirass/http.scm +++ b/src/cuirass/http.scm @@ -490,12 +490,16 @@ Hydra format." ((> limit 1000) (respond-json-with-error 500 "Maximum limit exceeded")) (else - ;; Limit results to builds that are "done". + ;; Limit results to builds that are "done". Order the builds by + ;; descending evaluation numbers. This ensures that the builds that + ;; were last registered are first returned even if they take more + ;; time to complete. Ordering by timestamp wouldn't work as + ;; evaluations are not always performed sequentially. (respond-json (object->json-string (handle-builds-request `((status . done) ,@params - (order . finish-time))))))))) + (order . evaluation))))))))) (('GET "api" "queue") (let* ((params (request-parameters request)) ;; 'nr parameter is mandatory to limit query size.