summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorDaniel Schürmann <daschuer@mixxx.org>2021-09-09 14:28:43 +0200
committerDaniel Schürmann <daschuer@mixxx.org>2021-09-09 14:28:43 +0200
commitdeb436af23d242cffddd3cfd1ae4999079e1eaed (patch)
tree27982d6378ae781e665460d50a12caabb7b01350 /tools
parent0444717d4df90ee46688c12bf16628f0b07a8431 (diff)
parentb8a34a03159c0479c40bd0a39ea796dc9ef0096b (diff)
Merge remote-tracking branch 'upstream/main' into vcpkg_osx
# Conflicts: # cmake/modules/FindPortAudio.cmake
Diffstat (limited to 'tools')
-rwxr-xr-xtools/changelog.py42
-rwxr-xr-xtools/update_metainfo.py79
-rw-r--r--tools/windows_buildenv.bat3
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 (