fedora-kiwi-descriptions/scripts/fedora-live-iso-label-generator

107 lines
3.9 KiB
Plaintext
Raw Normal View History

#!/usr/bin/env python3
# Simple tool to generate volume IDs and application IDs for ISOs for kiwi image builds
# Author: Neal Gompa <ngompa@fedoraproject.org>
# SPDX-3.0-License-Identifier: GPL-3.0-or-later
# SPDX-2.0-License-Identifier: GPL-3.0+
# Used to map kiwi profiles to application IDs (which may also
# may be used for connecting to volume ID substitutions).
profile_to_application_id = {
"KDE-Desktop": "KDE_Desktop",
"KDE-Mobile": "KDE_Mobile",
}
# Used by Pungi to replace "Cloud" with "C" (etc.) in ISO volume IDs.
# There is a hard 32-character limit on ISO volume IDs, so we use
# these to try and produce short enough but legible IDs. Note this is
# duplicated in Koji for live images, as livemedia-creator does not
# allow Pungi to tell it what volume ID to use. Note:
# https://fedoraproject.org/wiki/User:Adamwill/Draft_fedora_image_naming_policy
# "-Workstation-" is a temporary workaround. See
# https://pagure.io/pungi-fedora/pull-request/525
# Replace "Cloud" with "C" in volume id etc.
# WARNING: This list *MUST* remain in sync with pungi-fedora!
# https://pagure.io/pungi-fedora/blob/main/f/general.conf
volume_id_substitutions = {
"Beta": "B",
"Rawhide": "rawh",
"Astronomy_KDE": "AstK",
"Silverblue": "SB",
"Kinoite": "Knt",
"Cinnamon": "Cinn",
"Cloud": "C",
"Comp_Neuro": "CNr",
"Design_suite": "Dsgn",
"Electronic_Lab": "Elec",
"Everything": "E",
"Games": "Game",
"Images": "img",
"Jam_KDE": "Jam",
"KDE_Desktop": "KDE",
"KDE_Mobile": "KDEM",
"MATE_Compiz": "MATE",
"MiracleWM": "MirWM",
"Onyx": "Onyx",
# Note https://pagure.io/pungi-fedora/issue/533
"Python-Classroom": "Clss",
"Python_Classroom": "Clss",
"Robotics": "Robo",
"Scientific_KDE": "SciK",
"Security": "Sec",
"Sericea": "Src",
"Server": "S",
"-Workstation-": "-WS-",
}
from argparse import ArgumentParser
from pathlib import Path
import xml.etree.ElementTree as ET
parser = ArgumentParser(description="Generator of ISO labels for Fedora live media builds")
parser.add_argument("kiwi_file", type=Path, default="Fedora.kiwi", help="kiwi description file")
parser.add_argument("image_profile", type=str, help="kiwi image profile")
parser.add_argument("--output-kiwi-args", "-k", action="store_true", help="generate kiwi args instead of csv")
args = parser.parse_args()
xml_tree = ET.parse(args.kiwi_file)
image_root = xml_tree.getroot()
image_basename = image_root.attrib["name"]
image_version = image_root.find("preferences/version").text
image_volid_version = image_version
if image_volid_version == "Rawhide":
image_volid_version = "rawh"
image_profile = args.image_profile
if image_profile.endswith("-Live"):
image_profile_baseprefix = image_profile[:-5]
else:
image_profile_baseprefix = image_profile
image_profile_variant_appid_prefix = image_profile_baseprefix
if image_profile_baseprefix in profile_to_application_id.keys():
image_profile_variant_appid_prefix = profile_to_application_id[image_profile_baseprefix]
else:
image_profile_variant_appid_prefix = image_profile_baseprefix
if image_profile_variant_appid_prefix in volume_id_substitutions.keys():
image_profile_variant_volid_prefix = volume_id_substitutions[image_profile_variant_appid_prefix]
else:
image_profile_variant_volid_prefix = image_profile_variant_appid_prefix
image_appid = f"{image_basename}-{image_profile_variant_appid_prefix}-Live-{image_version}"
image_volid = f"{image_basename}-{image_profile_variant_volid_prefix}-Live-{image_volid_version}"
if args.output_kiwi_args:
print(f"--set-type-attr=application_id={image_appid} --set-type-attr=volid={image_volid}")
else:
print(f"application_id,{image_appid},volid,{image_volid}")