[PATCH 0/2] Add Laminar.

  • Done
  • quality assurance status badge
Details
3 participants
  • Lars-Dominik Braun
  • Ludovic Courtès
  • Christopher Baines
Owner
unassigned
Submitted by
Christopher Baines
Severity
normal
C
C
Christopher Baines wrote on 25 Mar 2021 16:23
(address . guix-patches@gnu.org)
87v99f9s15.fsf@cbaines.net
I've wrote these patches a long while ago, and I've been using Laminar
too, since Laminar fills a role in the patches testing setup I've been
working on.

I was holding off on submitting them until more could be done about the
JavaScript Laminar uses, but merging these patches would be useful, and
I think the line of including non-source JavaScript in packages has
already been crossed.


Christopher Baines (2):
gnu: Add laminar.
services: Add Laminar.

doc/guix.texi | 54 ++++++++++++++++++-
gnu/packages/ci.scm | 104 +++++++++++++++++++++++++++++++++++
gnu/services/ci.scm | 128 +++++++++++++++++++++++++++++++++++++++++++
gnu/tests/ci.scm | 129 ++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 413 insertions(+), 2 deletions(-)
create mode 100644 gnu/services/ci.scm
create mode 100644 gnu/tests/ci.scm
-----BEGIN PGP SIGNATURE-----

iQKlBAEBCgCPFiEEPonu50WOcg2XVOCyXiijOwuE9XcFAmBcqtZfFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDNF
ODlFRUU3NDU4RTcyMEQ5NzU0RTBCMjVFMjhBMzNCMEI4NEY1NzcRHG1haWxAY2Jh
aW5lcy5uZXQACgkQXiijOwuE9XcCWxAAptu0VxQMuTwgy9oxdmdSS0uCIByoQL6d
a1LjwJ3Ip9cFCPFtoEck7BYTWeMGjh00KOGob+xTw1jn6Cihh/s88ztXo+l0JEbs
Hep95fD5ZAij/IQVTSSF/BBBXYRgduU1exjhHHNhkNU+or2K2AS5Zp93LXIITwi2
ppEcrRrwNRmET2EgvPlxTnUqXsVwcrQY4xfVCl7lIsWeqfZ7MSvC4iqpVaoVLhlX
NLJGQEFfIiArqIE+yO91FBAnyjU9FeImVOlUrckc+5iiJb9H/VcCQ3+AGDTuNMLk
fg8X//JhgWf3mI8mq0U0sOV6cA5TRC8UY/m/n7vu9NIB1Y0Lw8hNcQTj5GqJ1cl3
BLBFS7v2oWa67WzVACRardLoKBBTsHX8XQcleAJAnPeN3Y0d35+XdX4cVapGcvC8
jXfpIDcCbs6KV4XuY7B8M5QIc5FF6y+pNs4Ea9l3wW/a0zbf9BdeG+Hdufec5cx4
hoSXc+uMAbVYGQeX9SkWfZrUV0wuhjy/jypyHBQlZLTm3Uzi5rW1d357qJ+elIXq
jjX09dkapBTQyMVzYn9QlDZ1vQE+JubfAhQWUoGi4lI8yHD+oe+IUfVl0pr4aGxe
jHVeTk1g57aCc7WljU3r2S6vnzje00dkgG+l1P+/l6fsZ+DPJJ1Xl1+brWqJZtz3
l7igeUIQt+c=
=hX4b
-----END PGP SIGNATURE-----

C
C
Christopher Baines wrote on 25 Mar 2021 16:26
[PATCH 1/2] gnu: Add laminar.
(address . 47392@debbugs.gnu.org)
20210325152612.15321-1-mail@cbaines.net
* gnu/packages/ci.scm (laminar): New variable.
---
gnu/packages/ci.scm | 104 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 104 insertions(+)

