* [bug#28283] [PATCH 0/1] gnu: services: version-control: Add cgit.
@ 2017-08-29 21:16 Oleg Pykhalov
2017-08-29 21:18 ` [bug#28283] Status: [PATCH 1/1] " Oleg Pykhalov
0 siblings, 1 reply; 16+ messages in thread
From: Oleg Pykhalov @ 2017-08-29 21:16 UTC (permalink / raw)
To: 28283
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: [PATCH 0/1] gnu: services: version-control: Add cgit. --]
[-- Type: text/x-patch, Size: 1038 bytes --]
From 65fa66cd761f3a9f8c6e84f8b5f7d8c643fe9731 Mon Sep 17 00:00:00 2001
From: Oleg Pykhalov <go.wigust@gmail.com>
Date: Wed, 30 Aug 2017 00:06:43 +0300
Subject: [PATCH 0/1] gnu: services: version-control: Add cgit.
Hello Guix,
Here is cgit based on nginx service.
<#part type="text/plain" filename="~/dotfiles/guix/system-cgit.scm" disposition=attachment description=system-cgit.scm>
<#/part>
I tested with
--8<---------------cut here---------------start------------->8---
mkdir /tmp/cgit
$(./pre-inst-env guix system vm system-cgit.scm --share=/tmp/cgit=/srv/git) -daemonize -net nic,model=virtio -net user,hostfwd=tcp::10080-:80
icecat localhost:10080
--8<---------------cut here---------------end--------------->8---
Oleg Pykhalov (1):
gnu: services: version-control: Add cgit.
doc/guix.texi | 63 +++++++++++++++++++++++
gnu/services/version-control.scm | 108 ++++++++++++++++++++++++++++++++++++++-
gnu/services/web.scm | 4 ++
3 files changed, 174 insertions(+), 1 deletion(-)
--
2.14.1
^ permalink raw reply [flat|nested] 16+ messages in thread
* [bug#28283] Status: [PATCH 1/1] gnu: services: version-control: Add cgit.
2017-08-29 21:16 [bug#28283] [PATCH 0/1] gnu: services: version-control: Add cgit Oleg Pykhalov
@ 2017-08-29 21:18 ` Oleg Pykhalov
2017-08-29 21:53 ` Oleg Pykhalov
2017-08-31 13:39 ` Ludovic Courtès
0 siblings, 2 replies; 16+ messages in thread
From: Oleg Pykhalov @ 2017-08-29 21:18 UTC (permalink / raw)
To: bug#28283
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: [PATCH 1/1] gnu: services: version-control: Add cgit. --]
[-- Type: text/x-patch, Size: 9256 bytes --]
From 65fa66cd761f3a9f8c6e84f8b5f7d8c643fe9731 Mon Sep 17 00:00:00 2001
From: Oleg Pykhalov <go.wigust@gmail.com>
Date: Tue, 29 Aug 2017 23:40:05 +0300
Subject: [PATCH 1/1] gnu: services: version-control: Add cgit.
* gnu/services/version-control.scm
(<cgit-configuration-file>, <cgit-configuration>): New record types.
(cgit-configuration-robots-string, cgit-activation,
cgit-configuration-nginx-config): New procedures.
(%cgit-configuration-nginx, cgit-service-type): New variables.
* doc/guix.texi (Version Control): Document the cgit service.
* gnu/services/web.scm (<nginx-server-configuration>): Add
nginx-server-configuration-try-files.
(emit-nginx-server-config): Add this.
---
doc/guix.texi | 63 +++++++++++++++++++++++
gnu/services/version-control.scm | 108 ++++++++++++++++++++++++++++++++++++++-
gnu/services/web.scm | 4 ++
3 files changed, 174 insertions(+), 1 deletion(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index 6293ad48b..2a7663276 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -16788,6 +16788,69 @@ Extra options will be passed to @code{git daemon}, please run
@end table
@end deftp
+@subsubheading cgit service
+
+@uref{https://git.zx2c4.com/cgit/, cgit} is a hyperfast web
+frontend for git repositories written in C.
+
+The following example will configure the service with default values.
+By default, cgit can be accessed on port 80 (@code{http://localhost:80}).
+
+@example
+(service nginx-service-type)
+(service fcgiwrap-service-type)
+(service cgit-service-type)
+@end example
+
+@deftp {Data Type} cgit-configuration
+Data type representing the configuration of cgit.
+This type has the following parameters:
+
+@table @asis
+@item @code{config-file} (default: @code{(cgit-configuration-file)})
+The configuration file to use for Cgit. This can be set to a
+@dfn{cgit-configuration-file} record value, or any gexp
+(@pxref{G-Expressions}).
+
+For example, to instead use a local file, the @code{local-file} function
+can be used:
+
+@example
+(service cgit-service-type
+ (cgit-configuration
+ (config-file (local-file "./my-cgitrc.conf"))))
+@end example
+
+@item @code{package} (default: @code{cgit})
+The cgit package to use.
+
+@end table
+@end deftp
+
+@deftp {Data Type} cgit-configuration-file
+Data type representing the configuration options for Cgit.
+This type has the following parameters:
+
+@table @asis
+@item @code{css} (default: @code{"/share/cgit/cgit.css"})
+Url which specifies the css document to include in all cgit pages.
+
+@item @code{logo} (default: @code{"/share/cgit/cgit.png"})
+Url which specifies the source of an image which will be used as a logo
+on all cgit pages.
+
+@item @code{virtual-root} (default: @code{"/"})
+Url which, if specified, will be used as root for all cgit links.
+
+@item @code{scan-path} (default: @code{"/srv/git"})
+A path which will be scanned for repositories.
+
+@item @code{robots} (default: @code{(list "noindex" "nofollow")})
+Text used as content for the "robots" meta-tag.
+
+@end table
+@end deftp
+
@subsubsection Incremental file transfer
The @code{(gnu services rsync)} module provides the following services:
diff --git a/gnu/services/version-control.scm b/gnu/services/version-control.scm
index 107bc8e77..a2688163a 100644
--- a/gnu/services/version-control.scm
+++ b/gnu/services/version-control.scm
@@ -21,18 +21,40 @@
#:use-module (gnu services)
#:use-module (gnu services base)
#:use-module (gnu services shepherd)
+ #:use-module (gnu services web)
#:use-module (gnu system shadow)
#:use-module (gnu packages version-control)
#:use-module (gnu packages admin)
#:use-module (guix records)
#:use-module (guix gexp)
+ #:use-module (guix store)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-26)
#:use-module (ice-9 match)
#:export (git-daemon-service
git-daemon-service-type
git-daemon-configuration
- git-daemon-configuration?))
+ git-daemon-configuration?
+
+ <cgit-configuration-file>
+ cgit-configuration-file
+ cgit-configuration-file?
+ cgit-configuration-file-css
+ cgit-configuration-file-logo
+ cgit-configuration-file-robots
+ cgit-configuration-file-virtual-root
+ cgit-configuration-file-scan-path
+
+ <cgit-configuration>
+ cgit-configuration
+ cgit-configuration?
+ cgit-configuration-config-file
+ cgit-configuration-package
+
+ %cgit-configuration-nginx
+ cgit-configuration-nginx-config
+
+ cgit-service-type))
;;; Commentary:
;;;
@@ -139,3 +161,87 @@ The optional @var{config} argument should be a
@code{<git-daemon-configuration>} object, by default it allows read-only
access to exported repositories under @file{/srv/git}."
(service git-daemon-service-type config))
+
+\f
+;;;
+;;; Cgit
+;;;
+
+(define-record-type* <cgit-configuration-file>
+ cgit-configuration-file make-cgit-configuration-file
+ cgit-configuration-file?
+ (css cgit-configuration-file-css
+ (default "/share/cgit/cgit.css"))
+ (logo cgit-configuration-file-logo
+ (default "/share/cgit/cgit.png"))
+ (robots cgit-configuration-file-robots
+ (default '("noindex" "nofollow")))
+ (virtual-root cgit-configuration-file-virtual-root
+ (default "/"))
+ (scan-path cgit-configuration-file-scan-path
+ (default "/srv/git")))
+
+(define (cgit-configuration-robots-string robots)
+ (string-join robots ", "))
+
+(define-gexp-compiler (cgit-configuration-file-compiler
+ (file <cgit-configuration-file>) system target)
+ (match file
+ (($ <cgit-configuration-file> css logo robots virtual-root scan-path)
+ (text-file
+ "cgitrc"
+ (string-concatenate
+ (filter-map
+ (match-lambda
+ ((key . #f) #f)
+ ((key . value) (string-append key "=" value "\n")))
+ `(("css" . ,css)
+ ("logo" . ,logo)
+ ("robots" . ,(cgit-configuration-robots-string robots))
+ ("virtual-root" . ,virtual-root)
+ ("scan-path" . ,scan-path))))))))
+
+(define %cgit-configuration-nginx
+ (list
+ (nginx-server-configuration
+ (root cgit)
+ (locations
+ (list
+ (nginx-location-configuration
+ (uri "@cgit")
+ (body '("fastcgi_param SCRIPT_FILENAME $document_root/lib/cgit/cgit.cgi;"
+ "fastcgi_param PATH_INFO $uri;"
+ "fastcgi_param QUERY_STRING $args;"
+ "fastcgi_param HTTP_HOST $server_name;"
+ "fastcgi_pass 127.0.0.1:9000;")))))
+ (try-files (list "$uri" "@cgit"))
+ (https-port #f)
+ (ssl-certificate #f)
+ (ssl-certificate-key #f))))
+
+(define-record-type* <cgit-configuration>
+ cgit-configuration make-cgit-configuration
+ cgit-configuration?
+ (config-file cgit-configuration-config-file
+ (default (cgit-configuration-file)))
+ (package cgit-configuration-package
+ (default cgit))
+ (nginx cgit-configuration-nginx
+ (default %cgit-configuration-nginx)))
+
+(define (cgit-activation config)
+ ;; cgit compiled with default configuration path
+ #~(copy-file #$(cgit-configuration-config-file config) "/etc/cgitrc"))
+
+(define (cgit-configuration-nginx-config config)
+ (cgit-configuration-nginx config))
+
+(define cgit-service-type
+ (service-type
+ (name 'cgit)
+ (extensions
+ (list (service-extension activation-service-type
+ cgit-activation)
+ (service-extension nginx-service-type
+ cgit-configuration-nginx-config)))
+ (default-value (cgit-configuration))))
diff --git a/gnu/services/web.scm b/gnu/services/web.scm
index 18278502e..f3c5ca528 100644
--- a/gnu/services/web.scm
+++ b/gnu/services/web.scm
@@ -99,6 +99,8 @@
(default '()))
(index nginx-server-configuration-index
(default (list "index.html")))
+ (try-files nginx-server-configuration-try-files
+ (default #f))
(ssl-certificate nginx-server-configuration-ssl-certificate
(default "/etc/nginx/cert.pem"))
(ssl-certificate-key nginx-server-configuration-ssl-certificate-key
@@ -179,6 +181,7 @@ of index files."
(nginx-server-configuration-ssl-certificate-key server))
(root (nginx-server-configuration-root server))
(index (nginx-server-configuration-index server))
+ (try-files (nginx-server-configuration-try-files server))
(server-tokens? (nginx-server-configuration-server-tokens? server))
(locations (nginx-server-configuration-locations server)))
(define-syntax-parameter <> (syntax-rules ()))
@@ -207,6 +210,7 @@ of index files."
(and/l ssl-certificate-key " ssl_certificate_key " <> ";\n")
" root " root ";\n"
" index " (config-index-strings index) ";\n"
+ " try_files " (config-index-strings try-files) ";\n"
" server_tokens " (if server-tokens? "on" "off") ";\n"
"\n"
(map emit-nginx-location-config locations)
--
2.14.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [bug#28283] Status: [PATCH 1/1] gnu: services: version-control: Add cgit.
2017-08-29 21:18 ` [bug#28283] Status: [PATCH 1/1] " Oleg Pykhalov
@ 2017-08-29 21:53 ` Oleg Pykhalov
2017-08-31 13:39 ` Ludovic Courtès
1 sibling, 0 replies; 16+ messages in thread
From: Oleg Pykhalov @ 2017-08-29 21:53 UTC (permalink / raw)
To: bug#28283
nginx-server-configuration-try-files probably needs to be '() by default.
^ permalink raw reply [flat|nested] 16+ messages in thread
* [bug#28283] Status: [PATCH 1/1] gnu: services: version-control: Add cgit.
2017-08-29 21:18 ` [bug#28283] Status: [PATCH 1/1] " Oleg Pykhalov
2017-08-29 21:53 ` Oleg Pykhalov
@ 2017-08-31 13:39 ` Ludovic Courtès
2017-09-19 21:27 ` Ludovic Courtès
1 sibling, 1 reply; 16+ messages in thread
From: Ludovic Courtès @ 2017-08-31 13:39 UTC (permalink / raw)
To: Oleg Pykhalov; +Cc: bug#28283
Hi Oleg,
Oleg Pykhalov <go.wigust@gmail.com> skribis:
> From 65fa66cd761f3a9f8c6e84f8b5f7d8c643fe9731 Mon Sep 17 00:00:00 2001
> From: Oleg Pykhalov <go.wigust@gmail.com>
> Date: Tue, 29 Aug 2017 23:40:05 +0300
> Subject: [PATCH 1/1] gnu: services: version-control: Add cgit.
>
> * gnu/services/version-control.scm
> (<cgit-configuration-file>, <cgit-configuration>): New record types.
> (cgit-configuration-robots-string, cgit-activation,
> cgit-configuration-nginx-config): New procedures.
> (%cgit-configuration-nginx, cgit-service-type): New variables.
> * doc/guix.texi (Version Control): Document the cgit service.
> * gnu/services/web.scm (<nginx-server-configuration>): Add
> nginx-server-configuration-try-files.
> (emit-nginx-server-config): Add this.
That looks nice and useful!
Minor issues:
> +@subsubheading cgit service
Please capitalize titles: “Cgit Service”
> +@uref{https://git.zx2c4.com/cgit/, cgit} is a hyperfast web
> +frontend for git repositories written in C.
“Git”, not “git”. Also, not hypersuperlatives please. :-)
So what about this:
@uref{https://git.zx2c4.com/cgit/, cgit} is a Web interface to Git
repositories, written in C. It allows users to look at Git
repository contents and history through their Web browsers.
> +The following example will configure the service with default values.
> +By default, cgit can be accessed on port 80 (@code{http://localhost:80}).
> +
> +@example
> +(service nginx-service-type)
> +(service fcgiwrap-service-type)
> +(service cgit-service-type)
> +@end example
Please add a sentence above or below the example like “This example
shows …”.
> +@table @asis
> +@item @code{css} (default: @code{"/share/cgit/cgit.css"})
> +Url which specifies the css document to include in all cgit pages.
> +
> +@item @code{logo} (default: @code{"/share/cgit/cgit.png"})
> +Url which specifies the source of an image which will be used as a logo
> +on all cgit pages.
> +
> +@item @code{virtual-root} (default: @code{"/"})
> +Url which, if specified, will be used as root for all cgit links.
s/Url/URL/
> +@item @code{scan-path} (default: @code{"/srv/git"})
> +A path which will be scanned for repositories.
Rather: “Name of the directory to scan for repositories.”
Can you also rename ‘scan-path’ to ‘repository-directory’ or something
like that? (Not “path.”)
> +@item @code{robots} (default: @code{(list "noindex" "nofollow")})
> +Text used as content for the "robots" meta-tag.
Write ``robots'' (literally) so that Texinfo typesets things correctly.
> --- a/gnu/services/web.scm
> +++ b/gnu/services/web.scm
> @@ -99,6 +99,8 @@
> (default '()))
> (index nginx-server-configuration-index
> (default (list "index.html")))
> + (try-files nginx-server-configuration-try-files
> + (default #f))
> (ssl-certificate nginx-server-configuration-ssl-certificate
> (default "/etc/nginx/cert.pem"))
> (ssl-certificate-key nginx-server-configuration-ssl-certificate-key
> @@ -179,6 +181,7 @@ of index files."
> (nginx-server-configuration-ssl-certificate-key server))
> (root (nginx-server-configuration-root server))
> (index (nginx-server-configuration-index server))
> + (try-files (nginx-server-configuration-try-files server))
> (server-tokens? (nginx-server-configuration-server-tokens? server))
> (locations (nginx-server-configuration-locations server)))
> (define-syntax-parameter <> (syntax-rules ()))
> @@ -207,6 +210,7 @@ of index files."
> (and/l ssl-certificate-key " ssl_certificate_key " <> ";\n")
> " root " root ";\n"
> " index " (config-index-strings index) ";\n"
> + " try_files " (config-index-strings try-files) ";\n"
> " server_tokens " (if server-tokens? "on" "off") ";\n"
> "\n"
> (map emit-nginx-location-config locations)
Could you submit these nginx changes separately for discussion? We’ll
also need to document them. Maybe Cc Chris Baines and other nginx
people.
Thanks!
Ludo’.
^ permalink raw reply [flat|nested] 16+ messages in thread
* [bug#28283] Status: [PATCH 1/1] gnu: services: version-control: Add cgit.
2017-08-31 13:39 ` Ludovic Courtès
@ 2017-09-19 21:27 ` Ludovic Courtès
2017-09-20 22:20 ` Oleg Pykhalov
0 siblings, 1 reply; 16+ messages in thread
From: Ludovic Courtès @ 2017-09-19 21:27 UTC (permalink / raw)
To: Oleg Pykhalov; +Cc: 28283
Hello Oleg,
This patch fell through the cracks. :-)
Could you look into the comments I made below and send updated patches?
We’re almost there!
Ludo’.
ludo@gnu.org (Ludovic Courtès) skribis:
> Hi Oleg,
>
> Oleg Pykhalov <go.wigust@gmail.com> skribis:
>
>> From 65fa66cd761f3a9f8c6e84f8b5f7d8c643fe9731 Mon Sep 17 00:00:00 2001
>> From: Oleg Pykhalov <go.wigust@gmail.com>
>> Date: Tue, 29 Aug 2017 23:40:05 +0300
>> Subject: [PATCH 1/1] gnu: services: version-control: Add cgit.
>>
>> * gnu/services/version-control.scm
>> (<cgit-configuration-file>, <cgit-configuration>): New record types.
>> (cgit-configuration-robots-string, cgit-activation,
>> cgit-configuration-nginx-config): New procedures.
>> (%cgit-configuration-nginx, cgit-service-type): New variables.
>> * doc/guix.texi (Version Control): Document the cgit service.
>> * gnu/services/web.scm (<nginx-server-configuration>): Add
>> nginx-server-configuration-try-files.
>> (emit-nginx-server-config): Add this.
>
> That looks nice and useful!
>
> Minor issues:
>
>> +@subsubheading cgit service
>
> Please capitalize titles: “Cgit Service”
>
>> +@uref{https://git.zx2c4.com/cgit/, cgit} is a hyperfast web
>> +frontend for git repositories written in C.
>
> “Git”, not “git”. Also, not hypersuperlatives please. :-)
>
> So what about this:
>
> @uref{https://git.zx2c4.com/cgit/, cgit} is a Web interface to Git
> repositories, written in C. It allows users to look at Git
> repository contents and history through their Web browsers.
>
>> +The following example will configure the service with default values.
>> +By default, cgit can be accessed on port 80 (@code{http://localhost:80}).
>> +
>> +@example
>> +(service nginx-service-type)
>> +(service fcgiwrap-service-type)
>> +(service cgit-service-type)
>> +@end example
>
> Please add a sentence above or below the example like “This example
> shows …”.
>
>> +@table @asis
>> +@item @code{css} (default: @code{"/share/cgit/cgit.css"})
>> +Url which specifies the css document to include in all cgit pages.
>> +
>> +@item @code{logo} (default: @code{"/share/cgit/cgit.png"})
>> +Url which specifies the source of an image which will be used as a logo
>> +on all cgit pages.
>> +
>> +@item @code{virtual-root} (default: @code{"/"})
>> +Url which, if specified, will be used as root for all cgit links.
>
> s/Url/URL/
>
>> +@item @code{scan-path} (default: @code{"/srv/git"})
>> +A path which will be scanned for repositories.
>
> Rather: “Name of the directory to scan for repositories.”
>
> Can you also rename ‘scan-path’ to ‘repository-directory’ or something
> like that? (Not “path.”)
>
>> +@item @code{robots} (default: @code{(list "noindex" "nofollow")})
>> +Text used as content for the "robots" meta-tag.
>
> Write ``robots'' (literally) so that Texinfo typesets things correctly.
>
>> --- a/gnu/services/web.scm
>> +++ b/gnu/services/web.scm
>> @@ -99,6 +99,8 @@
>> (default '()))
>> (index nginx-server-configuration-index
>> (default (list "index.html")))
>> + (try-files nginx-server-configuration-try-files
>> + (default #f))
>> (ssl-certificate nginx-server-configuration-ssl-certificate
>> (default "/etc/nginx/cert.pem"))
>> (ssl-certificate-key nginx-server-configuration-ssl-certificate-key
>> @@ -179,6 +181,7 @@ of index files."
>> (nginx-server-configuration-ssl-certificate-key server))
>> (root (nginx-server-configuration-root server))
>> (index (nginx-server-configuration-index server))
>> + (try-files (nginx-server-configuration-try-files server))
>> (server-tokens? (nginx-server-configuration-server-tokens? server))
>> (locations (nginx-server-configuration-locations server)))
>> (define-syntax-parameter <> (syntax-rules ()))
>> @@ -207,6 +210,7 @@ of index files."
>> (and/l ssl-certificate-key " ssl_certificate_key " <> ";\n")
>> " root " root ";\n"
>> " index " (config-index-strings index) ";\n"
>> + " try_files " (config-index-strings try-files) ";\n"
>> " server_tokens " (if server-tokens? "on" "off") ";\n"
>> "\n"
>> (map emit-nginx-location-config locations)
>
> Could you submit these nginx changes separately for discussion? We’ll
> also need to document them. Maybe Cc Chris Baines and other nginx
> people.
>
> Thanks!
>
> Ludo’.
^ permalink raw reply [flat|nested] 16+ messages in thread
* [bug#28283] Status: [PATCH 1/1] gnu: services: version-control: Add cgit.
2017-09-19 21:27 ` Ludovic Courtès
@ 2017-09-20 22:20 ` Oleg Pykhalov
2017-09-22 13:40 ` Ludovic Courtès
0 siblings, 1 reply; 16+ messages in thread
From: Oleg Pykhalov @ 2017-09-20 22:20 UTC (permalink / raw)
To: Ludovic Courtès; +Cc: 28283
[-- Attachment #1: Type: text/plain, Size: 1120 bytes --]
Hello Ludovic,
apologies for long responce.
ludo@gnu.org (Ludovic Courtès) writes:
> Hello Oleg,
>
> This patch fell through the cracks. :-)
>
> Could you look into the comments I made below and send updated patches?
> We’re almost there!
Yes, I looked them already few days ago. Your last comment was about
nginx changes. I'm working on it. But I have issue with stucture when
I try to test.
--8<---------------cut here---------------start------------->8---
natsu@magnolia ~/src/guix$ guix environment guix -- make check-system TESTS=nginx
;;; note: source file /home/natsu/src/guix-wigust/wigust/packages/emacs.scm
;;; newer than compiled /home/natsu/.cache/guile/ccache/2.2-LE-8-3.A/home/natsu/src/guix-wigust/wigust/packages/emacs.scm.go
substitute: updating list of substitutes from 'https://berlin.guixsd.org'... 100.0%
Compiling Scheme modules...
warning: failed to load '(gnu tests web)':
ERROR: In procedure allocate-struct: Wrong type argument in position 2: 9
Running 0 system tests...
TOTAL: 0
--8<---------------cut here---------------end--------------->8---
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Type: text/x-patch, Size: 1590 bytes --]
diff --git a/gnu/services/web.scm b/gnu/services/web.scm
index 4aa6fd501..3063bd549 100644
--- a/gnu/services/web.scm
+++ b/gnu/services/web.scm
@@ -99,6 +99,8 @@
(default '()))
(index nginx-server-configuration-index
(default (list "index.html")))
+ (try-files nginx-server-configuration-try-files
+ (default '()))
(ssl-certificate nginx-server-configuration-ssl-certificate
(default "/etc/nginx/cert.pem"))
(ssl-certificate-key nginx-server-configuration-ssl-certificate-key
@@ -179,6 +181,7 @@ of index files."
(nginx-server-configuration-ssl-certificate-key server))
(root (nginx-server-configuration-root server))
(index (nginx-server-configuration-index server))
+ ;; (try-files (nginx-server-configuration-try-files server))
(server-tokens? (nginx-server-configuration-server-tokens? server))
(locations (nginx-server-configuration-locations server)))
(define-syntax-parameter <> (syntax-rules ()))
@@ -207,6 +210,10 @@ of index files."
(and/l ssl-certificate-key " ssl_certificate_key " <> ";\n")
" root " root ";\n"
" index " (config-index-strings index) ";\n"
+ ;; (if (nil? (pk 'try-files try-files))
+ ;; ""
+ ;; (string append " try_files "
+ ;; (config-index-strings try-files) ";\n"))
" server_tokens " (if server-tokens? "on" "off") ";\n"
"\n"
(map emit-nginx-location-config locations)
[-- Attachment #3: Type: text/plain, Size: 4596 bytes --]
> Ludo’.
>
> ludo@gnu.org (Ludovic Courtès) skribis:
>
>> Hi Oleg,
>>
>> Oleg Pykhalov <go.wigust@gmail.com> skribis:
>>
>>> From 65fa66cd761f3a9f8c6e84f8b5f7d8c643fe9731 Mon Sep 17 00:00:00 2001
>>> From: Oleg Pykhalov <go.wigust@gmail.com>
>>> Date: Tue, 29 Aug 2017 23:40:05 +0300
>>> Subject: [PATCH 1/1] gnu: services: version-control: Add cgit.
>>>
>>> * gnu/services/version-control.scm
>>> (<cgit-configuration-file>, <cgit-configuration>): New record types.
>>> (cgit-configuration-robots-string, cgit-activation,
>>> cgit-configuration-nginx-config): New procedures.
>>> (%cgit-configuration-nginx, cgit-service-type): New variables.
>>> * doc/guix.texi (Version Control): Document the cgit service.
>>> * gnu/services/web.scm (<nginx-server-configuration>): Add
>>> nginx-server-configuration-try-files.
>>> (emit-nginx-server-config): Add this.
>>
>> That looks nice and useful!
>>
>> Minor issues:
>>
>>> +@subsubheading cgit service
>>
>> Please capitalize titles: “Cgit Service”
>>
>>> +@uref{https://git.zx2c4.com/cgit/, cgit} is a hyperfast web
>>> +frontend for git repositories written in C.
>>
>> “Git”, not “git”. Also, not hypersuperlatives please. :-)
>>
>> So what about this:
>>
>> @uref{https://git.zx2c4.com/cgit/, cgit} is a Web interface to Git
>> repositories, written in C. It allows users to look at Git
>> repository contents and history through their Web browsers.
>>
>>> +The following example will configure the service with default values.
>>> +By default, cgit can be accessed on port 80 (@code{http://localhost:80}).
>>> +
>>> +@example
>>> +(service nginx-service-type)
>>> +(service fcgiwrap-service-type)
>>> +(service cgit-service-type)
>>> +@end example
>>
>> Please add a sentence above or below the example like “This example
>> shows …”.
>>
>>> +@table @asis
>>> +@item @code{css} (default: @code{"/share/cgit/cgit.css"})
>>> +Url which specifies the css document to include in all cgit pages.
>>> +
>>> +@item @code{logo} (default: @code{"/share/cgit/cgit.png"})
>>> +Url which specifies the source of an image which will be used as a logo
>>> +on all cgit pages.
>>> +
>>> +@item @code{virtual-root} (default: @code{"/"})
>>> +Url which, if specified, will be used as root for all cgit links.
>>
>> s/Url/URL/
>>
>>> +@item @code{scan-path} (default: @code{"/srv/git"})
>>> +A path which will be scanned for repositories.
>>
>> Rather: “Name of the directory to scan for repositories.”
>>
>> Can you also rename ‘scan-path’ to ‘repository-directory’ or something
>> like that? (Not “path.”)
>>
>>> +@item @code{robots} (default: @code{(list "noindex" "nofollow")})
>>> +Text used as content for the "robots" meta-tag.
>>
>> Write ``robots'' (literally) so that Texinfo typesets things correctly.
>>
>>> --- a/gnu/services/web.scm
>>> +++ b/gnu/services/web.scm
>>> @@ -99,6 +99,8 @@
>>> (default '()))
>>> (index nginx-server-configuration-index
>>> (default (list "index.html")))
>>> + (try-files nginx-server-configuration-try-files
>>> + (default #f))
>>> (ssl-certificate nginx-server-configuration-ssl-certificate
>>> (default "/etc/nginx/cert.pem"))
>>> (ssl-certificate-key nginx-server-configuration-ssl-certificate-key
>>> @@ -179,6 +181,7 @@ of index files."
>>> (nginx-server-configuration-ssl-certificate-key server))
>>> (root (nginx-server-configuration-root server))
>>> (index (nginx-server-configuration-index server))
>>> + (try-files (nginx-server-configuration-try-files server))
>>> (server-tokens? (nginx-server-configuration-server-tokens? server))
>>> (locations (nginx-server-configuration-locations server)))
>>> (define-syntax-parameter <> (syntax-rules ()))
>>> @@ -207,6 +210,7 @@ of index files."
>>> (and/l ssl-certificate-key " ssl_certificate_key " <> ";\n")
>>> " root " root ";\n"
>>> " index " (config-index-strings index) ";\n"
>>> + " try_files " (config-index-strings try-files) ";\n"
>>> " server_tokens " (if server-tokens? "on" "off") ";\n"
>>> "\n"
>>> (map emit-nginx-location-config locations)
>>
>> Could you submit these nginx changes separately for discussion? We’ll
>> also need to document them. Maybe Cc Chris Baines and other nginx
>> people.
>>
>> Thanks!
>>
>> Ludo’.
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [bug#28283] Status: [PATCH 1/1] gnu: services: version-control: Add cgit.
2017-09-20 22:20 ` Oleg Pykhalov
@ 2017-09-22 13:40 ` Ludovic Courtès
2017-09-22 17:57 ` Oleg Pykhalov
0 siblings, 1 reply; 16+ messages in thread
From: Ludovic Courtès @ 2017-09-22 13:40 UTC (permalink / raw)
To: Oleg Pykhalov; +Cc: 28283
Hi Oleg,
Oleg Pykhalov <go.wigust@gmail.com> skribis:
> ludo@gnu.org (Ludovic Courtès) writes:
>
>> Hello Oleg,
>>
>> This patch fell through the cracks. :-)
>>
>> Could you look into the comments I made below and send updated patches?
>> We’re almost there!
>
> Yes, I looked them already few days ago. Your last comment was about
> nginx changes. I'm working on it. But I have issue with stucture when
> I try to test.
>
> natsu@magnolia ~/src/guix$ guix environment guix -- make check-system TESTS=nginx
> ;;; note: source file /home/natsu/src/guix-wigust/wigust/packages/emacs.scm
> ;;; newer than compiled /home/natsu/.cache/guile/ccache/2.2-LE-8-3.A/home/natsu/src/guix-wigust/wigust/packages/emacs.scm.go
> substitute: updating list of substitutes from 'https://berlin.guixsd.org'... 100.0%
> Compiling Scheme modules...
> warning: failed to load '(gnu tests web)':
> ERROR: In procedure allocate-struct: Wrong type argument in position 2: 9
> Running 0 system tests...
> TOTAL: 0
This (admittedly obscure) error is the symptom of an ABI breakage:
specifically, commit b714395a39fffc60f75408504a23dfe27ad13fc2 introduced
a couple of new fields to the <service-type> record type, hence this
error.
The solution in this case is to “rm -f gnu/*.go gnu/s*/*g.o && make”.
HTH!
Ludo’.
^ permalink raw reply [flat|nested] 16+ messages in thread
* [bug#28283] Status: [PATCH 1/1] gnu: services: version-control: Add cgit.
2017-09-22 13:40 ` Ludovic Courtès
@ 2017-09-22 17:57 ` Oleg Pykhalov
2017-09-22 21:38 ` Ludovic Courtès
0 siblings, 1 reply; 16+ messages in thread
From: Oleg Pykhalov @ 2017-09-22 17:57 UTC (permalink / raw)
To: Ludovic Courtès; +Cc: 28283
Hello Ludovic,
ludo@gnu.org (Ludovic Courtès) writes:
> Hi Oleg,
>
> Oleg Pykhalov <go.wigust@gmail.com> skribis:
>
>> ludo@gnu.org (Ludovic Courtès) writes:
>>
>>> Hello Oleg,
>>>
>>> This patch fell through the cracks. :-)
>>>
>>> Could you look into the comments I made below and send updated patches?
>>> We’re almost there!
>>
>> Yes, I looked them already few days ago. Your last comment was about
>> nginx changes. I'm working on it. But I have issue with stucture when
>> I try to test.
>>
>> natsu@magnolia ~/src/guix$ guix environment guix -- make check-system TESTS=nginx
>> ;;; note: source file /home/natsu/src/guix-wigust/wigust/packages/emacs.scm
>> ;;; newer than compiled /home/natsu/.cache/guile/ccache/2.2-LE-8-3.A/home/natsu/src/guix-wigust/wigust/packages/emacs.scm.go
>> substitute: updating list of substitutes from 'https://berlin.guixsd.org'... 100.0%
>> Compiling Scheme modules...
>> warning: failed to load '(gnu tests web)':
>> ERROR: In procedure allocate-struct: Wrong type argument in position 2: 9
>> Running 0 system tests...
>> TOTAL: 0
>
> This (admittedly obscure) error is the symptom of an ABI breakage:
> specifically, commit b714395a39fffc60f75408504a23dfe27ad13fc2 introduced
> a couple of new fields to the <service-type> record type, hence this
> error.
Yes, I thought I did this. But I made this again today. Same error.
> The solution in this case is to “rm -f gnu/*.go gnu/s*/*g.o && make”.
>
> HTH!
>
> Ludo’.
After I made another Git working tree with Magit.
--8<---------------cut here---------------start------------->8---
natsu@magnolia ~/src/guix-devel-nginx-test$ ./bootstrap
…
natsu@magnolia ~/src/guix-devel-nginx-test$ ./configure --localstatedir=/var --prefix=''
…
natsu@magnolia ~/src/guix-devel-nginx-test$ guix environment guix --ad-hoc help2man -- make
…
--8<---------------cut here---------------end--------------->8---
Then I added new field to record:
--8<---------------cut here---------------start------------->8---
(define-record-type* <nginx-server-configuration>
…
(try-files nginx-server-configuration-try-files
(default '())))
--8<---------------cut here---------------end--------------->8---
Testing:
--8<---------------cut here---------------start------------->8---
natsu@magnolia ~/src/guix-devel-nginx-test$ guix environment guix -- make check-system TESTS=nginx
;;; note: source file /home/natsu/src/guix-wigust/wigust/packages/emacs.scm
;;; newer than compiled /home/natsu/.cache/guile/ccache/2.2-LE-8-3.A/home/natsu/src/guix-wigust/wigust/packages/emacs.scm.go
Compiling Scheme modules...
LOAD (gnu services web)
;;; note: source file ./gnu/services/web.scm
;;; newer than compiled /home/natsu/src/guix-devel-nginx-test/gnu/services/web.go
GUILEC gnu/services/web.go
warning: failed to load '(gnu tests web)':
ERROR: In procedure allocate-struct: Wrong type argument in position 2: 9
Running 0 system tests...
TOTAL: 0
--8<---------------cut here---------------end--------------->8---
^ permalink raw reply [flat|nested] 16+ messages in thread
* [bug#28283] Status: [PATCH 1/1] gnu: services: version-control: Add cgit.
2017-09-22 17:57 ` Oleg Pykhalov
@ 2017-09-22 21:38 ` Ludovic Courtès
2017-09-29 14:05 ` Oleg Pykhalov
0 siblings, 1 reply; 16+ messages in thread
From: Ludovic Courtès @ 2017-09-22 21:38 UTC (permalink / raw)
To: Oleg Pykhalov; +Cc: 28283
Oleg Pykhalov <go.wigust@gmail.com> skribis:
> Then I added new field to record:
>
> (define-record-type* <nginx-server-configuration>
> …
> (try-files nginx-server-configuration-try-files
> (default '())))
>
>
> Testing:
>
> natsu@magnolia ~/src/guix-devel-nginx-test$ guix environment guix -- make check-system TESTS=nginx
> ;;; note: source file /home/natsu/src/guix-wigust/wigust/packages/emacs.scm
> ;;; newer than compiled /home/natsu/.cache/guile/ccache/2.2-LE-8-3.A/home/natsu/src/guix-wigust/wigust/packages/emacs.scm.go
> Compiling Scheme modules...
> LOAD (gnu services web)
> ;;; note: source file ./gnu/services/web.scm
> ;;; newer than compiled /home/natsu/src/guix-devel-nginx-test/gnu/services/web.go
> GUILEC gnu/services/web.go
> warning: failed to load '(gnu tests web)':
> ERROR: In procedure allocate-struct: Wrong type argument in position 2: 9
> Running 0 system tests...
It’s also a case where the ABI breaks, and thus dependent modules need
to be recompiled: “rm gnu/tests/web.go && make”.
Does that make sense?
Ludo’.
^ permalink raw reply [flat|nested] 16+ messages in thread
* [bug#28283] Status: [PATCH 1/1] gnu: services: version-control: Add cgit.
2017-09-22 21:38 ` Ludovic Courtès
@ 2017-09-29 14:05 ` Oleg Pykhalov
2017-10-01 21:55 ` Ludovic Courtès
0 siblings, 1 reply; 16+ messages in thread
From: Oleg Pykhalov @ 2017-09-29 14:05 UTC (permalink / raw)
To: Ludovic Courtès; +Cc: 28283
[-- Attachment #1: Type: text/plain, Size: 5441 bytes --]
Hello Ludovic,
ludo@gnu.org (Ludovic Courtès) writes:
> Oleg Pykhalov <go.wigust@gmail.com> skribis:
>
>> Then I added new field to record:
>>
>> (define-record-type* <nginx-server-configuration>
>> …
>> (try-files nginx-server-configuration-try-files
>> (default '())))
>>
>>
>> Testing:
>>
>> natsu@magnolia ~/src/guix-devel-nginx-test$ guix environment guix -- make check-system TESTS=nginx
>> ;;; note: source file /home/natsu/src/guix-wigust/wigust/packages/emacs.scm
>> ;;; newer than compiled /home/natsu/.cache/guile/ccache/2.2-LE-8-3.A/home/natsu/src/guix-wigust/wigust/packages/emacs.scm.go
>> Compiling Scheme modules...
>> LOAD (gnu services web)
>> ;;; note: source file ./gnu/services/web.scm
>> ;;; newer than compiled /home/natsu/src/guix-devel-nginx-test/gnu/services/web.go
>> GUILEC gnu/services/web.go
>> warning: failed to load '(gnu tests web)':
>> ERROR: In procedure allocate-struct: Wrong type argument in position 2: 9
>> Running 0 system tests...
>
> It’s also a case where the ABI breaks, and thus dependent modules need
> to be recompiled: “rm gnu/tests/web.go && make”.
>
> Does that make sense?
It does make, but doesn't work for me. Probably there were other *.go
files which needed to delete. So, I made ‘make clean-go’ and ‘make’.
It was overkill of course.
‘try-files’ are in ‘<nginx-server-configuration>’ in origin/master now,
https://git.savannah.gnu.org/cgit/guix.git/commit/?id=4d14808af4c01b4fb0a4564584aa68f0e53c4ef4
> Minor issues:
>
>> +@subsubheading cgit service
>
> Please capitalize titles: “Cgit Service”
Done.
>> +@uref{https://git.zx2c4.com/cgit/, cgit} is a hyperfast web
>> +frontend for git repositories written in C.
>
> “Git”, not “git”.
Done.
> Also, not hypersuperlatives please. :-)
Done.
> So what about this:
>
> @uref{https://git.zx2c4.com/cgit/, cgit} is a Web interface to Git
> repositories, written in C. It allows users to look at Git
> repository contents and history through their Web browsers.
>
>> +The following example will configure the service with default values.
>> +By default, cgit can be accessed on port 80 (@code{http://localhost:80}).
>> +
>> +@example
>> +(service nginx-service-type)
>> +(service fcgiwrap-service-type)
>> +(service cgit-service-type)
>> +@end example
>
> Please add a sentence above or below the example like “This example
> shows …”.
Sorry, I don't understand what do you mean. There is a sentence above
example that answers a question “What does example do?” and I guess
“What does example show?”.
>> +@table @asis
>> +@item @code{css} (default: @code{"/share/cgit/cgit.css"})
>> +Url which specifies the css document to include in all cgit pages.
>> +
>> +@item @code{logo} (default: @code{"/share/cgit/cgit.png"})
>> +Url which specifies the source of an image which will be used as a logo
>> +on all cgit pages.
>> +
>> +@item @code{virtual-root} (default: @code{"/"})
>> +Url which, if specified, will be used as root for all cgit links.
>
> s/Url/URL/
Done.
>> +@item @code{scan-path} (default: @code{"/srv/git"})
>> +A path which will be scanned for repositories.
>
> Rather: “Name of the directory to scan for repositories.”
Done.
> Can you also rename ‘scan-path’ to ‘repository-directory’ or something
> like that? (Not “path.”)
Done.
>> +@item @code{robots} (default: @code{(list "noindex" "nofollow")})
>> +Text used as content for the "robots" meta-tag.
>
> Write ``robots'' (literally) so that Texinfo typesets things correctly.
Done.
>> --- a/gnu/services/web.scm
>> +++ b/gnu/services/web.scm
>> @@ -99,6 +99,8 @@
>> (default '()))
>> (index nginx-server-configuration-index
>> (default (list "index.html")))
>> + (try-files nginx-server-configuration-try-files
>> + (default #f))
>> (ssl-certificate nginx-server-configuration-ssl-certificate
>> (default "/etc/nginx/cert.pem"))
>> (ssl-certificate-key nginx-server-configuration-ssl-certificate-key
>> @@ -179,6 +181,7 @@ of index files."
>> (nginx-server-configuration-ssl-certificate-key server))
>> (root (nginx-server-configuration-root server))
>> (index (nginx-server-configuration-index server))
>> + (try-files (nginx-server-configuration-try-files server))
>> (server-tokens? (nginx-server-configuration-server-tokens? server))
>> (locations (nginx-server-configuration-locations server)))
>> (define-syntax-parameter <> (syntax-rules ()))
>> @@ -207,6 +210,7 @@ of index files."
>> (and/l ssl-certificate-key " ssl_certificate_key " <> ";\n")
>> " root " root ";\n"
>> " index " (config-index-strings index) ";\n"
>> + " try_files " (config-index-strings try-files) ";\n"
>> " server_tokens " (if server-tokens? "on" "off") ";\n"
>> "\n"
>> (map emit-nginx-location-config locations)
>
> Could you submit these nginx changes separately for discussion? We’ll
> also need to document them. Maybe Cc Chris Baines and other nginx
> people.
Done with Julien Lepiller.
Attached a new patch.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: gnu/services/version-control.scm --]
[-- Type: text/x-patch, Size: 7638 bytes --]
From 64b328c90fbaedca4b081fb33af6e3dbae27eeb6 Mon Sep 17 00:00:00 2001
From: Oleg Pykhalov <go.wigust@gmail.com>
Date: Thu, 28 Sep 2017 20:02:35 +0300
Subject: [PATCH] gnu: services: version-control: Add cgit.
* gnu/services/version-control.scm
(<cgit-configuration-file>, <cgit-configuration>): New record types.
(cgit-configuration-robots-string, cgit-activation,
cgit-configuration-nginx-config): New procedures.
(%cgit-configuration-nginx, cgit-service-type): New variables.
* doc/guix.texi (Version Control): Document the cgit service.
---
doc/guix.texi | 63 ++++++++++++++++++++++
gnu/services/version-control.scm | 109 ++++++++++++++++++++++++++++++++++++++-
2 files changed, 171 insertions(+), 1 deletion(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index 1b329d255..4bdbe4b70 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -17000,6 +17000,69 @@ Extra options will be passed to @code{git daemon}, please run
@end table
@end deftp
+@subsubheading Cgit service
+
+@uref{https://git.zx2c4.com/cgit/, Cgit} is a web frontend for Git
+repositories written in C.
+
+The following example will configure the service with default values.
+By default, Cgit can be accessed on port 80 (@code{http://localhost:80}).
+
+@example
+(service nginx-service-type)
+(service fcgiwrap-service-type)
+(service cgit-service-type)
+@end example
+
+@deftp {Data Type} cgit-configuration
+Data type representing the configuration of Cgit.
+This type has the following parameters:
+
+@table @asis
+@item @code{config-file} (default: @code{(cgit-configuration-file)})
+The configuration file to use for Cgit. This can be set to a
+@dfn{cgit-configuration-file} record value, or any gexp
+(@pxref{G-Expressions}).
+
+For example, to instead use a local file, the @code{local-file} function
+can be used:
+
+@example
+(service cgit-service-type
+ (cgit-configuration
+ (config-file (local-file "./my-cgitrc.conf"))))
+@end example
+
+@item @code{package} (default: @code{cgit})
+The Cgit package to use.
+
+@end table
+@end deftp
+
+@deftp {Data Type} cgit-configuration-file
+Data type representing the configuration options for Cgit.
+This type has the following parameters:
+
+@table @asis
+@item @code{css} (default: @code{"/share/cgit/cgit.css"})
+URL which specifies the css document to include in all Cgit pages.
+
+@item @code{logo} (default: @code{"/share/cgit/cgit.png"})
+URL which specifies the source of an image which will be used as a logo
+on all Cgit pages.
+
+@item @code{virtual-root} (default: @code{"/"})
+URL which, if specified, will be used as root for all Cgit links.
+
+@item @code{repository-directory} (default: @code{"/srv/git"})
+Name of the directory to scan for repositories.
+
+@item @code{robots} (default: @code{(list "noindex" "nofollow")})
+Text used as content for the ``robots'' meta-tag.
+
+@end table
+@end deftp
+
@node Setuid Programs
@subsection Setuid Programs
diff --git a/gnu/services/version-control.scm b/gnu/services/version-control.scm
index 107bc8e77..50b09c0ce 100644
--- a/gnu/services/version-control.scm
+++ b/gnu/services/version-control.scm
@@ -21,18 +21,40 @@
#:use-module (gnu services)
#:use-module (gnu services base)
#:use-module (gnu services shepherd)
+ #:use-module (gnu services web)
#:use-module (gnu system shadow)
#:use-module (gnu packages version-control)
#:use-module (gnu packages admin)
#:use-module (guix records)
#:use-module (guix gexp)
+ #:use-module (guix store)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-26)
#:use-module (ice-9 match)
#:export (git-daemon-service
git-daemon-service-type
git-daemon-configuration
- git-daemon-configuration?))
+ git-daemon-configuration?
+
+ <cgit-configuration-file>
+ cgit-configuration-file
+ cgit-configuration-file?
+ cgit-configuration-file-css
+ cgit-configuration-file-logo
+ cgit-configuration-file-robots
+ cgit-configuration-file-virtual-root
+ cgit-configuration-file-scan-path
+
+ <cgit-configuration>
+ cgit-configuration
+ cgit-configuration?
+ cgit-configuration-config-file
+ cgit-configuration-package
+
+ %cgit-configuration-nginx
+ cgit-configuration-nginx-config
+
+ cgit-service-type))
;;; Commentary:
;;;
@@ -139,3 +161,88 @@ The optional @var{config} argument should be a
@code{<git-daemon-configuration>} object, by default it allows read-only
access to exported repositories under @file{/srv/git}."
(service git-daemon-service-type config))
+
+\f
+;;;
+;;; Cgit
+;;;
+
+(define-record-type* <cgit-configuration-file>
+ cgit-configuration-file make-cgit-configuration-file
+ cgit-configuration-file?
+ (css cgit-configuration-file-css
+ (default "/share/cgit/cgit.css"))
+ (logo cgit-configuration-file-logo
+ (default "/share/cgit/cgit.png"))
+ (robots cgit-configuration-file-robots
+ (default '("noindex" "nofollow")))
+ (virtual-root cgit-configuration-file-virtual-root
+ (default "/"))
+ (repository-directory cgit-configuration-file-repository-directory
+ (default "/srv/git")))
+
+(define (cgit-configuration-robots-string robots)
+ (string-join robots ", "))
+
+(define-gexp-compiler (cgit-configuration-file-compiler
+ (file <cgit-configuration-file>) system target)
+ (match file
+ (($ <cgit-configuration-file> css logo
+ robots virtual-root repository-directory)
+ (text-file
+ "cgitrc"
+ (string-concatenate
+ (filter-map
+ (match-lambda
+ ((key . #f) #f)
+ ((key . value) (string-append key "=" value "\n")))
+ `(("css" . ,css)
+ ("logo" . ,logo)
+ ("robots" . ,(cgit-configuration-robots-string robots))
+ ("virtual-root" . ,virtual-root)
+ ("repository-directory" . ,repository-directory))))))))
+
+(define %cgit-configuration-nginx
+ (list
+ (nginx-server-configuration
+ (root cgit)
+ (locations
+ (list
+ (nginx-location-configuration
+ (uri "@cgit")
+ (body '("fastcgi_param SCRIPT_FILENAME $document_root/lib/cgit/cgit.cgi;"
+ "fastcgi_param PATH_INFO $uri;"
+ "fastcgi_param QUERY_STRING $args;"
+ "fastcgi_param HTTP_HOST $server_name;"
+ "fastcgi_pass 127.0.0.1:9000;")))))
+ (try-files (list "$uri" "@cgit"))
+ (https-port #f)
+ (ssl-certificate #f)
+ (ssl-certificate-key #f))))
+
+(define-record-type* <cgit-configuration>
+ cgit-configuration make-cgit-configuration
+ cgit-configuration?
+ (config-file cgit-configuration-config-file
+ (default (cgit-configuration-file)))
+ (package cgit-configuration-package
+ (default cgit))
+ (nginx cgit-configuration-nginx
+ (default %cgit-configuration-nginx)))
+
+(define (cgit-activation config)
+ ;; Cgit compiled with default configuration path
+ #~(copy-file #$(cgit-configuration-config-file config) "/etc/cgitrc"))
+
+(define (cgit-configuration-nginx-config config)
+ (cgit-configuration-nginx config))
+
+(define cgit-service-type
+ (service-type
+ (name 'cgit)
+ (extensions
+ (list (service-extension activation-service-type
+ cgit-activation)
+ (service-extension nginx-service-type
+ cgit-configuration-nginx-config)))
+ (default-value (cgit-configuration))))
--
2.14.1
[-- Attachment #3: Type: text/plain, Size: 142 bytes --]
I also wrote a test, but I don't understand why Cgit cannot find
test repository.
;;; (response (404 "…No repositories found…"))
[-- Attachment #4: gnu/tests/version-control.scm --]
[-- Type: text/plain, Size: 5556 bytes --]
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2017 Oleg Pykhalov <go.wigust@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 GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (gnu tests version-control)
#:use-module (gnu tests)
#:use-module (gnu system)
#:use-module (gnu system file-systems)
#:use-module (gnu system shadow)
#:use-module (gnu system vm)
#:use-module (gnu services)
#:use-module (gnu services version-control)
#:use-module (gnu services web)
#:use-module (gnu services networking)
#:use-module (gnu packages version-control)
#:use-module (guix gexp)
#:use-module (guix store)
#:export (%test-cgit))
(define %make-git-repository
;; Create Git repository in /srv/git/test.
#~(begin
(mkdir-p "/srv/git/test")
(system* (string-append #$git "/bin/git") "-C" "/srv/git/test" "init")))
(define %cgit-configuration-nginx
(list
(nginx-server-configuration
(root cgit)
(locations
(list
(nginx-location-configuration
(uri "@cgit")
(body '("fastcgi_param SCRIPT_FILENAME $document_root/lib/cgit/cgit.cgi;"
"fastcgi_param PATH_INFO $uri;"
"fastcgi_param QUERY_STRING $args;"
"fastcgi_param HTTP_HOST $server_name;"
"fastcgi_pass 127.0.0.1:9000;")))))
(try-files (list "$uri" "@cgit"))
(http-port 19418)
(https-port #f)
(ssl-certificate #f)
(ssl-certificate-key #f))))
(define %cgit-os
;; Operating system under test.
(let ((base-os
(simple-operating-system
(dhcp-client-service)
(service nginx-service-type)
(service fcgiwrap-service-type)
(service cgit-service-type
(cgit-configuration
(nginx %cgit-configuration-nginx)))
(simple-service 'make-git-repository activation-service-type
%make-git-repository))))
(operating-system
(inherit base-os)
(packages (cons* git
(operating-system-packages base-os))))))
(define* (run-cgit-test #:optional (http-port 19418))
"Run tests in %CGIT-OS, which has nginx running and listening on
HTTP-PORT."
(define os
(marionette-operating-system
%cgit-os
#:imported-modules '((gnu services herd)
(guix combinators))))
(define vm
(virtual-machine
(operating-system os)
(port-forwardings `((8080 . ,http-port)))))
(define test
(with-imported-modules '((gnu build marionette))
#~(begin
(use-modules (srfi srfi-11) (srfi srfi-64)
(gnu build marionette)
(web uri)
(web client)
(web response))
(define marionette
(make-marionette (list #$vm)))
(mkdir #$output)
(chdir #$output)
(test-begin "cgit")
;; Wait for nginx to be up and running.
(test-eq "service running"
'running!
(marionette-eval
'(begin
(use-modules (gnu services herd))
(start-service 'nginx)
'running!)
marionette))
;; Wait for fcgiwrap to be up and running.
(test-eq "service running"
'running!
(marionette-eval
'(begin
(use-modules (gnu services herd))
(start-service 'fcgiwrap)
'running!)
marionette))
;; Make sure the PID file is created.
(test-assert "PID file"
(marionette-eval
'(file-exists? "/var/run/nginx/pid")
marionette))
;; Make sure the configuration file is created.
(test-assert "Configuration file"
(marionette-eval
'(file-exists? "/etc/cgitrc")
marionette))
;; Make sure Git test repository is created.
(test-assert "Git test repository"
(marionette-eval
'(file-exists? "/srv/git/test/.git")
marionette))
;; Retrieve the index.html file we put in /srv.
(test-equal "http-get"
'(200)
(let-values (((response text)
(http-get "http://localhost:8080"
#:decode-body? #t)))
;; TODO Leave only response-code.
(pk 'response (list (response-code response) text))))
(test-end)
(exit (= (test-runner-fail-count (test-runner-current)) 0)))))
(gexp->derivation "cgit-test" test))
(define %test-cgit
(system-test
(name "cgit")
(description "Connect to a running CGIT server.")
(value (run-cgit-test))))
[-- Attachment #5: Type: text/plain, Size: 1236 bytes --]
I wish to make a VM with ‘guix system vm gnu/tests/version-control.scm’,
but it's not working. It also doesn't work for ‘gnu/tests/web.scm’ and
‘gnu/tests/rsync.scm’. But I sure it worked with ‘gnu/tests/rsync.scm’.
--8<---------------cut here---------------start------------->8---
$ ./pre-inst-env guix system vm gnu/tests/web.scm
Backtrace:
5 (primitive-load "/gnu/store/zh0lb2g15hirq7zw2477w7s5ww7dxkv0-guix-0.…")
In guix/ui.scm:
1375:12 4 (run-guix-command _ . _)
In ice-9/boot-9.scm:
837:9 3 (catch _ _ #<procedure 7fb95f8569d8 at guix/ui.scm:451:2 (key c)> _)
837:9 2 (catch _ _ #<procedure 7fb95f8569f0 at guix/ui.scm:539:6 (key proc …> …)
In guix/scripts/system.scm:
1034:8 1 (_)
904:28 0 (process-action vm _ ((argument . "gnu/tests/web.scm") (action . #) …))
guix/scripts/system.scm:904:28: In procedure process-action:
guix/scripts/system.scm:904:28: In procedure struct_vtable: Wrong type argument in position 1 (expecting struct): #<unspecified>
--8<---------------cut here---------------end--------------->8---
Then I prepared a VM declaration in system-cgit.scm. It works and I got
response 200. So, I have no idea why test fails.
[-- Attachment #6: system-cgit.scm --]
[-- Type: text/plain, Size: 2912 bytes --]
;; This is an operating system configuration template
;; for a "bare bones" setup, with no X11 display server.
(use-modules (gnu))
(use-service-modules networking version-control web)
(use-package-modules curl version-control)
(define %make-git-repository
;; Create Git repository in /srv/git/test.
#~(begin
(mkdir-p "/srv/git/test")
(system* (string-append #$git "/bin/git") "-C" "/srv/git/test" "init")))
(define %cgit-configuration-nginx
(list
(nginx-server-configuration
(root cgit)
(locations
(list
(nginx-location-configuration
(uri "@cgit")
(body '("fastcgi_param SCRIPT_FILENAME $document_root/lib/cgit/cgit.cgi;"
"fastcgi_param PATH_INFO $uri;"
"fastcgi_param QUERY_STRING $args;"
"fastcgi_param HTTP_HOST $server_name;"
"fastcgi_pass 127.0.0.1:9000;")))))
(try-files (list "$uri" "@cgit"))
(http-port 19418)
(https-port #f)
(ssl-certificate #f)
(ssl-certificate-key #f))))
(operating-system
(host-name "komputilo")
(timezone "Europe/Moscow")
(locale "en_US.utf8")
;; Assuming /dev/sdX is the target hard disk, and "my-root" is
;; the label of the target root file system.
(bootloader (grub-configuration (target "/dev/sda")
(terminal-outputs '(console))))
(file-systems (cons (file-system
(device "my-root")
(title 'label)
(mount-point "/")
(type "ext4"))
%base-file-systems))
;; This is where user accounts are specified. The "root"
;; account is implicit, and is initially created with the
;; empty password.
(users (cons (user-account
(name "alice")
(comment "Bob's sister")
(group "users")
;; Adding the account to the "wheel" group
;; makes it a sudoer. Adding it to "audio"
;; and "video" allows the user to play sound
;; and access the webcam.
(supplementary-groups '("wheel"
"audio" "video"))
(home-directory "/home/alice"))
%base-user-accounts))
(packages (cons* git
curl
%base-packages))
;; Add services to the baseline: a DHCP client and
;; an SSH server.
(services (cons* (dhcp-client-service)
(service nginx-service-type)
(service fcgiwrap-service-type)
(service cgit-service-type
(cgit-configuration
(nginx %cgit-configuration-nginx)))
(simple-service 'make-git-repository activation-service-type
%make-git-repository)
%base-services)))
[-- Attachment #7: Type: text/plain, Size: 20 bytes --]
Thanks for review!
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [bug#28283] Status: [PATCH 1/1] gnu: services: version-control: Add cgit.
2017-09-29 14:05 ` Oleg Pykhalov
@ 2017-10-01 21:55 ` Ludovic Courtès
2017-10-03 6:22 ` Oleg Pykhalov
0 siblings, 1 reply; 16+ messages in thread
From: Ludovic Courtès @ 2017-10-01 21:55 UTC (permalink / raw)
To: Oleg Pykhalov; +Cc: 28283
[-- Attachment #1: Type: text/plain, Size: 2049 bytes --]
Hi Oleg,
Oleg Pykhalov <go.wigust@gmail.com> skribis:
> ‘try-files’ are in ‘<nginx-server-configuration>’ in origin/master now,
> https://git.savannah.gnu.org/cgit/guix.git/commit/?id=4d14808af4c01b4fb0a4564584aa68f0e53c4ef4
Awesome.
>> Please add a sentence above or below the example like “This example
>> shows …”.
>
> Sorry, I don't understand what do you mean. There is a sentence above
> example that answers a question “What does example do?” and I guess
> “What does example show?”.
Oops you’re right, sorry for overlooking this.
> From 64b328c90fbaedca4b081fb33af6e3dbae27eeb6 Mon Sep 17 00:00:00 2001
> From: Oleg Pykhalov <go.wigust@gmail.com>
> Date: Thu, 28 Sep 2017 20:02:35 +0300
> Subject: [PATCH] gnu: services: version-control: Add cgit.
>
> * gnu/services/version-control.scm
> (<cgit-configuration-file>, <cgit-configuration>): New record types.
> (cgit-configuration-robots-string, cgit-activation,
> cgit-configuration-nginx-config): New procedures.
> (%cgit-configuration-nginx, cgit-service-type): New variables.
> * doc/guix.texi (Version Control): Document the cgit service.
[...]
> +(define-gexp-compiler (cgit-configuration-file-compiler
> + (file <cgit-configuration-file>) system target)
> + (match file
> + (($ <cgit-configuration-file> css logo
> + robots virtual-root repository-directory)
> + (text-file
> + "cgitrc"
> + (string-concatenate
> + (filter-map
> + (match-lambda
> + ((key . #f) #f)
> + ((key . value) (string-append key "=" value "\n")))
> + `(("css" . ,css)
> + ("logo" . ,logo)
> + ("robots" . ,(cgit-configuration-robots-string robots))
> + ("virtual-root" . ,virtual-root)
> + ("repository-directory" . ,repository-directory))))))))
I changed this part like this so that things work as expected if we pass
items that live in the store (along with other changes):
[-- Attachment #2: Type: text/x-patch, Size: 2634 bytes --]
diff --git a/doc/guix.texi b/doc/guix.texi
index 4bdbe4b70..d5abf900a 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -17000,8 +17000,10 @@ Extra options will be passed to @code{git daemon}, please run
@end table
@end deftp
-@subsubheading Cgit service
+@subsubheading Cgit Service
+@cindex Cgit service
+@cindex Git, web interface
@uref{https://git.zx2c4.com/cgit/, Cgit} is a web frontend for Git
repositories written in C.
diff --git a/gnu/services/version-control.scm b/gnu/services/version-control.scm
index 50b09c0ce..208351447 100644
--- a/gnu/services/version-control.scm
+++ b/gnu/services/version-control.scm
@@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
;;; Copyright © 2016 Sou Bunnbu <iyzsong@member.fsf.org>
+;;; Copyright © 2017 Oleg Pykhalov <go.wigust@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -189,18 +190,23 @@ access to exported repositories under @file{/srv/git}."
(match file
(($ <cgit-configuration-file> css logo
robots virtual-root repository-directory)
- (text-file
- "cgitrc"
- (string-concatenate
- (filter-map
- (match-lambda
- ((key . #f) #f)
- ((key . value) (string-append key "=" value "\n")))
- `(("css" . ,css)
- ("logo" . ,logo)
- ("robots" . ,(cgit-configuration-robots-string robots))
- ("virtual-root" . ,virtual-root)
- ("repository-directory" . ,repository-directory))))))))
+ (apply text-file* "cgitrc"
+ (letrec-syntax ((option (syntax-rules ()
+ ((_ key value)
+ (if value
+ `(,key "=" ,value)
+ '()))))
+ (key/value (syntax-rules ()
+ ((_ (key value) rest ...)
+ (append (option key value)
+ (key/value rest ...)))
+ ((_)
+ '()))))
+ (key/value ("css" css)
+ ("logo" logo)
+ ("robots" (cgit-configuration-robots-string robots))
+ ("virtual-root" virtual-root)
+ ("repository-directory" repository-directory)))))))
(define %cgit-configuration-nginx
(list
[-- Attachment #3: Type: text/plain, Size: 1102 bytes --]
I looked at the test failures, and I wonder if everything’s working as
intended. What I did for debugging was:
--8<---------------cut here---------------start------------->8---
$ guix gc -R /gnu/store/i71plcn5y8b29nc59s5d7m2cx810ki6n-cgit-test.drv |grep run-vm
/gnu/store/v9s4ai0dvgvmga6lyj4z2733lavr3acl-run-vm.sh-builder
/gnu/store/6a2l7mcshdzc38zj8nkinjlzqmgjnx3b-run-vm.sh.drv
$ guix build /gnu/store/6a2l7mcshdzc38zj8nkinjlzqmgjnx3b-run-vm.sh.drv
/gnu/store/igjg0i4d3sj77jpgppn09r66jql6nliw-run-vm.sh
$ /gnu/store/igjg0i4d3sj77jpgppn09r66jql6nliw-run-vm.sh -serial stdio
…
--8<---------------cut here---------------end--------------->8---
Then I experimented with w3m inside the VM.
Apparently some URLs are being rewritten, with
/cgit.cgi/cgit.cgi/cgit.cgi/… and so on, which looks weird.
Could you investigate more in a VM (you can simply use ‘guix system vm’
with a config similar to that of the test) to see what’s going on?
Looks like we’re almost there, but I’d feel more confident if we could
get a test running. :-)
Thank you!
Ludo’.
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [bug#28283] Status: [PATCH 1/1] gnu: services: version-control: Add cgit.
2017-10-01 21:55 ` Ludovic Courtès
@ 2017-10-03 6:22 ` Oleg Pykhalov
2017-10-03 6:31 ` Oleg Pykhalov
0 siblings, 1 reply; 16+ messages in thread
From: Oleg Pykhalov @ 2017-10-03 6:22 UTC (permalink / raw)
To: Ludovic Courtès; +Cc: 28283
[-- Attachment #1: Type: text/plain, Size: 314 bytes --]
Hello Ludovic,
ludo@gnu.org (Ludovic Courtès) writes:
[...]
> I changed this part like this so that things work as expected if we pass
> items that live in the store (along with other changes):
[...]
Thanks. But we need to add newline character. Otherwise cgitrc config
will be in one line.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Type: text/x-patch, Size: 735 bytes --]
diff --git a/gnu/services/version-control.scm b/gnu/services/version-control.scm
index 208351447..8666648c0 100644
--- a/gnu/services/version-control.scm
+++ b/gnu/services/version-control.scm
@@ -194,7 +194,7 @@ access to exported repositories under @file{/srv/git}."
(letrec-syntax ((option (syntax-rules ()
((_ key value)
(if value
- `(,key "=" ,value)
+ `(,key "=" ,value "\n")
'()))))
(key/value (syntax-rules ()
((_ (key value) rest ...)
[-- Attachment #3: Type: text/plain, Size: 1429 bytes --]
> $ guix gc -R /gnu/store/i71plcn5y8b29nc59s5d7m2cx810ki6n-cgit-test.drv |grep run-vm
> /gnu/store/v9s4ai0dvgvmga6lyj4z2733lavr3acl-run-vm.sh-builder
> /gnu/store/6a2l7mcshdzc38zj8nkinjlzqmgjnx3b-run-vm.sh.drv
> $ guix build /gnu/store/6a2l7mcshdzc38zj8nkinjlzqmgjnx3b-run-vm.sh.drv
> /gnu/store/igjg0i4d3sj77jpgppn09r66jql6nliw-run-vm.sh
> $ /gnu/store/igjg0i4d3sj77jpgppn09r66jql6nliw-run-vm.sh -serial stdio
Awesome, this is what I'm searching for.
> Then I experimented with w3m inside the VM.
>
> Apparently some URLs are being rewritten, with
> /cgit.cgi/cgit.cgi/cgit.cgi/… and so on, which looks weird.
>
> Could you investigate more in a VM (you can simply use ‘guix system vm’
> with a config similar to that of the test) to see what’s going on?
> Looks like we’re almost there, but I’d feel more confident if we could
> get a test running. :-)
I think this was because of one line cgitrc config. I have some issues
with testing in VM again.
$ /gnu/store/igjg0i4d3sj77jpgppn09r66jql6nliw-run-vm.sh -net user,hostfwd=tcp::10080-:19418 -serial stdio
will freeze most of time without `sudo'. If I use `sudo' then I could
open site in Icecat, but after several seconds only “The connection was
reset”.
$ curl http://localhost:10080
curl: (52) Empty reply from server
Also `marionette' service is too much respawning and then dies according
to `herd status'
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [bug#28283] Status: [PATCH 1/1] gnu: services: version-control: Add cgit.
2017-10-03 6:22 ` Oleg Pykhalov
@ 2017-10-03 6:31 ` Oleg Pykhalov
2017-10-03 7:30 ` Oleg Pykhalov
0 siblings, 1 reply; 16+ messages in thread
From: Oleg Pykhalov @ 2017-10-03 6:31 UTC (permalink / raw)
To: Ludovic Courtès; +Cc: 28283
Oleg Pykhalov <go.wigust@gmail.com> writes:
[...]
> $ /gnu/store/igjg0i4d3sj77jpgppn09r66jql6nliw-run-vm.sh -net user,hostfwd=tcp::10080-:19418 -serial stdio
>
> will freeze most of time without `sudo'. If I use `sudo' then I could
> open site in Icecat, but after several seconds only “The connection was
> reset”.
Ah, I forgot about that VM build from test already has one `…-net
user,hostfwd=tcp::8080-:19418…'. This is probably why I have this
issue.
[...]
^ permalink raw reply [flat|nested] 16+ messages in thread
* [bug#28283] Status: [PATCH 1/1] gnu: services: version-control: Add cgit.
2017-10-03 6:31 ` Oleg Pykhalov
@ 2017-10-03 7:30 ` Oleg Pykhalov
2017-10-03 7:36 ` Oleg Pykhalov
0 siblings, 1 reply; 16+ messages in thread
From: Oleg Pykhalov @ 2017-10-03 7:30 UTC (permalink / raw)
To: Ludovic Courtès; +Cc: 28283
[-- Attachment #1: 0001-gnu-services-version-control-Add-cgit.patch --]
[-- Type: text/x-patch, Size: 15362 bytes --]
From b1d8c4be457c86d79b4131090997e63664496ba3 Mon Sep 17 00:00:00 2001
From: Oleg Pykhalov <go.wigust@gmail.com>
Date: Thu, 28 Sep 2017 20:02:35 +0300
Subject: [PATCH] gnu: services: version-control: Add cgit.
* gnu/services/version-control.scm
(<cgit-configuration-file>, <cgit-configuration>): New record types.
(cgit-configuration-robots-string, cgit-activation,
cgit-configuration-nginx-config): New procedures.
(%cgit-configuration-nginx, cgit-service-type): New variables.
* doc/guix.texi (Version Control): Document the cgit service.
---
doc/guix.texi | 65 ++++++++++++++++
gnu/local.mk | 1 +
gnu/services/version-control.scm | 119 ++++++++++++++++++++++++++++-
gnu/tests/version-control.scm | 161 +++++++++++++++++++++++++++++++++++++++
4 files changed, 345 insertions(+), 1 deletion(-)
create mode 100644 gnu/tests/version-control.scm
diff --git a/doc/guix.texi b/doc/guix.texi
index c57c0bab6..f99257947 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -17000,6 +17000,71 @@ Extra options will be passed to @code{git daemon}, please run
@end table
@end deftp
+@subsubheading Cgit Service
+
+@cindex Cgit service
+@cindex Git, web interface
+@uref{https://git.zx2c4.com/cgit/, Cgit} is a web frontend for Git
+repositories written in C.
+
+The following example will configure the service with default values.
+By default, Cgit can be accessed on port 80 (@code{http://localhost:80}).
+
+@example
+(service nginx-service-type)
+(service fcgiwrap-service-type)
+(service cgit-service-type)
+@end example
+
+@deftp {Data Type} cgit-configuration
+Data type representing the configuration of Cgit.
+This type has the following parameters:
+
+@table @asis
+@item @code{config-file} (default: @code{(cgit-configuration-file)})
+The configuration file to use for Cgit. This can be set to a
+@dfn{cgit-configuration-file} record value, or any gexp
+(@pxref{G-Expressions}).
+
+For example, to instead use a local file, the @code{local-file} function
+can be used:
+
+@example
+(service cgit-service-type
+ (cgit-configuration
+ (config-file (local-file "./my-cgitrc.conf"))))
+@end example
+
+@item @code{package} (default: @code{cgit})
+The Cgit package to use.
+
+@end table
+@end deftp
+
+@deftp {Data Type} cgit-configuration-file
+Data type representing the configuration options for Cgit.
+This type has the following parameters:
+
+@table @asis
+@item @code{css} (default: @code{"/share/cgit/cgit.css"})
+URL which specifies the css document to include in all Cgit pages.
+
+@item @code{logo} (default: @code{"/share/cgit/cgit.png"})
+URL which specifies the source of an image which will be used as a logo
+on all Cgit pages.
+
+@item @code{virtual-root} (default: @code{"/"})
+URL which, if specified, will be used as root for all Cgit links.
+
+@item @code{repository-directory} (default: @code{"/srv/git"})
+Name of the directory to scan for repositories.
+
+@item @code{robots} (default: @code{(list "noindex" "nofollow")})
+Text used as content for the ``robots'' meta-tag.
+
+@end table
+@end deftp
+
@node Setuid Programs
@subsection Setuid Programs
diff --git a/gnu/local.mk b/gnu/local.mk
index edd6d8237..0ac1a7e6f 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -501,6 +501,7 @@ GNU_SYSTEM_MODULES = \
%D%/tests/networking.scm \
%D%/tests/rsync.scm \
%D%/tests/ssh.scm \
+ %D%/packages/version-control.scm \
%D%/tests/virtualization.scm \
%D%/tests/web.scm
diff --git a/gnu/services/version-control.scm b/gnu/services/version-control.scm
index 107bc8e77..e39f4411f 100644
--- a/gnu/services/version-control.scm
+++ b/gnu/services/version-control.scm
@@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
;;; Copyright © 2016 Sou Bunnbu <iyzsong@member.fsf.org>
+;;; Copyright © 2017 Oleg Pykhalov <go.wigust@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -21,18 +22,40 @@
#:use-module (gnu services)
#:use-module (gnu services base)
#:use-module (gnu services shepherd)
+ #:use-module (gnu services web)
#:use-module (gnu system shadow)
#:use-module (gnu packages version-control)
#:use-module (gnu packages admin)
#:use-module (guix records)
#:use-module (guix gexp)
+ #:use-module (guix store)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-26)
#:use-module (ice-9 match)
#:export (git-daemon-service
git-daemon-service-type
git-daemon-configuration
- git-daemon-configuration?))
+ git-daemon-configuration?
+
+ <cgit-configuration-file>
+ cgit-configuration-file
+ cgit-configuration-file?
+ cgit-configuration-file-css
+ cgit-configuration-file-logo
+ cgit-configuration-file-robots
+ cgit-configuration-file-virtual-root
+ cgit-configuration-file-repository-directory
+
+ <cgit-configuration>
+ cgit-configuration
+ cgit-configuration?
+ cgit-configuration-config-file
+ cgit-configuration-package
+
+ %cgit-configuration-nginx
+ cgit-configuration-nginx-config
+
+ cgit-service-type))
;;; Commentary:
;;;
@@ -139,3 +162,97 @@ The optional @var{config} argument should be a
@code{<git-daemon-configuration>} object, by default it allows read-only
access to exported repositories under @file{/srv/git}."
(service git-daemon-service-type config))
+
+\f
+;;;
+;;; Cgit
+;;;
+
+(define-record-type* <cgit-configuration-file>
+ cgit-configuration-file
+ make-cgit-configuration-file
+ cgit-configuration-file?
+ (css cgit-configuration-file-css ; string
+ (default "/share/cgit/cgit.css"))
+ (logo cgit-configuration-file-logo ; string
+ (default "/share/cgit/cgit.png"))
+ (robots cgit-configuration-file-robots ; list
+ (default '("noindex" "nofollow")))
+ (virtual-root cgit-configuration-file-virtual-root ; string
+ (default "/"))
+ (repository-directory cgit-configuration-file-repository-directory ; string
+ (default "/srv/git")))
+
+(define (cgit-configuration-robots-string robots)
+ (string-join robots ", "))
+
+(define-gexp-compiler (cgit-configuration-file-compiler
+ (file <cgit-configuration-file>) system target)
+ (match file
+ (($ <cgit-configuration-file> css logo
+ robots virtual-root repository-directory)
+ (apply text-file* "cgitrc"
+ (letrec-syntax ((option (syntax-rules ()
+ ((_ key value)
+ (if value
+ `(,key "=" ,value "\n")
+ '()))))
+ (key/value (syntax-rules ()
+ ((_ (key value) rest ...)
+ (append (option key value)
+ (key/value rest ...)))
+ ((_)
+ '()))))
+ (key/value ("css" css)
+ ("logo" logo)
+ ("robots" (cgit-configuration-robots-string robots))
+ ("virtual-root" virtual-root)
+ ("scan-path" repository-directory)))))))
+
+(define %cgit-configuration-nginx
+ (list
+ (nginx-server-configuration
+ (root cgit)
+ (locations
+ (list
+ (nginx-location-configuration
+ (uri "@cgit")
+ (body '("fastcgi_param SCRIPT_FILENAME $document_root/lib/cgit/cgit.cgi;"
+ "fastcgi_param PATH_INFO $uri;"
+ "fastcgi_param QUERY_STRING $args;"
+ "fastcgi_param HTTP_HOST $server_name;"
+ "fastcgi_pass 127.0.0.1:9000;")))))
+ (try-files (list "$uri" "@cgit"))
+ (https-port #f)
+ (ssl-certificate #f)
+ (ssl-certificate-key #f))))
+
+(define-record-type* <cgit-configuration>
+ cgit-configuration make-cgit-configuration
+ cgit-configuration?
+ (config-file cgit-configuration-config-file
+ (default (cgit-configuration-file)))
+ (package cgit-configuration-package
+ (default cgit))
+ (nginx cgit-configuration-nginx
+ (default %cgit-configuration-nginx)))
+
+(define (cgit-activation config)
+ ;; Cgit compiled with default configuration path
+ #~(begin
+ (use-modules (guix build utils))
+ (mkdir-p "/var/cache/cgit")
+ (copy-file #$(cgit-configuration-config-file config) "/etc/cgitrc")))
+
+(define (cgit-configuration-nginx-config config)
+ (cgit-configuration-nginx config))
+
+(define cgit-service-type
+ (service-type
+ (name 'cgit)
+ (extensions
+ (list (service-extension activation-service-type
+ cgit-activation)
+ (service-extension nginx-service-type
+ cgit-configuration-nginx-config)))
+ (default-value (cgit-configuration))))
diff --git a/gnu/tests/version-control.scm b/gnu/tests/version-control.scm
new file mode 100644
index 000000000..11adb37f0
--- /dev/null
+++ b/gnu/tests/version-control.scm
@@ -0,0 +1,161 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2017 Oleg Pykhalov <go.wigust@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 GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu tests version-control)
+ #:use-module (gnu tests)
+ #:use-module (gnu system)
+ #:use-module (gnu system file-systems)
+ #:use-module (gnu system shadow)
+ #:use-module (gnu system vm)
+ #:use-module (gnu services)
+ #:use-module (gnu services version-control)
+ #:use-module (gnu services web)
+ #:use-module (gnu services networking)
+ #:use-module (gnu packages version-control)
+ #:use-module (guix gexp)
+ #:use-module (guix store)
+ #:export (%test-cgit))
+
+(define %make-git-repository
+ ;; Create Git repository in /srv/git/test.
+ #~(begin
+ (mkdir-p "/srv/git/test")
+ (system* (string-append #$git "/bin/git") "-C" "/srv/git/test" "init")))
+
+(define %cgit-configuration-nginx
+ (list
+ (nginx-server-configuration
+ (root cgit)
+ (locations
+ (list
+ (nginx-location-configuration
+ (uri "@cgit")
+ (body '("fastcgi_param SCRIPT_FILENAME $document_root/lib/cgit/cgit.cgi;"
+ "fastcgi_param PATH_INFO $uri;"
+ "fastcgi_param QUERY_STRING $args;"
+ "fastcgi_param HTTP_HOST $server_name;"
+ "fastcgi_pass 127.0.0.1:9000;")))))
+ (try-files (list "$uri" "@cgit"))
+ (http-port 19418)
+ (https-port #f)
+ (ssl-certificate #f)
+ (ssl-certificate-key #f))))
+
+(define %cgit-os
+ ;; Operating system under test.
+ (let ((base-os
+ (simple-operating-system
+ (dhcp-client-service)
+ (service nginx-service-type)
+ (service fcgiwrap-service-type)
+ (service cgit-service-type
+ (cgit-configuration
+ (nginx %cgit-configuration-nginx)))
+ (simple-service 'make-git-repository activation-service-type
+ %make-git-repository))))
+ (operating-system
+ (inherit base-os)
+ (packages (cons* git
+ (operating-system-packages base-os))))))
+
+(define* (run-cgit-test #:optional (http-port 19418))
+ "Run tests in %CGIT-OS, which has nginx running and listening on
+HTTP-PORT."
+ (define os
+ (marionette-operating-system
+ %cgit-os
+ #:imported-modules '((gnu services herd)
+ (guix combinators))))
+
+ (define vm
+ (virtual-machine
+ (operating-system os)
+ (port-forwardings `((8080 . ,http-port)))))
+
+ (define test
+ (with-imported-modules '((gnu build marionette))
+ #~(begin
+ (use-modules (srfi srfi-11) (srfi srfi-64)
+ (gnu build marionette)
+ (web uri)
+ (web client)
+ (web response))
+
+ (define marionette
+ (make-marionette (list #$vm)))
+
+ (mkdir #$output)
+ (chdir #$output)
+
+ (test-begin "cgit")
+
+ ;; Wait for nginx to be up and running.
+ (test-eq "service running"
+ 'running!
+ (marionette-eval
+ '(begin
+ (use-modules (gnu services herd))
+ (start-service 'nginx)
+ 'running!)
+ marionette))
+
+ ;; Wait for fcgiwrap to be up and running.
+ (test-eq "service running"
+ 'running!
+ (marionette-eval
+ '(begin
+ (use-modules (gnu services herd))
+ (start-service 'fcgiwrap)
+ 'running!)
+ marionette))
+
+ ;; Make sure the PID file is created.
+ (test-assert "PID file"
+ (marionette-eval
+ '(file-exists? "/var/run/nginx/pid")
+ marionette))
+
+ ;; Make sure the configuration file is created.
+ (test-assert "Configuration file"
+ (marionette-eval
+ '(file-exists? "/etc/cgitrc")
+ marionette))
+
+ ;; Make sure Git test repository is created.
+ (test-assert "Git test repository"
+ (marionette-eval
+ '(file-exists? "/srv/git/test/.git")
+ marionette))
+
+ ;; Retrieve the index.html file we put in /srv.
+ (test-equal "http-get"
+ 200
+ (let-values (((response text)
+ (http-get "http://localhost:8080")))
+ (response-code response)))
+
+ (test-end)
+ (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+
+ (gexp->derivation "cgit-test" test))
+
+(define %test-cgit
+ (system-test
+ (name "cgit")
+ (description "Connect to a running CGIT server.")
+ (value (run-cgit-test))))
--
2.14.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [bug#28283] Status: [PATCH 1/1] gnu: services: version-control: Add cgit.
2017-10-03 7:30 ` Oleg Pykhalov
@ 2017-10-03 7:36 ` Oleg Pykhalov
2017-10-03 13:07 ` bug#28283: " Ludovic Courtès
0 siblings, 1 reply; 16+ messages in thread
From: Oleg Pykhalov @ 2017-10-03 7:36 UTC (permalink / raw)
To: Ludovic Courtès; +Cc: 28283
[-- Attachment #1: 0001-gnu-services-version-control-Add-cgit.patch --]
[-- Type: text/x-patch, Size: 15360 bytes --]
From 984b619620046015113cc4876569f5c87dd37c79 Mon Sep 17 00:00:00 2001
From: Oleg Pykhalov <go.wigust@gmail.com>
Date: Thu, 28 Sep 2017 20:02:35 +0300
Subject: [PATCH] gnu: services: version-control: Add cgit.
* gnu/services/version-control.scm
(<cgit-configuration-file>, <cgit-configuration>): New record types.
(cgit-configuration-robots-string, cgit-activation,
cgit-configuration-nginx-config): New procedures.
(%cgit-configuration-nginx, cgit-service-type): New variables.
* doc/guix.texi (Version Control): Document the cgit service.
---
doc/guix.texi | 65 ++++++++++++++++
gnu/local.mk | 1 +
gnu/services/version-control.scm | 119 ++++++++++++++++++++++++++++-
gnu/tests/version-control.scm | 161 +++++++++++++++++++++++++++++++++++++++
4 files changed, 345 insertions(+), 1 deletion(-)
create mode 100644 gnu/tests/version-control.scm
diff --git a/doc/guix.texi b/doc/guix.texi
index c57c0bab6..f99257947 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -17000,6 +17000,71 @@ Extra options will be passed to @code{git daemon}, please run
@end table
@end deftp
+@subsubheading Cgit Service
+
+@cindex Cgit service
+@cindex Git, web interface
+@uref{https://git.zx2c4.com/cgit/, Cgit} is a web frontend for Git
+repositories written in C.
+
+The following example will configure the service with default values.
+By default, Cgit can be accessed on port 80 (@code{http://localhost:80}).
+
+@example
+(service nginx-service-type)
+(service fcgiwrap-service-type)
+(service cgit-service-type)
+@end example
+
+@deftp {Data Type} cgit-configuration
+Data type representing the configuration of Cgit.
+This type has the following parameters:
+
+@table @asis
+@item @code{config-file} (default: @code{(cgit-configuration-file)})
+The configuration file to use for Cgit. This can be set to a
+@dfn{cgit-configuration-file} record value, or any gexp
+(@pxref{G-Expressions}).
+
+For example, to instead use a local file, the @code{local-file} function
+can be used:
+
+@example
+(service cgit-service-type
+ (cgit-configuration
+ (config-file (local-file "./my-cgitrc.conf"))))
+@end example
+
+@item @code{package} (default: @code{cgit})
+The Cgit package to use.
+
+@end table
+@end deftp
+
+@deftp {Data Type} cgit-configuration-file
+Data type representing the configuration options for Cgit.
+This type has the following parameters:
+
+@table @asis
+@item @code{css} (default: @code{"/share/cgit/cgit.css"})
+URL which specifies the css document to include in all Cgit pages.
+
+@item @code{logo} (default: @code{"/share/cgit/cgit.png"})
+URL which specifies the source of an image which will be used as a logo
+on all Cgit pages.
+
+@item @code{virtual-root} (default: @code{"/"})
+URL which, if specified, will be used as root for all Cgit links.
+
+@item @code{repository-directory} (default: @code{"/srv/git"})
+Name of the directory to scan for repositories.
+
+@item @code{robots} (default: @code{(list "noindex" "nofollow")})
+Text used as content for the ``robots'' meta-tag.
+
+@end table
+@end deftp
+
@node Setuid Programs
@subsection Setuid Programs
diff --git a/gnu/local.mk b/gnu/local.mk
index edd6d8237..cceada5ae 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -501,6 +501,7 @@ GNU_SYSTEM_MODULES = \
%D%/tests/networking.scm \
%D%/tests/rsync.scm \
%D%/tests/ssh.scm \
+ %D%/tests/version-control.scm \
%D%/tests/virtualization.scm \
%D%/tests/web.scm
diff --git a/gnu/services/version-control.scm b/gnu/services/version-control.scm
index 107bc8e77..e39f4411f 100644
--- a/gnu/services/version-control.scm
+++ b/gnu/services/version-control.scm
@@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
;;; Copyright © 2016 Sou Bunnbu <iyzsong@member.fsf.org>
+;;; Copyright © 2017 Oleg Pykhalov <go.wigust@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -21,18 +22,40 @@
#:use-module (gnu services)
#:use-module (gnu services base)
#:use-module (gnu services shepherd)
+ #:use-module (gnu services web)
#:use-module (gnu system shadow)
#:use-module (gnu packages version-control)
#:use-module (gnu packages admin)
#:use-module (guix records)
#:use-module (guix gexp)
+ #:use-module (guix store)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-26)
#:use-module (ice-9 match)
#:export (git-daemon-service
git-daemon-service-type
git-daemon-configuration
- git-daemon-configuration?))
+ git-daemon-configuration?
+
+ <cgit-configuration-file>
+ cgit-configuration-file
+ cgit-configuration-file?
+ cgit-configuration-file-css
+ cgit-configuration-file-logo
+ cgit-configuration-file-robots
+ cgit-configuration-file-virtual-root
+ cgit-configuration-file-repository-directory
+
+ <cgit-configuration>
+ cgit-configuration
+ cgit-configuration?
+ cgit-configuration-config-file
+ cgit-configuration-package
+
+ %cgit-configuration-nginx
+ cgit-configuration-nginx-config
+
+ cgit-service-type))
;;; Commentary:
;;;
@@ -139,3 +162,97 @@ The optional @var{config} argument should be a
@code{<git-daemon-configuration>} object, by default it allows read-only
access to exported repositories under @file{/srv/git}."
(service git-daemon-service-type config))
+
+\f
+;;;
+;;; Cgit
+;;;
+
+(define-record-type* <cgit-configuration-file>
+ cgit-configuration-file
+ make-cgit-configuration-file
+ cgit-configuration-file?
+ (css cgit-configuration-file-css ; string
+ (default "/share/cgit/cgit.css"))
+ (logo cgit-configuration-file-logo ; string
+ (default "/share/cgit/cgit.png"))
+ (robots cgit-configuration-file-robots ; list
+ (default '("noindex" "nofollow")))
+ (virtual-root cgit-configuration-file-virtual-root ; string
+ (default "/"))
+ (repository-directory cgit-configuration-file-repository-directory ; string
+ (default "/srv/git")))
+
+(define (cgit-configuration-robots-string robots)
+ (string-join robots ", "))
+
+(define-gexp-compiler (cgit-configuration-file-compiler
+ (file <cgit-configuration-file>) system target)
+ (match file
+ (($ <cgit-configuration-file> css logo
+ robots virtual-root repository-directory)
+ (apply text-file* "cgitrc"
+ (letrec-syntax ((option (syntax-rules ()
+ ((_ key value)
+ (if value
+ `(,key "=" ,value "\n")
+ '()))))
+ (key/value (syntax-rules ()
+ ((_ (key value) rest ...)
+ (append (option key value)
+ (key/value rest ...)))
+ ((_)
+ '()))))
+ (key/value ("css" css)
+ ("logo" logo)
+ ("robots" (cgit-configuration-robots-string robots))
+ ("virtual-root" virtual-root)
+ ("scan-path" repository-directory)))))))
+
+(define %cgit-configuration-nginx
+ (list
+ (nginx-server-configuration
+ (root cgit)
+ (locations
+ (list
+ (nginx-location-configuration
+ (uri "@cgit")
+ (body '("fastcgi_param SCRIPT_FILENAME $document_root/lib/cgit/cgit.cgi;"
+ "fastcgi_param PATH_INFO $uri;"
+ "fastcgi_param QUERY_STRING $args;"
+ "fastcgi_param HTTP_HOST $server_name;"
+ "fastcgi_pass 127.0.0.1:9000;")))))
+ (try-files (list "$uri" "@cgit"))
+ (https-port #f)
+ (ssl-certificate #f)
+ (ssl-certificate-key #f))))
+
+(define-record-type* <cgit-configuration>
+ cgit-configuration make-cgit-configuration
+ cgit-configuration?
+ (config-file cgit-configuration-config-file
+ (default (cgit-configuration-file)))
+ (package cgit-configuration-package
+ (default cgit))
+ (nginx cgit-configuration-nginx
+ (default %cgit-configuration-nginx)))
+
+(define (cgit-activation config)
+ ;; Cgit compiled with default configuration path
+ #~(begin
+ (use-modules (guix build utils))
+ (mkdir-p "/var/cache/cgit")
+ (copy-file #$(cgit-configuration-config-file config) "/etc/cgitrc")))
+
+(define (cgit-configuration-nginx-config config)
+ (cgit-configuration-nginx config))
+
+(define cgit-service-type
+ (service-type
+ (name 'cgit)
+ (extensions
+ (list (service-extension activation-service-type
+ cgit-activation)
+ (service-extension nginx-service-type
+ cgit-configuration-nginx-config)))
+ (default-value (cgit-configuration))))
diff --git a/gnu/tests/version-control.scm b/gnu/tests/version-control.scm
new file mode 100644
index 000000000..11adb37f0
--- /dev/null
+++ b/gnu/tests/version-control.scm
@@ -0,0 +1,161 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2017 Oleg Pykhalov <go.wigust@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 GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu tests version-control)
+ #:use-module (gnu tests)
+ #:use-module (gnu system)
+ #:use-module (gnu system file-systems)
+ #:use-module (gnu system shadow)
+ #:use-module (gnu system vm)
+ #:use-module (gnu services)
+ #:use-module (gnu services version-control)
+ #:use-module (gnu services web)
+ #:use-module (gnu services networking)
+ #:use-module (gnu packages version-control)
+ #:use-module (guix gexp)
+ #:use-module (guix store)
+ #:export (%test-cgit))
+
+(define %make-git-repository
+ ;; Create Git repository in /srv/git/test.
+ #~(begin
+ (mkdir-p "/srv/git/test")
+ (system* (string-append #$git "/bin/git") "-C" "/srv/git/test" "init")))
+
+(define %cgit-configuration-nginx
+ (list
+ (nginx-server-configuration
+ (root cgit)
+ (locations
+ (list
+ (nginx-location-configuration
+ (uri "@cgit")
+ (body '("fastcgi_param SCRIPT_FILENAME $document_root/lib/cgit/cgit.cgi;"
+ "fastcgi_param PATH_INFO $uri;"
+ "fastcgi_param QUERY_STRING $args;"
+ "fastcgi_param HTTP_HOST $server_name;"
+ "fastcgi_pass 127.0.0.1:9000;")))))
+ (try-files (list "$uri" "@cgit"))
+ (http-port 19418)
+ (https-port #f)
+ (ssl-certificate #f)
+ (ssl-certificate-key #f))))
+
+(define %cgit-os
+ ;; Operating system under test.
+ (let ((base-os
+ (simple-operating-system
+ (dhcp-client-service)
+ (service nginx-service-type)
+ (service fcgiwrap-service-type)
+ (service cgit-service-type
+ (cgit-configuration
+ (nginx %cgit-configuration-nginx)))
+ (simple-service 'make-git-repository activation-service-type
+ %make-git-repository))))
+ (operating-system
+ (inherit base-os)
+ (packages (cons* git
+ (operating-system-packages base-os))))))
+
+(define* (run-cgit-test #:optional (http-port 19418))
+ "Run tests in %CGIT-OS, which has nginx running and listening on
+HTTP-PORT."
+ (define os
+ (marionette-operating-system
+ %cgit-os
+ #:imported-modules '((gnu services herd)
+ (guix combinators))))
+
+ (define vm
+ (virtual-machine
+ (operating-system os)
+ (port-forwardings `((8080 . ,http-port)))))
+
+ (define test
+ (with-imported-modules '((gnu build marionette))
+ #~(begin
+ (use-modules (srfi srfi-11) (srfi srfi-64)
+ (gnu build marionette)
+ (web uri)
+ (web client)
+ (web response))
+
+ (define marionette
+ (make-marionette (list #$vm)))
+
+ (mkdir #$output)
+ (chdir #$output)
+
+ (test-begin "cgit")
+
+ ;; Wait for nginx to be up and running.
+ (test-eq "service running"
+ 'running!
+ (marionette-eval
+ '(begin
+ (use-modules (gnu services herd))
+ (start-service 'nginx)
+ 'running!)
+ marionette))
+
+ ;; Wait for fcgiwrap to be up and running.
+ (test-eq "service running"
+ 'running!
+ (marionette-eval
+ '(begin
+ (use-modules (gnu services herd))
+ (start-service 'fcgiwrap)
+ 'running!)
+ marionette))
+
+ ;; Make sure the PID file is created.
+ (test-assert "PID file"
+ (marionette-eval
+ '(file-exists? "/var/run/nginx/pid")
+ marionette))
+
+ ;; Make sure the configuration file is created.
+ (test-assert "Configuration file"
+ (marionette-eval
+ '(file-exists? "/etc/cgitrc")
+ marionette))
+
+ ;; Make sure Git test repository is created.
+ (test-assert "Git test repository"
+ (marionette-eval
+ '(file-exists? "/srv/git/test/.git")
+ marionette))
+
+ ;; Retrieve the index.html file we put in /srv.
+ (test-equal "http-get"
+ 200
+ (let-values (((response text)
+ (http-get "http://localhost:8080")))
+ (response-code response)))
+
+ (test-end)
+ (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+
+ (gexp->derivation "cgit-test" test))
+
+(define %test-cgit
+ (system-test
+ (name "cgit")
+ (description "Connect to a running CGIT server.")
+ (value (run-cgit-test))))
--
2.14.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* bug#28283: Status: [PATCH 1/1] gnu: services: version-control: Add cgit.
2017-10-03 7:36 ` Oleg Pykhalov
@ 2017-10-03 13:07 ` Ludovic Courtès
0 siblings, 0 replies; 16+ messages in thread
From: Ludovic Courtès @ 2017-10-03 13:07 UTC (permalink / raw)
To: Oleg Pykhalov; +Cc: 28283-done
Oleg Pykhalov <go.wigust@gmail.com> skribis:
> From 984b619620046015113cc4876569f5c87dd37c79 Mon Sep 17 00:00:00 2001
> From: Oleg Pykhalov <go.wigust@gmail.com>
> Date: Thu, 28 Sep 2017 20:02:35 +0300
> Subject: [PATCH] gnu: services: version-control: Add cgit.
>
> * gnu/services/version-control.scm
> (<cgit-configuration-file>, <cgit-configuration>): New record types.
> (cgit-configuration-robots-string, cgit-activation,
> cgit-configuration-nginx-config): New procedures.
> (%cgit-configuration-nginx, cgit-service-type): New variables.
> * doc/guix.texi (Version Control): Document the cgit service.
> ---
> doc/guix.texi | 65 ++++++++++++++++
> gnu/local.mk | 1 +
> gnu/services/version-control.scm | 119 ++++++++++++++++++++++++++++-
> gnu/tests/version-control.scm | 161 +++++++++++++++++++++++++++++++++++++++
> 4 files changed, 345 insertions(+), 1 deletion(-)
> create mode 100644 gnu/tests/version-control.scm
Awesome!
I took the liberty to add more URL tests:
--8<---------------cut here---------------start------------->8---
;; Make sure we can access pages that correspond to our repository.
(letrec-syntax ((test-url
(syntax-rules ()
((_ path code)
(test-equal (string-append "GET " path)
code
(let-values (((response body)
(http-get (string-append
"http://localhost:8080"
path))))
(response-code response))))
((_ path)
(test-url path 200)))))
(test-url "/")
(test-url "/test")
(test-url "/test/log")
(test-url "/test/tree")
(test-url "/test/does-not-exist" 404)
(test-url "/does-not-exist" 404))
--8<---------------cut here---------------end--------------->8---
Will push in a minute. Thank you!
Ludo’.
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2017-10-03 13:08 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-08-29 21:16 [bug#28283] [PATCH 0/1] gnu: services: version-control: Add cgit Oleg Pykhalov
2017-08-29 21:18 ` [bug#28283] Status: [PATCH 1/1] " Oleg Pykhalov
2017-08-29 21:53 ` Oleg Pykhalov
2017-08-31 13:39 ` Ludovic Courtès
2017-09-19 21:27 ` Ludovic Courtès
2017-09-20 22:20 ` Oleg Pykhalov
2017-09-22 13:40 ` Ludovic Courtès
2017-09-22 17:57 ` Oleg Pykhalov
2017-09-22 21:38 ` Ludovic Courtès
2017-09-29 14:05 ` Oleg Pykhalov
2017-10-01 21:55 ` Ludovic Courtès
2017-10-03 6:22 ` Oleg Pykhalov
2017-10-03 6:31 ` Oleg Pykhalov
2017-10-03 7:30 ` Oleg Pykhalov
2017-10-03 7:36 ` Oleg Pykhalov
2017-10-03 13:07 ` bug#28283: " Ludovic Courtès
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).