aboutsummaryrefslogtreecommitdiff
path: root/scripts/guix-build-coordinator-queue-builds-from-guix-data-service.in
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2020-06-19 16:55:01 +0100
committerChristopher Baines <mail@cbaines.net>2020-06-19 16:55:01 +0100
commit89c2823f1a332da9e9ea3a4f84ef27cce7e22a3a (patch)
treec58d0c732100c67e71fee2e5438154153c374fc7 /scripts/guix-build-coordinator-queue-builds-from-guix-data-service.in
parentd1d8132c6f8c0fb4d2335472d487635e0284cdf6 (diff)
downloadbuild-coordinator-89c2823f1a332da9e9ea3a4f84ef27cce7e22a3a.tar
build-coordinator-89c2823f1a332da9e9ea3a4f84ef27cce7e22a3a.tar.gz
Handle the system more explicitly when fetching builds
Also support fetching builds for specific systems from the Guix Data Service.
Diffstat (limited to 'scripts/guix-build-coordinator-queue-builds-from-guix-data-service.in')
-rw-r--r--scripts/guix-build-coordinator-queue-builds-from-guix-data-service.in94
1 files changed, 72 insertions, 22 deletions
diff --git a/scripts/guix-build-coordinator-queue-builds-from-guix-data-service.in b/scripts/guix-build-coordinator-queue-builds-from-guix-data-service.in
index 0690244..664c442 100644
--- a/scripts/guix-build-coordinator-queue-builds-from-guix-data-service.in
+++ b/scripts/guix-build-coordinator-queue-builds-from-guix-data-service.in
@@ -24,6 +24,7 @@
(use-modules (srfi srfi-1)
(srfi srfi-11)
+ (srfi srfi-37)
(ice-9 match)
(ice-9 textual-ports)
(rnrs bytevectors)
@@ -155,30 +156,79 @@
#:times 6
#:delay 30))
-(define (submit-builds-for-revision commit)
+(define (submit-builds-for-revision commit systems-and-targets)
(simple-format #t "looking at revision ~A\n" commit)
- (for-each (lambda (derivation)
- (submit-build derivation #:priority 1000))
- (channel-instance-derivations-for-commit commit "x86_64-linux"))
-
- (let ((unprocessed-package-derivations
- (filter (lambda (derivation)
- (not (hash-ref processed-derivations-hash derivation)))
- (package-derivations-for-commit commit
- #:system "x86_64-linux"
- #:target "none"))))
-
- (for-each submit-build unprocessed-package-derivations)
- (record-derivations-as-processed unprocessed-package-derivations)))
+ (for-each
+ (match-lambda
+ ((system . target)
+ (for-each (lambda (derivation)
+ (submit-build derivation #:priority 1000))
+ (channel-instance-derivations-for-commit commit system))
+
+ (let ((unprocessed-package-derivations
+ (filter (lambda (derivation)
+ (not (hash-ref processed-derivations-hash derivation)))
+ (package-derivations-for-commit commit
+ #:system system
+ #:target target))))
+
+ (for-each submit-build unprocessed-package-derivations)
+ (record-derivations-as-processed unprocessed-package-derivations))))
+ systems-and-targets))
+
+(define %options
+ (list (option '("system") #t #f
+ (lambda (opt name arg result)
+ (peek "ARG" arg)
+ (alist-cons 'systems-and-targets
+ `((,arg . "none")
+ ,@(or (assq-ref result 'systems-and-targets) '()))
+ (alist-delete 'systems-and-targets result))))
+ (option '("system-and-target") #t #f
+ (lambda (opt name arg result)
+ (alist-cons 'systems-and-targets
+ (match (string-split arg #\=)
+ ((system target)
+ `((,system . ,target)
+ ,@(or (assq-ref result 'systems-and-targets) '()))))
+ (alist-delete 'systems-and-targets result))))))
+
+(define %option-defaults
+ '())
+
+(define (parse-options options defaults args)
+ (args-fold
+ args options
+ (lambda (opt name arg result)
+ (error "unrecognized option" name))
+ (lambda (arg result)
+ (alist-cons
+ 'arguments
+ (cons arg
+ (or (assoc-ref result 'arguments)
+ '()))
+ (alist-delete 'arguments result)))
+ defaults))
(define (main)
- (while #t
- (for-each (lambda (commit)
- (submit-builds-for-revision commit)
- (record-revision-as-processed commit))
- (unseen-revisions))
-
- (simple-format #t "waiting before checking for new revisions...\n")
- (sleep 60)))
+ (let* ((opts (parse-options %options
+ %option-defaults
+ (cdr (program-arguments))))
+ (systems-and-targets
+ (assq-ref opts 'systems-and-targets)))
+
+ (unless (peek systems-and-targets)
+ (simple-format (current-error-port)
+ "error: you must specify at least one system to fetch builds for\n")
+ (exit 1))
+
+ (while #t
+ (for-each (lambda (commit)
+ (submit-builds-for-revision commit systems-and-targets)
+ (record-revision-as-processed commit))
+ (unseen-revisions))
+
+ (simple-format #t "waiting before checking for new revisions...\n")
+ (sleep 60))))
(main)