‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐On Wednesday, January 13, 2021 10:54 AM, Mathieu Othacehe <othacehe@gnu.org> wrote:
Toggle quote (8 lines)
> Hello,>> This patch adds a Cuirass project page to the website. Luis, I used one> of your logo proposals to have a first overview. We will have to replace> it with the real logo of course.>> There's a screenshot of the result attached.
I see some things that could be improved:
* The description metadata in cuirass-t is the same description of the donations page. I'd probably add something like: "GNU Guix continuous integration software."
* For accessibility, every use of the name "Cuirass" should indicate the language is french (if the word does not exist in English). For example: <span lang="fr">Cuirass</span>. This way capable screen readers use the appropriate pronunciation.
* Also for accessibility, the image alt attribute should say "Cuirass", the lang attribute should be set to French, and the image itself should be wrapped in a H2 element so that the section has a heading.
Other than that, it looks good to me.
From b7c3b92b3f2b890163be65e77084144589f4f72e Mon Sep 17 00:00:00 2001
* website/apps/base/templates/cuirass.scm: New file.* website/po/POTFILES: Add it.* website/static/base/img/cuirass.png: New file.* website/apps/base/builder.scm (cuirass-builder): New procedure,(builder): add it.* website/apps/base/templates/contribute.scm (contribute-t): Add a link toCuirass page.--- website/apps/base/builder.scm | 24 ++++--- website/apps/base/templates/contribute.scm | 6 +- website/apps/base/templates/cuirass.scm | 70 +++++++++++++++++++++ website/po/POTFILES | 1 + website/static/base/img/cuirass.png | Bin 0 -> 10875 bytes 5 files changed, 89 insertions(+), 12 deletions(-) create mode 100644 website/apps/base/templates/cuirass.scm create mode 100644 website/static/base/img/cuirass.png
Toggle diff (332 lines)
diff --git a/website/apps/base/builder.scm b/website/apps/base/builder.scmindex 4882dc5..d0b7094 100644--- a/website/apps/base/builder.scm+++ b/website/apps/base/builder.scm@@ -6,6 +6,7 @@ #:use-module (apps base data) #:use-module (apps base templates about) #:use-module (apps base templates contact)+ #:use-module (apps base templates cuirass) #:use-module (apps base templates irc) #:use-module (apps base templates contribute) #:use-module (apps base templates donate)@@ -47,15 +48,16 @@ application. See Haunt <page> objects for more information." (flatten (list (menu-builder)- (home-builder site posts)- (help-builder)- (donate-builder)- (about-builder)- (contact-builder)- (irc-builder)- (contribute-builder)- (security-builder)- (graphics-builder))))+ (home-builder site posts)+ (help-builder)+ (cuirass-builder)+ (donate-builder)+ (about-builder)+ (contact-builder)+ (irc-builder)+ (contribute-builder)+ (security-builder)+ (graphics-builder)))) @@ -83,12 +85,14 @@ "Return a Haunt page representing the Contribute page of the website." (make-page "contribute/index.html" (contribute-t) sxml->html)) +(define (cuirass-builder)+ "Return a Haunt page representing the Cuirass page of the website."+ (make-page "cuirass/index.html" (cuirass-t) sxml->html)) (define (donate-builder) "Return a Haunt page representing the Donate page of the website." (make-page "donate/index.html" (donate-t) sxml->html)) - (define (graphics-builder) "Return a Haunt page representing the Graphics page of the website." (make-page "graphics/index.html" (graphics-t) sxml->html))diff --git a/website/apps/base/templates/contribute.scm b/website/apps/base/templates/contribute.scmindex b91b9d4..a126b3b 100644--- a/website/apps/base/templates/contribute.scm+++ b/website/apps/base/templates/contribute.scm@@ -217,11 +217,13 @@ Translation|I18N|L10N|Artwork") #\|) us keep the system up and running smoothly. ")) ,(G_ `(p- "You can also "+ "You can contribute to our continous integration software: "+ (a (@ (href ,(guix-url "cuirass/"))) "Cuirass")+ ". You can also " ,(G_ `(a (@ (href ,(guix-url "donate/"))) "donate hardware or hosting")) " for our "- ,(G_ `(a (@ (href "https://ci.guix.gnu.org")) "build farm")) ". "))+ ,(G_ `(a (@ (href "https://ci.guix.gnu.org")) "build farm")))) (p ,(link-more #:label (G_ "Contribute")diff --git a/website/apps/base/templates/cuirass.scm b/website/apps/base/templates/cuirass.scmnew file mode 100644index 0000000..63ecf5d--- /dev/null+++ b/website/apps/base/templates/cuirass.scm@@ -0,0 +1,70 @@+;;; GNU Guix web site+;;; Initially written by sirgazil who waives all+;;; copyright interest on this file.++(define-module (apps base templates cuirass)+ #:use-module (apps base templates components)+ #:use-module (apps base templates theme)+ #:use-module (apps base types)+ #:use-module (apps base utils)+ #:use-module (apps i18n)+ #:export (cuirass-t))++(define (cuirass-t)+ "Return the Cuirass page in SHTML."+ (theme+ #:title (C_ "webpage title" '("Cuirass"))+ #:description+ (G_ "We are looking for donations of hardware and optionally+ hosting for machines (they should be usable with exclusively+ free software).")+ #:keywords+ (string-split ;TRANSLATORS: |-separated list of webpage keywords+ (G_ "GNU|Linux|Unix|Free software|Libre software|Operating \+system|GNU Guix package manager|Cuirass|CI") #\|)+ #:css (list+ (guix-url "static/base/css/page.css"))+ #:content+ `(main+ (section+ (@ (class "page centered-block limit-width"))+ (img (@ (src ,(guix-url "static/base/img/cuirass.png"))+ (alt "")))+ ,(G_ `(p "Cuirass is the GNU Guix continuous+integration software. It's a general purpose build automation server written+in GNU Guile that checks out sources from VCS repositories, execute build jobs+and store build results in a database. Cuirass also provides a web interface+to monitor the build results."))++ ,(G_ `(p "Cuirass is running on GNU Guix build farm at "+ `(a (@ (href "https://ci.guix.gnu.org"))+ "https://ci.guix.gnu.org")+ "."))+ ,(G_ `(h3 "Features"))+ (ul+ (li+ ,(G_ "Poll sources from multiple Git repositories."))+ (li+ ,(G_ "Execute builds on local or remote Guix daemons."))+ (li+ ,(G_ "Store build products or artifacts."))+ (li+ ,(G_ "Collect build logs and metrics."))+ (li+ ,(G_ "Provides a REST API."))+ (li+ ,(G_ `"High level of concurrency using ")+ (a (@ (href "https://github.com/wingo/fibers"))+ "Guile-Fibers")+ ,(G_ " asynchronous library.")))+ ,(G_ `(h3 "Documentation"))+ ,(G_ `(p "Cuirass documentation is accessible "+ ,(G_ `(a (@ (href ,(manual-url "Continuous-Integration.html")))+ "here"))+ "."))+ ,(G_ `(h3 "Project repository"))+ ,(G_ `(p "Cuirass source code is hosted at "+ ,(G_ `(a (@ (href "//git.savannah.gnu.org/cgit/guix/guix-cuirass.git"))+ "git://git.sv.gnu.org/guix/guix-cuirass.git"))+ "."))+ ))))diff --git a/website/po/POTFILES b/website/po/POTFILESindex 6f9f349..51f1c1f 100644--- a/website/po/POTFILES+++ b/website/po/POTFILES@@ -9,6 +9,7 @@ apps/base/templates/help.scm # other files apps/base/templates/contact.scm apps/base/templates/contribute.scm+apps/base/templates/cuirass.scm apps/base/templates/donate.scm apps/base/templates/graphics.scm apps/base/templates/irc.scmdiff --git a/website/static/base/img/cuirass.png b/website/static/base/img/cuirass.pngnew file mode 100644index 0000000000000000000000000000000000000000..b1932180a8943b78d912fe71eb007ce1c00f6209GIT binary patchliteral 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
literal 0HcmV?d00001
-- 2.29.2