aboutsummaryrefslogtreecommitdiff
path: root/gnu/services/cuirass.scm
diff options
context:
space:
mode:
authorMathieu Lirzin <mthl@gnu.org>2016-10-23 15:14:18 +0200
committerMathieu Lirzin <mthl@gnu.org>2016-11-29 23:13:11 +0100
commita7cf4eb6d99838606d8ecfa776f7e4920dfbb7f5 (patch)
tree84a221a50be1e32b776f3d98559f30f5b2e7dea1 /gnu/services/cuirass.scm
parent365de1e7a5b37f9fd88cd964cc7d47f6f729d053 (diff)
downloadpatches-a7cf4eb6d99838606d8ecfa776f7e4920dfbb7f5.tar
patches-a7cf4eb6d99838606d8ecfa776f7e4920dfbb7f5.tar.gz
services: Add 'cuirass-service'.
* gnu/services/cuirass.scm: New file. * gnu/local.mk (GNU_SYSTEM_MODULES): Add it. * doc/guix.texi (Continuous integration): New node.
Diffstat (limited to 'gnu/services/cuirass.scm')
-rw-r--r--gnu/services/cuirass.scm115
1 files changed, 115 insertions, 0 deletions
diff --git a/gnu/services/cuirass.scm b/gnu/services/cuirass.scm
new file mode 100644
index 0000000000..d843c07335
--- /dev/null
+++ b/gnu/services/cuirass.scm
@@ -0,0 +1,115 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 Mathieu Lirzin <mthl@gnu.org>
+;;;
+;;; 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 GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu services cuirass)
+ #:use-module (guix gexp)
+ #:use-module (guix records)
+ #:use-module (gnu packages admin)
+ #:autoload (gnu packages ci) (cuirass)
+ #:use-module (gnu services)
+ #:use-module (gnu services base)
+ #:use-module (gnu services shepherd)
+ #:use-module (gnu system shadow)
+ #:export (<cuirass-configuration>
+ cuirass-configuration
+ cuirass-configuration?
+
+ cuirass-service-type
+ cuirass-service))
+
+;;;; Commentary:
+;;;
+;;; This module implements a service that to run instances of Cuirass, a
+;;; continuous integration tool.
+;;;
+;;;; Code:
+
+(define-record-type* <cuirass-configuration>
+ cuirass-configuration make-cuirass-configuration
+ cuirass-configuration?
+ (cache-directory cuirass-configuration-cache-directory ;string (dir-name)
+ (default ""))
+ (user cuirass-configuration-user ;string
+ (default "cuirass"))
+ (group cuirass-configuration-group ;string
+ (default "cuirass"))
+ (interval cuirass-configuration-interval ;integer (seconds)
+ (default 60))
+ (database cuirass-configuration-database ;string (file-name)
+ (default "/var/run/cuirass/cuirass.db"))
+ (specifications cuirass-configuration-specifications ;string (file-name)
+ (default ""))
+ (use-substitutes? cuirass-configuration-use-substitutes? ;boolean
+ (default #f))
+ (one-shot? cuirass-configuration-one-shot? ;boolean
+ (default #f)))
+
+(define (cuirass-shepherd-service config)
+ "Return a <shepherd-service> for the Cuirass service with CONFIG."
+ (and
+ (cuirass-configuration? config)
+ (let ((cache-directory (cuirass-configuration-cache-directory config))
+ (interval (cuirass-configuration-interval config))
+ (database (cuirass-configuration-database config))
+ (specifications (cuirass-configuration-specifications config))
+ (use-substitutes? (cuirass-configuration-use-substitutes? config))
+ (one-shot? (cuirass-configuration-one-shot? config)))
+ (list (shepherd-service
+ (documentation "Run Cuirass.")
+ (provision '(cuirass))
+ (requirement '(guix-daemon))
+ (start #~(make-forkexec-constructor
+ (list (string-append #$cuirass "/bin/cuirass")
+ #$@(if (string=? "" cache-directory)
+ '()
+ (list "--cache-directory" cache-directory))
+ #$@(if (string=? "" specifications)
+ '()
+ (list "--specifications" specifications))
+ "--database" #$database
+ "--interval" #$(number->string interval)
+ #$@(if use-substitutes? '("--use-substitutes") '())
+ #$@(if one-shot? '("--one-shot") '()))))
+ (stop #~(make-kill-destructor)))))))
+
+(define (cuirass-account config)
+ "Return the user accounts and user groups for CONFIG."
+ (let ((cuirass-user (cuirass-configuration-user config))
+ (cuirass-group (cuirass-configuration-group config)))
+ (list (user-group
+ (name cuirass-group)
+ (system? #t))
+ (user-account
+ (name cuirass-user)
+ (group cuirass-group)
+ (system? #t)
+ (comment "Cuirass privilege separation user")
+ (home-directory (string-append "/var/run/" cuirass-user))
+ (shell #~(string-append #$shadow "/sbin/nologin"))))))
+
+(define cuirass-service-type
+ (service-type
+ (name 'cuirass)
+ (extensions
+ (list
+ (service-extension shepherd-root-service-type cuirass-shepherd-service)
+ (service-extension account-service-type cuirass-account)))))
+
+(define* (cuirass-service #:key (config (cuirass-configuration)))
+ "Return a service that runs cuirass according to CONFIG."
+ (service cuirass-service-type config))