Add a function to select channel instances for a revision
This commit is contained in:
parent
7326e8b3bb
commit
7306df0a0f
1 changed files with 49 additions and 1 deletions
|
|
@ -23,7 +23,8 @@
|
||||||
#:use-module (guix utils)
|
#:use-module (guix utils)
|
||||||
#:use-module (guix-data-service model utils)
|
#:use-module (guix-data-service model utils)
|
||||||
#:use-module (guix-data-service model derivation)
|
#: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
|
(define (insert-channel-instances conn
|
||||||
guix-revision-id
|
guix-revision-id
|
||||||
|
|
@ -50,3 +51,50 @@ VALUES "
|
||||||
derivation-ids)
|
derivation-ids)
|
||||||
", "))))
|
", "))))
|
||||||
#t)
|
#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))))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue