diff options
author | Christopher Baines <mail@cbaines.net> | 2020-05-23 17:31:46 +0100 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2020-05-23 17:31:46 +0100 |
commit | 8015a6bfa7cbb017155c518a53fda6ca2ad2ec44 (patch) | |
tree | 082ffbb180ea6076a99214fc438a117d8234d655 /guix-build-coordinator/hooks.scm | |
parent | 6817d044a292c03411cec64cc9d17c5cca9d7605 (diff) | |
download | build-coordinator-8015a6bfa7cbb017155c518a53fda6ca2ad2ec44.tar build-coordinator-8015a6bfa7cbb017155c518a53fda6ca2ad2ec44.tar.gz |
Add a build failure hook to retry builds
Diffstat (limited to 'guix-build-coordinator/hooks.scm')
-rw-r--r-- | guix-build-coordinator/hooks.scm | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/guix-build-coordinator/hooks.scm b/guix-build-coordinator/hooks.scm index f3edc9f..9868d37 100644 --- a/guix-build-coordinator/hooks.scm +++ b/guix-build-coordinator/hooks.scm @@ -33,6 +33,7 @@ build-success-publish-hook build-success-s3-publish-hook default-build-failure-hook + build-failure-retry-hook default-build-missing-inputs-hook)) (define (default-build-success-hook build-coordinator build-id) @@ -175,6 +176,33 @@ build-id agent-id) (current-error-port)))) +(define* (build-failure-retry-hook #:key (retries 2)) + (lambda (build-coordinator build-id) + (define datastore + (build-coordinator-datastore build-coordinator)) + + (let* ((build-details (datastore-find-build datastore build-id)) + (derivation-name (assq-ref build-details 'derivation-name)) + (all-builds-for-derivation (datastore-list-builds-for-derivation + datastore derivation-name)) + (all-builds-for-derivation-count (length all-builds-for-derivation))) + + (when (= 1 all-builds-for-derivation-count) + (display + (simple-format #f "~A: submitting ~A retries for\n ~A\n" + build-id retries derivation-name)) + (for-each + (lambda (retry) + (let ((details + (submit-build build-coordinator derivation-name + #:priority (assq-ref build-details 'priority)))) + (display + (simple-format #f "~A: submitted retry ~A as ~A\n" + build-id + (+ 1 retry) + (assq-ref details 'build-submitted))))) + (iota retries)))))) + (define (default-build-missing-inputs-hook build-coordinator build-id missing-inputs) (define datastore |