1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- #!/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)
|