From patchwork Mon Oct 13 14:21:40 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Titouan Christophe X-Patchwork-Id: 2149338 Return-Path: X-Original-To: incoming-buildroot@patchwork.ozlabs.org Delivered-To: patchwork-incoming-buildroot@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=buildroot.org (client-ip=2605:bc80:3010::137; helo=smtp4.osuosl.org; envelope-from=buildroot-bounces@buildroot.org; receiver=patchwork.ozlabs.org) Received: from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4clfhX5j8Rz1yGq for ; Tue, 14 Oct 2025 01:23:08 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 9202E4105B; Mon, 13 Oct 2025 14:23:06 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id FyBvSOtj79Fx; Mon, 13 Oct 2025 14:23:05 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=140.211.166.142; helo=lists1.osuosl.org; envelope-from=buildroot-bounces@buildroot.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org 483E0411B9 Received: from lists1.osuosl.org (lists1.osuosl.org [140.211.166.142]) by smtp4.osuosl.org (Postfix) with ESMTP id 483E0411B9; Mon, 13 Oct 2025 14:23:05 +0000 (UTC) X-Original-To: buildroot@buildroot.org Delivered-To: buildroot@buildroot.org Received: from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by lists1.osuosl.org (Postfix) with ESMTP id 64BA912B for ; Mon, 13 Oct 2025 14:23:03 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 60F3F827FD for ; Mon, 13 Oct 2025 14:23:03 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id vOXjkGcQ1UV3 for ; Mon, 13 Oct 2025 14:23:02 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a00:1450:4864:20::633; helo=mail-ej1-x633.google.com; envelope-from=titouan.christophe@essensium.com; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp1.osuosl.org E0B5882605 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org E0B5882605 Received: from mail-ej1-x633.google.com (mail-ej1-x633.google.com [IPv6:2a00:1450:4864:20::633]) by smtp1.osuosl.org (Postfix) with ESMTPS id E0B5882605 for ; Mon, 13 Oct 2025 14:23:01 +0000 (UTC) Received: by mail-ej1-x633.google.com with SMTP id a640c23a62f3a-b3c2db014easo797046766b.0 for ; Mon, 13 Oct 2025 07:23:01 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760365379; x=1760970179; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=a9Y7x7/m0ccRaLjNec8nSmsG92+eb8vMvZKcvRzL/t0=; b=HvGLOuyka0SpMYTEnPtctTsfCeObAr8YiLU+4QUBp24Sfw5ZhACOFwDwijaqHbpgKA e525LHk1mD5vKtw+AZOC9gPColu6BZPCFZq5VnFSlEM27rKZLCap8HyJkzUD7GpAdMDp ldMyL9RDF8HdFVyAGKVpPY4oX+Wrs0C+tMMQAIG/vw4jK4AwuFerQlDUXPVXdAfpTEAn No3iWGm+2DofU12I+8MxnddTXJRnkt9UfPzVmaKn9I+gizzNB/1AQnz5CLmb9m/EI3MH tgp3ZVTs0SDzjhpC14KxZAyJQrWUowmmx1qZOnjG81+yf6xRykCXlDSPH0PiKBf9Kt7q m+EA== X-Gm-Message-State: AOJu0YwOYiWYeNHl6IynrAxIGGPgfiz3VlSTQliRpQZPc8v2LG8yc6Fq CQPHVG2Yohooz3I3DkZCGPTEgbGAei7WrSGkghVQqZvlMRi9iLffqMBMs4wJ7u/zOS+sI0bO11v BxVnH X-Gm-Gg: ASbGncuudcoMc2WUqLO/PCZnSesoLeZgYJgwVxTcDiI65nJENck/y8M3uM6PRhGM7FA i5/TgPAjIAMXN6AOwIIi/qGVDkaCXLwa1prav7iut+5RF2AoPW54GTvhyBljHOqGxYHcsMCmZhk 2/38fsZYHwonVxpqgvDNmpBX2cR6jwYT9JKjqtD/vzMw/Hy/ch0vMQr55D5ORuMV948XPxNQ7y6 9yHv9CRSg3spd3pOUwZWvpVAZsX1i6ZOYfV5joFH5znFm8lY/GrIXGHADxQHIVul4v9UZ/IqB9I h18kcoJqb7Wiw0gulH5n6HHJAtd3UU6o/bgRnmHJyf0JbBovHzFLxuQ5Q/JnPtHHUzXT3n/GDwQ XRahsZo1JSOLFYFTaMVAYrVWcMzCQcsOkC+RWII7QKmrkigR4sNw= X-Google-Smtp-Source: AGHT+IHow0hKEz7fTc7ToRioaMAwomB6yaBPGKEwpr3peyUgeLXlJg+46hlp2NqDJaCakTvLUU74Iw== X-Received: by 2002:a17:906:7949:b0:b3c:bb7a:c366 with SMTP id a640c23a62f3a-b50a9b62b79mr2083435566b.7.1760365379367; Mon, 13 Oct 2025 07:22:59 -0700 (PDT) Received: from dragon.home ([109.136.97.112]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b55d63c9a3csm949190966b.23.2025.10.13.07.22.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Oct 2025 07:22:59 -0700 (PDT) To: buildroot@buildroot.org Date: Mon, 13 Oct 2025 16:21:40 +0200 Message-ID: <20251013142140.68026-1-titouan.christophe@mind.be> X-Mailer: git-send-email 2.51.0 MIME-Version: 1.0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mind.be; s=google; t=1760365379; x=1760970179; darn=buildroot.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=a9Y7x7/m0ccRaLjNec8nSmsG92+eb8vMvZKcvRzL/t0=; b=XUktWoI42QtwKM/m2JXkYaDrEfrIyn5z2PNv+D3K5sQBvMdZSqavmoCnmDENbKzpZk Sl0FpvLfWraTLynSyesfS5SsTuG4llf1+d9RyTfgjYokJk4HdjMz0slWIQkao/MnltA5 gzY8s2GeSxPNb1dIbnSQvG3ga1xPapjr6lC6qiL52xwRQevk6w3nO0GuUkPt9IBSxjUe MuN9Zo649Oky7DUoH5Mg24j+SI+prdAn+qBSvqLva9b3bWXlZJAEb77Z+mY/z5pgqSeE 4FPJy5WQ6we0UKq+JSdGa5tfHfL3Mcax8fD6VJ4ajjgurlC6AsFWOr+k0mw0EgBrka7T ZWKQ== X-Mailman-Original-Authentication-Results: smtp1.osuosl.org; dmarc=pass (p=quarantine dis=none) header.from=mind.be X-Mailman-Original-Authentication-Results: smtp1.osuosl.org; dkim=pass (2048-bit key) header.d=mind.be header.i=@mind.be header.a=rsa-sha256 header.s=google header.b=XUktWoI4 Subject: [Buildroot] [PATCH] docs/website: auto-generate the downloads page X-BeenThere: buildroot@buildroot.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Discussion and development of buildroot List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Titouan Christophe via buildroot From: Titouan Christophe Reply-To: Titouan Christophe Errors-To: buildroot-bounces@buildroot.org Sender: "buildroot" Separate the releases data from its templating on the website. Each line in the table on the releases page has the same information repeated multiple times, such as the release tag (like "2025.02.7") that is present in the text and multiple links. Consequently, when publishing a new version of Buildroot, it is likely that we're using search & replace in the HTML file to update them all at once. However, other fields, such as the release date, may be forgotten in the process, as it happened recently [1]. Moreover, the extra surrounding markup makes it more difficult to spot all information to be updated at a glance. To make things easier, let's define the releases data in a concise json file, and generate the downloads page from it with a python script. This also makes it easier to update the templating if needed. [1] f32e6aa226ccbc9a53a47c736a13e57bcc78dc67 Signed-off-by: Titouan Christophe --- docs/website/download.html | 116 +------------------------------- docs/website/releases.html | 94 ++++++++++++++++++++++++++ docs/website/releases.json | 25 +++++++ utils/generate-website-releases | 72 ++++++++++++++++++++ 4 files changed, 192 insertions(+), 115 deletions(-) create mode 100644 docs/website/releases.html create mode 100644 docs/website/releases.json create mode 100755 utils/generate-website-releases diff --git a/docs/website/download.html b/docs/website/download.html index d5b849ca9a..08c53bc3f1 100644 --- a/docs/website/download.html +++ b/docs/website/download.html @@ -7,121 +7,7 @@
Download
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SeriesEnd of LifeLatest releaseLatest release dateDownloads -
Stable2025.08.xDecember 2025 - 2025.08.1
- - Changelog - -
2025-10-11 - - - .tar.gz -
- [PGP sig] -
- - - .tar.xz -
- [PGP sig] -
Stable (EOL)2025.05.xSeptember 2025 - 2025.05.3
- - Changelog - -
2025-10-11 - - - .tar.gz -
- [PGP sig] -
- - - .tar.xz -
- [PGP sig] -
Long-term support2025.02.xMarch 2028 - 2025.02.7
- - Changelog - -
2025-10-11 - - - .tar.gz -
- [PGP sig] -
- - - .tar.xz -
- [PGP sig] -
+ This and earlier releases (and their PGP signatures) can always be downloaded from http://buildroot.net/downloads/. diff --git a/docs/website/releases.html b/docs/website/releases.html new file mode 100644 index 0000000000..5f95f334da --- /dev/null +++ b/docs/website/releases.html @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SeriesEnd of LifeLatest releaseLatest release dateDownloads +
Stable2025.08.xDecember 2025 + 2025.08.1
+ + Changelog + +
2025-10-11 + + + .tar.gz +
+ [PGP sig] +
+ + + .tar.xz +
+ [PGP sig] +
Stable (EOL)2025.05.xSeptember 2025 + 2025.05.3
+ + Changelog + +
2025-10-11 + + + .tar.gz +
+ [PGP sig] +
+ + + .tar.xz +
+ [PGP sig] +
Long-term support2025.02.xMarch 2028 + 2025.02.7
+ + Changelog + +
2025-10-11 + + + .tar.gz +
+ [PGP sig] +
+ + + .tar.xz +
+ [PGP sig] +
\ No newline at end of file diff --git a/docs/website/releases.json b/docs/website/releases.json new file mode 100644 index 0000000000..476abb9963 --- /dev/null +++ b/docs/website/releases.json @@ -0,0 +1,25 @@ +{ + "releases": [ + { + "series": "2025.08.x", + "name": "Stable", + "planned_eol": "December 2025", + "latest": "2025.08.1", + "latest_date": "2025-10-11" + }, + { + "series": "2025.05.x", + "name": "Stable (EOL)", + "planned_eol": "September 2025", + "latest": "2025.05.3", + "latest_date": "2025-10-11" + }, + { + "series": "2025.02.x", + "name": "Long-term support", + "planned_eol": "March 2028", + "latest": "2025.02.7", + "latest_date": "2025-10-11" + } + ] +} diff --git a/utils/generate-website-releases b/utils/generate-website-releases new file mode 100755 index 0000000000..4ff62df121 --- /dev/null +++ b/utils/generate-website-releases @@ -0,0 +1,72 @@ +#!/usr/bin/env python3 + +""" +Generate the download HTML page for the website from releases.json that lists +all actively maintained releases +""" + +import json +from pathlib import Path +from sys import argv + +THIS_SCRIPT = Path(argv[0]).absolute() +BUILDROOT_DIR = THIS_SCRIPT.parent.parent +WEBSITE = BUILDROOT_DIR / "docs" / "website" + +COMMENT_HEADER = f""" + +""" + +TABLE_HEADER = """ + + + Series + End of Life + Latest release + Latest release date + Downloads + +""" + +TABLE_ROW = """ + + {name} + {series} + {planned_eol} + + {latest}
+ + Changelog + + + {latest_date} + + + + .tar.gz +
+ [PGP sig] + + + + + .tar.xz +
+ [PGP sig] + + +""" + +with (WEBSITE / "releases.json").open() as f: + print(f"Reading {f.name}...") + releases_data = json.load(f) + +with (WEBSITE / "releases.html").open("w") as f: + f.write(COMMENT_HEADER) + f.write('') + f.write(TABLE_HEADER) + for r in releases_data["releases"]: + f.write(TABLE_ROW.format(**r)) + f.write("
") + print(f"Wrote {f.name}")