Allow filtering package derivations based on build server builds

This means you can query for derivations where builds exist or don't exist on
a given build server.

I think this will come in useful when submitting builds from a Guix Data
Service instance.
This commit is contained in:
Christopher Baines 2022-05-23 22:39:32 +01:00
parent 40035bcf9a
commit 6d403cbc8d
3 changed files with 80 additions and 0 deletions

View file

@ -191,6 +191,8 @@ ORDER BY systems.system DESC,
targets
minimum-builds
maximum-builds
build-from-build-servers
no-build-from-build-servers
limit-results
after-name
(include-builds? #t)
@ -238,6 +240,30 @@ ORDER BY systems.system DESC,
) <= "
(number->string maximum-builds)))
'())
,@(map
(lambda (build-server-id)
(string-append
"
EXISTS(
SELECT 1
FROM builds
WHERE builds.derivation_output_details_set_id =
derivations_by_output_details_set.derivation_output_details_set_id
AND builds.build_server_id = " (number->string build-server-id) "
)"))
(or build-from-build-servers '()))
,@(map
(lambda (build-server-id)
(string-append
"
NOT EXISTS(
SELECT 1
FROM builds
WHERE builds.derivation_output_details_set_id =
derivations_by_output_details_set.derivation_output_details_set_id
AND builds.build_server_id = " (number->string build-server-id) "
)"))
(or no-build-from-build-servers '()))
,@(cond
((eq? build-status #f) '())
((eq? build-status 'failing)
@ -382,6 +408,8 @@ ORDER BY derivations.file_name
targets
minimum-builds
maximum-builds
build-from-build-servers
no-build-from-build-servers
limit-results
after-name
(include-builds? #t)
@ -429,6 +457,30 @@ ORDER BY derivations.file_name
) <= "
(number->string maximum-builds)))
'())
,@(map
(lambda (build-server-id)
(string-append
"
EXISTS(
SELECT 1
FROM builds
WHERE builds.derivation_output_details_set_id =
derivations_by_output_details_set.derivation_output_details_set_id
AND builds.build_server_id = " (number->string build-server-id) "
)"))
(or build-from-build-servers '()))
,@(map
(lambda (build-server-id)
(string-append
"
NOT EXISTS(
SELECT 1
FROM builds
WHERE builds.derivation_output_details_set_id =
derivations_by_output_details_set.derivation_output_details_set_id
AND builds.build_server_id = " (number->string build-server-id) "
)"))
(or no-build-from-build-servers '()))
,@(cond
((eq? build-status #f) '())
((eq? build-status 'failing)