;;; Guix QA Frontpage ;;; ;;; Copyright © 2022 Christopher Baines ;;; ;;; This program is free software: you can redistribute it and/or ;;; modify it under the terms of the GNU Affero General Public License ;;; as published by the Free Software Foundation, either version 3 of ;;; the License, or (at your option) any later version. ;;; ;;; This program is distributed in the hope that it will be useful, ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;;; Affero General Public License for more details. ;;; ;;; You should have received a copy of the GNU Affero General Public ;;; License along with this program. If not, see ;;; . (define-module (guix-qa-frontpage mumi) #:use-module (srfi srfi-1) #:use-module (ice-9 match) #:use-module (kolam http) #:use-module ((guix-data-service utils) #:select (chunk-for-each!)) #:export (mumi-issue-tags mumi-issue-open? mumi-bulk-issues)) (define (mumi-issue-tags number) (with-exception-handler (lambda (exn) (simple-format (current-error-port) "exception when fetching issue tags: ~A\n" exn) #f) (lambda () (let ((response (graphql-http-get "https://issues.guix.gnu.org/graphql" `(document (query (#(issue #:number ,number) tags)))))) (vector->list (assoc-ref (cdr (first response)) "tags")))) #:unwind? #t)) (define (mumi-issue-open? number) (let ((response (graphql-http-get "https://issues.guix.gnu.org/graphql" `(document (query (#(issue #:number ,number) open)))))) (assoc-ref (cdr (first response)) "open"))) (define (mumi-bulk-issues numbers) (let ((number-to-data (make-hash-table))) (chunk-for-each! (lambda (chunk) (let ((response (graphql-http-get "https://issues.guix.gnu.org/graphql" `(document ,@(map (lambda (number) `(query (#(issue #:number ,number) number title open severity tags))) chunk))))) (for-each (lambda (res) (let ((data (cdr res))) (hash-set! number-to-data (assoc-ref data "number") `((title . ,(assoc-ref data "title")) (open? . ,(assoc-ref data "open")) (tags . ,(vector->list (assoc-ref data "tags"))) (severity . ,(assoc-ref data "severity")))))) response))) 30 (list-copy numbers)) (map (lambda (number) (hash-ref number-to-data number)) numbers)))