mirror of
https://github.com/meshtastic/firmware.git
synced 2025-04-25 09:42:35 +00:00

* add bump_metainfo.py * bump org.meshtastic.meshtasticd.metainfo.xml on release * update bump-version job to trigger on published * use defusedxml.ElementTree parse * move bump_metainfo, use requirements.txt * add bin/bump_metainfo/requirements.txt to renovate * Switch to short version string * Bump version.properties to 2.6.6 * change version format * remove url * Add url back in * Update url format * manual add 2.6.6 * consolidate into one PR * update run steps * add ability to add date if missing * update pull request title * add comments * remove quote changes --------- Co-authored-by: Austin <vidplace7@gmail.com>
73 lines
2.3 KiB
Python
Executable File
73 lines
2.3 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import argparse
|
|
import xml.etree.ElementTree as ET
|
|
from defusedxml.ElementTree import parse
|
|
from datetime import datetime, timezone
|
|
|
|
|
|
# Indent by 2 spaces to align with xml formatting.
|
|
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. 2.6.4)")
|
|
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 = parse(args.file)
|
|
root = tree.getroot()
|
|
|
|
releases = root.find('releases')
|
|
if releases is None:
|
|
raise RuntimeError("<releases> element not found in XML.")
|
|
|
|
existing_versions = {
|
|
release.get('version'): release
|
|
for release in releases.findall('release')
|
|
}
|
|
existing_release = existing_versions.get(args.version)
|
|
|
|
if existing_release is not None:
|
|
if not existing_release.get('date'):
|
|
print(f"Version {args.version} found without date. Adding date...")
|
|
existing_release.set('date', args.date)
|
|
else:
|
|
print(
|
|
f"Version {args.version} is already present with date, skipping insertion.")
|
|
else:
|
|
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?q=tag%3Av{args.version}"
|
|
|
|
releases.insert(0, new_release)
|
|
|
|
indent(releases, level=1)
|
|
releases.tail = "\n"
|
|
|
|
print(f"Inserted new release: {args.version}")
|
|
|
|
tree.write(args.file, encoding='UTF-8', xml_declaration=True)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|