1
0
Fork 0

Iterate on convert_app_to_packaging_v2.py to parse and convert app.src stuff

This commit is contained in:
Alexandre Aubin 2023-03-09 15:10:33 +01:00
parent 953073f39b
commit 8f842db5bb

View file

@ -3,6 +3,7 @@ import os
import re import re
import json import json
import subprocess import subprocess
from glob import glob
def check_output(cmd): def check_output(cmd):
@ -13,6 +14,81 @@ def check_output(cmd):
) )
def convert_app_sources(folder):
def parse_and_convert_src(filename):
D = {}
raw = open(filename).read()
for line in raw.split("\n"):
line = line.strip()
if not line or line.startswith("#") or "=" not in line:
continue
key, value = line.split("=", 1)
key = key.replace("SOURCE_", "").lower()
D[key] = value
new_D = {
"url": D["url"],
"sha256": D["sum"],
}
if D.get("format", "tar.gz") not in ["zip", "tar.gz", "tar.xz", "tgz", "tar.bz2"]:
new_D["format"] = D["format"]
if "filename" in D:
new_D["rename"] = D["filename"]
elif "in_subdir" in D and D["in_subdir"] != "true":
new_D["in_subdir"] = False
return new_D
sources = {}
remap_id = {
"app": "main",
"amd64": "main.amd64",
"i386": "main.i386",
"arm64": "main.arm64",
"armhf": "main.armhf",
"arm7": "main.armhf",
"app.arm64": "main.arm64",
"app.x86_64": "main.amd64",
"app.x64": "main.amd64",
"app.arm": "main.armhf",
"app.armhf": "main.armhf",
"app.armv7": "main.armhf",
"app.386": "main.i386",
"app.x86": "main.i386",
"app.armel": "main.armel",
"armel": "main.armel",
"aarch64": "main.arm64",
"x86-64": "main.amd64",
"armv6": "main.armel",
"armv7": "main.armhf",
}
for filename in glob(folder + "/conf/*.src"):
id_ = os.path.basename(filename).rsplit(".", 1)[0]
if id_ in remap_id:
id_ = remap_id[id_]
sources[id_] = parse_and_convert_src(filename)
if id_.startswith("main."):
if "main" not in sources:
sources["main"] = sources[id_]
arch = id_.split(".")[1]
sources["main"][arch + ".url"] = sources[id_]["url"]
sources["main"][arch + ".sha256"] = sources[id_]["sha256"]
del sources[id_]["url"]
del sources[id_]["sha256"]
del sources[id_]
os.system(f"rm '{filename}'")
return sources
def _convert_v1_manifest_to_v2(app_path): def _convert_v1_manifest_to_v2(app_path):
manifest = json.load(open(app_path + "/manifest.json")) manifest = json.load(open(app_path + "/manifest.json"))
@ -73,6 +149,11 @@ def _convert_v1_manifest_to_v2(app_path):
manifest["install"]["domain"]["full_domain"] = True manifest["install"]["domain"]["full_domain"] = True
manifest["resources"] = {} manifest["resources"] = {}
sources = convert_app_sources(app_path)
if sources:
manifest["resources"]["sources"] = sources
manifest["resources"]["system_user"] = {} manifest["resources"]["system_user"] = {}
manifest["resources"]["install_dir"] = {} manifest["resources"]["install_dir"] = {}
@ -202,7 +283,16 @@ def _dump_v2_manifest_as_toml(manifest):
resources[key] = table() resources[key] = table()
resources[key].indent(4) resources[key].indent(4)
for key2, value2 in value.items(): for key2, value2 in value.items():
resources[key].add(key2, value2) if not isinstance(value2, dict):
resources[key].add(key2, value2)
else:
t = table()
t.indent(4)
resources[key].add(key2, t)
for key3, value3 in value2.items():
t.add(key3, value3)
t.add(nl())
if key == "apt" and key2 == "extras": if key == "apt" and key2 == "extras":
for extra in resources[key][key2]: for extra in resources[key][key2]:
extra.indent(8) extra.indent(8)
@ -217,6 +307,19 @@ def _dump_v2_manifest_as_toml(manifest):
toml_manifest_dump = toml_manifest_dump.replace('"ram.runtime"', "ram.runtime") toml_manifest_dump = toml_manifest_dump.replace('"ram.runtime"', "ram.runtime")
toml_manifest_dump = toml_manifest_dump.replace('"main.url"', "main.url") toml_manifest_dump = toml_manifest_dump.replace('"main.url"', "main.url")
toml_manifest_dump = toml_manifest_dump.replace('"main.default"', "main.default") toml_manifest_dump = toml_manifest_dump.replace('"main.default"', "main.default")
toml_manifest_dump = toml_manifest_dump.replace('"main.default"', "main.default")
toml_manifest_dump = toml_manifest_dump.replace('""', "main.default")
toml_manifest_dump = toml_manifest_dump.replace('"armhf.url"', "armhf.url")
toml_manifest_dump = toml_manifest_dump.replace('"armhf.sha256"', "armhf.sha256")
toml_manifest_dump = toml_manifest_dump.replace('"arm64.url"', "arm64.url")
toml_manifest_dump = toml_manifest_dump.replace('"arm64.sha256"', "arm64.sha256")
toml_manifest_dump = toml_manifest_dump.replace('"amd64.url"', "amd64.url")
toml_manifest_dump = toml_manifest_dump.replace('"amd64.sha256"', "amd64.sha256")
toml_manifest_dump = toml_manifest_dump.replace('"i386.url"', "i386.url")
toml_manifest_dump = toml_manifest_dump.replace('"i386.sha256"', "i386.sha256")
toml_manifest_dump = toml_manifest_dump.replace('"armel.url"', "armel.url")
toml_manifest_dump = toml_manifest_dump.replace('"armel.sha256"', "armel.sha256")
if "ports" in manifest["resources"]: if "ports" in manifest["resources"]:
for port_thing in manifest["resources"]["ports"].keys(): for port_thing in manifest["resources"]["ports"].keys():
toml_manifest_dump = toml_manifest_dump.replace(f'"{port_thing}"', f"{port_thing}") toml_manifest_dump = toml_manifest_dump.replace(f'"{port_thing}"', f"{port_thing}")
@ -299,6 +402,10 @@ def cleanup_scripts_and_conf(folder):
("FINALPATH", "INSTALL_DIR"), ("FINALPATH", "INSTALL_DIR"),
("datadir", "data_dir"), ("datadir", "data_dir"),
("DATADIR", "DATA_DIR"), ("DATADIR", "DATA_DIR"),
('--source_id="$architecture"', ''),
('--source_id="$YNH_ARCH"', ''),
('--source_id=app', ''),
('--source_id="app.$architecture"', ''),
] ]
for s in ["_common.sh", "install", "remove", "upgrade", "backup", "restore", "change_url"]: for s in ["_common.sh", "install", "remove", "upgrade", "backup", "restore", "change_url"]: