packages.zephyr: Add source for zephyr and modules

This commit is contained in:
Artemis Tosini 2023-11-13 05:09:00 +00:00
parent 763d83f157
commit da07bd75a0
Signed by: artemist
GPG key ID: EE5227935FE3FF18
4 changed files with 80 additions and 2 deletions

View file

@ -1,5 +1,7 @@
{ callPackage, stdenv, lib }: { callPackage, stdenv, lib, fetchFromGitHub }:
let assets = lib.importJSON ./assets.json; let
assets = lib.importJSON ./assets.json;
modules = lib.importJSON ./modules.json;
in { in {
host-tools = callPackage ./host-tools.nix { host-tools = callPackage ./host-tools.nix {
inherit (assets) version hosts; inherit (assets) version hosts;
@ -16,4 +18,7 @@ in {
inherit (assets) version hosts; inherit (assets) version hosts;
source = assets.sdk; source = assets.sdk;
}; };
src = fetchFromGitHub modules.zephyr;
modules = lib.mapAttrs (_: fetchFromGitHub) modules.modules;
} }

File diff suppressed because one or more lines are too long

72
packages/zephyr/update-src.py Executable file
View file

@ -0,0 +1,72 @@
#!/usr/bin/env nix-shell
#! nix-shell -i python3 -p python3 python3Packages.requests python3Packages.pyyaml nix-prefetch
import requests
import json
import yaml
import subprocess
import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
def get_repo(owner, repo, rev, name):
out = subprocess.run(
[
"nix-prefetch",
"--output",
"json",
"fetchFromGitHub",
"--owner",
owner,
"--repo",
repo,
"--rev",
rev,
"--name",
repo,
],
stdout=subprocess.PIPE,
check=True,
)
return json.loads(out.stdout.decode("utf-8"))
release = requests.get(
"https://api.github.com/repos/zephyrproject-rtos/zephyr/releases/latest"
).json()
tag = release["tag_name"]
version = tag[1:]
# nix-prefetch won't save the source so we download the manifest separately
manifest = yaml.load(
requests.get(
f"https://raw.githubusercontent.com/zephyrproject-rtos/zephyr/{tag}/west.yml"
).text,
Loader=yaml.Loader,
)["manifest"]
zephyr = get_repo("zephyrproject-rtos", "zephyr", tag, "zephyr")
default_remote = manifest["defaults"]["remote"]
remotes = {}
for remote in manifest["remotes"]:
# Works for github URLs, which is all they use
remotes[remote["name"]] = remote["url-base"].removeprefix("https://github.com/")
modules = {}
for project in manifest["projects"]:
if "repo-path" in project:
repo = project["repo-path"].removesuffix(".git")
else:
repo = project["name"]
owner = remotes[project.get("remote", default_remote)]
modules[project["name"]] = get_repo(
owner, repo, project["revision"], project["name"]
)
out_obj = {"version": version, "zephyr": zephyr, "modules": modules}
with open(os.path.join(BASE_DIR, "modules.json"), "w") as out_file:
json.dump(out_obj, out_file)