57 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
from pathlib import Path
 | 
						|
from subprocess import check_output
 | 
						|
 | 
						|
import invoke
 | 
						|
 | 
						|
 | 
						|
@invoke.task(help={
 | 
						|
    'version': 'version being released',
 | 
						|
})
 | 
						|
def announce(ctx, version):
 | 
						|
    """Generates a new release announcement entry in the docs."""
 | 
						|
    print("[generate.announce] Generating Announce")
 | 
						|
 | 
						|
    # Get our list of authors
 | 
						|
    print("[generate.announce] Collecting author names")
 | 
						|
 | 
						|
    stdout = check_output(["git", "describe", "--abbrev=0", '--tags'])
 | 
						|
    stdout = stdout.decode('utf-8')
 | 
						|
    last_version = stdout.strip()
 | 
						|
 | 
						|
    stdout = check_output(["git", "log", "{}..HEAD".format(last_version), "--format=%aN"])
 | 
						|
    stdout = stdout.decode('utf-8')
 | 
						|
 | 
						|
    contributors = set(stdout.splitlines())
 | 
						|
 | 
						|
    template_name = 'release.minor.rst' if version.endswith('.0') else 'release.patch.rst'
 | 
						|
    template_text = Path(__file__).parent.joinpath(template_name).read_text(encoding='UTF-8')
 | 
						|
 | 
						|
    contributors_text = '\n'.join('* {}'.format(name) for name in sorted(contributors)) + '\n'
 | 
						|
    text = template_text.format(version=version, contributors=contributors_text)
 | 
						|
 | 
						|
    target = Path(__file__).joinpath('../../doc/en/announce/release-{}.rst'.format(version))
 | 
						|
    target.write_text(text, encoding='UTF-8')
 | 
						|
    print("[generate.announce] Generated {}".format(target.name))
 | 
						|
 | 
						|
    # Update index with the new release entry
 | 
						|
    index_path = Path(__file__).joinpath('../../doc/en/announce/index.rst')
 | 
						|
    lines = index_path.read_text(encoding='UTF-8').splitlines()
 | 
						|
    indent = '   '
 | 
						|
    for index, line in enumerate(lines):
 | 
						|
        if line.startswith('{}release-'.format(indent)):
 | 
						|
            new_line = indent + target.stem
 | 
						|
            if line != new_line:
 | 
						|
                lines.insert(index, new_line)
 | 
						|
                index_path.write_text('\n'.join(lines) + '\n', encoding='UTF-8')
 | 
						|
                print("[generate.announce] Updated {}".format(index_path.name))
 | 
						|
            else:
 | 
						|
                print("[generate.announce] Skip {} (already contains release)".format(index_path.name))
 | 
						|
            break
 | 
						|
 | 
						|
    print()
 | 
						|
    print('Please review the generated files and commit with:')
 | 
						|
    print('    git commit -a -m "Generate new release announcement for {}'.format(version))
 | 
						|
 | 
						|
 | 
						|
 |