[PATCH] DRAFT website: Add page listing branches.

  • Done
  • quality assurance status badge
Details
4 participants
  • Ludovic Courtès
  • Mathieu Othacehe
  • pelzflorian (Florian Pelz)
  • Ricardo Wurmus
Owner
unassigned
Submitted by
Ludovic Courtès
Severity
normal
L
L
Ludovic Courtès wrote on 2 Jul 2021 18:29
(address . guix-patches@gnu.org)(name . Ludovic Courtès)(address . ludo@gnu.org)
20210702162904.314-1-ludo@gnu.org
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’.

Toggle diff (353 lines)
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;
+}
--
2.32.0
P
P
pelzflorian (Florian Pelz) wrote on 3 Jul 2021 09:52
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 49334@debbugs.gnu.org)
20210703075232.jwdslij2onnwwa62@pelzflorian.localdomain
Hi Ludo,

On Fri, Jul 02, 2021 at 06:29:04PM +0200, Ludovic Courtès wrote:
Toggle quote (14 lines)
> 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!


Toggle quote (7 lines)
> 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?


Toggle quote (6 lines)
> * 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,/





Toggle quote (24 lines)
> +++ 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
M
M
Mathieu Othacehe wrote on 6 Jul 2021 12:33
Re: bug#49334: [PATCH] DRAFT website: Add page listing branches.
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 49334@debbugs.gnu.org)
87a6mzwx2j.fsf@gnu.org
Hey Ludo,

Toggle quote (3 lines)
> + #: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
URL would return:

Toggle snippet (5 lines)
{
TARGET_DATE: "2021-07-20"
}

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

WDYT?

Thanks,

Mathieu
L
L
Ludovic Courtès wrote on 8 Jul 2021 10:20
(name . Mathieu Othacehe)(address . othacehe@gnu.org)(address . 49334@debbugs.gnu.org)
871r89md2m.fsf@gnu.org
Hello!

Mathieu Othacehe <othacehe@gnu.org> skribis:

Toggle quote (18 lines)
>> + #: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’.
M
M
Mathieu Othacehe wrote on 8 Jul 2021 14:00
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 49334@debbugs.gnu.org)
87sg0pvwvg.fsf@gnu.org
Hey,

Toggle quote (3 lines)
> 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.

Toggle quote (4 lines)
> 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
L
L
Ludovic Courtès wrote on 9 Jul 2021 16:04
(name . Mathieu Othacehe)(address . othacehe@gnu.org)(address . 49334@debbugs.gnu.org)
87bl7bh9cb.fsf@gnu.org
Hi!

Mathieu Othacehe <othacehe@gnu.org> skribis:

Toggle quote (9 lines)
>> 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.

Toggle quote (7 lines)
>> 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.

Toggle quote (3 lines)
> 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’.
R
R
Ricardo Wurmus wrote on 12 Jun 2022 10:39
[PATCH] DRAFT website: Add page listing branches.
(address . 49334@debbugs.gnu.org)
87zgii1de5.fsf@elephly.net
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.

--
Ricardo
L
L
Ludovic Courtès wrote on 24 Jan 23:17 +0100
control message for bug #49334
(address . control@debbugs.gnu.org)
87fryms7f6.fsf@gnu.org
tags 49334 + wontfix
quit
L
L
Ludovic Courtès wrote on 24 Jan 23:17 +0100
Re: [bug#49334] [PATCH] DRAFT website: Add page listing branches.
(address . 49334-done@debbugs.gnu.org)
87h6j2s7fg.fsf@gnu.org
Hey you!

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

Toggle quote (10 lines)
> 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

Ludo’.
Closed
?
Your comment

This issue is archived.

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

To respond to this issue using the mumi CLI, first switch to it
mumi current 49334
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