2
0
Fork 0
mirror of git://git.savannah.gnu.org/guix/data-service.git synced 2023-12-14 03:23:03 +01:00

Set builds derivation output details set id if information available

The build event information can now contain the derivation outputs, as well as
the name of the derivation. This allows the Guix Data Service to join builds
up with derivations, even if it doesn't know about the derivation being built.
This commit is contained in:
Christopher Baines 2022-07-08 13:48:08 +01:00
parent 6da5e8e67b
commit 788571f53f
2 changed files with 49 additions and 9 deletions

View file

@ -23,6 +23,7 @@
#:use-module (json)
#:use-module (guix-data-service database)
#:use-module (guix-data-service model utils)
#:use-module (guix-data-service model derivation)
#:use-module (guix-data-service model system)
#:export (select-build-stats
select-builds-with-context
@ -470,7 +471,10 @@ WHERE derivations.file_name = $1"
(_
#f)))
(define (insert-builds conn build-server-id derivation-file-names
(define (insert-builds conn
build-server-id
derivation-file-names
derivation-output-details-lists
build-server-build-ids)
(let ((build-ids
(insert-missing-data-and-return-all-ids
@ -487,6 +491,26 @@ WHERE derivations.file_name = $1"
build-server-build-ids)
#:delete-duplicates? #t)))
(for-each
(lambda (build-id derivation-output-details)
(and=>
derivation-output-details
(lambda (details)
(let ((derivation-output-details-set-id
(derivation-output-details-ids->derivation-output-details-set-id
conn
(derivation-output-details->derivation-output-details-ids
conn
details))))
(exec-query
conn
"
UPDATE builds SET derivation_output_details_set_id = $1 WHERE id = $2"
(list (number->string derivation-output-details-set-id)
(number->string build-id)))))))
build-ids
derivation-output-details-lists)
(exec-query
conn
(string-append

View file

@ -120,14 +120,30 @@
(define (handle-derivation-events conn items)
(unless (null? items)
(let ((build-ids
(insert-builds conn
build-server-id
(map (lambda (item)
(assoc-ref item "derivation"))
items)
(map (lambda (item)
(assoc-ref item "build_id"))
items))))
(insert-builds
conn
build-server-id
(map (lambda (item)
(assoc-ref item "derivation"))
items)
(map (lambda (item)
(and=>
(assoc-ref item "derivation_outputs")
(lambda (outputs)
(map
(lambda (output)
`((path . ,(assoc-ref output "output"))
(hash_algorithm
. ,(or (assoc-ref output "hash_algorithm")
NULL))
(hash . ,(or (assoc-ref output "hash")
NULL))
(recursive . ,(assoc-ref output "recursive"))))
(vector->list outputs)))))
items)
(map (lambda (item)
(assoc-ref item "build_id"))
items))))
(insert-build-statuses
conn
build-ids