diff mbox series

[bug#49334] DRAFT website: Add page listing branches.

Message ID 20210702162904.314-1-ludo@gnu.org
State New
Headers show
Series [bug#49334] DRAFT website: Add page listing branches. | expand

Checks

Context Check Description
cbaines/applying patch fail View Laminar job
cbaines/issue success View issue

Commit Message

Ludovic Courtès July 2, 2021, 4:29 p.m. UTC
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’.

Comments

pelzflorian (Florian Pelz) July 3, 2021, 7:52 a.m. UTC | #1
Hi Ludo,

On Fri, Jul 02, 2021 at 06:29:04PM +0200, Ludovic Courtès wrote:
> 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?

I like it.  Thank you!


> 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’.

I don’t know, but maybe it should be in the About Guix menu on the
website?

Maybe the Guix manual should refer to https://guix.gnu.org/branches/ when
it is online?


> * 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.

s/data.scm:/data.scm,/





> +++ b/website/apps/development/data.scm
> […]]
> +(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 "

s/entail of/entail/

Regards,
Florian
Mathieu Othacehe July 6, 2021, 10:33 a.m. UTC | #2
Hey Ludo,

> +                #:target-date (string->date* "2021-07-20")
> +                #:merge-period (* 4 30 24 3600))))

This looks fine, thanks! I wonder if it would make sense to extract the
target date and maybe other information from Cuirass.

We could have something like specification properties with a key/value
association. The https://ci.guix.gnu.org/specification/master/properties
URL would return:

--8<---------------cut here---------------start------------->8---
{
        TARGET_DATE: "2021-07-20"
}
--8<---------------cut here---------------end--------------->8---

This way, the https://guix.gnu.org/branches page would be mostly static
and we could update specification properties directly from Cuirass web
interface.

WDYT?

Thanks,

Mathieu
Ludovic Courtès July 8, 2021, 8:20 a.m. UTC | #3
Hello!

Mathieu Othacehe <othacehe@gnu.org> skribis:

>> +                #:target-date (string->date* "2021-07-20")
>> +                #:merge-period (* 4 30 24 3600))))
>
> This looks fine, thanks! I wonder if it would make sense to extract the
> target date and maybe other information from Cuirass.
>
> We could have something like specification properties with a key/value
> association. The https://ci.guix.gnu.org/specification/master/properties
> URL would return:
>
> {
>         TARGET_DATE: "2021-07-20"
> }
>
> This way, the https://guix.gnu.org/branches page would be mostly static
> and we could update specification properties directly from Cuirass web
> interface.

Ah, that’s an interesting idea.  This would be a key/value property list
that Cuirass wouldn’t touch, right?

I kinda liked the idea of having the target date automatically repeat,
whether or not we’re on time :-), but maybe what you suggest would be
more reasonable.

That said, if /properties returns JSON, we cannot make the page static,
unless we add JS code to fetch /properties and to present it nicely,
right?

Thanks,
Ludo’.
Mathieu Othacehe July 8, 2021, noon UTC | #4
Hey,

> Ah, that’s an interesting idea.  This would be a key/value property list
> that Cuirass wouldn’t touch, right?

Yes, the /specification/add/xxx and /specification/edit/xxx routes
would allow to add/edit entries in this list though.

We could also add the specification max dependencies count (300 master,
1800 on staging ...) as a property.

> That said, if /properties returns JSON, we cannot make the page static,
> unless we add JS code to fetch /properties and to present it nicely,
> right?

Right, it would require to add some javascript fanciness, but I can take
care of it. Anyway, what you are proposing is already a nice step
forward, this can come later.

Thanks,

Mathieu
Ludovic Courtès July 9, 2021, 2:04 p.m. UTC | #5
Hi!

Mathieu Othacehe <othacehe@gnu.org> skribis:

>> Ah, that’s an interesting idea.  This would be a key/value property list
>> that Cuirass wouldn’t touch, right?
>
> Yes, the /specification/add/xxx and /specification/edit/xxx routes
> would allow to add/edit entries in this list though.
>
> We could also add the specification max dependencies count (300 master,
> 1800 on staging ...) as a property.

That’d be nice.

>> That said, if /properties returns JSON, we cannot make the page static,
>> unless we add JS code to fetch /properties and to present it nicely,
>> right?
>
> Right, it would require to add some javascript fanciness, but I can take
> care of it.

Great.  Note that so far there was no JS at all on the web site, and I
think we’re aiming for “progressive enhancement”, so care should be
taken to have a valid page even when JS is disabled.

> Anyway, what you are proposing is already a nice step forward, this
> can come later.

Great.

I wonder if Luis or another person more competent than myself could give
a hand on styling.  Any takers?  :-)

Ludo’.
Ricardo Wurmus June 12, 2022, 8:39 a.m. UTC | #6
It sounds like we wanted to move ahead with this, without waiting for
an extra Cuirass API.

Can this be merged as is?  Styling can come later.
Ludovic Courtès Jan. 24, 2024, 10:17 p.m. UTC | #7
Hey you!

Ludovic Courtès <ludo@gnu.org> skribis:

> 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.  :-)

This has been superseded by the much nier front page at
<https://qa.guix.gnu.org/>.  Closing!

Ludo’.
diff mbox series

Patch

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@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@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@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@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;
+}