import subprocess import click import os from distutils.version import StrictVersion import shutil import re def get_version(): p = get_version_file_path() with open(p) as f: version = f.read() version = version.strip() if not version: raise ValueError("could not read version") return version def write_version(version_tuple): p = get_version_file_path() with open(p, 'w+') as f: f.write('.'.join([str(i) for i in version_tuple])) def get_version_file_path(): p = os.path.join(os.path.dirname( os.path.abspath(__file__)), 'VERSION') return p def release_patch(version_tuple): patch_version = version_tuple[2] + 1 new_version = version_tuple[:2] + (patch_version,) click.echo('new version: %s' % str(new_version)) write_version(new_version) return new_version def release_minor(version_tuple): minor = version_tuple[1] + 1 new_version = version_tuple[:1] + (minor, 0) click.echo('new version: %s' % str(new_version)) write_version(new_version) return new_version def release_major(version_tuple): major = version_tuple[0] + 1 new = (major, 0, 0) click.echo('new version: %s' % str(new)) write_version(new) return new @click.command() @click.option('--release', '-r', type=click.Choice(['major', 'minor', 'patch']), default='patch') @click.option('--url', prompt=True, default=lambda: os.environ.get('FURY_URL', '')) def main(release, url): version_tuple = StrictVersion(get_version()).version click.echo('old version: %s' % str(version_tuple)) if release == 'major': new_v = release_major(version_tuple) elif release == 'minor': new_v = release_minor(version_tuple) else: new_v = release_patch(version_tuple) new_v_s = '.'.join([str(i) for i in new_v]) os.chdir(os.path.dirname(os.path.abspath(__file__))) subprocess.call("python setup.py sdist", shell=True) pkg_file = '' for f in os.listdir('dist'): r = re.compile(r'.*(%s\.tar\.gz)' % re.escape(new_v_s)) result = r.match(f) if result: click.echo(f + ' is ready') pkg_file = f break if not pkg_file: raise ValueError this_folder = os.path.dirname(os.path.abspath(__file__)) dist_folder = os.path.join(this_folder, 'dist') pkg_file_name = pkg_file pkg_file = os.path.join(dist_folder, pkg_file) shutil.move(pkg_file, this_folder) shutil.rmtree(dist_folder) os.remove('MANIFEST') is_release = click.confirm('ready to release?') if is_release: subprocess.call('curl -F package=@%s %s' % (pkg_file_name, url), shell=True) os.remove(pkg_file_name) if __name__ == '__main__': main()