blob: 95bd7017aea26ecb881c923f1f379752f40398eb (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
;;; run64 --- SRFI-64 test runner
;;; Copyright © 2025–2026 Arun Isaac <arunisaac@systemreboot.net>
;;;
;;; This file is part of run64.
;;;
;;; run64 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.
;;;
;;; run64 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 run64. If not, see <https://www.gnu.org/licenses/>.
(define-module (run64-website)
#:use-module ((gnu packages textutils) #:select (aha))
#:use-module ((gnu packages guile) #:select (guile-3.0))
#:use-module ((gnu packages haskell-xyz) #:select (pandoc))
#:use-module (guix gexp)
#:use-module (guix packages)
#:use-module ((run64-package) #:select (guile-run64)))
(define run64-website-home-page-gexp
(with-imported-modules '((guix build utils))
#~(begin
(use-modules (guix build utils)
(rnrs base)
(rnrs io ports)
(srfi srfi-11)
(srfi srfi-26)
(ice-9 match)
(ice-9 popen))
;; Run run64 on example.scm to produce example-output.html.
(set-path-environment-variable "PATH"
'("bin")
(list #$aha #$guile-3.0 #$guile-run64))
(copy-file #$(file-append (package-source guile-run64)
"/example.scm")
"example.scm")
(let ((commands '(("guile-run64" "example.scm")
("aha" "--no-header")))
(success? (lambda (pid)
(match (waitpid pid)
((_ . status)
(zero? (status:exit-val status)))))))
(let-values (((from to pids) (pipeline commands)))
(let ((example-output (get-bytevector-all from)))
(match pids
((aha-pid guile-run64-pid)
;; We only check for the success of aha since guile-run64 is
;; supposed to fail.
(assert (success? aha-pid))))
(close to)
(close from)
(call-with-output-file "example-output.html"
(cut put-bytevector <> example-output)))))
(invoke #$(file-append pandoc "/bin/pandoc")
(string-append "--lua-filter="
#$(local-file "../website/insert-example-output.lua"))
"--standalone"
"--metadata" "title=run64"
"--css=style.css"
(string-append "--output=" #$output)
#$(file-append (package-source guile-run64)
"/README.md")))))
(define-public run64-website
(file-union "run64-website"
`(("index.html"
,(computed-file "run64-website-home-page.html"
run64-website-home-page-gexp))
("style.css" ,(local-file "../website/style.css"))
("releases" ,(local-file "../website/releases"
#:recursive? #t)))))
run64-website
|