Skip to content

Instantly share code, notes, and snippets.

@Konstantin-Dudersky
Created September 6, 2022 12:01
Show Gist options
  • Save Konstantin-Dudersky/9331fa613b014be640990649a20e3660 to your computer and use it in GitHub Desktop.
Save Konstantin-Dudersky/9331fa613b014be640990649a20e3660 to your computer and use it in GitHub Desktop.
"""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