X-Git-Url: https://jfr.im/git/yt-dlp.git/blobdiff_plain/3dd264bf423543e8d3d5394a38cd79007f1a59f8..8e15177b4113c355989881e4e030f695a9b59c3a:/devscripts/update-version.py diff --git a/devscripts/update-version.py b/devscripts/update-version.py index 38dea0862..07a071745 100644 --- a/devscripts/update-version.py +++ b/devscripts/update-version.py @@ -1,31 +1,82 @@ -from __future__ import unicode_literals -from datetime import datetime -# import urllib.request +#!/usr/bin/env python3 -# response = urllib.request.urlopen('https://blackjack4494.github.io/youtube-dlc/update/LATEST_VERSION') -# old_version = response.read().decode('utf-8') +# Allow direct execution +import os +import sys -exec(compile(open('youtube_dlc/version.py').read(), 'youtube_dlc/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(".", 4) -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.now().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 -# VERSION_LIST = [(int(v) for v in ver.split(".") + [rev or 0])] -print('::set-output name=ytdlc_version::' + VERSION) +def get_new_version(version, revision): + if not version: + version = dt.datetime.now(dt.timezone.utc).strftime('%Y.%m.%d') -file_version_py = open('youtube_dlc/version.py', 'rt') -data = file_version_py.read() -data = data.replace(old_version, VERSION) -file_version_py.close() + 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) -file_version_py = open('youtube_dlc/version.py', 'wt') -file_version_py.write(data) -file_version_py.close() + 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} + +RELEASE_GIT_HEAD = {git_head!r} + +VARIANT = None + +UPDATE_HINT = None + +CHANNEL = {channel!r} + +ORIGIN = {origin!r} + +_pkg_version = {package_version!r} +''' + +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}')