Subject: bug#31621: closed (Re: [bug#31621] [PATCH 2/3] gnu: service: Add hpcguix-web.)

From: [email-masked] (GNU bug Tracking System)
Date: Fri, 01 Jun 2018 08:06:02 +0000

Your bug report

#31621: [PATCH 1/3] gnu: Add hpcguix-web.

which was filed against the guix-patches package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
31621: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=31621
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: [bug#31621] [PATCH 2/3] gnu: service: Add hpcguix-web.
From: [email-masked] (Ludovic Courtès)
To: Rouby Pierre-Antoine <[email-masked]>
Cc: Roel Janssen <[email-masked]>, [email-masked], [email-masked]
Date: Fri, 01 Jun 2018 10:05:23 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Hello,

(+Cc: Roel.)

Rouby Pierre-Antoine <[email-masked]> skribis:

> * gnu/service/web.scm (<hpcguix-web-configuration>): New record-type.
>   (%hpcguix-web-accounts): New variable.
>   (%hpcguix-web-activation,hpcguix-web-shepherd-service,
>   hpcguix-web-service-type): New procedures.
> * doc/guix.texi (Web Services): Add 'hpcguix-web'.

I found the test ;-), sorry for the confusion.

I squashed the test with the other commit (because they logically belong
to the same change), and I applied it with the changes below.

Thank you!

Ludo’.

diff --git a/doc/guix.texi b/doc/guix.texi
index 9b9ce0f77..3b5078741 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -16163,30 +16163,32 @@ A simple setup for cat-avatar-generator can look like this:
 @subsubheading Hpcguix-web
 
 @cindex hpcguix-web
