Created
September 6, 2022 12:01
-
-
Save Konstantin-Dudersky/9331fa613b014be640990649a20e3660 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"""Create GitHub release.""" | |
import getopt | |
import logging | |
import os | |
import shutil | |
import sys | |
from github_api import GithubApi, parse_version | |
from logger_setup import LoggerLevel, get_logger | |
from semantic_versioning import SemanticVersioning | |
HELP_STRING = """ | |
arguments: | |
-h, --help : show help | |
--version: new version type | |
must be in [patch, minor, major] | |
--token: token for access github repo | |
""" | |
# ----------------------------------------------------------------------------- | |
# logger setup | |
logger = get_logger(__name__) | |
logger.setLevel(LoggerLevel.INFO) | |
# ----------------------------------------------------------------------------- | |
# command line options | |
opts, args = getopt.getopt( | |
args=sys.argv[1:], | |
shortopts='h', | |
longopts=['help', 'version=', 'token='], | |
) | |
new_version_type = 'patch' | |
token = None | |
for opt, arg in opts: | |
if opt in ['-h', '--help']: | |
logger.info(HELP_STRING) | |
exit(0) | |
if opt == '--version': | |
if arg in ['patch', 'minor', 'major']: | |
new_version_type = arg | |
else: | |
raise ValueError(f'Unknown value --version = {arg}') | |
if opt == '--token': | |
token = arg | |
if token is None: | |
raise ValueError('Please specify token for github access!') | |
# ----------------------------------------------------------------------------- | |
# github api class | |
github = GithubApi( | |
owner='inosat-automation', | |
repo='cocacola-resourcesmgmt', | |
token=token, | |
) | |
# ----------------------------------------------------------------------------- | |
# create new release | |
version = github.get_latest_release_tag_name() | |
sv = SemanticVersioning(*parse_version(version)) | |
match new_version_type: | |
case 'patch': | |
release_id = github.create_release(sv.new_patch()) | |
case 'minor': | |
release_id = github.create_release(sv.new_minor()) | |
case 'major': | |
release_id = github.create_release(sv.new_major()) | |
case _: | |
raise ValueError('Unknown value of variable new_version_type') | |
# ----------------------------------------------------------------------------- | |
# save current dir | |
cwd = os.getcwd() | |
# clean assets folder | |
shutil.rmtree(f'{cwd}/assets', ignore_errors=True) | |
os.makedirs('assets', exist_ok=True) | |
# ----------------------------------------------------------------------------- | |
# build and archive angular app | |
logging.info('-' * 80) | |
logging.info('build angular') | |
os.chdir('../resourcesmgmt-front') | |
logging.info(os.popen('ng build').read()) | |
shutil.make_archive( | |
base_name=f'{cwd}/assets/resourcesmgmt-front', | |
format='zip', | |
root_dir=f'{os.getcwd()}/dist/resourcesmgmt-front', | |
) | |
os.chdir(cwd) | |
# ----------------------------------------------------------------------------- | |
# archive server api | |
logging.info('-' * 80) | |
logging.info('build server api') | |
os.chdir('../resourcesmgmt-api') | |
os.system(f'git archive -o {cwd}/assets/resourcesmgmt-api.zip HEAD') | |
os.chdir(cwd) | |
# ----------------------------------------------------------------------------- | |
# send attachments | |
for filename in os.listdir(cwd + '/assets'): | |
github.upload_release_asset( | |
release_id=release_id, | |
filename=f'{cwd}/assets/{filename}', | |
) | |
logging.info(f'!!! SUCCESS !!! release {sv.current_version()} created.') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment