From patchwork Fri Jul 2 16:29:04 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ludovic_Court=C3=A8s?= X-Patchwork-Id: 31044 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 746BD27BC81; Fri, 2 Jul 2021 17:30:16 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.9 required=5.0 tests=BAYES_00,MAILING_LIST_MULTI, SPF_HELO_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.2 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id 7C26A27BC78 for ; Fri, 2 Jul 2021 17:30:12 +0100 (BST) Received: from localhost ([::1]:46898 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lzM3P-0000D7-GF for patchwork@mira.cbaines.net; Fri, 02 Jul 2021 12:30:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51236) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lzM3H-0000Cv-EG for guix-patches@gnu.org; Fri, 02 Jul 2021 12:30:03 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:53673) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lzM3H-0005ij-4m for guix-patches@gnu.org; Fri, 02 Jul 2021 12:30:03 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1lzM3H-0007Ba-2I for guix-patches@gnu.org; Fri, 02 Jul 2021 12:30:03 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#49334] [PATCH] DRAFT website: Add page listing branches. Resent-From: Ludovic =?utf-8?q?Court=C3=A8s?= Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Fri, 02 Jul 2021 16:30:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 49334 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 49334@debbugs.gnu.org Cc: Ludovic =?utf-8?q?Court=C3=A8s?= X-Debbugs-Original-To: guix-patches@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.162524335527514 (code B ref -1); Fri, 02 Jul 2021 16:30:02 +0000 Received: (at submit) by debbugs.gnu.org; 2 Jul 2021 16:29:15 +0000 Received: from localhost ([127.0.0.1]:36986 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lzM2U-00079g-HM for submit@debbugs.gnu.org; Fri, 02 Jul 2021 12:29:15 -0400 Received: from lists.gnu.org ([209.51.188.17]:34384) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lzM2R-00079X-Pv for submit@debbugs.gnu.org; Fri, 02 Jul 2021 12:29:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51134) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lzM2R-00004t-Ic for guix-patches@gnu.org; Fri, 02 Jul 2021 12:29:11 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:38700) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lzM2Q-0005D0-TL; Fri, 02 Jul 2021 12:29:11 -0400 Received: from [2a01:e0a:1d:7270:af76:b9b:ca24:c465] (port=42606 helo=gnu.org) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lzM2Q-0005cr-LQ; Fri, 02 Jul 2021 12:29:10 -0400 From: Ludovic =?utf-8?q?Court=C3=A8s?= Date: Fri, 2 Jul 2021 18:29:04 +0200 Message-Id: <20210702162904.314-1-ludo@gnu.org> X-Mailer: git-send-email 2.32.0 MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches 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 +;;; +;;; 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 . + +(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 () + A site object that defines all the properties of the website. See + Haunt objects for more information. + + POSTS (list of ) + A list of post objects that represent articles from the blog. See + Haunt objects for more information. + + RETURN (list of and ) + A list of objects that represent the web resources of the + application. See Haunt and 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 +;;; +;;; 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 . + +(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 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 +;;; +;;; 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 . + +(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 +;;; +;;; 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 . + +(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; +}