aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
from:
to:
context:
space:
mode:
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/fedora-kiwi-bundle-format-generator31
-rwxr-xr-xscripts/fedora-live-iso-label-generator101
2 files changed, 132 insertions, 0 deletions
diff --git a/scripts/fedora-kiwi-bundle-format-generator b/scripts/fedora-kiwi-bundle-format-generator
new file mode 100755
index 0000000..571a17b
--- /dev/null
+++ b/scripts/fedora-kiwi-bundle-format-generator
@@ -0,0 +1,31 @@
+#!/usr/bin/env python3
+
+# Simple tool to generate bundle formats 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+
+
+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("--oci-variant", "-o", action="store_true", help="generate oci variant")
+args = parser.parse_args()
+
+xml_tree = ET.parse(args.kiwi_file)
+image_root = xml_tree.getroot()
+
+image_basename = image_root.attrib["name"]
+image_profile = args.image_profile
+
+image_bundle_format = f"{image_basename}-{image_profile}-%v.%I.%A"
+
+if args.oci_variant:
+ print(f"{image_bundle_format}.%T")
+else:
+ print(image_bundle_format)
diff --git a/scripts/fedora-live-iso-label-generator b/scripts/fedora-live-iso-label-generator
new file mode 100755
index 0000000..6aaa799
--- /dev/null
+++ b/scripts/fedora-live-iso-label-generator
@@ -0,0 +1,101 @@
+#!/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]
+
+image_profile_variant_volid_prefix = volume_id_substitutions[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}")