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 })