summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/guix.texi94
-rw-r--r--gnu/services/version-control.scm179
-rw-r--r--gnu/tests/version-control.scm114
3 files changed, 2 insertions, 385 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index 94bb0ec4e1..e1046eb512 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -21028,100 +21028,6 @@ could instantiate a cgit service like this:
(cgitrc "")))
@end example
-@subsubheading Gitolite Service
-
-@cindex Gitolite service
-@cindex Git, hosting
-@uref{http://gitolite.com/gitolite/, Gitolite} is a tool for hosting Git
-repositories on a central server.
-
-Gitolite can handle multiple repositories and users, and supports flexible
-configuration of the permissions for the users on the repositories.
-
-The following example will configure Gitolite using the default @code{git}
-user, and the provided SSH public key.
-
-@example
-(service gitolite-service-type
- (gitolite-configuration
- (admin-pubkey (plain-file
- "yourname.pub"
- "ssh-rsa AAAA... guix@@example.com"))))
-@end example
-
-Gitolite is configured through a special admin repository which you can clone,
-for example, if you setup Gitolite on @code{example.com}, you would run the
-following command to clone the admin repository.
-
-@example
-git clone git@@example.com:gitolite-admin
-@end example
-
-When the Gitolite service is activated, the provided @code{admin-pubkey} will
-be inserted in to the @file{keydir} directory in the gitolite-admin
-repository. If this results in a change in the repository, it will be
-committed using the message ``gitolite setup by GNU Guix''.
-
-@deftp {Data Type} gitolite-configuration
-Data type representing the configuration for @code{gitolite-service-type}.
-
-@table @asis
-@item @code{package} (default: @var{gitolite})
-Gitolite package to use.
-
-@item @code{user} (default: @var{git})
-User to use for Gitolite. This will be user that you use when accessing
-Gitolite over SSH.
-
-@item @code{group} (default: @var{git})
-Group to use for Gitolite.
-
-@item @code{home-directory} (default: @var{"/var/lib/gitolite"})
-Directory in which to store the Gitolite configuration and repositories.
-
-@item @code{rc-file} (default: @var{(gitolite-rc-file)})
-A ``file-like'' object (@pxref{G-Expressions, file-like objects}),
-representing the configuration for Gitolite.
-
-@item @code{admin-pubkey} (default: @var{#f})
-A ``file-like'' object (@pxref{G-Expressions, file-like objects}) used to
-setup Gitolite. This will be inserted in to the @file{keydir} directory
-within the gitolite-admin repository.
-
-To specify the SSH key as a string, use the @code{plain-file} function.
-
-@example
-(plain-file "yourname.pub" "ssh-rsa AAAA... guix@@example.com")
-@end example
-
-@end table
-@end deftp
-
-@deftp {Data Type} gitolite-rc-file
-Data type representing the Gitolite RC file.
-
-@table @asis
-@item @code{umask} (default: @code{#o0077})
-This controls the permissions Gitolite sets on the repositories and their
-contents.
-
-A value like @code{#o0027} will give read access to the group used by Gitolite
-(by default: @code{git}). This is necessary when using Gitolite with software
-like cgit or gitweb.
-
-@item @code{git-config-keys} (default: @code{""})
-Gitolite allows you to set git config values using the "config" keyword. This
-setting allows control over the config keys to accept.
-
-@item @code{roles} (default: @code{'(("READERS" . 1) ("WRITERS" . ))})
-Set the role names allowed to be used by users running the perms command.
-
-@item @code{enable} (default: @code{'("help" "desc" "info" "perms" "writable" "ssh-authkeys" "git-config" "daemon" "gitweb")})
-This setting controls the commands and features to enable within Gitolite.
-
-@end table
-@end deftp
-
@node Game Services
@subsubsection Game Services
diff --git a/gnu/services/version-control.scm b/gnu/services/version-control.scm
index cc8cd22021..58274c8bee 100644
--- a/gnu/services/version-control.scm
+++ b/gnu/services/version-control.scm
@@ -3,7 +3,6 @@
;;; Copyright © 2016 Sou Bunnbu <iyzsong@member.fsf.org>
;;; Copyright © 2017 Oleg Pykhalov <go.wigust@gmail.com>
;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
-;;; Copyright © 2018 Christopher Baines <mail@cbaines.net>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -41,23 +40,7 @@
git-http-configuration
git-http-configuration?
- git-http-nginx-location-configuration
-
- <gitolite-configuration>
- gitolite-configuration
- gitolite-configuration-package
- gitolite-configuration-user
- gitolite-configuration-rc-file
- gitolite-configuration-admin-pubkey
-
- <gitolite-rc-file>
- gitolite-rc-file
- gitolite-rc-file-umask
- gitolite-rc-file-git-config-keys
- gitolite-rc-file-roles
- gitolite-rc-file-enable
-
- gitolite-service-type))
+ git-http-nginx-location-configuration))
;;; Commentary:
;;;
@@ -214,163 +197,3 @@ access to exported repositories under @file{/srv/git}."
"")
(list "fastcgi_param GIT_PROJECT_ROOT " git-root ";")
"fastcgi_param PATH_INFO $1;"))))))
-
-
-;;;
-;;; Gitolite
-;;;
-
-(define-record-type* <gitolite-rc-file>
- gitolite-rc-file make-gitolite-rc-file
- gitolite-rc-file?
- (umask gitolite-rc-file-umask
- (default #o0077))
- (git-config-keys gitolite-rc-file-git-config-keys
- (default ""))
- (roles gitolite-rc-file-roles
- (default '(("READERS" . 1)
- ("WRITERS" . 1))))
- (enable gitolite-rc-file-enable
- (default '("help"
- "desc"
- "info"
- "perms"
- "writable"
- "ssh-authkeys"
- "git-config"
- "daemon"
- "gitweb"))))
-
-(define-gexp-compiler (gitolite-rc-file-compiler
- (file <gitolite-rc-file>) system target)
- (match file
- (($ <gitolite-rc-file> umask git-config-keys roles enable)
- (apply text-file* "gitolite.rc"
- `("%RC = (\n"
- " UMASK => " ,(format #f "~4,'0o" umask) ",\n"
- " GIT_CONFIG_KEYS => '" ,git-config-keys "',\n"
- " ROLES => {\n"
- ,@(map (match-lambda
- ((role . value)
- (simple-format #f " ~A => ~A,\n" role value)))
- roles)
- " },\n"
- "\n"
- " ENABLE => [\n"
- ,@(map (lambda (value)
- (simple-format #f " '~A',\n" value))
- enable)
- " ],\n"
- ");\n"
- "\n"
- "1;\n")))))
-
-(define-record-type* <gitolite-configuration>
- gitolite-configuration make-gitolite-configuration
- gitolite-configuration?
- (package gitolite-configuration-package
- (default gitolite))
- (user gitolite-configuration-user
- (default "git"))
- (group gitolite-configuration-group
- (default "git"))
- (home-directory gitolite-configuration-home-directory
- (default "/var/lib/gitolite"))
- (rc-file gitolite-configuration-rc-file
- (default (gitolite-rc-file)))
- (admin-pubkey gitolite-configuration-admin-pubkey))
-
-(define gitolite-accounts
- (match-lambda
- (($ <gitolite-configuration> package user group home-directory
- rc-file admin-pubkey)
- ;; User group and account to run Gitolite.
- (list (user-group (name user) (system? #t))
- (user-account
- (name user)
- (group group)
- (system? #t)
- (comment "Gitolite user")
- (home-directory home-directory))))))
-
-(define gitolite-activation
- (match-lambda
- (($ <gitolite-configuration> package user group home
- rc-file admin-pubkey)
- #~(begin
- (use-modules (ice-9 match)
- (guix build utils))
-
- (let* ((user-info (getpwnam #$user))
- (admin-pubkey #$admin-pubkey)
- (pubkey-file (string-append
- #$home "/"
- (basename
- (strip-store-file-name admin-pubkey)))))
-
- (simple-format #t "guix: gitolite: installing ~A\n" #$rc-file)
- (copy-file #$rc-file #$(string-append home "/.gitolite.rc"))
-
- ;; The key must be writable, so copy it from the store
- (copy-file admin-pubkey pubkey-file)
-
- (chmod pubkey-file #o500)
- (chown pubkey-file
- (passwd:uid user-info)
- (passwd:gid user-info))
-
- ;; Set the git configuration, to avoid gitolite trying to use
- ;; the hostname command, as the network might not be up yet
- (with-output-to-file #$(string-append home "/.gitconfig")
- (lambda ()
- (display "[user]
- name = GNU Guix
- email = guix@localhost
-")))
- ;; Run Gitolite setup, as this updates the hooks and include the
- ;; admin pubkey if specified. The admin pubkey is required for
- ;; initial setup, and will replace the previous key if run after
- ;; initial setup
- (match (primitive-fork)
- (0
- ;; Exit with a non-zero status code if an exception is thrown.
- (dynamic-wind
- (const #t)
- (lambda ()
- (setenv "HOME" (passwd:dir user-info))
- (setenv "USER" #$user)
- (setgid (passwd:gid user-info))
- (setuid (passwd:uid user-info))
- (primitive-exit
- (system* #$(file-append package "/bin/gitolite")
- "setup"
- "-m" "gitolite setup by GNU Guix"
- "-pk" pubkey-file)))
- (lambda ()
- (primitive-exit 1))))
- (pid (waitpid pid)))
-
- (when (file-exists? pubkey-file)
- (delete-file pubkey-file)))))))
-
-(define gitolite-service-type
- (service-type
- (name 'gitolite)
- (extensions
- (list (service-extension activation-service-type
- gitolite-activation)
- (service-extension account-service-type
- gitolite-accounts)
- (service-extension profile-service-type
- ;; The Gitolite package in Guix uses
- ;; gitolite-shell in the authorized_keys file, so
- ;; gitolite-shell needs to be on the PATH for
- ;; gitolite to work.
- (lambda (config)
- (list
- (gitolite-configuration-package config))))))
- (description
- "Setup @command{gitolite}, a Git hosting tool providing access over SSH..
-By default, the @code{git} user is used, but this is configurable.
-Additionally, Gitolite can integrate with with tools like gitweb or cgit to
-provide a web interface to view selected repositories.")))
diff --git a/gnu/tests/version-control.scm b/gnu/tests/version-control.scm
index 4409b8a12b..3b935a1b48 100644
--- a/gnu/tests/version-control.scm
+++ b/gnu/tests/version-control.scm
@@ -2,7 +2,6 @@
;;; Copyright © 2017, 2018 Oleg Pykhalov <go.wigust@gmail.com>
;;; Copyright © 2017, 2018 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
-;;; Copyright © 2018 Christopher Baines <mail@cbaines.net>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -28,17 +27,14 @@
#:use-module (gnu services)
#:use-module (gnu services version-control)
#:use-module (gnu services cgit)
- #:use-module (gnu services ssh)
#:use-module (gnu services web)
#:use-module (gnu services networking)
#:use-module (gnu packages version-control)
- #:use-module (gnu packages ssh)
#:use-module (guix gexp)
#:use-module (guix store)
#:use-module (guix modules)
#:export (%test-cgit
- %test-git-http
- %test-gitolite))
+ %test-git-http))
(define README-contents
"Hello! This is what goes inside the 'README' file.")
@@ -304,111 +300,3 @@ HTTP-PORT."
(name "git-http")
(description "Connect to a running Git HTTP server.")
(value (run-git-http-test))))
-
-
-;;;
-;;; Gitolite.
-;;;
-
-(define %gitolite-test-admin-keypair
- (computed-file
- "gitolite-test-admin-keypair"
- (with-imported-modules (source-module-closure
- '((guix build utils)))
- #~(begin
- (use-modules (ice-9 match) (srfi srfi-26)
- (guix build utils))
-
- (mkdir #$output)
- (invoke #$(file-append openssh "/bin/ssh-keygen")
- "-f" (string-append #$output "/test-admin")
- "-t" "rsa"
- "-q"
- "-N" "")))))
-
-(define %gitolite-os
- (simple-operating-system
- (dhcp-client-service)
- (service openssh-service-type)
- (service gitolite-service-type
- (gitolite-configuration
- (admin-pubkey
- (file-append %gitolite-test-admin-keypair "/test-admin.pub"))))))
-
-(define (run-gitolite-test)
- (define os
- (marionette-operating-system
- %gitolite-os
- #:imported-modules '((gnu services herd)
- (guix combinators))))
-
- (define vm
- (virtual-machine
- (operating-system os)
- (port-forwardings `((2222 . 22)))))
-
- (define test
- (with-imported-modules '((gnu build marionette)
- (guix build utils))
- #~(begin
- (use-modules (srfi srfi-64)
- (rnrs io ports)
- (gnu build marionette)
- (guix build utils))
-
- (define marionette
- (make-marionette (list #$vm)))
-
- (mkdir #$output)
- (chdir #$output)
-
- (test-begin "gitolite")
-
- ;; Wait for sshd to be up and running.
- (test-assert "service running"
- (marionette-eval
- '(begin
- (use-modules (gnu services herd))
- (start-service 'ssh-daemon))
- marionette))
-
- (display #$%gitolite-test-admin-keypair)
-
- (setenv "GIT_SSH_VARIANT" "ssh")
- (setenv "GIT_SSH_COMMAND"
- (string-join
- '(#$(file-append openssh "/bin/ssh")
- "-i" #$(file-append %gitolite-test-admin-keypair
- "/test-admin")
- "-o" "UserKnownHostsFile=/dev/null"
- "-o" "StrictHostKeyChecking=no")))
-
- (test-assert "cloning the admin repository"
- (invoke #$(file-append git "/bin/git")
- "clone" "-v"
- "ssh://git@localhost:2222/gitolite-admin"
- "/tmp/clone"))
-
- (test-assert "admin key exists"
- (file-exists? "/tmp/clone/keydir/test-admin.pub"))
-
- (with-directory-excursion "/tmp/clone"
- (invoke #$(file-append git "/bin/git")
- "-c" "user.name=Guix" "-c" "user.email=guix"
- "commit"
- "-m" "Test commit"
- "--allow-empty")
-
- (test-assert "pushing, and the associated hooks"
- (invoke #$(file-append git "/bin/git") "push")))
-
- (test-end)
- (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
-
- (gexp->derivation "gitolite" test))
-
-(define %test-gitolite
- (system-test
- (name "gitolite")
- (description "Clone the Gitolite admin repository.")
- (value (run-gitolite-test))))