diff options
author | Juan J. Martinez <jjm@usebox.net> | 2024-05-04 16:22:42 +0100 |
---|---|---|
committer | Juan J. Martinez <jjm@usebox.net> | 2024-05-04 16:24:06 +0100 |
commit | cf421f9217d6c8f1ce67db81cb7a72c455aec367 (patch) | |
tree | 14e28ce951a8a119dd017816a654bbab78ce9f90 /tools | |
parent | 3c66730134edc063e72bde26efd00bac0eac9bd0 (diff) | |
download | ubox-msx-lib-cf421f9217d6c8f1ce67db81cb7a72c455aec367.tar.gz ubox-msx-lib-cf421f9217d6c8f1ce67db81cb7a72c455aec367.zip |
Moved to self-hosting
- add a tool to generate a release feed (atom)
- add a doc on how to contribute
- update README
Diffstat (limited to 'tools')
-rwxr-xr-x | tools/atom.py | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/tools/atom.py b/tools/atom.py new file mode 100755 index 0000000..1a174f7 --- /dev/null +++ b/tools/atom.py @@ -0,0 +1,106 @@ +#!/usr/bin/env python3 + +# script to generate an atom feed from CHANGES.md + +import re +from datetime import datetime, timezone, time + +release = re.compile("^## Release ([0-9]+\\.[0-9]+\\.[0-9]+) - ([0-9]+-[0-9]+-[0-9]+)$") + +title = "ubox MXS lib releases" +base_url = "https://www.usebox.net/jjm/ubox-msx-lib/changes.html" +release_url = "https://git.usebox.net/ubox-msx-lib/tag/" +feed_file = "releases.xml" +author = "jjm" +tz = timezone.utc + + +def get_entries(changes): + entries = [] + + with open(changes, "rt") as fd: + lines = fd.readlines() + + i = 0 + while i < len(lines): + line = lines[i] + m = release.match(line) + if m: + version = m.group(1) + # because timezones and summer time, use 1am + updated_on = datetime.combine( + datetime.fromisoformat(m.group(2)), time(1, 0, 0) + ).astimezone(tz) + body = "" + i += 1 + while i < len(lines) and (lines[i] == "" or lines[i][0] != "#"): + body += lines[i] + i += 1 + + entries.append(dict(version=version, updated_on=updated_on, body=body)) + else: + i += 1 + + entries.sort(key=lambda o: o["updated_on"], reverse=True) + return entries + + +def to_atom(post): + return """\ +<entry> + <title>{title}</title> + <link rel="alternate" href="{url}"/> + <id>{url}</id> + <updated>{updated_on}</updated> + <content type="xhtml"> + <div xmlns="http://www.w3.org/1999/xhtml"> + <pre>{body}</pre> + <p>Download available at <a href="{release_url}?h={version}">ubox MSX lib website</a>.</p> + </div> + </content> +</entry>\n""".format( + title="Released ubox MSX lib " + post["version"], + url=base_url + "#release-" + post["version"] + "---" + post["updated_on"].date().isoformat(), + version=post["version"], + release_url=release_url, + updated_on=post["updated_on"].isoformat(), + body=post["body"].rstrip() + "\n", + ) + + +def gen_atom(entries): + + updated_on = datetime(1900, 1, 1, tzinfo=tz) + posts_atom = [] + for post in entries: + if post["updated_on"] > updated_on: + updated_on = post["updated_on"] + + posts_atom.append(to_atom(post)) + + return "\n".join( + [ + """<?xml version="1.0" encoding="utf-8"?>""", + """<feed xmlns="http://www.w3.org/2005/Atom">""", + """<title>%s</title>""" % title, + """<link href="%s"/>""" % base_url, + """<link rel="self" href="%s"/>""" % (base_url + feed_file), + """<updated>%s</updated>""" % updated_on.isoformat(), + """<id>%s</id>""" % base_url, + """<author>""", + """ <name>%s</name>""" % author, + """</author>""", + ] + + posts_atom + + ["</feed>"] + ) + + +def main(): + entries = get_entries("../CHANGES.md") + with open(feed_file, "wt") as fd: + fd.write(gen_atom(entries)) + + +if __name__ == "__main__": + main() |