[+] Deploy tool: Automatically change version string
This commit is contained in:
parent
eef75c9b46
commit
31f50d38ee
1 changed files with 80 additions and 0 deletions
80
tools/deploy-release.py
Normal file
80
tools/deploy-release.py
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import shlex
|
||||||
|
import stat
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
|
from packaging import version as pv
|
||||||
|
|
||||||
|
sys.path.append(str(Path(__file__).parent.parent))
|
||||||
|
|
||||||
|
from tools.list_distros import generate_help
|
||||||
|
from tools.reformat_readme import reformat_readme
|
||||||
|
|
||||||
|
|
||||||
|
def pre_check():
|
||||||
|
"""
|
||||||
|
Check source code status before releasing.
|
||||||
|
"""
|
||||||
|
assert os.path.isfile('./neofetch'), './neofetch doesn\'t exist, you are running this script in the wrong directory'
|
||||||
|
assert os.stat('./neofetch').st_mode & stat.S_IEXEC, 'neofetch is not executable'
|
||||||
|
assert os.path.islink('./hyfetch/scripts/neowofetch'), 'neowofetch is not a symbolic link'
|
||||||
|
# subprocess.check_call(shlex.split('git diff-index --quiet HEAD --')) # 'Please commit all changes before release'
|
||||||
|
|
||||||
|
subprocess.check_call(shlex.split('shellcheck neofetch'))
|
||||||
|
|
||||||
|
|
||||||
|
def edit_versions(version: str):
|
||||||
|
"""
|
||||||
|
Edit version numbers in hyfetch/constants.py, package.json, and README.md
|
||||||
|
|
||||||
|
Also edits version number of neofetch, but the neofetch version number is separate.
|
||||||
|
|
||||||
|
:param version: Version to release
|
||||||
|
"""
|
||||||
|
# 1. package.json
|
||||||
|
path = Path('package.json')
|
||||||
|
content = json.loads(path.read_text())
|
||||||
|
cur = pv.parse(content['version'])
|
||||||
|
assert cur < pv.parse(version), 'Version did not increase'
|
||||||
|
content['version'] = version
|
||||||
|
path.write_text(json.dumps(content, ensure_ascii=False, indent=2))
|
||||||
|
|
||||||
|
# 2. hyfetch/constants.py
|
||||||
|
path = Path('hyfetch/constants.py')
|
||||||
|
content = [f"VERSION = '{version}'" if l.startswith('VERSION = ') else l for l in path.read_text().split('\n')]
|
||||||
|
path.write_text('\n'.join(content))
|
||||||
|
|
||||||
|
# 3. README.md
|
||||||
|
path = Path('README.md')
|
||||||
|
content = path.read_text()
|
||||||
|
changelog_i = content.index('<!-- CHANGELOG STARTS HERE --->')
|
||||||
|
version_i = content.index('###', changelog_i)
|
||||||
|
version_end = content.index('\n', version_i)
|
||||||
|
content = content[:version_i] + f'### {version}' + content[version_end:]
|
||||||
|
path.write_text(content)
|
||||||
|
|
||||||
|
# 4. neofetch script
|
||||||
|
path = Path('neofetch')
|
||||||
|
lines = path.read_text().split('\n')
|
||||||
|
version_i = next(i for i, l in enumerate(lines) if l.startswith('version='))
|
||||||
|
nf = pv.parse(lines[version_i].replace('version=', ''))
|
||||||
|
new = pv.parse(version)
|
||||||
|
nf = f'{nf.major + new.major - cur.major}.{nf.minor + new.minor - cur.minor}.{nf.micro + new.micro - cur.micro}'
|
||||||
|
lines[version_i] = f"version={nf}"
|
||||||
|
path.write_text('\n'.join(lines))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
parser = argparse.ArgumentParser(description='HyFetch Release Utility')
|
||||||
|
parser.add_argument('version', help='Version to release')
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
pre_check()
|
||||||
|
edit_versions(args.version)
|
||||||
|
|
Loading…
Reference in a new issue