diff options
-rw-r--r-- | guix-data-service/model/channel-instance.scm | 50 |
1 files changed, 49 insertions, 1 deletions
diff --git a/guix-data-service/model/channel-instance.scm b/guix-data-service/model/channel-instance.scm index 9df2722..b08ecae 100644 --- a/guix-data-service/model/channel-instance.scm +++ b/guix-data-service/model/channel-instance.scm @@ -23,7 +23,8 @@ #:use-module (guix utils) #:use-module (guix-data-service model utils) #:use-module (guix-data-service model derivation) - #:export (insert-channel-instances)) + #:export (insert-channel-instances + select-channel-instances-for-guix-revision)) (define (insert-channel-instances conn guix-revision-id @@ -50,3 +51,50 @@ VALUES " derivation-ids) ", ")))) #t) + +(define (select-channel-instances-for-guix-revision conn + commit-hash) + (define query + " +SELECT channel_instances.system, + derivations.file_name, + JSON_AGG( + json_build_object( + 'build_server_id', builds.build_server_id, + 'status', latest_build_status.status, + 'timestamp', latest_build_status.timestamp, + 'build_for_equivalent_derivation', + builds.derivation_file_name != derivations.file_name + ) + ORDER BY latest_build_status.timestamp + ) AS builds +FROM channel_instances +INNER JOIN derivations + ON channel_instances.derivation_id = derivations.id +INNER JOIN derivations_by_output_details_set + ON derivations.id = derivations_by_output_details_set.derivation_id +LEFT OUTER JOIN builds + ON derivations_by_output_details_set.derivation_output_details_set_id = + builds.derivation_output_details_set_id +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 +INNER JOIN guix_revisions + ON guix_revisions.id = channel_instances.guix_revision_id +WHERE guix_revisions.commit = $1 +GROUP BY channel_instances.system, derivations.file_name +ORDER BY channel_instances.system DESC") + + (map + (match-lambda + ((system derivation_file_name builds-json) + (list system + derivation_file_name + (filter (lambda (build) + (assoc-ref build "status")) + (vector->list + (json-string->scm builds-json)))))) + (exec-query conn query (list commit-hash)))) |