aboutsummaryrefslogtreecommitdiff
path: root/guix-data-service/model
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2019-12-15 11:04:43 +0000
committerChristopher Baines <mail@cbaines.net>2019-12-16 15:19:02 +0000
commit5337b171eac6b8390c9b1e8de3b8bc7fd46bdc60 (patch)
treeaae085bf8b961b266d8d8a1c9f67e8c5396b5670 /guix-data-service/model
parent771b01ef805b21f9aae0efb21fe3515e81e2f4d5 (diff)
downloaddata-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.scm36
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