You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
2.2 KiB
93 lines
2.2 KiB
import re
|
|
from glob import glob
|
|
from os.path import join
|
|
from subprocess import call
|
|
|
|
import blurb as blurb_module
|
|
from argparse import ArgumentParser
|
|
from mock import version_info
|
|
|
|
VERSION_TYPES = ['major', 'minor', 'bugfix']
|
|
|
|
|
|
def incremented_version(version_info, type_):
|
|
type_index = VERSION_TYPES.index(type_)
|
|
version_info = tuple(e+(1 if i==type_index else 0)
|
|
for i, e in enumerate(version_info))
|
|
return '.'.join(str(p) for p in version_info)
|
|
|
|
|
|
def text_from_news():
|
|
# hack:
|
|
blurb_module.sections.append('NEWS.d')
|
|
|
|
blurbs = blurb_module.Blurbs()
|
|
for path in glob(join('NEWS.d', '*')):
|
|
blurbs.load_next(path)
|
|
|
|
text = []
|
|
for metadata, body in blurbs:
|
|
bpo = metadata['bpo']
|
|
body = f"- Issue #{bpo}: " + body
|
|
text.append(blurb_module.textwrap_body(body, subsequent_indent=' '))
|
|
|
|
return '\n'.join(text)
|
|
|
|
|
|
def news_to_changelog(version):
|
|
with open('CHANGELOG.rst') as source:
|
|
current_changelog = source.read()
|
|
|
|
text = [version]
|
|
text.append('-'*len(version))
|
|
text.append('')
|
|
text.append(text_from_news())
|
|
text.append(current_changelog)
|
|
|
|
new_changelog = '\n'.join(text)
|
|
with open('CHANGELOG.rst', 'w') as target:
|
|
target.write(new_changelog)
|
|
|
|
|
|
def update_version(new_version):
|
|
path = join('mock', 'mock.py')
|
|
with open(path) as source:
|
|
text = source.read()
|
|
|
|
text = re.sub("(__version__ = ')[^']+(')",
|
|
r"\g<1>"+new_version+r"\2",
|
|
text)
|
|
|
|
with open(path, 'w') as target:
|
|
target.write(text)
|
|
|
|
|
|
def git(command):
|
|
return call('git '+command, shell=True)
|
|
|
|
|
|
def git_commit(new_version):
|
|
git('rm NEWS.d/*')
|
|
git('add CHANGELOG.rst')
|
|
git('add mock/mock.py')
|
|
git(f'commit -m "Preparing for {new_version} release."')
|
|
|
|
|
|
def parse_args():
|
|
parser = ArgumentParser()
|
|
parser.add_argument('type', choices=VERSION_TYPES)
|
|
return parser.parse_args()
|
|
|
|
|
|
def main():
|
|
args = parse_args()
|
|
new_version = incremented_version(version_info, args.type)
|
|
news_to_changelog(new_version)
|
|
update_version(new_version)
|
|
git_commit(new_version)
|
|
print(f'{new_version} ready to push, please check the HEAD commit first!')
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|