diff mbox series

[v2,1/3] tools/fetch-releases-json: add to fetch and format releases.json

Message ID 20260226-releases-json-v2-1-6ba4a3b37b24@bootlin.com
State New
Headers show
Series set_versions.py: build with versions from releases.json | expand

Commit Message

Antonin Godard Feb. 26, 2026, 2 p.m. UTC
Add a simple script that can be used to fetch and format the
releases.json file from https://dashboard.yoctoproject.org/releases.json.

Signed-off-by: Antonin Godard <antonin.godard@bootlin.com>
---
 documentation/README                    |   9 +
 documentation/releases.json             | 623 ++++++++++++++++++++++++++++++++
 documentation/tools/fetch-releases-json |  30 ++
 3 files changed, 662 insertions(+)

Comments

Antonin Godard Feb. 26, 2026, 3:37 p.m. UTC | #1
On Thu Feb 26, 2026 at 3:00 PM CET, Antonin Godard wrote:
[...]
> diff --git a/documentation/releases.json b/documentation/releases.json
> new file mode 100644
> index 000000000..f12cbbaa2
> --- /dev/null
> +++ b/documentation/releases.json
> @@ -0,0 +1,623 @@
> +[
> +  {
> +    "series_version": "6.0",
> +    "original_release_date": "",
> +    "latest_release_date": "",
> +    "release_codename": "Wrynose",
> +    "latest_tag": "",
> +    "releases": [
> +      "6.0_M1"
> +    ],
> +    "status": "Active Development",
> +    "download": "",
> +    "series": "current"
> +  },
> +  {
> +    "series_version": "5.3",
> +    "original_release_date": "2025-11-26T17:14:07+00:00",
> +    "latest_release_date": "2026-01-09T15:00:43+00:00",
> +    "release_codename": "Whinlatter",
> +    "latest_tag": "5.3.1",
> +    "releases": [
> +      "5.3",
> +      "5.3.1"
> +    ],
> +    "status": "Stable Release until May 2026",
> +    "download": "https://downloads.yoctoproject.org/releases/yocto/yocto-5.3.1",
> +    "release_notes": "https://downloads.yoctoproject.org/releases/yocto/yocto-5.3.1/RELEASENOTES",
> +    "series": "previous"

Sorry, I sent a modified version of this file that I was using for local
testing, and forgot to revert. I will fix this in the next iteration or when
merging.

Antonin
Quentin Schulz Feb. 27, 2026, 10:26 a.m. UTC | #2
Hi Antonin,

On 2/26/26 3:00 PM, Antonin Godard via lists.yoctoproject.org wrote:
> Add a simple script that can be used to fetch and format the
> releases.json file from https://dashboard.yoctoproject.org/releases.json.
> 

OK but why do we want this in the tree? It'll still be regularly outdated.

I understand not wanting to rely on a network connection, but we already 
need that for the bitbake's object.inv we download... so this ain't that 
much different.

Then, it's never outdated?

[...]

> diff --git a/documentation/tools/fetch-releases-json b/documentation/tools/fetch-releases-json
> new file mode 100755
> index 000000000..d06a1428f
> --- /dev/null
> +++ b/documentation/tools/fetch-releases-json
> @@ -0,0 +1,30 @@
> +#!/usr/bin/env python3
> +#
> +# Fetch the releases.json file from the remote endpoint and format it.
> +# Copyright Linux Foundation
> +# Author: Antonin Godard <antonin.godard@bootlin.com>
> +#
> +# SPDX-License-Identifier: MIT
> +#
> +
> +import argparse
> +import json
> +
> +from pathlib import Path
> +from urllib.request import urlopen
> +
> +
> +def main():
> +
> +    parser = argparse.ArgumentParser(description="Fetch and format releases.json")
> +    parser.add_argument("output", type=Path, help="Output releases.json file")
> +    args = parser.parse_args()
> +
> +    with urlopen("https://dashboard.yoctoproject.org/releases.json") as req:
> +        releases = json.load(req)
> +        with open(args.output, "w") as f:
> +            json.dump(releases, f, indent=2)
> +

Why not updating 
https://git.yoctoproject.org/yocto-autobuilder-helper/tree/scripts/release-parser.py#n134 
to store with the proper indent already?

json.dumps(data, indent=2)

Then you don't need each consumer to add the indent.

Or even better... why do you even care about a reviewable diff? The diff 
doesn't matter, it's the file itself that does.

b4 shazam the patch, run the script locally/download the file, check 
that your git tree is unchanged, merge the patch?

Or even betterer like I mentioned at the beginning of the mail, don't 
even version this file to begin with.

Cheers,
Quentin
Antonin Godard March 3, 2026, 1:14 p.m. UTC | #3
Hi,

On Fri Feb 27, 2026 at 11:26 AM CET, Quentin Schulz via lists.yoctoproject.org wrote:
> Hi Antonin,
>
> On 2/26/26 3:00 PM, Antonin Godard via lists.yoctoproject.org wrote:
>> Add a simple script that can be used to fetch and format the
>> releases.json file from https://dashboard.yoctoproject.org/releases.json.
>> 
>
> OK but why do we want this in the tree? It'll still be regularly outdated.
>
> I understand not wanting to rely on a network connection, but we already 
> need that for the bitbake's object.inv we download... so this ain't that 
> much different.

You're right, I forgot about that inventory file :( made this change with an
offline build in mind.

Fetching the file when building seems like a proper solution, although:

- IMO, we need to fallback on fixed values, even if they're outdated, to not
  block a documentation build if we can't fetch the releases.json file

- on the Autobuilder, we need to do the opposite: block a build if we can't
  fetch the releases.json file

- avoid fetching the file again if we already did (especially important on the
  Autobuilder as we don't want the file to be fetched for every tag + we don't
  want it to change during a build)

With this in mind, I'll work on a v3. Thanks for your insights!

Antonin
Quentin Schulz March 3, 2026, 2:48 p.m. UTC | #4
Hi Antonin,

On 3/3/26 2:14 PM, Antonin Godard wrote:
> Hi,
> 
> On Fri Feb 27, 2026 at 11:26 AM CET, Quentin Schulz via lists.yoctoproject.org wrote:
>> Hi Antonin,
>>
>> On 2/26/26 3:00 PM, Antonin Godard via lists.yoctoproject.org wrote:
>>> Add a simple script that can be used to fetch and format the
>>> releases.json file from https://dashboard.yoctoproject.org/releases.json.
>>>
>>
>> OK but why do we want this in the tree? It'll still be regularly outdated.
>>
>> I understand not wanting to rely on a network connection, but we already
>> need that for the bitbake's object.inv we download... so this ain't that
>> much different.
> 
> You're right, I forgot about that inventory file :( made this change with an
> offline build in mind.
> 
> Fetching the file when building seems like a proper solution, although:
> 
> - IMO, we need to fallback on fixed values, even if they're outdated, to not
>    block a documentation build if we can't fetch the releases.json file
> 

Makes sense. I actually thought about this a few days ago and I was 
wondering if we shouldn't simply have a single version as fallback... 
The current one. There's no reason to show multiple versions in the 
switcher (and elsewhere?) when there's only one built locally?

So maybe still generate the file from git and not even attempt to 
download releases.json?

> - on the Autobuilder, we need to do the opposite: block a build if we can't
>    fetch the releases.json file
> 
> - avoid fetching the file again if we already did (especially important on the
>    Autobuilder as we don't want the file to be fetched for every tag + we don't
>    want it to change during a build)
> 

Wondering if we can't simply handle releases.json downloading 
externally. I think we should still have whatever handles releases.json 
in the git repo(s) (but maybe not?) but we can simply put releases.json 
somewhere the script in the repo expects one to be present.

Essentially... if there's a releases.json available at location X, you 
use it, if not, then you use the fallback of the current version. The 
git repo wouldn't have a releases.json, only the autobuilder downloads 
it once before building all docs.

I guess the main issue is that we wouldn't know whether the current 
version is EoL if you don't download releases.json? Is it important? 
(thinking about people building the docs locally such that their 
colleagues only look at the documentation for the version they actually 
use).

What do you think?

Cheers,
Quentin
Antonin Godard March 3, 2026, 3:04 p.m. UTC | #5
Hi,

On Tue Mar 3, 2026 at 3:48 PM CET, Quentin Schulz wrote:
> Hi Antonin,
>
> On 3/3/26 2:14 PM, Antonin Godard wrote:
>> Hi,
>> 
>> On Fri Feb 27, 2026 at 11:26 AM CET, Quentin Schulz via lists.yoctoproject.org wrote:
>>> Hi Antonin,
>>>
>>> On 2/26/26 3:00 PM, Antonin Godard via lists.yoctoproject.org wrote:
>>>> Add a simple script that can be used to fetch and format the
>>>> releases.json file from https://dashboard.yoctoproject.org/releases.json.
>>>>
>>>
>>> OK but why do we want this in the tree? It'll still be regularly outdated.
>>>
>>> I understand not wanting to rely on a network connection, but we already
>>> need that for the bitbake's object.inv we download... so this ain't that
>>> much different.
>> 
>> You're right, I forgot about that inventory file :( made this change with an
>> offline build in mind.
>> 
>> Fetching the file when building seems like a proper solution, although:
>> 
>> - IMO, we need to fallback on fixed values, even if they're outdated, to not
>>    block a documentation build if we can't fetch the releases.json file
>> 
>
> Makes sense. I actually thought about this a few days ago and I was 
> wondering if we shouldn't simply have a single version as fallback... 
> The current one. There's no reason to show multiple versions in the 
> switcher (and elsewhere?) when there's only one built locally?
>
> So maybe still generate the file from git and not even attempt to 
> download releases.json?

Actually, we can simply have some default values for the following variables:

activereleases = ["whinlatter", "scarthgap", "kirkstone"]
devbranch = "wrynose"
ltsseries = ["wrynose", "scarthgap", "kirkstone"]
release_series = collections.OrderedDict({
    "wrynose": "6.0",
    "whinlatter": "5.3",
    "scarthgap": "5.0",
    "kirkstone": "4.0",
})

And fallback on them when we don't find a releases.json file locally and we
aren't able to fetch it remotely. This should happen rarely, but I've added a
warning if that happens (working on it right now).

I'd rather keep the switchers version as it is, even in this case where we build
locally and we only have one version to display. Just so it sort of matches what
we're supposed to get from a releases.json file. I believe there are
implications in how we compute the values in poky.yaml.in, which rely on this,
so I'd rather not over-complicate it and provide default values in case we can't
find a releases.json file, which should happen rarely anyway.

>> - on the Autobuilder, we need to do the opposite: block a build if we can't
>>    fetch the releases.json file
>> 
>> - avoid fetching the file again if we already did (especially important on the
>>    Autobuilder as we don't want the file to be fetched for every tag + we don't
>>    want it to change during a build)
>> 
>
> Wondering if we can't simply handle releases.json downloading 
> externally. I think we should still have whatever handles releases.json 
> in the git repo(s) (but maybe not?) but we can simply put releases.json 
> somewhere the script in the repo expects one to be present.
>
> Essentially... if there's a releases.json available at location X, you 
> use it, if not, then you use the fallback of the current version. The 
> git repo wouldn't have a releases.json, only the autobuilder downloads 
> it once before building all docs.

> I guess the main issue is that we wouldn't know whether the current 
> version is EoL if you don't download releases.json? Is it important? 
> (thinking about people building the docs locally such that their 
> colleagues only look at the documentation for the version they actually 
> use).

Not sure I follow exactly, but I'm working on the Autobuilder part too which
generates this releases.json on the fly and uses it for each docs build. I hope
that will answer most of your questions here.

I think we still want to fetch the releases.json file in yocto-docs though, to
give the user building locally an accurate version of what is hosted on
docs.yoctoproject.org (and it doesn't cost much). And anyway, as you reminded,
if a user cannot fetch the releases.json file from the remote location, they'll
fallback on some possibly outdated active releases array (the default values
above), but they'll also have a wall of errors due to lack of bitbake inventory.

Antonin
diff mbox series

Patch

diff --git a/documentation/README b/documentation/README
index 7c4472c73..c45743c79 100644
--- a/documentation/README
+++ b/documentation/README
@@ -109,6 +109,15 @@  dependencies in a virtual environment:
  $ pipenv install
  $ pipenv run make html
 
+Updating the releases.json file
+===============================
+
+The Yocto Project documentation uses the documentation/releases.json to know
+which releases are currently supported and which are obsolete. This file can be
+updated using the the following command:
+
+  $ ./documentation/tools/fetch-releases-json documentation/releases.json
+
 Style checking the Yocto Project documentation
 ==============================================
 
diff --git a/documentation/releases.json b/documentation/releases.json
new file mode 100644
index 000000000..f12cbbaa2
--- /dev/null
+++ b/documentation/releases.json
@@ -0,0 +1,623 @@ 
+[
+  {
+    "series_version": "6.0",
+    "original_release_date": "",
+    "latest_release_date": "",
+    "release_codename": "Wrynose",
+    "latest_tag": "",
+    "releases": [
+      "6.0_M1"
+    ],
+    "status": "Active Development",
+    "download": "",
+    "series": "current"
+  },
+  {
+    "series_version": "5.3",
+    "original_release_date": "2025-11-26T17:14:07+00:00",
+    "latest_release_date": "2026-01-09T15:00:43+00:00",
+    "release_codename": "Whinlatter",
+    "latest_tag": "5.3.1",
+    "releases": [
+      "5.3",
+      "5.3.1"
+    ],
+    "status": "Stable Release until May 2026",
+    "download": "https://downloads.yoctoproject.org/releases/yocto/yocto-5.3.1",
+    "release_notes": "https://downloads.yoctoproject.org/releases/yocto/yocto-5.3.1/RELEASENOTES",
+    "series": "previous"
+  },
+  {
+    "series_version": "5.2",
+    "original_release_date": "2025-04-23T15:37:39+02:00",
+    "latest_release_date": "2025-09-12T16:48:58+02:00",
+    "release_codename": "Walnascar",
+    "latest_tag": "5.2.4",
+    "releases": [
+      "5.2",
+      "5.2.1",
+      "5.2.2",
+      "5.2.3",
+      "5.2.4"
+    ],
+    "status": "EOL",
+    "download": "https://downloads.yoctoproject.org/releases/yocto/yocto-5.2.4",
+    "release_notes": "https://downloads.yoctoproject.org/releases/yocto/yocto-5.2.4/RELEASENOTES",
+    "series": "previous"
+  },
+  {
+    "series_version": "5.1",
+    "original_release_date": "2024-09-03T10:35:52+02:00",
+    "latest_release_date": "2025-03-07T11:58:05+01:00",
+    "release_codename": "Styhead",
+    "latest_tag": "5.1.4",
+    "releases": [
+      "5.1",
+      "5.1.1",
+      "5.1.2",
+      "5.1.3",
+      "5.1.4"
+    ],
+    "status": "EOL",
+    "download": "https://downloads.yoctoproject.org/releases/yocto/yocto-5.1.4",
+    "release_notes": "https://downloads.yoctoproject.org/releases/yocto/yocto-5.1.4/RELEASENOTES",
+    "series": "previous"
+  },
+  {
+    "series_version": "5.0",
+    "original_release_date": "2024-04-15T17:39:29+02:00",
+    "latest_release_date": "2025-11-14T18:10:02+01:00",
+    "release_codename": "Scarthgap",
+    "latest_tag": "5.0.15",
+    "releases": [
+      "5.0",
+      "5.0.1",
+      "5.0.10",
+      "5.0.11",
+      "5.0.12",
+      "5.0.13",
+      "5.0.14",
+      "5.0.15",
+      "5.0.2",
+      "5.0.3",
+      "5.0.4",
+      "5.0.5",
+      "5.0.6",
+      "5.0.7",
+      "5.0.8",
+      "5.0.9"
+    ],
+    "status": "LTS until Apr. 2028",
+    "download": "https://downloads.yoctoproject.org/releases/yocto/yocto-5.0.15",
+    "release_notes": "https://downloads.yoctoproject.org/releases/yocto/yocto-5.0.15/RELEASENOTES",
+    "series": "current"
+  },
+  {
+    "series_version": "4.3",
+    "original_release_date": "2023-10-06T09:59:00+02:00",
+    "latest_release_date": "2024-03-25T14:23:36+01:00",
+    "release_codename": "Nanbield",
+    "latest_tag": "4.3.4",
+    "releases": [
+      "4.3",
+      "4.3.1",
+      "4.3.2",
+      "4.3.3",
+      "4.3.4"
+    ],
+    "status": "EOL",
+    "download": "https://downloads.yoctoproject.org/releases/yocto/yocto-4.3.4",
+    "release_notes": "https://downloads.yoctoproject.org/releases/yocto/yocto-4.3.4/RELEASENOTES",
+    "series": "previous"
+  },
+  {
+    "series_version": "4.2",
+    "original_release_date": "2023-04-22T10:42:18+01:00",
+    "latest_release_date": "2023-10-31T10:26:24+01:00",
+    "release_codename": "Mickledore",
+    "latest_tag": "4.2.4",
+    "releases": [
+      "4.2",
+      "4.2.1",
+      "4.2.2",
+      "4.2.3",
+      "4.2.4"
+    ],
+    "status": "EOL",
+    "download": "https://downloads.yoctoproject.org/releases/yocto/yocto-4.2.4",
+    "release_notes": "https://downloads.yoctoproject.org/releases/yocto/yocto-4.2.4/RELEASENOTES",
+    "series": "previous"
+  },
+  {
+    "series_version": "4.1",
+    "original_release_date": "2022-10-06T10:22:27+02:00",
+    "latest_release_date": "2023-03-15T17:27:49+01:00",
+    "release_codename": "Langdale",
+    "latest_tag": "4.1.4",
+    "releases": [
+      "4.1",
+      "4.1.1",
+      "4.1.2",
+      "4.1.3",
+      "4.1.4"
+    ],
+    "status": "EOL",
+    "download": "https://downloads.yoctoproject.org/releases/yocto/yocto-4.1.4",
+    "release_notes": "https://downloads.yoctoproject.org/releases/yocto/yocto-4.1.4/RELEASENOTES",
+    "series": "previous"
+  },
+  {
+    "series_version": "4.0",
+    "original_release_date": "2022-04-13T16:54:23+01:00",
+    "latest_release_date": "2026-01-13T09:59:23+01:00",
+    "release_codename": "Kirkstone",
+    "latest_tag": "4.0.33",
+    "releases": [
+      "4.0",
+      "4.0.1",
+      "4.0.10",
+      "4.0.11",
+      "4.0.12",
+      "4.0.13",
+      "4.0.14",
+      "4.0.15",
+      "4.0.16",
+      "4.0.17",
+      "4.0.18",
+      "4.0.19",
+      "4.0.2",
+      "4.0.20",
+      "4.0.21",
+      "4.0.22",
+      "4.0.23",
+      "4.0.24",
+      "4.0.25",
+      "4.0.26",
+      "4.0.27",
+      "4.0.28",
+      "4.0.29",
+      "4.0.3",
+      "4.0.30",
+      "4.0.31",
+      "4.0.32",
+      "4.0.33",
+      "4.0.4",
+      "4.0.5",
+      "4.0.6",
+      "4.0.7",
+      "4.0.8",
+      "4.0.9"
+    ],
+    "status": "LTS until Apr. 2026",
+    "download": "https://downloads.yoctoproject.org/releases/yocto/yocto-4.0.33",
+    "release_notes": "https://downloads.yoctoproject.org/releases/yocto/yocto-4.0.33/RELEASENOTES",
+    "series": "current"
+  },
+  {
+    "series_version": "3.4",
+    "original_release_date": "2021-10-22T19:02:35+02:00",
+    "latest_release_date": "2022-04-29T17:41:27+02:00",
+    "release_codename": "Honister",
+    "latest_tag": "3.4.4",
+    "releases": [
+      "3.4",
+      "3.4.1",
+      "3.4.2",
+      "3.4.3",
+      "3.4.4"
+    ],
+    "status": "EOL",
+    "download": "https://downloads.yoctoproject.org/releases/yocto/yocto-3.4.4",
+    "release_notes": "https://downloads.yoctoproject.org/releases/yocto/yocto-3.4.4/RELEASENOTES",
+    "series": "previous"
+  },
+  {
+    "series_version": "3.3",
+    "original_release_date": "2021-04-15T22:10:07+12:00",
+    "latest_release_date": "2022-04-20T12:27:12+01:00",
+    "release_codename": "Hardknott",
+    "latest_tag": "3.3.6",
+    "releases": [
+      "3.3",
+      "3.3.1",
+      "3.3.2",
+      "3.3.3",
+      "3.3.4",
+      "3.3.5",
+      "3.3.6"
+    ],
+    "status": "EOL",
+    "download": "https://downloads.yoctoproject.org/releases/yocto/yocto-3.3.6",
+    "release_notes": "https://downloads.yoctoproject.org/releases/yocto/yocto-3.3.6/RELEASENOTES",
+    "series": "previous"
+  },
+  {
+    "series_version": "3.2",
+    "original_release_date": "2020-11-12T13:04:03+00:00",
+    "latest_release_date": "2021-05-06T11:19:57+01:00",
+    "release_codename": "Gatesgarth",
+    "latest_tag": "3.2.4",
+    "releases": [
+      "3.2",
+      "3.2.1",
+      "3.2.2",
+      "3.2.3",
+      "3.2.4"
+    ],
+    "status": "EOL",
+    "download": "https://downloads.yoctoproject.org/releases/yocto/yocto-3.2.4",
+    "release_notes": "https://downloads.yoctoproject.org/releases/yocto/yocto-3.2.4/RELEASENOTES",
+    "series": "previous"
+  },
+  {
+    "series_version": "3.1",
+    "original_release_date": "2020-04-07T15:17:11+01:00",
+    "latest_release_date": "2024-04-08T16:28:06+02:00",
+    "release_codename": "Dunfell",
+    "latest_tag": "3.1.33",
+    "releases": [
+      "3.1",
+      "3.1.1",
+      "3.1.10",
+      "3.1.11",
+      "3.1.12",
+      "3.1.13",
+      "3.1.14",
+      "3.1.15",
+      "3.1.16",
+      "3.1.17",
+      "3.1.18",
+      "3.1.19",
+      "3.1.2",
+      "3.1.20",
+      "3.1.21",
+      "3.1.22",
+      "3.1.23",
+      "3.1.24",
+      "3.1.25",
+      "3.1.26",
+      "3.1.27",
+      "3.1.28",
+      "3.1.29",
+      "3.1.3",
+      "3.1.30",
+      "3.1.31",
+      "3.1.32",
+      "3.1.33",
+      "3.1.4",
+      "3.1.5",
+      "3.1.6",
+      "3.1.7",
+      "3.1.8",
+      "3.1.9"
+    ],
+    "status": "EOL",
+    "download": "https://downloads.yoctoproject.org/releases/yocto/yocto-3.1.33",
+    "release_notes": "https://downloads.yoctoproject.org/releases/yocto/yocto-3.1.33/RELEASENOTES",
+    "series": "previous"
+  },
+  {
+    "series_version": "3.0",
+    "original_release_date": "2019-12-02T16:37:15-08:00",
+    "latest_release_date": "2020-08-16T00:00:04+01:00",
+    "release_codename": "Zeus",
+    "latest_tag": "3.0.4",
+    "releases": [
+      "3.0",
+      "3.0.1",
+      "3.0.2",
+      "3.0.3",
+      "3.0.4"
+    ],
+    "status": "EOL",
+    "download": "https://downloads.yoctoproject.org/releases/yocto/yocto-3.0.4",
+    "release_notes": "https://downloads.yoctoproject.org/releases/yocto/yocto-3.0.4/RELEASENOTES",
+    "series": "previous"
+  },
+  {
+    "series_version": "2.7",
+    "original_release_date": "2019-05-01T15:43:58-07:00",
+    "latest_release_date": "2020-05-17T22:35:29+01:00",
+    "release_codename": "Warrior",
+    "latest_tag": "2.7.4",
+    "releases": [
+      "2.7",
+      "2.7.1",
+      "2.7.2",
+      "2.7.3",
+      "2.7.4"
+    ],
+    "status": "EOL",
+    "download": "https://downloads.yoctoproject.org/releases/yocto/yocto-2.7.4",
+    "release_notes": "https://downloads.yoctoproject.org/releases/yocto/yocto-2.7.4/RELEASENOTES",
+    "series": "previous"
+  },
+  {
+    "series_version": "2.6",
+    "original_release_date": "2018-11-15T14:57:31-08:00",
+    "latest_release_date": "2019-10-29T11:13:32-07:00",
+    "release_codename": "Thud",
+    "latest_tag": "2.6.4",
+    "releases": [
+      "2.6",
+      "2.6.1",
+      "2.6.2",
+      "2.6.3",
+      "2.6.4"
+    ],
+    "status": "EOL",
+    "download": "https://downloads.yoctoproject.org/releases/yocto/yocto-2.6.4",
+    "release_notes": "https://downloads.yoctoproject.org/releases/yocto/yocto-2.6.4/RELEASENOTES",
+    "series": "previous"
+  },
+  {
+    "series_version": "2.5",
+    "original_release_date": "2018-05-18T11:33:49-07:00",
+    "latest_release_date": "2019-03-12T09:51:09-06:00",
+    "release_codename": "Sumo",
+    "latest_tag": "2.5.3",
+    "releases": [
+      "2.5",
+      "2.5.1",
+      "2.5.2",
+      "2.5.3"
+    ],
+    "status": "EOL",
+    "download": "https://downloads.yoctoproject.org/releases/yocto/yocto-2.5.3",
+    "release_notes": "https://downloads.yoctoproject.org/releases/yocto/yocto-2.5.3/RELEASENOTES",
+    "series": "previous"
+  },
+  {
+    "series_version": "2.4",
+    "original_release_date": "2017-10-16T09:33:13-07:00",
+    "latest_release_date": "2018-07-23T10:47:39-07:00",
+    "release_codename": "Rocko",
+    "latest_tag": "2.4.4",
+    "releases": [
+      "2.4",
+      "2.4.1",
+      "2.4.2",
+      "2.4.3",
+      "2.4.4"
+    ],
+    "status": "EOL",
+    "download": "https://downloads.yoctoproject.org/releases/yocto/yocto-2.4.4",
+    "release_notes": "https://downloads.yoctoproject.org/releases/yocto/yocto-2.4.4/RELEASENOTES",
+    "series": "previous"
+  },
+  {
+    "series_version": "2.3",
+    "original_release_date": "2017-05-09T15:13:40-07:00",
+    "latest_release_date": "2018-01-22T11:14:15-08:00",
+    "release_codename": "Pyro",
+    "latest_tag": "2.3.4",
+    "releases": [
+      "2.3",
+      "2.3.1",
+      "2.3.2",
+      "2.3.3",
+      "2.3.4"
+    ],
+    "status": "EOL",
+    "download": "https://downloads.yoctoproject.org/releases/yocto/yocto-2.3.4",
+    "release_notes": "https://downloads.yoctoproject.org/releases/yocto/yocto-2.3.4/RELEASENOTES",
+    "series": "previous"
+  },
+  {
+    "series_version": "2.2",
+    "original_release_date": "2016-10-21T13:55:32-07:00",
+    "latest_release_date": "2018-02-13T16:48:23-08:00",
+    "release_codename": "Morty",
+    "latest_tag": "2.2.4",
+    "releases": [
+      "2.2",
+      "2.2.1",
+      "2.2.2",
+      "2.2.3",
+      "2.2.4"
+    ],
+    "status": "EOL",
+    "download": "https://downloads.yoctoproject.org/releases/yocto/yocto-2.2.4",
+    "release_notes": "https://downloads.yoctoproject.org/releases/yocto/yocto-2.2.4/RELEASENOTES",
+    "series": "previous"
+  },
+  {
+    "series_version": "2.1",
+    "original_release_date": "2016-04-20T07:27:43-07:00",
+    "latest_release_date": "2017-06-05T08:04:07-07:00",
+    "release_codename": "Krogoth",
+    "latest_tag": "2.1.3",
+    "releases": [
+      "2.1",
+      "2.1.1",
+      "2.1.2",
+      "2.1.3"
+    ],
+    "status": "EOL",
+    "download": "https://downloads.yoctoproject.org/releases/yocto/yocto-2.1.3",
+    "release_notes": "https://downloads.yoctoproject.org/releases/yocto/yocto-2.1.3/RELEASENOTES",
+    "series": "previous"
+  },
+  {
+    "series_version": "2.0",
+    "original_release_date": "2015-10-29T10:22:30-07:00",
+    "latest_release_date": "2016-11-18T09:42:09-08:00",
+    "release_codename": "Jethro",
+    "latest_tag": "2.0.3",
+    "releases": [
+      "2.0",
+      "2.0.1",
+      "2.0.2",
+      "2.0.3"
+    ],
+    "status": "EOL",
+    "download": "https://downloads.yoctoproject.org/releases/yocto/yocto-2.0.3",
+    "release_notes": "https://downloads.yoctoproject.org/releases/yocto/yocto-2.0.3/RELEASENOTES",
+    "series": "previous"
+  },
+  {
+    "series_version": "1.8",
+    "original_release_date": "2015-04-09T16:04:58-07:00",
+    "latest_release_date": "2016-03-11T13:11:41-08:00",
+    "release_codename": "Fido",
+    "latest_tag": "1.8.2",
+    "releases": [
+      "1.8",
+      "1.8.1",
+      "1.8.2"
+    ],
+    "status": "EOL",
+    "download": "https://downloads.yoctoproject.org/releases/yocto/yocto-1.8.2",
+    "release_notes": "https://downloads.yoctoproject.org/releases/yocto/yocto-1.8.2/RELEASENOTES",
+    "series": "previous"
+  },
+  {
+    "series_version": "1.7",
+    "original_release_date": "2014-10-28T15:02:47-07:00",
+    "latest_release_date": "2015-11-07T08:29:16-08:00",
+    "release_codename": "Dizzy",
+    "latest_tag": "1.7.3",
+    "releases": [
+      "1.7",
+      "1.7.1",
+      "1.7.2",
+      "1.7.3"
+    ],
+    "status": "EOL",
+    "download": "https://downloads.yoctoproject.org/releases/yocto/yocto-1.7.3",
+    "release_notes": "https://downloads.yoctoproject.org/releases/yocto/yocto-1.7.3/RELEASENOTES",
+    "series": "previous"
+  },
+  {
+    "series_version": "1.6",
+    "original_release_date": "2014-04-23T11:35:25-07:00",
+    "latest_release_date": "2015-04-28T08:16:57-07:00",
+    "release_codename": "Daisy",
+    "latest_tag": "1.6.3",
+    "releases": [
+      "1.6",
+      "1.6.1",
+      "1.6.2",
+      "1.6.3"
+    ],
+    "status": "EOL",
+    "download": "https://downloads.yoctoproject.org/releases/yocto/yocto-1.6.3",
+    "release_notes": "https://downloads.yoctoproject.org/releases/yocto/yocto-1.6.3/RELEASENOTES",
+    "series": "previous"
+  },
+  {
+    "series_version": "1.5",
+    "original_release_date": "2013-10-07T13:34:44-07:00",
+    "latest_release_date": "2014-11-24T18:26:50-06:00",
+    "release_codename": "Dora",
+    "latest_tag": "1.5.4",
+    "releases": [
+      "1.5",
+      "1.5.1",
+      "1.5.2",
+      "1.5.3",
+      "1.5.4"
+    ],
+    "status": "EOL",
+    "download": "https://downloads.yoctoproject.org/releases/yocto/yocto-1.5.4",
+    "release_notes": "https://downloads.yoctoproject.org/releases/yocto/yocto-1.5.4/RELEASENOTES",
+    "series": "previous"
+  },
+  {
+    "series_version": "1.4",
+    "original_release_date": "2013-04-17T13:11:04-07:00",
+    "latest_release_date": "2014-05-12T21:14:18+03:00",
+    "release_codename": "Dylan",
+    "latest_tag": "1.4.4",
+    "releases": [
+      "1.4",
+      "1.4.1",
+      "1.4.2",
+      "1.4.3",
+      "1.4.4"
+    ],
+    "status": "EOL",
+    "download": "https://downloads.yoctoproject.org/releases/yocto/yocto-1.4.4",
+    "release_notes": "https://downloads.yoctoproject.org/releases/yocto/yocto-1.4.4/RELEASENOTES",
+    "series": "previous"
+  },
+  {
+    "series_version": "1.3",
+    "original_release_date": "2012-10-22T14:22:09-07:00",
+    "latest_release_date": "2018-03-29T14:40:51-07:00",
+    "release_codename": "Danny",
+    "latest_tag": "1.3.2",
+    "releases": [
+      "1.3",
+      "1.3.1",
+      "1.3.2"
+    ],
+    "status": "EOL",
+    "download": "https://downloads.yoctoproject.org/releases/yocto/yocto-1.3.2",
+    "release_notes": "https://downloads.yoctoproject.org/releases/yocto/yocto-1.3.2/RELEASENOTES",
+    "series": "previous"
+  },
+  {
+    "series_version": "1.2",
+    "original_release_date": "2012-07-19T06:58:24-07:00",
+    "latest_release_date": "2018-03-30T10:37:45-07:00",
+    "release_codename": "Denzil",
+    "latest_tag": "1.2.2",
+    "releases": [
+      "1.2",
+      "1.2.1",
+      "1.2.2"
+    ],
+    "status": "EOL",
+    "download": "https://downloads.yoctoproject.org/releases/yocto/yocto-1.2.2",
+    "release_notes": "https://downloads.yoctoproject.org/releases/yocto/yocto-1.2.2/RELEASENOTES",
+    "series": "previous"
+  },
+  {
+    "series_version": "1.1",
+    "original_release_date": "2011-10-05T12:07:29-07:00",
+    "latest_release_date": "2018-03-30T11:21:43-07:00",
+    "release_codename": "Edison",
+    "latest_tag": "1.1.2",
+    "releases": [
+      "1.1",
+      "1.1.1",
+      "1.1.2"
+    ],
+    "status": "EOL",
+    "download": "https://downloads.yoctoproject.org/releases/yocto/yocto-1.1.2",
+    "release_notes": "https://downloads.yoctoproject.org/releases/yocto/yocto-1.1.2/RELEASENOTES",
+    "series": "previous"
+  },
+  {
+    "series_version": "1.0",
+    "original_release_date": "2011-03-25T17:40:04+00:00",
+    "latest_release_date": "2018-03-30T17:12:49-07:00",
+    "release_codename": "Bernard",
+    "latest_tag": "1.0.2",
+    "releases": [
+      "1.0",
+      "1.0.1",
+      "1.0.2"
+    ],
+    "status": "EOL",
+    "download": "https://downloads.yoctoproject.org/releases/yocto/yocto-1.0.2",
+    "release_notes": "https://downloads.yoctoproject.org/releases/yocto/yocto-1.0.2/RELEASENOTES",
+    "series": "previous"
+  },
+  {
+    "series_version": "0.9",
+    "original_release_date": "2010-10-22T13:56:31+01:00",
+    "latest_release_date": "2010-10-22T13:56:31+01:00",
+    "release_codename": "Laverne",
+    "latest_tag": "0.9.1",
+    "releases": [
+      "0.9",
+      "0.9.1"
+    ],
+    "status": "EOL",
+    "download": "",
+    "release_notes": "",
+    "series": "previous"
+  }
+]
diff --git a/documentation/tools/fetch-releases-json b/documentation/tools/fetch-releases-json
new file mode 100755
index 000000000..d06a1428f
--- /dev/null
+++ b/documentation/tools/fetch-releases-json
@@ -0,0 +1,30 @@ 
+#!/usr/bin/env python3
+#
+# Fetch the releases.json file from the remote endpoint and format it.
+# Copyright Linux Foundation
+# Author: Antonin Godard <antonin.godard@bootlin.com>
+#
+# SPDX-License-Identifier: MIT
+#
+
+import argparse
+import json
+
+from pathlib import Path
+from urllib.request import urlopen
+
+
+def main():
+
+    parser = argparse.ArgumentParser(description="Fetch and format releases.json")
+    parser.add_argument("output", type=Path, help="Output releases.json file")
+    args = parser.parse_args()
+
+    with urlopen("https://dashboard.yoctoproject.org/releases.json") as req:
+        releases = json.load(req)
+        with open(args.output, "w") as f:
+            json.dump(releases, f, indent=2)
+
+
+if __name__ == "__main__":
+    main()