mirror of
git://git.yoctoproject.org/yocto-autobuilder-helper.git
synced 2025-07-19 12:49:02 +02:00

Remove caching and optimize to run on the autobuilder from scripts/run-dashboard-index Signed-off-by: Michael Halstead <mhalstead@linuxfoundation.org>
81 lines
2.8 KiB
Python
Executable File
81 lines
2.8 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import os
|
|
import time
|
|
import json
|
|
import urllib.request
|
|
|
|
LAYER_API_URL = "https://layers.openembedded.org/layerindex/api/layers/?filter=yp_compatible_version__isnull:false&format=json"
|
|
LAYERDATA = "layerdata.json"
|
|
# RELEASE_URL = "https://docs.yoctoproject.org/releases.json"
|
|
RELEASEDATA = "releases.json"
|
|
|
|
with open(RELEASEDATA, "r") as file:
|
|
releases = json.load(file)
|
|
|
|
with urllib.request.urlopen(LAYER_API_URL) as response:
|
|
if response.getcode() == 200:
|
|
data = response.read().decode("utf-8")
|
|
layers = json.loads(data)
|
|
|
|
|
|
# grab the recent release branches and add master, so we can ignore old branches
|
|
active_releases = [
|
|
e["release_codename"].lower() for e in releases if e["series"] == "current"
|
|
]
|
|
active_releases.append("master")
|
|
active_releases.append("main")
|
|
|
|
print(active_releases)
|
|
|
|
header = dict()
|
|
header["layer"] = "Layer"
|
|
header["branches"] = "Branches"
|
|
header["desc"] = "Description"
|
|
header["maintainers"] = ["Maintainer(s)"]
|
|
header["url"] = "Source Code"
|
|
parsed_layers = {}
|
|
|
|
for layer in layers:
|
|
name = layer["layer"]["name"]
|
|
if layer["branch"]["name"] not in active_releases:
|
|
continue
|
|
if name in parsed_layers:
|
|
parsed_layers[name]["branches"] += ", " + layer["branch"]["name"]
|
|
output["maintainers"].union(set([e["name"] for e in layer["maintainers"]]))
|
|
else:
|
|
output = dict()
|
|
output["layer"] = name
|
|
output["branches"] = layer["branch"]["name"]
|
|
if len(layer["layer"]["description"]) > 80:
|
|
output["desc"] = layer["layer"]["summary"]
|
|
else:
|
|
output["desc"] = layer["layer"]["description"]
|
|
for maintainer in layer["maintainers"]:
|
|
if "name" not in maintainer:
|
|
maintainer["name"] = maintainer["email"]
|
|
if "email" not in maintainer:
|
|
maintainer["email"] = "NA"
|
|
output["maintainers"] = set([e["name"] for e in layer["maintainers"]])
|
|
output["url"] = '<a href="{u}">{u}</a>'.format(u=layer["layer"]["vcs_web_url"])
|
|
parsed_layers[name] = output
|
|
|
|
# Convert the lists of maintainers to a pretty string
|
|
for layer in parsed_layers:
|
|
maintainers = list(parsed_layers[layer]["maintainers"])
|
|
if len(maintainers) == 1:
|
|
parsed_layers[layer]["maintainers"] = maintainers.pop()
|
|
elif len(maintainers) == 0:
|
|
print("No maintainers for ", layer)
|
|
parsed_layers[layer]["maintainers"] = "Awaiting Maintainers"
|
|
else:
|
|
print(maintainers)
|
|
parsed_layers[layer]["maintainers"] = "{} and {}".format(
|
|
", ".join(maintainers[:-1]), maintainers[-1]
|
|
)
|
|
sorted_parsed_layers = {"header": header}
|
|
for layername in sorted(parsed_layers.keys()):
|
|
sorted_parsed_layers[layername] = parsed_layers[layername]
|
|
with open("parsed-layers.json", "w") as file:
|
|
json.dump(sorted_parsed_layers, file)
|