X-Git-Url: https://jfr.im/git/yt-dlp.git/blobdiff_plain/115add43876964956917bf596c1d0b148c5b3c26..90c3721a322756bb7f4ca10ceb73744500bee37e:/devscripts/update-version.py diff --git a/devscripts/update-version.py b/devscripts/update-version.py index c55dd371c..2018ba844 100644 --- a/devscripts/update-version.py +++ b/devscripts/update-version.py @@ -7,44 +7,76 @@ sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +import argparse import contextlib -import subprocess +import datetime as dt import sys -from datetime import datetime -from devscripts.utils import read_version, write_file +from devscripts.utils import read_version, run_process, write_file -def get_new_version(revision): - version = datetime.utcnow().strftime('%Y.%m.%d') +def get_new_version(version, revision): + if not version: + version = dt.datetime.now(dt.timezone.utc).strftime('%Y.%m.%d') if revision: - assert revision.isdigit(), 'Revision must be a number' + 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) + revision = str(int(([*old_version, 0])[3]) + 1) return f'{version}.{revision}' if revision else version def get_git_head(): with contextlib.suppress(Exception): - sp = subprocess.Popen(['git', 'rev-parse', '--short', 'HEAD'], stdout=subprocess.PIPE) - return sp.communicate()[0].decode().strip() or None + return run_process('git', 'rev-parse', 'HEAD').stdout.strip() -VERSION = get_new_version((sys.argv + [''])[1]) -GIT_HEAD = get_git_head() - -VERSION_FILE = f'''\ +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} -RELEASE_GIT_HEAD = {GIT_HEAD!r} +_pkg_version = {package_version!r} ''' -write_file('yt_dlp/version.py', VERSION_FILE) -print(f'::set-output name=ytdlp_version::{VERSION}') -print(f'\nVersion = {VERSION}, Git HEAD = {GIT_HEAD}') +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() + + 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(f'version={version} ({args.channel}), head={git_head}')