diff --git a/bin/bump_metainfo.py b/bin/bump_metainfo.py new file mode 100755 index 000000000..cc264eafd --- /dev/null +++ b/bin/bump_metainfo.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python3 +import xml.etree.ElementTree as ET +from datetime import datetime, timezone +import argparse + + +def indent(elem, level=0): + i = "\n" + level * " " + if len(elem): + if not elem.text or not elem.text.strip(): + elem.text = i + " " + for child in elem: + indent(child, level + 1) + if not child.tail or not child.tail.strip(): + child.tail = i + if level and (not elem.tail or not elem.tail.strip()): + elem.tail = i + + +def main(): + parser = argparse.ArgumentParser( + description="Prepend new release entry to metainfo.xml file.") + parser.add_argument("--file", help="Path to the metainfo.xml file", + default="org.meshtastic.meshtasticd.metainfo.xml") + parser.add_argument("version", help="Version string (e.g. v2.6.4.b89355f)") + parser.add_argument("--date", help="Release date (YYYY-MM-DD), defaults to today", + default=datetime.now(timezone.utc).date().isoformat()) + + args = parser.parse_args() + + tree = ET.parse(args.file) + root = tree.getroot() + + releases = root.find('releases') + if releases is None: + raise RuntimeError(" element not found in XML.") + + existing_versions = [release.get('version') + for release in releases.findall('release')] + if args.version in existing_versions: + print( + f"Version {args.version} is already present, skipping insertion.") + return + + new_release = ET.Element('release', { + 'version': args.version, + 'date': args.date + }) + + url = ET.SubElement(new_release, 'url', {'type': 'details'}) + url.text = f"https://github.com/meshtastic/firmware/releases/tag/{args.version}" + + releases.insert(0, new_release) + + indent(releases, level=1) + releases.tail = "\n" + + tree.write(args.file, encoding='UTF-8', xml_declaration=True) + print(f"Inserted new release: {args.version}") + + with open(args.file, 'r+', encoding='UTF-8') as file: + content = file.read() + content = content.replace("