diff options
author | Daniel Schürmann <daschuer@mixxx.org> | 2021-09-09 14:28:43 +0200 |
---|---|---|
committer | Daniel Schürmann <daschuer@mixxx.org> | 2021-09-09 14:28:43 +0200 |
commit | deb436af23d242cffddd3cfd1ae4999079e1eaed (patch) | |
tree | 27982d6378ae781e665460d50a12caabb7b01350 /tools | |
parent | 0444717d4df90ee46688c12bf16628f0b07a8431 (diff) | |
parent | b8a34a03159c0479c40bd0a39ea796dc9ef0096b (diff) |
Merge remote-tracking branch 'upstream/main' into vcpkg_osx
# Conflicts:
# cmake/modules/FindPortAudio.cmake
Diffstat (limited to 'tools')
-rwxr-xr-x | tools/changelog.py | 42 | ||||
-rwxr-xr-x | tools/update_metainfo.py | 79 | ||||
-rw-r--r-- | tools/windows_buildenv.bat | 3 |
3 files changed, 123 insertions, 1 deletions
diff --git a/tools/changelog.py b/tools/changelog.py new file mode 100755 index 0000000000..22d27ab35f --- /dev/null +++ b/tools/changelog.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python3 +import argparse +import pathlib +import re + + +def add_missing_links(changelog): + """Ensure that all the changelog conforms to our common format.""" + # Ensure that all launchpad issues are hyperlinks + changelog = re.sub( + r"(?!\[)\blp:?(?P<lpid>\d+)\b(?!\])", + r"[lp:\g<lpid>](https://bugs.launchpad.net/mixxx/+bug/\g<lpid>)", + changelog, + ) + + # Ensure that all GitHub PRs are hyperlinks + changelog = re.sub( + r"(?!\[)#\b(?P<ghid>\d+)\b(?!\])", + r"[#\g<ghid>](https://github.com/mixxxdj/mixxx/pull/\g<ghid>)", + changelog, + ) + + return changelog + + +def main(argv=None): + parser = argparse.ArgumentParser() + parser.add_argument("file", type=pathlib.Path) + args = parser.parse_args(argv) + + # Fetch changelog and convert to RST + with args.file.open("r") as fp: + changelog = fp.read() + + fixed_changelog = add_missing_links(changelog) + if changelog != fixed_changelog: + with args.file.open("w") as fp: + fp.write(fixed_changelog) + + +if __name__ == "__main__": + main() diff --git a/tools/update_metainfo.py b/tools/update_metainfo.py new file mode 100755 index 0000000000..694c6244c1 --- /dev/null +++ b/tools/update_metainfo.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python3 +import datetime +import os +import re + +import markdown +import bs4 +from lxml import etree + + +def parse_changelog(content): + for section in re.split("^## ", content.strip(), flags=re.MULTILINE)[1:]: + version, sep, description_md = section.partition("\n") + matchobj = re.match( + r"\[(?P<number>\d\.\d\.\d)\]\([^\)]+\)" + r"(?P<date>(?: \((?i:Unreleased|\d{4}-\d{2}-\d{2})\))?)", + version, + ) + if not matchobj: + continue + + attrib = { + "version": matchobj.group("number"), + } + try: + attrib["date"] = datetime.datetime.strptime( + matchobj.group("date"), " (%Y-%m-%d)" + ).strftime("%Y-%m-%d") + attrib["type"] = "stable" + except ValueError: + attrib["type"] = "development" + + soup = bs4.BeautifulSoup( + markdown.markdown(description_md), "html.parser" + ) + + # The description tag contains HTML-like markup, but only supports a + # few select tags. Hence we need to strip some tags that are not + # supported. + # + # See the specification for details: + # https://freedesktop.org/software/appstream/docs/chap-Metadata.html#tag-description + for tag in soup.find_all("a"): + tag.replace_with(tag.get_text()) + for tag in soup.find_all("h3"): + new_tag = soup.new_tag("p") + new_tag.string = tag.get_text() + tag.replace_with(new_tag) + desc = soup.new_tag("description") + desc.extend(soup.contents) + + release = etree.Element("release", attrib=attrib) + release.append(etree.fromstring(desc.prettify())) + yield release + + +def main(argv=None): + rootpath = os.path.join(os.path.dirname(__file__), "..") + metainfo_path = os.path.join( + rootpath, "res/linux/org.mixxx.Mixxx.metainfo.xml" + ) + parser = etree.XMLParser(remove_blank_text=True, remove_comments=False) + tree = etree.parse(metainfo_path, parser) + root = tree.getroot() + releases = root.find("releases") + releases.clear() + with open(os.path.join(rootpath, "CHANGELOG.md"), mode="r") as fp: + for release in parse_changelog(fp.read()): + releases.append(release) + tree.write( + metainfo_path, + encoding="UTF-8", + xml_declaration=True, + pretty_print=True, + ) + + +if __name__ == "__main__": + main() diff --git a/tools/windows_buildenv.bat b/tools/windows_buildenv.bat index daf7b5c59b..74737854f5 100644 --- a/tools/windows_buildenv.bat +++ b/tools/windows_buildenv.bat @@ -59,7 +59,8 @@ EXIT /B 0 SET BUILDENV_URL=https://downloads.mixxx.org/dependencies/2.4/Windows/!BUILDENV_NAME!.zip IF NOT EXIST !BUILDENV_PATH!.zip ( ECHO ^Download prebuilt build environment from "!BUILDENV_URL!" to "!BUILDENV_PATH!.zip"... - BITSADMIN /transfer buildenvjob /download /priority normal !BUILDENV_URL! !BUILDENV_PATH!.zip + REM TODO: The /DYNAMIC parameter is required because our server does not yet support HTTP range headers + BITSADMIN /transfer buildenvjob /download /priority normal /DYNAMIC !BUILDENV_URL! !BUILDENV_PATH!.zip REM TODO: verify download using sha256sum? ECHO ^Download complete. ) else ( |