From df56ccafe3e3c7e756a57ab3d77bf71b3298464c Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Sun, 15 Dec 2019 11:04:43 +0000 Subject: Add a function to find the builds required for a build that failed --- guix-data-service/model/build.scm | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/guix-data-service/model/build.scm b/guix-data-service/model/build.scm index cf91acd..d28717a 100644 --- a/guix-data-service/model/build.scm +++ b/guix-data-service/model/build.scm @@ -7,6 +7,7 @@ select-builds-with-context select-builds-with-context-by-derivation-file-name select-build-by-build-server-and-derivation-file-name + select-required-builds-that-failed update-builds-derivation-output-details-set-id insert-builds insert-build @@ -183,6 +184,41 @@ GROUP BY build_servers.url") (() #f))) +(define (select-required-builds-that-failed conn build-server-id derivation-file-name) + (define query + " +WITH RECURSIVE all_derivations(id, file_name) AS ( + SELECT derivations.id, derivations.file_name + FROM derivations + WHERE file_name = $1 + UNION + SELECT derivations.id, derivations.file_name + FROM all_derivations + INNER JOIN derivation_inputs + ON all_derivations.id = derivation_inputs.derivation_id + INNER JOIN derivation_outputs + ON derivation_inputs.derivation_output_id = derivation_outputs.id + INNER JOIN derivations + ON derivation_outputs.derivation_id = derivations.id +) +SELECT all_derivations.file_name, latest_build_status.status +FROM all_derivations +LEFT OUTER JOIN builds + ON all_derivations.file_name = builds.derivation_file_name AND + builds.build_server_id = $2 +LEFT OUTER JOIN ( + SELECT DISTINCT ON (build_id) * + FROM build_status + ORDER BY build_id, timestamp DESC +) AS latest_build_status + ON builds.id = latest_build_status.build_id +WHERE latest_build_status.status = 'failed'") + + (exec-query conn + query + (list derivation-file-name + (number->string build-server-id)))) + (define (select-build-id-by-build-server-and-derivation-file-name conn build-server-id derivation-file-name) (define query -- cgit v1.2.3