-The @code{hpcguix-web} is web interface to @code{Guix} packages visualizations.
+The @uref{hpcguix-web, https://github.com/UMCUGenetics/hpcguix-web/}
+program is a customizable web interface to browse Guix packages,
+initially designed for users of high-performance computing (HPC)
+clusters.
 
 @defvr {Scheme Variable} hpcguix-web-service-type
-A service type for @code{hpcguix-web}.
+The service type for @code{hpcguix-web}.
 @end defvr
 
 @deftp {Data Type} hpcguix-web-configuration
-Data Type for @code{hpcguix-web} service configuration.
+Data type for the hpcguix-web service configuration.
 
 @table @asis
 @item @code{specs}
-The @code{hpcguix-web} @code{gexp} service
-@url{https://github.com/UMCUGenetics/hpcguix-web/blob/master/hpcweb-configuration.scm,
-configuration}
+A gexp (@pxref{G-Expressions}) specifying the hpcguix-web service
+configuration.  The main items available in this spec are:
 
 @table @asis
 @item @code{title-prefix} (default: @code{"hpcguix | "})
 The page title prefix.
 
 @item @code{guix-command} (default: @code{"guix"})
-The @code{Guix} command.
+The @command{guix} command.
 
 @item @code{package-filter-proc} (default: @code{(const #t)})
-Package filter.
+A procedure specifying how to filter packages that are displayed.
 
 @item @code{package-page-extension-proc} (default: @code{(const '())})
 Extension package for @code{hpcguix-web}.
@@ -16194,17 +16196,26 @@ Extension package for @code{hpcguix-web}.
 @item @code{menu} (default: @code{'()})
 Additional entry in page @code{menu}.
 @end table
+
+See the hpcguix-web repository for a
+@uref{https://github.com/UMCUGenetics/hpcguix-web/blob/master/hpcweb-configuration.scm,
+complete example}.
+
+@item @code{package} (default: @code{hpcguix-web})
+The hpcguix-web package to use.
 @end table
 @end deftp
 
+A typical hpcguix-web service declaration looks like this:
+
 @example
-(services (cons* (service hpcguix-web-service-type
-                          (hpcguix-web-configuration
-                           (specs
-                            #~(define site-config
-                                (hpcweb-configuration
-                                 (title-prefix "Guix-HPC - ")
-                                 (menu '(("/about" "ABOUT"))))))))
+(service hpcguix-web-service-type
+         (hpcguix-web-configuration
+          (specs
+           #~(define site-config
+               (hpcweb-configuration
+                (title-prefix "Guix-HPC - ")
+                (menu '(("/about" "ABOUT"))))))))
 @end example
 
 @node Certificate Services
diff --git a/gnu/services/web.scm b/gnu/services/web.scm
index d8acc9549..aae2f3db0 100644
--- a/gnu/services/web.scm
+++ b/gnu/services/web.scm
@@ -902,13 +902,15 @@ a webserver.")
             (root #~(string-append #$package
                                    "/share/web/cat-avatar-generator"))))))
 
+
 (define-record-type* <hpcguix-web-configuration>
-  hpcguix-web-configuration
-  make-hpcguix-web-configuration
+  hpcguix-web-configuration make-hpcguix-web-configuration
   hpcguix-web-configuration?
 
+  (package  hpcguix-web-package (default hpcguix-web)) ;<package>
+
   ;; Specs is gexp of hpcguix-web configuration file
-  (specs hpcguix-web-configuration-specs))
+  (specs    hpcguix-web-configuration-specs))
 
 (define %hpcguix-web-accounts
   (list (user-group
@@ -922,7 +924,7 @@ a webserver.")
          (home-directory "/var/empty")
          (shell (file-append shadow "/sbin/nologin")))))
 
-(define (%hpcguix-web-activation config)
+(define %hpcguix-web-activation
   #~(begin
       (use-modules (guix build utils))
       (let ((home-dir "/var/cache/guix/web")
@@ -932,7 +934,8 @@ a webserver.")
         (chmod home-dir #o755))))
 
 (define (hpcguix-web-shepherd-service config)
-  (let* ((specs (hpcguix-web-configuration-specs config)))
+  (let ((specs       (hpcguix-web-configuration-specs config))
+        (hpcguix-web (hpcguix-web-package config)))
     (with-imported-modules (source-module-closure
                             '((gnu build shepherd)))
       (shepherd-service
@@ -940,25 +943,23 @@ a webserver.")
        (provision     '(hpcguix-web))
        (requirement   '(networking))
        (start #~(make-forkexec-constructor
-                 (list (string-append #$hpcguix-web "/bin/run")
+                 (list #$(file-append hpcguix-web "/bin/run")
                        (string-append "--config="
                                       #$(scheme-file "hpcguix-web.scm" specs)))
                  #:user "hpcguix-web"
                  #:group "hpcguix-web"
                  #:environment-variables
-                 (list (string-append "XDG_CACHE_HOME="
-                                      "/var/cache"))))
+                 (list "XDG_CACHE_HOME=/var/cache")))
        (stop #~(make-kill-destructor))))))
 
 (define hpcguix-web-service-type
   (service-type
    (name 'hpcguix-web)
-   (description
-    "Run hpcguix-web daemon @command{run}.")
+   (description "Run the hpcguix-web server.")
    (extensions
     (list (service-extension account-service-type
                              (const %hpcguix-web-accounts))
           (service-extension activation-service-type
-                             %hpcguix-web-activation)
+                             (const %hpcguix-web-activation))
           (service-extension shepherd-root-service-type
                              (compose list hpcguix-web-shepherd-service))))))

diff --git a/gnu/tests/web.scm b/gnu/tests/web.scm
index 474a5bdb5..a6bf6efcf 100644
--- a/gnu/tests/web.scm
+++ b/gnu/tests/web.scm
@@ -286,7 +286,7 @@ HTTP-PORT, along with php-fpm."
 
 
 ;;;
-;;; HPCGUIX-WEB
+;;; hpcguix-web
 ;;;
 
 (define* (run-hpcguix-web-server-test name test-os)
@@ -329,15 +329,14 @@ HTTP-PORT, along with php-fpm."
                    (match (assq-ref response-parts 'running)
                      ((pid) (number? pid))))))
              marionette))
-          
+
           (test-equal "http-get"
             200
-            (let-values
-                (((response text)
-                  (begin
-                    (sleep 3)           ; HACK wait service available
-                    (http-get "http://localhost:8080"))))
-              (response-code response)))
+            (begin
+              (wait-for-tcp-port 5000 marionette)
+              (let-values (((response text)
+                            (http-get "http://localhost:8080")))
+                (response-code response))))
 
           (test-end)
           (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
@@ -360,5 +359,5 @@ HTTP-PORT, along with php-fpm."
 (define %test-hpcguix-web
   (system-test
    (name "hpcguix-web")
-   (description "Connect to a running HPCGUIX-WEB server.")
+   (description "Connect to a running hpcguix-web server.")
    (value (run-hpcguix-web-server-test name %hpcguix-web-os))))

Subject: [PATCH 1/3] gnu: Add hpcguix-web.
From: Rouby Pierre-Antoine <[email-masked]>
To: [email-masked]
Cc: Rouby Pierre-Antoine <[email-masked]>
Date: Mon, 28 May 2018 15:24:50 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

* gnu/package/web.scm (hpcguix-web): New variable.
---
 gnu/packages/web.scm | 80 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 80 insertions(+)

diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 9f1609591..2c69490f8 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -25,6 +25,7 @@
 ;;; Copyright © 2017 Pierre Langlois <[email-masked]>
 ;;; Copyright © 2017 Rutger Helling <[email-masked]>
 ;;; Copyright © 2018 Julien Lepiller <[email-masked]>
+;;; Copyright © 2018 Pierre-Antoine Rouby <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -82,6 +83,7 @@
   #:use-module (gnu packages gnuzilla)
   #:use-module (gnu packages gperf)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages guile)
   #:use-module (gnu packages java)
   #:use-module (gnu packages javascript)
   #:use-module (gnu packages jemalloc)
@@ -96,6 +98,7 @@
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages openstack)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages package-management)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages perl-check)
   #:use-module (gnu packages python)
@@ -6428,3 +6431,80 @@ compressed JSON header blocks.
 @item @command{inflatehd} converts such compressed headers back to JSON pairs.
 @end itemize\n")
     (license l:expat)))
+
+(define-public hpcguix-web
+  (package
+  (name "hpcguix-web")
+  (version "0.0.1")
+  (source (origin
+            (method git-fetch)
+            (uri (git-reference
+                  (url "https://github.com/UMCUGenetics/hpcguix-web.git")
+                  (commit "3e3b9a3a406ee2dcd10c96cbedcc16ea378e8e8f")))
+            (sha256
+             (base32
+              "01888byi9mh7d3adcmwhmg44kg98g92r44ilc4wd7an66mjnxpry"))))
+  (build-system gnu-build-system)
+  (arguments
+   `(#:modules ((guix build gnu-build-system)
+                (guix build utils)
+                (srfi srfi-26)
+                (ice-9 popen)
+                (ice-9 rdelim))
+
+     #:phases
+     (modify-phases %standard-phases
+       (add-before 'configure 'autoconf
+         (lambda _
+           (setenv "GUILE_AUTO_COMPILE" "0")
+           (setenv "XDG_CACHE_HOME" (getcwd))
+           (invoke "autoreconf" "-vif")))
+       (add-after 'install 'wrap-program
+         (lambda* (#:key inputs outputs #:allow-other-keys)
+           (let* ((out      (assoc-ref outputs "out"))
+                  (guix     (assoc-ref inputs "guix"))
+                  (guile    (assoc-ref inputs "guile"))
+                  (json     (assoc-ref inputs "guile-json"))
+                  (guile-cm (assoc-ref inputs
+                                       "guile-commonmark"))
+                  (deps (list guile guile-cm guix json))
+                  (effective
+                   (read-line
+                    (open-pipe* OPEN_READ
+                                (string-append guile "/bin/guile")
+                                "-c" "(display (effective-version))")))
+                  (path   (string-join
+                           (map (cut string-append <>
+                                     "/share/guile/site/"
+                                     effective)
+                                deps)
+                           ":"))
+                  (gopath (string-join
+                           (map (cut string-append <>
+                                     "/lib/guile/" effective
+                                     "/site-ccache")
+                                deps)
+                           ":")))
+             (wrap-program (string-append out "/bin/run")
+                            `("GUILE_LOAD_PATH" ":" prefix (,path))
+                            `("GUILE_LOAD_COMPILED_PATH" ":" prefix (,gopath)))
+
+             #t))))))
+  (native-inputs
+   `(("autoconf" ,autoconf)
+     ("automake" ,automake)
+     ("uglify-js" ,uglify-js)
+     ("pkg-config" ,pkg-config)))
+  (inputs
+   `(("guix" ,guix)))
+  (propagated-inputs
+   `(("guile" ,guile-2.2)
+     ("guile-commonmark" ,guile-commonmark)
+     ("guile-json" ,guile-json)))
+  (home-page "https://github.com/UMCUGenetics/hpcguix-web")
+  (synopsis "Web interface for cluster deployments of Guix")
+  (description "This package provides a web interface to the list of
+packages provided by Guix.  The list of packages is searchable and
+provides instructions on how to use Guix in a shared HPC
+environment.")
+    (license l:agpl3+)))
-- 
2.17.0