X-Git-Url: https://jfr.im/git/yt-dlp.git/blobdiff_plain/36eaf3039a5d96d4f8ebb644b1ab3b0ad4136cd0..90c3721a322756bb7f4ca10ceb73744500bee37e:/devscripts/update-version.py diff --git a/devscripts/update-version.py b/devscripts/update-version.py index 770926f0c..2018ba844 100644 --- a/devscripts/update-version.py +++ b/devscripts/update-version.py @@ -1,38 +1,82 @@ #!/usr/bin/env python3 -from datetime import datetime -import subprocess +# Allow direct execution +import os +import sys -with open('yt_dlp/version.py', 'rt') as f: - exec(compile(f.read(), 'yt_dlp/version.py', 'exec')) -old_version = locals()['__version__'] +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) -old_version_list = old_version.split('.') -old_ver = '.'.join(old_version_list[:3]) -old_rev = old_version_list[3] if len(old_version_list) > 3 else '' +import argparse +import contextlib +import datetime as dt +import sys -ver = datetime.utcnow().strftime("%Y.%m.%d") -rev = str(int(old_rev or 0) + 1) if old_ver == ver else '' +from devscripts.utils import read_version, run_process, write_file -VERSION = '.'.join((ver, rev)) if rev else ver -try: - sp = subprocess.Popen(['git', 'rev-parse', '--short', 'HEAD'], stdout=subprocess.PIPE) - GIT_HEAD = sp.communicate()[0].decode().strip() or None -except Exception: - GIT_HEAD = None +def get_new_version(version, revision): + if not version: + version = dt.datetime.now(dt.timezone.utc).strftime('%Y.%m.%d') -VERSION_FILE = f''' + if revision: + assert revision.isdecimal(), 'Revision must be a number' + else: + old_version = read_version().split('.') + if version.split('.') == old_version[:3]: + revision = str(int(([*old_version, 0])[3]) + 1) + + return f'{version}.{revision}' if revision else version + + +def get_git_head(): + with contextlib.suppress(Exception): + return run_process('git', 'rev-parse', 'HEAD').stdout.strip() + + +VERSION_TEMPLATE = '''\ # Autogenerated by devscripts/update-version.py -__version__ = {VERSION!r} +__version__ = {version!r} + +RELEASE_GIT_HEAD = {git_head!r} + +VARIANT = None + +UPDATE_HINT = None + +CHANNEL = {channel!r} + +ORIGIN = {origin!r} + +_pkg_version = {package_version!r} +''' -RELEASE_GIT_HEAD = {GIT_HEAD!r} -'''.lstrip() +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='Update the version.py file') + parser.add_argument( + '-c', '--channel', default='stable', + help='Select update channel (default: %(default)s)') + parser.add_argument( + '-r', '--origin', default='local', + help='Select origin/repository (default: %(default)s)') + parser.add_argument( + '-s', '--suffix', default='', + help='Add an alphanumeric suffix to the package version, e.g. "dev"') + parser.add_argument( + '-o', '--output', default='yt_dlp/version.py', + help='The output file to write to (default: %(default)s)') + parser.add_argument( + 'version', nargs='?', default=None, + help='A version or revision to use instead of generating one') + args = parser.parse_args() -with open('yt_dlp/version.py', 'wt') as f: - f.write(VERSION_FILE) + git_head = get_git_head() + version = ( + args.version if args.version and '.' in args.version + else get_new_version(None, args.version)) + write_file(args.output, VERSION_TEMPLATE.format( + version=version, git_head=git_head, channel=args.channel, origin=args.origin, + package_version=f'{version}{args.suffix}')) -print('::set-output name=ytdlp_version::' + VERSION) -print(f'\nVersion = {VERSION}, Git HEAD = {GIT_HEAD}') + print(f'version={version} ({args.channel}), head={git_head}')