diff options
author | Christopher Baines <mail@cbaines.net> | 2019-12-15 11:04:43 +0000 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2019-12-16 15:19:02 +0000 |
commit | 5337b171eac6b8390c9b1e8de3b8bc7fd46bdc60 (patch) | |
tree | aae085bf8b961b266d8d8a1c9f67e8c5396b5670 /guix-data-service/model | |
parent | 771b01ef805b21f9aae0efb21fe3515e81e2f4d5 (diff) | |
download | data-service-5337b171eac6b8390c9b1e8de3b8bc7fd46bdc60.tar data-service-5337b171eac6b8390c9b1e8de3b8bc7fd46bdc60.tar.gz |
Add a function to find the builds required for a build that failed
Diffstat (limited to 'guix-data-service/model')
-rw-r--r-- | guix-data-service/model/build.scm | 36 |
1 files changed, 36 insertions, 0 deletions
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 |