Package: guix-patches;
Reported by: Ludovic Courtès <ludo <at> gnu.org>
Date: Fri, 2 Jul 2021 16:30:02 UTC
Severity: normal
Tags: patch, wontfix
Done: Ludovic Courtès <ludo <at> gnu.org>
Bug is archived. No further changes may be made.
View this message in rfc822 format
From: Ludovic Courtès <ludo <at> gnu.org> To: 49334 <at> debbugs.gnu.org Cc: Ludovic Courtès <ludo <at> gnu.org> Subject: [bug#49334] [PATCH] DRAFT website: Add page listing branches. Date: Fri, 2 Jul 2021 18:29:04 +0200
TODO: - nice CSS - menu entry? - more branches * website/apps/development/builder.scm, website/apps/development/data.scm: website/apps/development/templates/branches.scm, website/apps/development/templates/components.scm, website/static/development/css/branches.css: New files. * website/haunt.scm: Use development builder. --- website/apps/development/builder.scm | 55 ++++++++++++ website/apps/development/data.scm | 89 +++++++++++++++++++ .../apps/development/templates/branches.scm | 56 ++++++++++++ .../apps/development/templates/components.scm | 65 ++++++++++++++ website/haunt.scm | 2 + website/static/development/css/branches.css | 38 ++++++++ 6 files changed, 305 insertions(+) create mode 100644 website/apps/development/builder.scm create mode 100644 website/apps/development/data.scm create mode 100644 website/apps/development/templates/branches.scm create mode 100644 website/apps/development/templates/components.scm create mode 100644 website/static/development/css/branches.css Hi Guix! This is something we discussed at the last Guix Days: having a dashboard showing the active Git branches, their status, applicable constraints, and a target “freeze” date (one consensual proposal was that, instead of actually freezing the branch, we’d fork it as ‘BRANCH-frozen’ or something like that, leaving the branch open for further changes). This patch against guix-artwork.git is an attempt at providing a low-tech dashboard. I think it’s a good starting point, and certainly better than nothing. :-) What do people think? Could someone help with CSS (here I copied ‘publications.css’), so that the thing is pretty and readable? I’m also not sure what to do with menu entries. One last thing: we’ll need to list the ‘staging’ branch etc. Thoughts? Ludo’. diff --git a/website/apps/development/builder.scm b/website/apps/development/builder.scm new file mode 100644 index 0000000..9e38ceb --- /dev/null +++ b/website/apps/development/builder.scm @@ -0,0 +1,55 @@ +;;; GNU Guix web site +;;; Copyright © 2021 Ludovic Courtès <ludo <at> gnu.org> +;;; +;;; This file is part of the GNU Guix web site. +;;; +;;; The GNU Guix web site is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU Affero General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; The GNU Guix web site 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 Affero General Public License for more details. +;;; +;;; You should have received a copy of the GNU Affero General Public License +;;; along with the GNU Guix web site. If not, see <http://www.gnu.org/licenses/>. + +(define-module (apps development builder) + #:use-module (apps aux system) + #:use-module (apps development data) + #:use-module (apps development templates branches) + #:use-module (haunt artifact) + #:use-module (haunt html) + #:use-module (haunt page) + #:use-module (haunt utils) + #:use-module (apps aux web) + #:use-module (apps media utils) + #:use-module (srfi srfi-1) + #:export (builder)) + +(define (builder site posts) + "Return the list of web resources that compose the app. + + This procedure is a Haunt builder procedure. + + SITE (<site>) + A site object that defines all the properties of the website. See + Haunt <site> objects for more information. + + POSTS (list of <post>) + A list of post objects that represent articles from the blog. See + Haunt <post> objects for more information. + + RETURN (list of <artifact> and <page>) + A list of objects that represent the web resources of the + application. See Haunt <artifact> and <page> objects for more + information." + (list (branch-list-builder))) + +(define (branch-list-builder) + "Return a Haunt artifact representing the publications page." + (serialized-artifact (url-path-join "branches" "index.html") + (branch-list-t branches) + sxml->html)) diff --git a/website/apps/development/data.scm b/website/apps/development/data.scm new file mode 100644 index 0000000..48daff5 --- /dev/null +++ b/website/apps/development/data.scm @@ -0,0 +1,89 @@ +;;; GNU Guix web site +;;; Copyright © 2021 Ludovic Courtès <ludo <at> gnu.org> +;;; +;;; This file is part of the GNU Guix web site. +;;; +;;; The GNU Guix web site is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU Affero General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; The GNU Guix web site 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 Affero General Public License for more details. +;;; +;;; You should have received a copy of the GNU Affero General Public License +;;; along with the GNU Guix web site. If not, see <http://www.gnu.org/licenses/>. + +(define-module (apps development data) + #:use-module (apps i18n) + #:use-module (apps base templates components) + #:use-module (srfi srfi-9) + #:use-module (srfi srfi-19) + #:export (branch? + branch-name + branch-synopsis + branch-description + branch-target-date + branch-merge-period + + branch-git-view-url + branch-build-status-url + branch-build-badge-url + + branches)) + +(define-record-type <branch> + (%branch name synopsis description date period) + branch? + (name branch-name) + (synopsis branch-synopsis) + (description branch-description) + (date branch-target-date) ;date + (period branch-merge-period)) ;seconds + +(define* (branch name #:key synopsis description target-date merge-period) + (%branch name synopsis description target-date merge-period)) + +(define (branch-git-view-url branch) + (string-append "https://git.savannah.gnu.org/cgit/guix.git/log?h=" + (branch-name branch))) + +(define (branch-build-status-url branch) + (string-append "https://ci.guix.gnu.org/jobset/" + (branch-name branch))) + +(define (branch-build-badge-url branch) + (string-append "https://ci.guix.gnu.org/jobset/" + (branch-name branch) "/badge.svg")) + +(define (string->date* str) + (string->date str "~Y-~m-~d")) + +(define branches + (list (branch "master" + #:synopsis (G_ "Main development branch") + #:description + (G_ + `(p "This is the main development branch, which " + (code "guix pull") " fetches by default. It should " + "contain only well-tested packages changes that do not " + "trigger more than 300 package rebuilds per " + "architecture. Run " + (code ,(G_ (manual-href "guix refresh -l" + (G_ "en") + (G_ "Invoking-guix-refresh.html")))) " " + "for an estimate of the number of rebuilds triggered " + "by a package change."))) + (branch "core-updates" + #:synopsis (G_ "Changes to core packages and build tools") + #:description + (G_ + `(p "This branch receives changes to core packages " + "that entail of most packages, and changes to " + ,(G_ (manual-href "build utilities" + (G_ "en") + (G_ "Build-Utilities.html"))) ".")) + #:target-date (string->date* "2021-07-20") + #:merge-period (* 4 30 24 3600)))) diff --git a/website/apps/development/templates/branches.scm b/website/apps/development/templates/branches.scm new file mode 100644 index 0000000..c834c6d --- /dev/null +++ b/website/apps/development/templates/branches.scm @@ -0,0 +1,56 @@ +;;; GNU Guix web site +;;; Copyright © 2021 Ludovic Courtès <ludo <at> gnu.org> +;;; +;;; This file is part of the GNU Guix web site. +;;; +;;; The GNU Guix web site is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU Affero General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; The GNU Guix web site 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 Affero General Public License for more details. +;;; +;;; You should have received a copy of the GNU Affero General Public License +;;; along with the GNU Guix web site. If not, see <http://www.gnu.org/licenses/>. + +(define-module (apps development templates branches) + #:use-module (apps base templates theme) + #:use-module (apps base types) + #:use-module (apps base utils) + #:use-module (apps i18n) + #:use-module (apps development templates components) + #:export (branch-list-t)) + +(define (branch-list-t branches) + "Return the branch page in SHTML." + (theme + #:title (C_ "webpage title" '("Branching status")) + #:description + (G_ "Status of active development branches.") + #:keywords + ;; TRANSLATORS: |-separated list of webpage keywords. + (string-split (G_ "Development|Branching") #\|) + #:active-menu-item (C_ "website menu" "Branching") + #:css (list + (guix-url "static/base/css/page.css") + (guix-url "static/development/css/branches.css")) + #:crumbs (list (crumb (C_ "website menu" "Publications") "./")) + #:content + `(main + (section + (@ (class "page")) + ,(G_ `(h2 "Branching")) + + ,(G_ + `(p + (@ (class "centered-block limit-width")) + + "This page lists currently-active Git development branches.")) + + (div + (@ (class "publication-list centered-block limit-width")) + + ,@(map branch->shtml branches)))))) diff --git a/website/apps/development/templates/components.scm b/website/apps/development/templates/components.scm new file mode 100644 index 0000000..d3f9fee --- /dev/null +++ b/website/apps/development/templates/components.scm @@ -0,0 +1,65 @@ +;;; GNU Guix web site +;;; Copyright © 2021 Ludovic Courtès <ludo <at> gnu.org> +;;; +;;; This file is part of the GNU Guix web site. +;;; +;;; The GNU Guix web site is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU Affero General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; The GNU Guix web site 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 Affero General Public License for more details. +;;; +;;; You should have received a copy of the GNU Affero General Public License +;;; along with the GNU Guix web site. If not, see <http://www.gnu.org/licenses/>. + +(define-module (apps development templates components) + #:use-module (apps aux lists) + #:use-module (apps aux web) + #:use-module (apps base templates components) + #:use-module (apps base utils) + #:use-module (apps i18n) + #:use-module (apps development data) + #:use-module (srfi srfi-19) + #:export (branch->shtml)) + +(define (next-deadline date period) + "Return DATE or, if DATE is past, DATE + PERIOD. DATE must be a SRFI-19 +date and PERIOD is a number of seconds." + (let ((now (current-time time-utc)) + (then (date->time-utc date))) + (if (and (time>? now then) + (time> (time-difference now then) + (make-time time-utc 0 + (* 2 7 3600 24)))) + (time-utc->date + (make-time time-utc 0 + (+ (time-second then) period))) + date))) + +(define (branch->shtml branch) + `(div (@ (class "branch-overview")) + (div (@ (class "branch-overview-heading")) + (a (@ (href ,(branch-git-view-url branch))) + (tt ,(branch-name branch))) + (a (@ (href ,(branch-build-status-url branch))) + (img (@ (alt ,(G_ "branch build status")) + (src ,(branch-build-badge-url branch)))))) + + (div (@ (class "branch-synopsis")) + ,(branch-synopsis branch)) + (div (@ (class "branch-description")) + ,(branch-description branch)) + + ,@(if (branch-target-date branch) + `(,(G_ `(div (@ (class "branch-date")) + "target merge date: " + ,(date->string + (next-deadline (branch-target-date branch) + (branch-merge-period branch)) + (C_ "SRFI-19 data->string format" + "~Y-~m-~d"))))) + '()))) diff --git a/website/haunt.scm b/website/haunt.scm index 01e2af7..78e3806 100644 --- a/website/haunt.scm +++ b/website/haunt.scm @@ -8,6 +8,7 @@ (apps i18n) ((apps media builder) #:prefix media:) ((apps packages builder) #:prefix packages:) + ((apps development builder) #:prefix development:) (haunt asset) (haunt builder assets) (haunt reader) @@ -26,4 +27,5 @@ download:builder media:builder packages:builder + development:builder (static-directory "static")))) diff --git a/website/static/development/css/branches.css b/website/static/development/css/branches.css new file mode 100644 index 0000000..2581793 --- /dev/null +++ b/website/static/development/css/branches.css @@ -0,0 +1,38 @@ +.branch-overview, +.branch-overview:link, +.branch-overview:visited { + display: block; + border-image: linear-gradient(to right, gray, transparent) 1; + border-style: none none solid none; + border-width: thin thick; + color: #4D4D4D; + padding: 20px 70px 20px 10px; + transition: border-width .2s cubic-bezier(.22,.61,.36,1); +} + +.branch-overview:active, +.branch-overview:focus, +.branch-overview:hover { + background-color: gold; + background-image: url("/static/base/img/link-arrow-shaper.svg"); + background-position: right; + background-repeat: no-repeat; + background-size: auto 100%; + border-image: linear-gradient(to right, #333, white, white) 1; + border-style: none none solid solid; +} + +.branch-overview-heading { + margin-bottom: 10px; +} + +.publication-info { + margin-bottom: 0px; +} + +.scientific-mark { + display: inline-block; + cursor: help; + height: 28px; + width: 28px; +} -- 2.32.0
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.