diff options
| author | Alex Kost <alezost@gmail.com> | 2018-08-25 23:58:49 +0300 |
|---|---|---|
| committer | Alex Kost <alezost@gmail.com> | 2018-08-26 00:06:26 +0300 |
| commit | 8834f4617cc084bb5c4b09569bcc06f5dfa301d3 (patch) | |
| tree | c9086ad345a9ecddafcd431983210d89507819da | |
| parent | jobset: Add ID parameter if it is missing (diff) | |
| download | emacs-build-farm-8834f4617cc084bb5c4b09569bcc06f5dfa301d3.tar.gz | |
Add interface for Cuirass evaluations
* build-farm-url.el (build-farm-evaluation-url)
(build-farm-latest-evaluations-api-url): New procedures.
* build-farm-evaluation.el: New file.
(build-farm-latest-evaluations): New command.
* build-farm-popup.el (build-farm-popup): Add sub-popup for evaluations.
(build-farm-evaluation-popup-maybe)
(build-farm-popup-format-number-of-evaluations)
(build-farm-popup-latest-evaluations): New procedures.
| -rw-r--r-- | README.org | 5 | ||||
| -rw-r--r-- | build-farm-evaluation.el | 119 | ||||
| -rw-r--r-- | build-farm-popup.el | 64 | ||||
| -rw-r--r-- | build-farm-url.el | 16 | ||||
| -rw-r--r-- | build-farm.el | 3 |
5 files changed, 190 insertions, 17 deletions
@@ -7,8 +7,8 @@ farms for [[https://nixos.org/nix/][Nix]] and [[https://www.gnu.org/software/gui | [[https://hydra.gnu.org]] | Hydra for Guix | | [[https://berlin.guixsd.org]] | Cuirass for Guix | -This package allows you to look at builds, jobsets and projects of these -build farms. +This package allows you to look at builds, jobsets, evaluations and +projects of these build farms. * Usage @@ -21,6 +21,7 @@ Alternatively, you can use the following =M-x= commands directly: - =build-farm-projects= - =build-farm-project= - =build-farm-jobsets= +- =build-farm-latest-evaluations= - =build-farm-latest-builds= - =build-farm-queued-builds= - =build-farm-build= diff --git a/build-farm-evaluation.el b/build-farm-evaluation.el new file mode 100644 index 0000000..6124664 --- /dev/null +++ b/build-farm-evaluation.el @@ -0,0 +1,119 @@ +;;; build-farm-evaluation.el --- Interface for evaluations -*- lexical-binding: t -*- + +;; Copyright © 2018 Alex Kost <alezost@gmail.com> + +;; This program 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. +;; +;; 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 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 jobset evaluations of +;; a build farm in 'list' and 'info' buffers. + +;;; Code: + +(require 'bui) +(require 'build-farm) +(require 'build-farm-url) +(require 'build-farm-build) + +(defgroup build-farm-evaluation nil + "Interface for Hydra and Cuirass evaluations." + :group 'build-farm) + +(defcustom build-farm-number-of-evaluations 32 + "Default number of latest evaluations to display. +This variable is used by '\\[build-farm-latest-evaluations]' +command. If nil, always prompt for the number of evaluations." + :type 'integer + :group 'build-farm-evaluation) + +(defun build-farm-set-number-of-evaluations (number) + "Set `build-farm-number-of-evaluations' to NUMBER." + (interactive (list (build-farm-evaluation-read-number))) + (setq build-farm-number-of-evaluations number)) + +(defun build-farm-evaluation-read-number (&optional prompt) + "Read from minibuffer (using PROMPT) a number of evaluations." + (read-number (or prompt "Number of evaluations: ") + build-farm-number-of-evaluations)) + +(defun build-farm-evaluation-info-insert-id (id) + "Insert title for evaluation ID at point." + (bui-format-insert + (concat "Evaluation " (number-to-string id)) + 'bui-info-heading)) + +(defun build-farm-evaluation-info-insert-url (entry) + "Insert URL for the evaluation ENTRY at point." + (bui-insert-button (build-farm-evaluation-url + :root-url (build-farm-current-url) + :evaluation (bui-entry-id entry)) + 'bui-url) + (bui-newline)) + + +;;; Cuirass common + +(build-farm-define-entry-type cuirass-evaluation + :search-types '((latest . build-farm-latest-evaluations-api-url)) + :filter-names '((specification . jobset))) + + +;;; Cuirass Evaluation 'info' + +(build-farm-define-interface cuirass-evaluation info + :mode-name "Cuirass-Evaluation-Info" + :buffer-name "*Farm Evaluation Info*" + :format '((id nil (build-farm-evaluation-info-insert-id)) + nil + build-farm-evaluation-info-insert-url + nil + (jobset format (build-farm-cuirass-evaluation-info-insert-jobset)) + (commits format (format)))) + +(defun build-farm-cuirass-evaluation-info-insert-jobset (jobset) + "Insert info about Cuirass JOBSET at point." + (build-farm-info-insert-cuirass-jobset jobset) + (bui-insert-indent) + (build-farm-build-info-insert-builds-button + :jobset jobset)) + + +;;; Cuirass Evaluation 'list' + +(build-farm-define-interface cuirass-evaluation list + :describe-function 'build-farm-list-describe + :mode-name "Cuirass-Evaluation-List" + :buffer-name "*Farm Evaluations*" + :format '((id nil 10 bui-list-sort-numerically-0) + (jobset nil 30 t) + (commits nil 30 t))) + + +;;; Interactive commands + +;;;###autoload +(defun build-farm-latest-evaluations (number) + "Display latest NUMBER of evaluations. +Interactively, use `build-farm-number-of-builds' variable for +NUMBER. With prefix argument, prompt for it." + (interactive (list (build-farm-evaluation-read-number))) + (if (eq 'hydra (build-farm-url-type)) + (error "Hydra API does not support latest evaluations") + (build-farm-get-display build-farm-url + 'cuirass-evaluation 'latest number))) + +(provide 'build-farm-evaluation) + +;;; build-farm-evaluation.el ends here diff --git a/build-farm-popup.el b/build-farm-popup.el index 61dd933..b5b5b5b 100644 --- a/build-farm-popup.el +++ b/build-farm-popup.el @@ -26,6 +26,7 @@ (require 'magit-popup) (require 'build-farm-url) (require 'build-farm-build) +(require 'build-farm-evaluation) (defgroup build-farm-popup nil "Variables for popup interface for build farm commands." @@ -40,12 +41,38 @@ build-farm-popup-format-url)) :actions '((?p "projects" build-farm-projects) (?j "jobsets" build-farm-jobsets) - (?b "builds" build-farm-build-popup))) + (?b "builds" build-farm-build-popup) + (?e "evaluations" build-farm-evaluation-popup-maybe))) ;;;###autoload (defalias 'build-farm #'build-farm-popup "Popup interface for the available build farm commands.") +(defun build-farm-popup-variable-value (var-name) + "Return string formatted for popup buffer. +String is made of variable VAR-NAME and its value." + (concat (propertize (symbol-name var-name) + 'face font-lock-variable-name-face) + " " + (propertize (prin1-to-string (symbol-value var-name)) + 'face 'magit-popup-option-value))) + +(defun build-farm-popup-format-url () + "Return URL string, formatted for '\\[build-farm]'." + (build-farm-popup-variable-value 'build-farm-url)) + +(defun build-farm-evaluation-popup-maybe (&optional arg) + "Display popup for evaluations if it is supported. +ARG is passed to `build-farm-evaluation-popup'." + (interactive "P") + (if (eq 'hydra (build-farm-url-type)) + (error "Sorry, Hydra evaluations are not supported because of +<https://github.com/NixOS/hydra/issues/582>") + (build-farm-evaluation-popup arg))) + + +;;; Builds + (magit-define-popup build-farm-build-popup "Show popup buffer for builds." 'build-farm-popup @@ -78,19 +105,6 @@ See `completing-read' for PROMPT and INITIAL-INPUT." (magit-popup-get-args)) :project))) -(defun build-farm-popup-variable-value (var-name) - "Return string formatted for popup buffer. -String is made of variable VAR-NAME and its value." - (concat (propertize (symbol-name var-name) - 'face font-lock-variable-name-face) - " " - (propertize (prin1-to-string (symbol-value var-name)) - 'face 'magit-popup-option-value))) - -(defun build-farm-popup-format-url () - "Return URL string, formatted for '\\[build-farm]'." - (build-farm-popup-variable-value 'build-farm-url)) - (defun build-farm-popup-format-number-of-builds () "Return number of builds, formatted for '\\[build-farm-build-popup]'." (build-farm-popup-variable-value 'build-farm-number-of-builds)) @@ -122,6 +136,28 @@ ARGS are read from the current popup buffer." (interactive) (build-farm-queued-builds build-farm-number-of-builds)) + +;;; Evaluations + +(magit-define-popup build-farm-evaluation-popup + "Show popup buffer for evaluations." + 'build-farm-popup + :variables '((?n "number" + build-farm-set-number-of-evaluations + build-farm-popup-format-number-of-evaluations)) + :actions '((?l "latest" build-farm-popup-latest-evaluations))) + +(defun build-farm-popup-format-number-of-evaluations () + "Return number of evaluations for '\\[build-farm-evaluation-popup]'." + (build-farm-popup-variable-value 'build-farm-number-of-evaluations)) + +(defun build-farm-popup-latest-evaluations () + "Display `build-farm-number-of-evaluations' of latest evaluations." + (interactive) + (build-farm-latest-evaluations + (or build-farm-number-of-evaluations + (build-farm-evaluation-read-number)))) + (provide 'build-farm-popup) ;;; build-farm-popup.el ends here diff --git a/build-farm-url.el b/build-farm-url.el index f660041..787b331 100644 --- a/build-farm-url.el +++ b/build-farm-url.el @@ -190,6 +190,22 @@ See function `build-farm-url' for the meaning of ROOT-URL." (build-farm-url root-url "project/" project) (build-farm-url root-url))) +(cl-defun build-farm-evaluation-url (&key root-url evaluation) + "Return URL with build farm EVALUATION (number or string). +See function `build-farm-url' for the meaning of ROOT-URL." + (build-farm-url root-url "eval/" + (if (stringp evaluation) + evaluation + (number-to-string evaluation)))) + +(cl-defun build-farm-latest-evaluations-api-url (number &key root-url) + "Return API URL to receive the NUMBER of latest evaluations. +See function `build-farm-url' for the meaning of ROOT-URL." + (build-farm-api-url + "evaluations" + `(("nr" . ,number)) + :root-url root-url)) + ;;; Receiving data from a build farm diff --git a/build-farm.el b/build-farm.el index c3df0a5..089b29c 100644 --- a/build-farm.el +++ b/build-farm.el @@ -35,7 +35,7 @@ ;; The entry point for the available features is "M-x build-farm". It ;; provides a Magit-like interface for the commands to display builds, -;; jobsets and projects. +;; jobsets, evaluations and projects. ;; Alternatively, you can use the following M-x commands directly: ;; @@ -45,6 +45,7 @@ ;; - `build-farm-jobsets' ;; - `build-farm-projects' ;; - `build-farm-project' +;; - `build-farm-latest-evaluations' ;; You can press RET in a list (of builds, etc.) to see more info on the ;; current entry. You can also select several entries in the list (with |
