-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathprepare_release.py
35 lines (23 loc) · 1003 Bytes
/
prepare_release.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
"""Release script."""
import re
from typing import List
VERSION = '1.0.8'
def readlines(filename: str) -> List[str]:
"""Read a file as a list of lines."""
with open(filename) as in_f:
return in_f.readlines()
def writelines(filename: str, lines: List[str]) -> None:
"""Write a list of lines to a file."""
with open(filename, 'w') as out_f:
out_f.write(''.join(lines))
def update_version(filename: str, pattern: str, version: str) -> None:
"""Update the version in a file."""
def replace_version(line: str) -> str:
if re.match(pattern, line):
return re.sub(pattern, fr'\g<1>{version}\g<2>', line)
else:
return line
writelines(filename, map(replace_version, readlines(filename)))
update_version('pyproject.toml', r'(^version = ")[0-9]+\.[0-9]+\.[0-9]+("$)', VERSION)
update_version('docs/conf.py', r"(^.*release = ')[0-9]+\.[0-9]+\.[0-9]+('$)", VERSION)
update_version('CHANGES.md', r'(## )Dev($)', VERSION)