summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Kost <alezost@gmail.com>2018-08-18 22:45:41 +0300
committerAlex Kost <alezost@gmail.com>2018-08-26 00:06:26 +0300
commit126374fd328e66299beee5875f7ea5437302f340 (patch)
tree16df5bc6a1c57b4dfb44ccb8da6a93ecbf2107ed
parenturl: Use nil for 'json-false' value (diff)
downloademacs-build-farm-126374fd328e66299beee5875f7ea5437302f340.tar.gz
Rename 'jobset' interface to 'hydra-jobset'
Cuirass and Hydra jobsets are completely different, so there will be a separate interface for Cuirass jobsets. * build-farm.el: Update Emacs requirement to 24.4 because 'subr-x' library is needed now. (build-farm-info-insert-jobset): Rename to... (build-farm-info-insert-hydra-jobset): ... this. * build-farm-build.el (build-farm-build-info-insert-jobset): Adjust accordingly. * build-farm-project.el (build-farm-project-info-insert-jobset): Likewise. * build-farm-url.el (build-farm-jobset-api-url): Rename to... (build-farm-hydra-jobset-api-url): ... this. * build-farm-jobset.el: Rename 'jobset' to 'hydra-jobset' everywhere.
-rw-r--r--build-farm-build.el2
-rw-r--r--build-farm-jobset.el118
-rw-r--r--build-farm-project.el5
-rw-r--r--build-farm-url.el21
-rw-r--r--build-farm.el4
5 files changed, 82 insertions, 68 deletions
diff --git a/build-farm-build.el b/build-farm-build.el
index 81bf4d4..927bcfd 100644
--- a/build-farm-build.el
+++ b/build-farm-build.el
@@ -341,7 +341,7 @@ It should be a '%s'-sequence.")
(defun build-farm-build-info-insert-jobset (jobset entry)
"Insert JOBSET for build ENTRY at point."
- (build-farm-info-insert-jobset
+ (build-farm-info-insert-hydra-jobset
(bui-entry-non-void-value entry 'project) jobset)
(bui-insert-indent)
(build-farm-build-info-insert-builds-button
diff --git a/build-farm-jobset.el b/build-farm-jobset.el
index 94ebae0..87cffdc 100644
--- a/build-farm-jobset.el
+++ b/build-farm-jobset.el
@@ -28,64 +28,75 @@
(require 'build-farm-build)
(require 'build-farm-url)
-(build-farm-define-entry-type jobset
- :search-types '((project . build-farm-jobset-api-url))
- :filters '(build-farm-jobset-filter-id)
+
+;;; Common for Hydra and Cuirass
+
+(defun build-farm-jobset-info-insert-url (entry)
+ "Insert URL for the jobset ENTRY."
+ (bui-insert-button (build-farm-jobset-url
+ :root-url (build-farm-current-url)
+ :jobset-id (bui-entry-id entry))
+ 'bui-url)
+ (bui-newline))
+
+
+;;; Hydra common
+
+(build-farm-define-entry-type hydra-jobset
+ :search-types '((project . build-farm-hydra-jobset-api-url))
+ :filters '(build-farm-hydra-jobset-filter-id)
:filter-names '((nrscheduled . scheduled)
(nrsucceeded . succeeded)
(nrfailed . failed)
(nrtotal . total)))
-(defun build-farm-jobset-id (project jobset)
+(defun build-farm-hydra-jobset-id (project jobset)
"Return jobset ID from PROJECT name and JOBSET name."
(concat project "/" jobset))
-
-;;; Filters for processing raw entries
-
-(defun build-farm-jobset-filter-id (entry)
+(defun build-farm-hydra-jobset-filter-id (entry)
"Add 'ID' parameter to 'jobset' ENTRY."
- (cons `(id . ,(build-farm-jobset-id
+ (cons `(id . ,(build-farm-hydra-jobset-id
(bui-entry-non-void-value entry 'project)
(bui-entry-non-void-value entry 'name)))
entry))
-;;; Jobset 'info'
+;;; Hydra Jobset 'info'
-(build-farm-define-interface jobset info
- :mode-name "Farm-Jobset-Info"
+(build-farm-define-interface hydra-jobset info
+ :mode-name "Hydra-Jobset-Info"
:buffer-name "*Farm Jobset Info*"
:format '((name nil (simple bui-info-heading))
nil
build-farm-jobset-info-insert-url
- (project format build-farm-jobset-info-insert-project)
- (scheduled format (format build-farm-jobset-info-scheduled))
- (succeeded format (format build-farm-jobset-info-succeeded))
- (failed format (format build-farm-jobset-info-failed))
- (total format (format build-farm-jobset-info-total))))
+ (project format build-farm-hydra-jobset-info-insert-project)
+ (scheduled format (format build-farm-hydra-jobset-info-scheduled))
+ (succeeded format (format build-farm-hydra-jobset-info-succeeded))
+ (failed format (format build-farm-hydra-jobset-info-failed))
+ (total format (format build-farm-hydra-jobset-info-total))))
-(defface build-farm-jobset-info-scheduled
+(defface build-farm-hydra-jobset-info-scheduled
'((t))
"Face used for the number of scheduled builds."
- :group 'build-farm-jobset-info-faces)
+ :group 'build-farm-hydra-jobset-info-faces)
-(defface build-farm-jobset-info-succeeded
+(defface build-farm-hydra-jobset-info-succeeded
'((t :inherit build-farm-build-status-succeeded))
"Face used for the number of succeeded builds."
- :group 'build-farm-jobset-info-faces)
+ :group 'build-farm-hydra-jobset-info-faces)
-(defface build-farm-jobset-info-failed
+(defface build-farm-hydra-jobset-info-failed
'((t :inherit build-farm-build-status-failed))
"Face used for the number of failed builds."
- :group 'build-farm-jobset-info-faces)
+ :group 'build-farm-hydra-jobset-info-faces)
-(defface build-farm-jobset-info-total
+(defface build-farm-hydra-jobset-info-total
'((t))
"Face used for the total number of builds."
- :group 'build-farm-jobset-info-faces)
+ :group 'build-farm-hydra-jobset-info-faces)
-(defun build-farm-jobset-info-insert-project (project entry)
+(defun build-farm-hydra-jobset-info-insert-project (project entry)
"Insert PROJECT button for the jobset ENTRY."
(let ((jobset (bui-entry-non-void-value entry 'name)))
(bui-insert-button project 'build-farm-project)
@@ -94,71 +105,63 @@
:project project
:jobset jobset)))
-(defun build-farm-jobset-info-insert-url (entry)
- "Insert URL for the jobset ENTRY."
- (bui-insert-button (build-farm-jobset-url
- :root-url (build-farm-current-url)
- :jobset-id (bui-entry-id entry))
- 'bui-url)
- (bui-newline))
-
-;;; Jobset 'list'
+;;; Hydra Jobset 'list'
-(build-farm-define-interface jobset list
+(build-farm-define-interface hydra-jobset list
:describe-function 'build-farm-list-describe
- :mode-name "Farm-Jobset-List"
+ :mode-name "Hydra-Jobset-List"
:buffer-name "*Farm Jobsets*"
- :format '((name build-farm-jobset-list-get-name 25 t)
+ :format '((name build-farm-hydra-jobset-list-get-name 25 t)
(project nil 10 t)
(scheduled nil 12 t)
(succeeded nil 12 t)
(failed nil 9 t)
(total nil 10 t))
- :hint 'build-farm-jobset-list-hint)
+ :hint 'build-farm-hydra-jobset-list-hint)
-(let ((map build-farm-jobset-list-mode-map))
- (define-key map (kbd "B") 'build-farm-jobset-list-latest-builds))
+(let ((map build-farm-hydra-jobset-list-mode-map))
+ (define-key map (kbd "B") 'build-farm-hydra-jobset-list-latest-builds))
-(defface build-farm-jobset-list-status-scheduled
+(defface build-farm-hydra-jobset-list-status-scheduled
'((t))
"Face used for a jobset name if there are scheduled jobs."
- :group 'build-farm-jobset-list-faces)
+ :group 'build-farm-hydra-jobset-list-faces)
-(defface build-farm-jobset-list-status-succeeded
+(defface build-farm-hydra-jobset-list-status-succeeded
'((t :inherit build-farm-build-status-succeeded))
"Face used for a jobset name if there are no failed or scheduled jobs."
- :group 'build-farm-jobset-list-faces)
+ :group 'build-farm-hydra-jobset-list-faces)
-(defface build-farm-jobset-list-status-failed
+(defface build-farm-hydra-jobset-list-status-failed
'((t :inherit build-farm-build-status-failed))
"Face used for a jobset name if there are failed jobs."
- :group 'build-farm-jobset-list-faces)
+ :group 'build-farm-hydra-jobset-list-faces)
-(defvar build-farm-jobset-list-default-hint
- '(("\\[build-farm-jobset-list-latest-builds]")
+(defvar build-farm-hydra-jobset-list-default-hint
+ '(("\\[build-farm-hydra-jobset-list-latest-builds]")
" show latest builds of the current jobset;\n"))
-(defun build-farm-jobset-list-hint ()
+(defun build-farm-hydra-jobset-list-hint ()
"Return hint string for a jobset-list buffer."
(bui-format-hints
- build-farm-jobset-list-default-hint
+ build-farm-hydra-jobset-list-default-hint
(bui-default-hint)))
-(defun build-farm-jobset-list-get-name (name entry)
+(defun build-farm-hydra-jobset-list-get-name (name entry)
"Return NAME of the jobset ENTRY.
Colorize it with an appropriate face if needed."
(bui-get-string
name
(cond ((> (bui-entry-value entry 'failed) 0)
- 'build-farm-jobset-list-status-failed)
+ 'build-farm-hydra-jobset-list-status-failed)
((> (bui-entry-value entry 'scheduled) 0)
- 'build-farm-jobset-list-status-scheduled)
+ 'build-farm-hydra-jobset-list-status-scheduled)
((= (bui-entry-value entry 'total)
(bui-entry-value entry 'succeeded))
- 'build-farm-jobset-list-status-succeeded))))
+ 'build-farm-hydra-jobset-list-status-succeeded))))
-(defun build-farm-jobset-list-latest-builds (number &rest args)
+(defun build-farm-hydra-jobset-list-latest-builds (number &rest args)
"Display latest NUMBER of builds of the current jobset.
Interactively, use `build-farm-number-of-builds' variable for
NUMBER. With prefix argument, prompt for it and for the other
@@ -178,7 +181,8 @@ ARGS."
(defun build-farm-jobsets (project)
"Display jobsets of PROJECT."
(interactive (list (build-farm-read-project)))
- (build-farm-get-display build-farm-url 'jobset 'project project))
+ (build-farm-get-display build-farm-url 'hydra-jobset
+ 'project project))
;; Info returned for multiple jobsets (from "api/jobsets") and for a
;; single jobset (from "jobset") are completely different! Compare:
diff --git a/build-farm-project.el b/build-farm-project.el
index 448aaf0..deb81fb 100644
--- a/build-farm-project.el
+++ b/build-farm-project.el
@@ -98,7 +98,7 @@
(defun build-farm-project-info-insert-jobset (project jobset)
"Insert info about JOBSET of the PROJECT at point."
- (build-farm-info-insert-jobset project jobset)
+ (build-farm-info-insert-hydra-jobset project jobset)
(bui-insert-indent)
(build-farm-build-info-insert-builds-button
:project project
@@ -158,7 +158,8 @@ Colorize it with an appropriate face if needed."
"Display jobsets of the current project."
(interactive)
(build-farm-get-display (build-farm-current-url)
- 'jobset 'project (bui-list-current-id)))
+ 'hydra-jobset
+ 'project (bui-list-current-id)))
(defun build-farm-project-list-latest-builds (number &rest args)
"Display latest NUMBER of builds of the current project.
diff --git a/build-farm-url.el b/build-farm-url.el
index 909be4c..b45ae81 100644
--- a/build-farm-url.el
+++ b/build-farm-url.el
@@ -26,6 +26,7 @@
(require 'url-expand)
(require 'json)
(require 'build-farm-utils)
+(eval-when-compile (require 'subr-x))
(defvar build-farm-url-alist
'(("https://hydra.nixos.org" . hydra)
@@ -150,17 +151,25 @@ See function `build-farm-url' for the meaning of ROOT-URL."
:root-url root-url))
(cl-defun build-farm-jobset-url (&key root-url project jobset jobset-id)
- "Return URL of a PROJECT's JOBSET.
-Above that, you should specify either a single JOBSET-ID
+ "Return URL of a build farm JOBSET.
+
+For Cuirass farm, you should not use PROJECT, so you can specify
+either JOBSET or JOBSET-ID.
+
+For Hydra farm, you should specify either a single JOBSET-ID
argument (it should have a form 'project/jobset') or PROJECT and
JOBSET arguments.
+
See function `build-farm-url' for the meaning of ROOT-URL."
(build-farm-url root-url "/jobset/"
- (or jobset-id
- (concat project "/" jobset))))
+ (if project
+ (concat project "/" jobset)
+ ;; JOBSET-ID for Cuirass contains leading "/".
+ (or (string-trim-left jobset-id "/")
+ jobset))))
-(cl-defun build-farm-jobset-api-url (project &key root-url)
- "Return API URL for jobsets by PROJECT.
+(cl-defun build-farm-hydra-jobset-api-url (project &key root-url)
+ "Return API URL for Hydra jobsets by PROJECT.
See function `build-farm-url' for the meaning of ROOT-URL."
(build-farm-api-url
"jobsets"
diff --git a/build-farm.el b/build-farm.el
index 8618622..8e74e8b 100644
--- a/build-farm.el
+++ b/build-farm.el
@@ -6,7 +6,7 @@
;; Version: 0.1
;; URL: https://gitlab.com/alezost-emacs/build-farm
;; Keywords: tools
-;; Package-Requires: ((emacs "24.3") (bui "1.1.0") (magit-popup "2.1.0"))
+;; Package-Requires: ((emacs "24.4") (bui "1.1.0") (magit-popup "2.1.0"))
;; 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
@@ -111,7 +111,7 @@
:supertype 'bui-url
'face 'build-farm-info-jobset)
-(defun build-farm-info-insert-jobset (project jobset)
+(defun build-farm-info-insert-hydra-jobset (project jobset)
"Insert info about JOBSET of the PROJECT at point."
(let ((url (build-farm-jobset-url
:root-url (build-farm-current-url)