File indexing completed on 2024-05-19 15:24:57

0001 #!/usr/bin/env python3
0002 
0003 import os
0004 import re
0005 import sys
0006 from argparse import ArgumentParser
0007 from pathlib import Path
0008 from gitlab_api import GitlabApi, environ, fail
0009 
0010 
0011 parser = ArgumentParser()
0012 parser.add_argument("--fake-env", action="store_true")
0013 parser.add_argument("--download-tag", default=None)
0014 parser.add_argument("--changelog-tag", default=None)
0015 
0016 ns = parser.parse_args()
0017 root_dir = Path(__file__).absolute().parent.parent
0018 
0019 if ns.fake_env:
0020     fake_ver = re.search("project\(.* VERSION (\S+)", open(root_dir / "CMakeLists.txt").read()).group(1)
0021     os.environ.setdefault("CI_COMMIT_TAG", fake_ver)
0022     GitlabApi.fake_env()
0023 
0024 
0025 api = GitlabApi.from_env()
0026 commit_tag = environ("CI_COMMIT_TAG", "You must run this on a tag build")
0027 download_tag = ns.download_tag or commit_tag
0028 changelog_tag = ns.changelog_tag or commit_tag
0029 
0030 
0031 with open(root_dir / "CHANGELOG.md") as changelog:
0032     lines = list(changelog)
0033     for i in range(len(lines)):
0034         if lines[i].startswith("## ") and changelog_tag in lines[i]:
0035             break
0036     else:
0037         fail("No release notes in the Changelog")
0038 
0039     chlog = ""
0040     for j in range(i+1, len(lines)):
0041         if lines[j].startswith("## "):
0042             break
0043         chlog += lines[j]
0044 
0045     if not chlog:
0046         fail("No release notes in the Changelog")
0047 
0048 notes = """
0049 # Glaxnimate {version}
0050 
0051 ## Download
0052 
0053 <table>
0054 <tr><th>Package</th><th>Checksum</th><th>Installation Instructions</th></tr>
0055 <tr>
0056 <td><a href="{artifacts_url}/build/glaxnimate-x86_64.AppImage?job=linux%3Aappimage">Linux AppImage</a></td>
0057 <td><a href="{artifacts_url}/build/checksum.txt?job=linux%3Aappimage">SHA1</a></td>
0058 <td><a href="{install_notes_url}#linux-appimage">Installation Instructions</a></td>
0059 </tr>
0060 <tr>
0061 <td><a href="{artifacts_url}/build/glaxnimate.deb?job=linux%3Adeb">Deb Package</a></td>
0062 <td><a href="{artifacts_url}/build/checksum.txt?job=linux%3Adeb">SHA1</a></td>
0063 <td><a href="{install_notes_url}#deb-package">Installation Instructions</a></td>
0064 </tr>
0065 <tr>
0066 <td><a href="{extra_artifacts}/glaxnimate-x86_64.zip">Windows Zip</a></td>
0067 <td><a href="{extra_artifacts}/checksum-win.txt">SHA1</a></td>
0068 <td><a href="{install_notes_url}#windows-zip">Installation Instructions</a></td>
0069 </tr>
0070 <tr>
0071 <td><a href="{extra_artifacts}/glaxnimate.dmg">Mac dmg</a></td>
0072 <td><a href="{extra_artifacts}/checksum-mac.txt">SHA1</a></td>
0073 <td><a href="{install_notes_url}#mac-dmg">Installation Instructions</a></td>
0074 </tr>
0075 <tr>
0076 <td><a href="{artifacts_url}/glaxnimate-src.tar.gz?job=tarball">Source Tarball</a></td>
0077 <td><a href="{artifacts_url}/checksum.txt?job=tarball">SHA256</a></td>
0078 <td><a href="{install_notes_url}#building-from-source">Notes</a></td>
0079 </tr>
0080 </table>
0081 
0082 ## User Manual
0083 
0084 See the [Documentation](https://glaxnimate.mattbas.org/manual/) page.
0085 
0086 ## Changes
0087 {chlog}
0088 
0089 """.format(
0090     version=commit_tag,
0091     chlog=chlog,
0092     project_url=api.project_url,
0093     artifacts_url=api.artifacts_url(download_tag),
0094     install_notes_url="https://glaxnimate.mattbas.org/download/",
0095     extra_artifacts="https://github.com/mbasaglia/glaxnimate/releases/download/%s/" % download_tag,
0096     extra_tail="?viasf=1",
0097 )
0098 
0099 
0100 old_release = api.project_request("get", ["repository", "tags", commit_tag])["release"]
0101 
0102 release = {
0103     "description": notes,
0104     "tag_name": commit_tag,
0105 }
0106 
0107 if old_release:
0108     api.project_request("put", ["releases", commit_tag], json=release)
0109 else:
0110     api.project_request("post", ["releases"], json=release)
0111 
0112 # Milestone might not exist for point releases
0113 api.project_request("put", ["releases", commit_tag], can_fail=True, json={
0114     "milestones": [commit_tag]
0115 })