summary refs log tree commit diff
path: root/emacs/guix-hydra-build.el
diff options
context:
space:
mode:
Diffstat (limited to 'emacs/guix-hydra-build.el')
-rw-r--r--emacs/guix-hydra-build.el362
1 files changed, 0 insertions, 362 deletions
diff --git a/emacs/guix-hydra-build.el b/emacs/guix-hydra-build.el
deleted file mode 100644
index 232221e773..0000000000
--- a/emacs/guix-hydra-build.el
+++ /dev/null
@@ -1,362 +0,0 @@
-;;; guix-hydra-build.el --- Interface for Hydra builds  -*- lexical-binding: t -*-
-
-;; Copyright © 2015 Alex Kost <alezost@gmail.com>
-
-;; This file is part of GNU Guix.
-
-;; GNU Guix is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Guix 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 General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; This file provides an interface for displaying Hydra builds in
-;; 'list' and 'info' buffers.
-
-;;; Code:
-
-(require 'cl-lib)
-(require 'guix-buffer)
-(require 'guix-list)
-(require 'guix-info)
-(require 'guix-hydra)
-(require 'guix-build-log)
-(require 'guix-utils)
-
-(guix-hydra-define-entry-type hydra-build
-  :search-types '((latest . guix-hydra-build-latest-api-url)
-                  (queue  . guix-hydra-build-queue-api-url))
-  :filters '(guix-hydra-build-filter-status)
-  :filter-names '((nixname . name)
-                  (buildstatus . build-status)
-                  (timestamp . time))
-  :filter-boolean-params '(finished busy))
-
-(defun guix-hydra-build-get-display (search-type &rest args)
-  "Search for Hydra builds and show results."
-  (apply #'guix-list-get-display-entries
-         'hydra-build search-type args))
-
-(cl-defun guix-hydra-build-latest-prompt-args (&key project jobset
-                                                    job system)
-  "Prompt for and return a list of 'latest builds' arguments."
-  (let* ((number      (read-number "Number of latest builds: "))
-         (project     (if current-prefix-arg
-                          (guix-hydra-read-project nil project)
-                        project))
-         (jobset      (if current-prefix-arg
-                          (guix-hydra-read-jobset nil jobset)
-                        jobset))
-         (job-or-name (if current-prefix-arg
-                          (guix-hydra-read-job nil job)
-                        job))
-         (job         (and job-or-name
-                           (string-match-p guix-hydra-job-regexp
-                                           job-or-name)
-                           job-or-name))
-         (system      (if (and (not job)
-                               (or current-prefix-arg
-                                   (and job-or-name (not system))))
-                          (if job-or-name
-                              (guix-while-null
-                                (guix-hydra-read-system
-                                 (concat job-or-name ".") system))
-                            (guix-hydra-read-system nil system))
-                        system))
-         (job         (or job
-                          (and job-or-name
-                               (concat job-or-name "." system)))))
-    (list number
-          :project project
-          :jobset  jobset
-          :job     job
-          :system  system)))
-
-(defun guix-hydra-build-view-log (id)
-  "View build log of a hydra build ID."
-  (guix-build-log-find-file (guix-hydra-build-log-url id)))
-
-
-;;; Defining URLs
-
-(defun guix-hydra-build-url (id)
-  "Return Hydra URL of a build ID."
-  (guix-hydra-url "build/" (number-to-string id)))
-
-(defun guix-hydra-build-log-url (id)
-  "Return Hydra URL of the log file of a build ID."
-  (concat (guix-hydra-build-url id) "/log/raw"))
-
-(cl-defun guix-hydra-build-latest-api-url
-    (number &key project jobset job system)
-  "Return Hydra API URL to receive latest NUMBER of builds."
-  (guix-hydra-api-url "latestbuilds"
-    `(("nr" . ,number)
-      ("project" . ,project)
-      ("jobset" . ,jobset)
-      ("job" . ,job)
-      ("system" . ,system))))
-
-(defun guix-hydra-build-queue-api-url (number)
-  "Return Hydra API URL to receive the NUMBER of queued builds."
-  (guix-hydra-api-url "queue"
-    `(("nr" . ,number))))
-
-
-;;; Filters for processing raw entries
-
-(defun guix-hydra-build-filter-status (entry)
-  "Add 'status' parameter to 'hydra-build' ENTRY."
-  (let ((status (if (guix-entry-value entry 'finished)
-                    (guix-hydra-build-status-number->name
-                     (guix-entry-value entry 'build-status))
-                  (if (guix-entry-value entry 'busy)
-                      'running
-                    'scheduled))))
-    (cons `(status . ,status)
-          entry)))
-
-
-;;; Build status
-
-(defface guix-hydra-build-status-running
-  '((t :inherit bold))
-  "Face used if hydra build is not finished."
-  :group 'guix-hydra-build-faces)
-
-(defface guix-hydra-build-status-scheduled
-  '((t))
-  "Face used if hydra build is scheduled."
-  :group 'guix-hydra-build-faces)
-
-(defface guix-hydra-build-status-succeeded
-  '((t :inherit success))
-  "Face used if hydra build succeeded."
-  :group 'guix-hydra-build-faces)
-
-(defface guix-hydra-build-status-cancelled
-  '((t :inherit warning))
-  "Face used if hydra build was cancelled."
-  :group 'guix-hydra-build-faces)
-
-(defface guix-hydra-build-status-failed
-  '((t :inherit error))
-  "Face used if hydra build failed."
-  :group 'guix-hydra-build-faces)
-
-(defvar guix-hydra-build-status-alist
-  '((0 . succeeded)
-    (1 . failed-build)
-    (2 . failed-dependency)
-    (3 . failed-other)
-    (4 . cancelled))
-  "Alist of hydra build status numbers and status names.
-Status numbers are returned by Hydra API, names (symbols) are
-used internally by the elisp code of this package.")
-
-(defun guix-hydra-build-status-number->name (number)
-  "Convert build status number to a name.
-See `guix-hydra-build-status-alist'."
-  (guix-assq-value guix-hydra-build-status-alist number))
-
-(defun guix-hydra-build-status-string (status)
-  "Return a human readable string for build STATUS."
-  (cl-case status
-    (scheduled
-     (guix-get-string "Scheduled" 'guix-hydra-build-status-scheduled))
-    (running
-     (guix-get-string "Running" 'guix-hydra-build-status-running))
-    (succeeded
-     (guix-get-string "Succeeded" 'guix-hydra-build-status-succeeded))
-    (cancelled
-     (guix-get-string "Cancelled" 'guix-hydra-build-status-cancelled))
-    (failed-build
-     (guix-hydra-build-status-fail-string))
-    (failed-dependency
-     (guix-hydra-build-status-fail-string "dependency"))
-    (failed-other
-     (guix-hydra-build-status-fail-string "other"))))
-
-(defun guix-hydra-build-status-fail-string (&optional reason)
-  "Return a string for a failed build."
-  (let ((base (guix-get-string "Failed" 'guix-hydra-build-status-failed)))
-    (if reason
-        (concat base " (" reason ")")
-      base)))
-
-(defun guix-hydra-build-finished? (entry)
-  "Return non-nil, if hydra build was finished."
-  (guix-entry-value entry 'finished))
-
-(defun guix-hydra-build-running? (entry)
-  "Return non-nil, if hydra build is running."
-  (eq (guix-entry-value entry 'status)
-      'running))
-
-(defun guix-hydra-build-scheduled? (entry)
-  "Return non-nil, if hydra build is scheduled."
-  (eq (guix-entry-value entry 'status)
-      'scheduled))
-
-(defun guix-hydra-build-succeeded? (entry)
-  "Return non-nil, if hydra build succeeded."
-  (eq (guix-entry-value entry 'status)
-      'succeeded))
-
-(defun guix-hydra-build-cancelled? (entry)
-  "Return non-nil, if hydra build was cancelled."
-  (eq (guix-entry-value entry 'status)
-      'cancelled))
-
-(defun guix-hydra-build-failed? (entry)
-  "Return non-nil, if hydra build failed."
-  (memq (guix-entry-value entry 'status)
-        '(failed-build failed-dependency failed-other)))
-
-
-;;; Hydra build 'info'
-
-(guix-hydra-info-define-interface hydra-build
-  :mode-name "Hydra-Build-Info"
-  :buffer-name "*Guix Hydra Build Info*"
-  :format '((name ignore (simple guix-info-heading))
-            ignore
-            guix-hydra-build-info-insert-url
-            (time     format (time))
-            (status   format guix-hydra-build-info-insert-status)
-            (project  format (format guix-hydra-build-project))
-            (jobset   format (format guix-hydra-build-jobset))
-            (job      format (format guix-hydra-build-job))
-            (system   format (format guix-hydra-build-system))
-            (priority format (format))))
-
-(defface guix-hydra-build-info-project
-  '((t :inherit link))
-  "Face for project names."
-  :group 'guix-hydra-build-info-faces)
-
-(defface guix-hydra-build-info-jobset
-  '((t :inherit link))
-  "Face for jobsets."
-  :group 'guix-hydra-build-info-faces)
-
-(defface guix-hydra-build-info-job
-  '((t :inherit link))
-  "Face for jobs."
-  :group 'guix-hydra-build-info-faces)
-
-(defface guix-hydra-build-info-system
-  '((t :inherit link))
-  "Face for system names."
-  :group 'guix-hydra-build-info-faces)
-
-(defmacro guix-hydra-build-define-button (name)
-  "Define `guix-hydra-build-NAME' button."
-  (let* ((name-str    (symbol-name name))
-         (button-name (intern (concat "guix-hydra-build-" name-str)))
-         (face-name   (intern (concat "guix-hydra-build-info-" name-str)))
-         (keyword     (intern (concat ":" name-str))))
-    `(define-button-type ',button-name
-       :supertype 'guix
-       'face ',face-name
-       'help-echo ,(format "\
-Show latest builds for this %s (with prefix, prompt for all parameters)"
-                           name-str)
-       'action (lambda (btn)
-                 (let ((args (guix-hydra-build-latest-prompt-args
-                              ,keyword (button-label btn))))
-                   (apply #'guix-hydra-build-get-display
-                          'latest args))))))
-
-(guix-hydra-build-define-button project)
-(guix-hydra-build-define-button jobset)
-(guix-hydra-build-define-button job)
-(guix-hydra-build-define-button system)
-
-(defun guix-hydra-build-info-insert-url (entry)
-  "Insert Hydra URL for the build ENTRY."
-  (guix-insert-button (guix-hydra-build-url (guix-entry-id entry))
-                      'guix-url)
-  (when (guix-hydra-build-finished? entry)
-    (guix-info-insert-indent)
-    (guix-info-insert-action-button
-     "Build log"
-     (lambda (btn)
-       (guix-hydra-build-view-log (button-get btn 'id)))
-     "View build log"
-     'id (guix-entry-id entry))))
-
-(defun guix-hydra-build-info-insert-status (status &optional _)
-  "Insert a string with build STATUS."
-  (insert (guix-hydra-build-status-string status)))
-
-
-;;; Hydra build 'list'
-
-(guix-hydra-list-define-interface hydra-build
-  :mode-name "Hydra-Build-List"
-  :buffer-name "*Guix Hydra Build List*"
-  :format '((name nil 30 t)
-            (system nil 16 t)
-            (status guix-hydra-build-list-get-status 20 t)
-            (project nil 10 t)
-            (jobset nil 17 t)
-            (time guix-list-get-time 20 t)))
-
-(let ((map guix-hydra-build-list-mode-map))
-  (define-key map (kbd "B") 'guix-hydra-build-list-latest-builds)
-  (define-key map (kbd "L") 'guix-hydra-build-list-view-log))
-
-(defun guix-hydra-build-list-get-status (status &optional _)
-  "Return a string for build STATUS."
-  (guix-hydra-build-status-string status))
-
-(defun guix-hydra-build-list-latest-builds (number &rest args)
-  "Display latest NUMBER of Hydra builds of the current job.
-Interactively, prompt for NUMBER.  With prefix argument, prompt
-for all ARGS."
-  (interactive
-   (let ((entry (guix-list-current-entry)))
-     (guix-hydra-build-latest-prompt-args
-      :project (guix-entry-value entry 'project)
-      :jobset  (guix-entry-value entry 'name)
-      :job     (guix-entry-value entry 'job)
-      :system  (guix-entry-value entry 'system))))
-  (apply #'guix-hydra-latest-builds number args))
-
-(defun guix-hydra-build-list-view-log ()
-  "View build log of the current Hydra build."
-  (interactive)
-  (guix-hydra-build-view-log (guix-list-current-id)))
-
-
-;;; Interactive commands
-
-;;;###autoload
-(defun guix-hydra-latest-builds (number &rest args)
-  "Display latest NUMBER of Hydra builds.
-ARGS are the same arguments as for `guix-hydra-build-latest-api-url'.
-Interactively, prompt for NUMBER.  With prefix argument, prompt
-for all ARGS."
-  (interactive (guix-hydra-build-latest-prompt-args))
-  (apply #'guix-hydra-build-get-display
-         'latest number args))
-
-;;;###autoload
-(defun guix-hydra-queued-builds (number)
-  "Display the NUMBER of queued Hydra builds."
-  (interactive "NNumber of queued builds: ")
-  (guix-hydra-build-get-display 'queue number))
-
-(provide 'guix-hydra-build)
-
-;;; guix-hydra-build.el ends here