Toggle diff (137 lines)
diff --git a/gnu/packages/ci.scm b/gnu/packages/ci.scm
index bafe997c82..4e13d01715 100644
--- a/gnu/packages/ci.scm
+++ b/gnu/packages/ci.scm
@@ -25,10 +25,13 @@
#:use-module ((guix licenses) #:prefix l:)
#:use-module (gnu packages)
#:use-module (guix packages)
+ #:use-module (guix download)
#:use-module (guix git-download)
#:use-module (guix download)
#:use-module (gnu packages autotools)
#:use-module (gnu packages base)
+ #:use-module (gnu packages boost)
+ #:use-module (gnu packages check)
#:use-module (gnu packages docbook)
#:use-module (gnu packages compression)
#:use-module (gnu packages databases)
@@ -40,11 +43,14 @@
#:use-module (gnu packages perl)
#:use-module (gnu packages perl-compression)
#:use-module (gnu packages pkg-config)
+ #:use-module (gnu packages serialization)
+ #:use-module (gnu packages sqlite)
#:use-module (gnu packages tls)
#:use-module (gnu packages texinfo)
#:use-module (gnu packages version-control)
#:use-module (gnu packages web)
#:use-module (gnu packages xml)
+ #:use-module (guix build-system cmake)
#:use-module (guix build-system gnu))
(define-public cuirass
@@ -170,3 +176,101 @@
intended as a replacement for Hydra.")
(home-page "https://www.gnu.org/software/guix/")
(license l:gpl3+))))
+
+(define-public laminar
+ (package
+ (name "laminar")
+ (version "1.0")
+ (source
+ (origin (method url-fetch)
+ (uri (string-append "https://github.com/ohwgiles/laminar/archive/"
+ version
+ ".tar.gz"))
+ (file-name (string-append name "-" version ".tar.gz"))
+ (sha256
+ (base32
+ "11m6h3rdmj2rsmsryy7r40gqccj4gg1cnqwy6blscs87gx4s423g"))))
+ (build-system cmake-build-system)
+ (arguments
+ `(#:tests? #f ; TODO Can't build tests
+ #:configure-flags
+ (list "-DCMAKE_CXX_STANDARD=17"
+ ;; "-DBUILD_TESTS=true" TODO: objcopy: js/stPskyUS: can't add
+ ;; section '.note.GNU-stack': file format not recognized
+ (string-append "-DLAMINAR_VERSION=" ,version))
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'patch-CMakeLists.txt
+ (lambda _
+ (substitute* "CMakeLists.txt"
+ (("file\\(DOWNLOAD.*\n$")
+ "# file download removed by Guix --")
+ (("install\\(FILES etc/laminar.service DESTINATION \\$\\{SYSTEMD\\_UNITDIR\\}\\)")
+ "")
+ (("install\\(FILES \\$\\{CMAKE\\_CURRENT\\_BINARY\\_DIR\\}\\/laminar\\.service DESTINATION \\$\\{SYSTEMD\\_UNITDIR\\}\\)")
+ "")
+ (("install\\(FILES etc/laminar\\.conf DESTINATION \\/etc\\)") "")
+ (("\\/usr\\/") ""))
+ #t))
+ (add-after 'configure 'copy-in-javascript-and-css
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (mkdir-p "../build/js")
+ (for-each (lambda (file)
+ (copy-file
+ file
+ (string-append
+ "../build/js/" (strip-store-file-name file))))
+ (map (lambda (input)
+ (assoc-ref inputs input))
+ '("vue.min.js"
+ "vue-router.min.js"
+ "ansi_up.js"
+ "Chart.min.js")))
+ #t)))))
+ (inputs
+ `(("capnproto" ,capnproto)
+ ("rapidjson" ,rapidjson)
+ ("sqlite" ,sqlite)
+ ("boost" ,boost)
+ ("zlib" ,zlib)))
+ (native-inputs
+ `(("googletest" ,googletest)
+
+ ("vue.min.js"
+ ,(origin (method url-fetch)
+ (uri (string-append "https://cdnjs.cloudflare.com/ajax/libs/"
+ "vue/2.6.12/vue.min.js"))
+ (sha256
+ (base32
+ "01zklp5cyik65dfn64m8h2y2dxzgbyzgmbf99y7fwgnf0155r7pq"))))
+ ("vue-router.min.js"
+ ,(origin (method url-fetch)
+ (uri (string-append "https://cdnjs.cloudflare.com/ajax/libs/"
+ "vue-router/3.4.8/vue-router.min.js"))
+ (sha256
+ (base32
+ "07gx7znb30rk1z7w6ca7dlfjp44q12bbq6jghwfm27mf6psa80as"))))
+ ("ansi_up.js"
+ ,(origin (method url-fetch)
+ (uri (string-append "https://raw.githubusercontent.com/"
+ "drudru/ansi_up/v1.3.0/ansi_up.js"))
+ (sha256
+ (base32
+ "1993dywxqi2ylnxybwk7m0s0bg2bq7kfllpyr0s8ck6chd0p8i6r"))))
+ ("Chart.min.js"
+ ,(origin (method url-fetch)
+ (uri (string-append "https://cdnjs.cloudflare.com/ajax/libs/"
+ "Chart.js/2.7.2/Chart.min.js"))
+ (sha256
+ (base32
+ "1jh4h12qchsba03dx03mrvs4r8g9qfjn56xm56jqzgqf7r209xq9"))))))
+ (synopsis "Lightweight Continuous Integration service")
+ (description
+ "Laminar is a lightweight and modular Continuous Integration service. It
+doesn't have a configuration web UI instead uses version-controllable
+configuration files and scripts.
+
+Laminar encourages the use of existing GNU/Linux tools such as bash and cron
+instead of reinventing them.")
+ (home-page "https://laminar.ohwg.net/")
+ (license l:gpl3+)))
--
2.30.1
C
C
Christopher Baines wrote on 25 Mar 2021 16:26
[PATCH 2/2] services: Add Laminar.
(address . 47392@debbugs.gnu.org)
20210325152612.15321-2-mail@cbaines.net
* gnu/services/ci.scm: New file.
* gnu/tests/ci.scm: New file.
* doc/guix.texi (Laminar): Document the Laminar service.
---
doc/guix.texi | 54 ++++++++++++++++++-
gnu/services/ci.scm | 128 +++++++++++++++++++++++++++++++++++++++++++
gnu/tests/ci.scm | 129 ++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 309 insertions(+), 2 deletions(-)
create mode 100644 gnu/services/ci.scm
create mode 100644 gnu/tests/ci.scm

Toggle diff (350 lines)
diff --git a/doc/guix.texi b/doc/guix.texi
index 74f3fbd299..bd087dae05 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -342,7 +342,7 @@ Services
* DNS Services:: DNS daemons.
* VPN Services:: VPN daemons.
* Network File System:: NFS related services.
-* Continuous Integration:: The Cuirass service.
+* Continuous Integration:: Cuirass and Laminar services.
* Power Management Services:: Extending battery life.
* Audio Services:: The MPD.
* Virtualization Services:: Virtualization services.
@@ -14798,7 +14798,7 @@ declaration.
* DNS Services:: DNS daemons.
* VPN Services:: VPN daemons.
* Network File System:: NFS related services.
-* Continuous Integration:: The Cuirass service.
+* Continuous Integration:: Cuirass and Laminar services.
* Power Management Services:: Extending battery life.
* Audio Services:: The MPD.
* Virtualization Services:: Virtualization services.
@@ -27301,6 +27301,56 @@ the store items being published.
@end table
@end deftp
+@subsubheading Laminar
+
+@uref{https://laminar.ohwg.net/, Laminar} is a lightweight and modular
+Continuous Integration service. It doesn't have a configuration web UI
+instead uses version-controllable configuration files and scripts.
+
+Laminar encourages the use of existing GNU/Linux tools such as bash and
+cron instead of reinventing them.
+
+@defvr {Scheme Procedure} laminar-service-type
+The type of the Laminar service. Its value must be a
+@code{laminar-configuration} object, as described below.
+@end defvr
+
+@deftp {Data Type} laminar-configuration
+Data type representing the configuration of Laminar.
+
+@table @asis
+@item @code{laminar} (default: @code{laminar})
+The Laminar package to use.
+
+@item @code{home-directory} (default: @code{"/var/lib/laminar"})
+The directory for job configurations and run directories.
+
+@item @code{bind-http} (default: @code{"*:8080"})
+The interface/port or unix socket on which laminard should listen for
+incoming connections to the web frontend.
+
+@item @code{bind-rpc} (default: @code{"unix-abstract:laminar"})
+The interface/port or unix socket on which laminard should listen for
+incoming commands such as build triggers.
+
+@item @code{title} (default: @code{"Laminar"})
+The page title to show in the web frontend.
+
+@item @code{keep-rundirs} (default: @code{0})
+Set to an integer defining how many rundirs to keep per job. The
+lowest-numbered ones will be deleted. The default is 0, meaning all run
+dirs will be immediately deleted.
+
+@item @code{archive-url} (default: @code{#f})
+The web frontend served by laminard will use this URL to form links to
+artefacts archived jobs.
+
+@item @code{base-url} (default: @code{#f})
+Base URL to use for links to laminar itself.
+
+@end table
+@end deftp
+
@node Power Management Services
@subsection Power Management Services
diff --git a/gnu/services/ci.scm b/gnu/services/ci.scm
new file mode 100644
index 0000000000..400980dcd4
--- /dev/null
+++ b/gnu/services/ci.scm
@@ -0,0 +1,128 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2018 Christopher Baines <mail@cbaines.net>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify
+;;; it under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation, either version 3 of the License, or
+;;; (at your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful,
+;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu services ci)
+ #:use-module (guix gexp)
+ #:use-module (guix records)
+ #:use-module (gnu packages admin)
+ #:use-module (gnu packages ci)
+ #:use-module (gnu services)
+ #:use-module (gnu services base)
+ #:use-module (gnu services shepherd)
+ #:use-module (gnu services admin)
+ #:use-module (gnu system shadow)
+ #:use-module (ice-9 match)
+ #:export (<laminar-configuration>
+ laminar-configuration
+ laminar-configuration?
+ laminar-configuration-home-directory
+ laminar-configuration-bind-http
+ laminar-configuration-bind-rpc
+ laminar-configuration-title
+ laminar-configuration-keep-rundirs
+ laminar-configuration-archive-url
+ laminar-configuration-base-url
+
+ laminar-service-type))
+
+;;;; Commentary:
+;;;
+;;; This module implements a service that to run instances of Laminar, a
+;;; continuous integration tool.
+;;;
+;;;; Code:
+
+(define-record-type* <laminar-configuration>
+ laminar-configuration make-laminar-configuration
+ laminar-configuration?
+ (laminar laminars-configuration-laminar
+ (default laminar))
+ (home-directory laminar-configuration-home-directory
+ (default "/var/lib/laminar"))
+ (bind-http laminar-configuration-bind-http
+ (default "*:8080"))
+ (bind-rpc laminar-configuration-bind-rpc
+ (default "unix-abstract:laminar"))
+ (title laminar-configuration-title
+ (default "Laminar"))
+ (keep-rundirs laminar-keep-rundirs
+ (default 0))
+ (archive-url laminar-archive-url
+ (default #f))
+ (base-url laminar-base-url
+ (default #f)))
+
+(define laminar-shepherd-service
+ (match-lambda
+ (($ <laminar-configuration> laminar home-directory
+ bind-http bind-rpc
+ title keep-rundirs archive-url
+ base-url)
+ (list (shepherd-service
+ (documentation "Run Laminar.")
+ (provision '(laminar))
+ (requirement '(networking))
+ (start #~(make-forkexec-constructor
+ (list #$(file-append laminar "/sbin/laminard"))
+ #:environment-variables
+ `(,(string-append "LAMINAR_HOME="
+ #$home-directory)
+ ,(string-append "LAMINAR_BIND_HTTP="
+ #$bind-http)
+ ,(string-append "LAMINAR_TITLE="
+ #$title)
+ ,(string-append "LAMINAR_KEEP_RUNDIRS="
+ #$(number->string
+ keep-rundirs))
+ ,@(if #$archive-url
+ (list
+ (string-append "LAMINAR_ARCHIVE_URL="
+ #$archive-url))
+ '())
+ ,@(if #$base-url
+ (list
+ (string-append "LAMINAR_BASE_URL="
+ #$base-url))
+ '()))
+ #:user "laminar"
+ #:group "laminar"))
+ (stop #~(make-kill-destructor)))))))
+
+(define (laminar-account config)
+ "Return the user accounts and user groups for CONFIG."
+ (list (user-group
+ (name "laminar")
+ (system? #t))
+ (user-account
+ (name "laminar")
+ (group "laminar")
+ (system? #t)
+ (comment "Laminar privilege separation user")
+ (home-directory (laminar-configuration-home-directory config))
+ (shell #~(string-append #$shadow "/sbin/nologin")))))
+
+(define laminar-service-type
+ (service-type
+ (name 'laminar)
+ (extensions
+ (list
+ (service-extension shepherd-root-service-type laminar-shepherd-service)
+ (service-extension account-service-type laminar-account)))
+ (default-value (laminar-configuration))
+ (description
+ "Run the Laminar continuous integration service.")))
diff --git a/gnu/tests/ci.scm b/gnu/tests/ci.scm
new file mode 100644
index 0000000000..fe74e73e74
--- /dev/null
+++ b/gnu/tests/ci.scm
@@ -0,0 +1,129 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>
+;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
+;;; Copyright © 2018 Pierre-Antoine Rouby <pierre-antoine.rouby@inria.fr>
+;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.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 ci)
+ #: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 ci)
+ #:use-module (gnu services web)
+ #:use-module (gnu services networking)
+ #:use-module (guix gexp)
+ #:use-module (guix store)
+ #:export (%test-laminar))
+
+
+
+(define %laminar-os
+ ;; Operating system under test.
+ (simple-operating-system
+ (service dhcp-client-service-type)
+ (service laminar-service-type)))
+
+(define* (run-laminar-test #:optional (http-port 8080))
+ "Run tests in %LAMINAR-OS, which has laminar running and listening on
+HTTP-PORT."
+ (define os
+ (marionette-operating-system
+ %laminar-os
+ #:imported-modules '((gnu services herd)
+ (guix combinators))))
+
+ (define vm
+ (virtual-machine
+ (operating-system os)
+ (port-forwardings `((,http-port . 8080)))))
+
+ (define test
+ (with-imported-modules '((gnu build marionette))
+ #~(begin
+ (use-modules (srfi srfi-11) (srfi srfi-64)
+ (ice-9 match)
+ (gnu build marionette)
+ (web uri)
+ (web client)
+ (web response))
+
+ (define marionette
+ ;; Forward the guest's HTTP-PORT, where laminar is listening, to
+ ;; port 8080 in the host.
+ (make-marionette (list #$vm)))
+
+ (mkdir #$output)
+ (chdir #$output)
+
+ (test-begin "laminar")
+
+ (test-assert "service running"
+ (marionette-eval
+ '(begin
+ (use-modules (gnu services herd))
+ (start-service 'laminar))
+ marionette))
+
+ (define* (retry-on-error f #:key times delay)
+ (let loop ((attempt 1))
+ (match (catch
+ #t
+ (lambda ()
+ (cons #t
+ (f)))
+ (lambda args
+ (cons #f
+ args)))
+ ((#t . return-value)
+ return-value)
+ ((#f . error-args)
+ (if (>= attempt times)
+ error-args
+ (begin
+ (sleep delay)
+ (loop (+ 1 attempt))))))))
+
+ (test-equal "http-get"
+ 200
+ (retry-on-error
+ (lambda ()
+ (let-values (((response text)
+ (http-get #$(format
+ #f
+ "http://localhost:~A/"
+ http-port)
+ ;; TODO: Why does decoding fail?
+ #:decode-body? #f)))
+ (response-code response)))
+ #:times 10
+ #:delay 5))
+
+ (test-end)
+ (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+
+ (gexp->derivation "laminar-test" test))
+
+(define %test-laminar
+ (system-test
+ (name "laminar")
+ (description "Connect to a running Laminar server.")
+ (value (run-laminar-test))))
--
2.30.1
L
L
Ludovic Courtès wrote on 5 Apr 2021 11:56
Re: bug#47392: [PATCH 0/2] Add Laminar.
(name . Christopher Baines)(address . mail@cbaines.net)(address . 47392@debbugs.gnu.org)
87sg45ukar.fsf@gnu.org
Hi Chris,

Christopher Baines <mail@cbaines.net> skribis:

Toggle quote (4 lines)
> I've wrote these patches a long while ago, and I've been using Laminar
> too, since Laminar fills a role in the patches testing setup I've been
> working on.

Neat.

Toggle quote (5 lines)
> I was holding off on submitting them until more could be done about the
> JavaScript Laminar uses, but merging these patches would be useful, and
> I think the line of including non-source JavaScript in packages has
> already been crossed.

Heheh.

Toggle quote (29 lines)
> + ("vue.min.js"
> + ,(origin (method url-fetch)
> + (uri (string-append "https://cdnjs.cloudflare.com/ajax/libs/"
> + "vue/2.6.12/vue.min.js"))
> + (sha256
> + (base32
> + "01zklp5cyik65dfn64m8h2y2dxzgbyzgmbf99y7fwgnf0155r7pq"))))
> + ("vue-router.min.js"
> + ,(origin (method url-fetch)
> + (uri (string-append "https://cdnjs.cloudflare.com/ajax/libs/"
> + "vue-router/3.4.8/vue-router.min.js"))
> + (sha256
> + (base32
> + "07gx7znb30rk1z7w6ca7dlfjp44q12bbq6jghwfm27mf6psa80as"))))
> + ("ansi_up.js"
> + ,(origin (method url-fetch)
> + (uri (string-append "https://raw.githubusercontent.com/"
> + "drudru/ansi_up/v1.3.0/ansi_up.js"))
> + (sha256
> + (base32
> + "1993dywxqi2ylnxybwk7m0s0bg2bq7kfllpyr0s8ck6chd0p8i6r"))))
> + ("Chart.min.js"
> + ,(origin (method url-fetch)
> + (uri (string-append "https://cdnjs.cloudflare.com/ajax/libs/"
> + "Chart.js/2.7.2/Chart.min.js"))
> + (sha256
> + (base32
> + "1jh4h12qchsba03dx03mrvs4r8g9qfjn56xm56jqzgqf7r209xq9"))))))

I wonder if it would be possible to, instead, get the non-minified files
upstream, and minify them with ‘uglify-js’, as is done in ‘hpcguix-web’.
WDYT?

That might also give more stable URLs that those above.

Toggle quote (4 lines)
> + (synopsis "Lightweight Continuous Integration service")
> + (description
> + "Laminar is a lightweight and modular Continuous Integration service. It

Maybe s/Continuous Integration/continuous integration/.

The rest LGTM!

Thanks,
Ludo’.
L
L
Ludovic Courtès wrote on 5 Apr 2021 11:58
(name . Christopher Baines)(address . mail@cbaines.net)(address . 47392@debbugs.gnu.org)
87mtuduk79.fsf_-_@gnu.org
Christopher Baines <mail@cbaines.net> skribis:

Toggle quote (4 lines)
> * gnu/services/ci.scm: New file.
> * gnu/tests/ci.scm: New file.
> * doc/guix.texi (Laminar): Document the Laminar service.

[...]

Toggle quote (5 lines)
> +@defvr {Scheme Procedure} laminar-service-type
> +The type of the Laminar service. Its value must be a
> +@code{laminar-configuration} object, as described below.
> +@end defvr

It would be nice to add a config example with one or two sentences
explaining what it does.

Toggle quote (2 lines)
> + #:export (<laminar-configuration>

Please don’t export the record type descriptor.

Otherwise LGTM, thanks!

Ludo’.
L
L
Lars-Dominik Braun wrote on 7 Apr 2021 08:35
Re: [bug#47392] [PATCH 0/2] Add Laminar.
(name . Christopher Baines)(address . mail@cbaines.net)
YG1SpzZwQw5ynsez@noor.fritz.box
Hi Chris,

Toggle quote (3 lines)
> I wonder if it would be possible to, instead, get the non-minified files
> upstream, and minify them with ‘uglify-js’, as is done in ‘hpcguix-web’.
> WDYT?
you could also use the new node-build-system in combination with Jelle’s
WIP node importer in the branch wip-node-importer. Use something like:

guix environment guix --ad-hoc guile-semver
./pre-inst-env guix import npm-binary -r chart.js '^2.7'

I’ve run the imports for Laminar and attached a file with packages.
Usually there’s a dist/ directory in the output that contains minified
JavaScript. Obviously that isn’t a full source build (yet).

Cheers,
Lars
Attachment: node.scm
C
C
Christopher Baines wrote on 9 Apr 2021 13:06
Re: bug#47392: [PATCH 0/2] Add Laminar.
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 47392@debbugs.gnu.org)
875z0v3eg5.fsf@cbaines.net
Ludovic Courtès <ludo@gnu.org> writes:

Toggle quote (16 lines)
> Christopher Baines <mail@cbaines.net> skribis:
>
>> * gnu/services/ci.scm: New file.
>> * gnu/tests/ci.scm: New file.
>> * doc/guix.texi (Laminar): Document the Laminar service.
>
> [...]
>
>> +@defvr {Scheme Procedure} laminar-service-type
>> +The type of the Laminar service. Its value must be a
>> +@code{laminar-configuration} object, as described below.
>> +@end defvr
>
> It would be nice to add a config example with one or two sentences
> explaining what it does.

Sure, I've added an example now, albeit the simplest one.

Toggle quote (4 lines)
>> + #:export (<laminar-configuration>
>
> Please don’t export the record type descriptor.

I removed this.

Toggle quote (2 lines)
> Otherwise LGTM, thanks!

Cool, I've pushed this as eda4bb4f16f74436b0caf1c584888c89b3c4c69b now.
-----BEGIN PGP SIGNATURE-----

iQKlBAEBCgCPFiEEPonu50WOcg2XVOCyXiijOwuE9XcFAmBwNRpfFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDNF
ODlFRUU3NDU4RTcyMEQ5NzU0RTBCMjVFMjhBMzNCMEI4NEY1NzcRHG1haWxAY2Jh
aW5lcy5uZXQACgkQXiijOwuE9XeufBAAg7+2V46xyLtNIXunn7ecQT+7O0p6QuUk
7jmdvKM6kftmvKkxB7uy7KrobLXwswZNaZaf6I4/C9162slJZvvZ6gSqNe2X0jkr
/PqRz6B3X9UfuHcMK9WaFKEhPr52m7ChwdvOeeYFiKQ66b0F9qaQuysd0T9xBaPx
Ly/TepOrBodCPeBL2lhZR9o+MK2URlVe/Dfx7ofJ4vLMs4sPXSwXIjI6WUorwYbZ
wMHwAPpWlVs3wvx2fwOH78mJLY+xv1hSyWd4kz/V/NjajJw2USmH2lUQPRtqR3qu
ImYoEr0D5+Vi/SVKdBe84FTg61eslzrPx9Jn4/y3qE4obwd4xJ1W3IgKnmiiHVqO
9YRXGD5zVl1IH0ET0yEs3+IurLpa0FuZpZnCLMX5rlp1xheh3HpFZHrbcgn+h0sW
h0Jy7cHNa/B7/EM7DJlJ2fmSNZqdQ4cVqrH1hucg2g5mbJP+sa5JSLsWz7xC5FjS
JCdI87fgpBHds2AfB5tGhFhKJdF9V7G+PzZSBtvHbr477tUgo86OoXXv4Pxq59x5
5AqUZUz7FB+xBl6Pnsa8zkvLdKOHel1ukootMnR702j5lS2de9XJExfriGBctfbx
vrD2xHKlnPL3RUZT2PJxE98iRo+pCmJCeyh64rY0oFPN7bBYm8Ih7+gabhJtpm83
YM3zyznhjA0=
=4e32
-----END PGP SIGNATURE-----

C
C
Christopher Baines wrote on 9 Apr 2021 13:06
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 47392-done@debbugs.gnu.org)
8735vz3eew.fsf@cbaines.net
Ludovic Courtès <ludo@gnu.org> writes:

Toggle quote (39 lines)
> Hi Chris,
>
> Christopher Baines <mail@cbaines.net> skribis:
>
>> + ("vue.min.js"
>> + ,(origin (method url-fetch)
>> + (uri (string-append "https://cdnjs.cloudflare.com/ajax/libs/"
>> + "vue/2.6.12/vue.min.js"))
>> + (sha256
>> + (base32
>> + "01zklp5cyik65dfn64m8h2y2dxzgbyzgmbf99y7fwgnf0155r7pq"))))
>> + ("vue-router.min.js"
>> + ,(origin (method url-fetch)
>> + (uri (string-append "https://cdnjs.cloudflare.com/ajax/libs/"
>> + "vue-router/3.4.8/vue-router.min.js"))
>> + (sha256
>> + (base32
>> + "07gx7znb30rk1z7w6ca7dlfjp44q12bbq6jghwfm27mf6psa80as"))))
>> + ("ansi_up.js"
>> + ,(origin (method url-fetch)
>> + (uri (string-append "https://raw.githubusercontent.com/"
>> + "drudru/ansi_up/v1.3.0/ansi_up.js"))
>> + (sha256
>> + (base32
>> + "1993dywxqi2ylnxybwk7m0s0bg2bq7kfllpyr0s8ck6chd0p8i6r"))))
>> + ("Chart.min.js"
>> + ,(origin (method url-fetch)
>> + (uri (string-append "https://cdnjs.cloudflare.com/ajax/libs/"
>> + "Chart.js/2.7.2/Chart.min.js"))
>> + (sha256
>> + (base32
>> + "1jh4h12qchsba03dx03mrvs4r8g9qfjn56xm56jqzgqf7r209xq9"))))))
>
> I wonder if it would be possible to, instead, get the non-minified files
> upstream, and minify them with ‘uglify-js’, as is done in ‘hpcguix-web’.
> WDYT?
>
> That might also give more stable URLs that those above.

Sure, I've adjusted the package definition to do this.

Toggle quote (6 lines)
>> + (synopsis "Lightweight Continuous Integration service")
>> + (description
>> + "Laminar is a lightweight and modular Continuous Integration service. It
>
> Maybe s/Continuous Integration/continuous integration/.

Updated.

Toggle quote (2 lines)
> The rest LGTM!

Great, I've pushed this as eda4bb4f16f74436b0caf1c584888c89b3c4c69b.
-----BEGIN PGP SIGNATURE-----

iQKlBAEBCgCPFiEEPonu50WOcg2XVOCyXiijOwuE9XcFAmBwNUhfFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDNF
ODlFRUU3NDU4RTcyMEQ5NzU0RTBCMjVFMjhBMzNCMEI4NEY1NzcRHG1haWxAY2Jh
aW5lcy5uZXQACgkQXiijOwuE9Xcx8Q//RIWHlXm6jpwJ9xA7GIJQnQqL2xoopX52
LnuVmvtU8zywK6yMr5azW7KGzmfC+gkJg56CF8yI1lhWqi4GnFmy09c2bq0ANGcZ
l99iZilTOyqYq7Lv4nqEljzOD+86HeFEBglssRPbvNy00/ziBwpbrPNVL4klrpBc
v6cEEEanfbp4qa8baRWMmY0wKs3egbUsmFuUogbPt3nwlHnSpSeU/bnjYhI5c+D6
q1v569yqSJj6xvY2tir4kIBDZfQRr8VbtdPiqgAghr94wmqG2F+YKvh30Y6XNZGk
QYCiGcYsTRUKkepvGQqR+ZiBH6CbtV5UMOfevvqhWndf6AsqSj1RxgVO+1WjNcWY
IZlaHUT1AGWFi8CQMX8OTbHxHAK/LLQ4sGJUBbF3p9vKqZOq6EG6AoS98UQQxN4A
nZo1ZqY8rNCmcrnNpXSQpfyWc1zOWqTyMA0SjGZr6FM4X1vvVoUvREKO8O32QUGX
8c3QGN66uOQiaQ7wLWWNDj073lQCckJ+ghR2Pay7Czl9qm4fVEiTakV9UbAwpZ0/
Ue9dQRDQET9eFuzqNclDErW0eaAqyLOBHIgpOsqBx5fN9vaR/xotN4cedsEz8LjO
SuINTFl81MIhsr5deXxPR9HIuQirwXw+VXIWV9I6lQpSDGXK7J+eOM+0ep8hkfI0
SSYY2wbmoo0=
=iBsx
-----END PGP SIGNATURE-----

Closed
C
C
Christopher Baines wrote on 9 Apr 2021 13:09
Re: [bug#47392] [PATCH 0/2] Add Laminar.
(name . Lars-Dominik Braun)(address . lars@6xq.net)(address . 47392@debbugs.gnu.org)
87zgy71zqb.fsf@cbaines.net
Lars-Dominik Braun <lars@6xq.net> writes:

Toggle quote (15 lines)
> Hi Chris,
>
>> I wonder if it would be possible to, instead, get the non-minified files
>> upstream, and minify them with ‘uglify-js’, as is done in ‘hpcguix-web’.
>> WDYT?
> you could also use the new node-build-system in combination with Jelle’s
> WIP node importer in the branch wip-node-importer. Use something like:
>
> guix environment guix --ad-hoc guile-semver
> ./pre-inst-env guix import npm-binary -r chart.js '^2.7'
>
> I’ve run the imports for Laminar and attached a file with packages.
> Usually there’s a dist/ directory in the output that contains minified
> JavaScript. Obviously that isn’t a full source build (yet).

Thanks Lars, I did try a while back, but I think there are some hard
parts (babel) to address. I'd also prefer to keep the number of packages
tainted by Javascript blobs to a minimum, so I view what's going on in
the laminar package as a lesser evil.

I do really want to see proper packages for these things at some point
though, and I hope to be able to spend more time working on it at some
point.
-----BEGIN PGP SIGNATURE-----

iQKlBAEBCgCPFiEEPonu50WOcg2XVOCyXiijOwuE9XcFAmBwNdxfFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDNF
ODlFRUU3NDU4RTcyMEQ5NzU0RTBCMjVFMjhBMzNCMEI4NEY1NzcRHG1haWxAY2Jh
aW5lcy5uZXQACgkQXiijOwuE9Xe/OxAAm4to2iz0Op3fAiUkFTSpwDucxiSix8mj
NEqKp7ez8Wpsl30CNMhNxmJ7nQeu+4xyPNdu8tr6u63K/yH1Ukx0sU2eY6o09Mai
JLSntCoT5FF4JBi74KGMfEBZswSL07aNHZ80e8JSZbbkeJq2G16maddDOfYotAJC
tW9XsoUGjH7H2ux7PRJQ1e3NBg/VfTMlHi3vUnCGCU92B+28iOUfopf7RhldtxO3
vhpgYRS+ebV1HwZcvSS/I+9eppS6aSRBzyEK9p8KHDaEt/IMrCj3FxQy2M3k0rqm
T0KbiY56v0ufYZT1Hx5/TTOw6JokN08CqvKjTpqOnCU3lovCLBTxcHaa2WziCe07
/1/Ry8EKyXiVBlaOonXC3rktOh0GPC0ykHaGT59FGQytd+W+k5nXeLuaoWnzqctj
2uLL7XplobHrQhBPHszd+YAD8Ow6CKh2iahGCVoK6l3s7LzfVcsg/YypGFkWcr1x
xGz47wqVzhQ8HZV/DgjDOKUdmXFzwBcgVhbY3tSY66WcM4CFk9yxEhFhNQYCzWJd
r6C1E02uWghUOKl6Ea3KFcNyxqQZWMs+LT0txk3qMclCmkyQwqbFvsrjFP+3Q6x5
2gGwvsyLwf0YhWlFe3u/9yHL5j/5mocvhoQRShm0sajuf/oPn3fZPhYXgAtLWZrz
su98pxX6/HI=
=0S+/
-----END PGP SIGNATURE-----

?
Your comment

This issue is archived.

To comment on this conversation send an email to 47392@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 47392
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch