Files
brave-core/script/publish_release.py
T

98 lines
3.4 KiB
Python
Executable File

#!/usr/bin/env python
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at http://mozilla.org/MPL/2.0/.
import argparse
import json
import logging
import os
import requests
import sys
from argparse import RawTextHelpFormatter
from lib.github import GitHub
from lib.helpers import *
from lib.config import (PLATFORM, get_env_var, product_name,
project_name, SOURCE_ROOT,
output_dir, get_brave_version,
get_raw_version)
def main():
args = parse_args()
if args.debug:
logging.basicConfig(stream=sys.stderr, level=logging.DEBUG)
logging.debug('prerelease: {}'.format(args.prerelease))
if not os.environ.get('npm_config_brave_version'):
message = ('Error: Please set the $npm_config_brave_version'
'environment variable')
exit(message)
BRAVE_VERSION = os.environ.get('npm_config_brave_version')
repo = GitHub(get_env_var('GITHUB_TOKEN')).repos(BRAVE_REPO)
tag = BRAVE_VERSION
logging.debug("Tag: {}".format(tag))
# If we are publishing a prerelease, the release can only be in draft mode. If we
# are publishing a full release, it is allowed to already be a published release.
if args.prerelease:
release = get_draft(repo, tag)
else:
release = get_release(repo, tag, allow_published_release_updates=True)
tag_name = release['tag_name']
logging.debug("release[id]: {}".format(release['id']))
logging.info("Releasing {}".format(tag_name))
publish_release(repo, release['id'], tag_name, args.prerelease, logging)
def get_draft(repo, tag):
releases = get_releases_by_tag(repo, tag, include_drafts=True)
if not releases:
raise(UserWarning("[ERROR]: No draft with tag '{}' found, may need "
"to run the ./script/upload.py script first"
.format(tag)))
elif len(releases) > 1 or not releases[0]['draft']:
raise(UserWarning("[ERROR]: Release with tag {} already exists"
.format(tag)))
return releases[0]
def publish_release(repo, release_id, tag, prerelease, logging):
data = dict(prerelease=prerelease, draft=False, tag_name=tag)
try:
repo.releases(release_id).patch(data=data)
except Exception as e:
if any([err.get("field") == "tag_name" for
err in json.loads(e.message)['errors']]):
logging.error("[ERROR] Please make sure tag_name exists and is pushed "
"to github")
raise
def parse_args():
desc = "Publish GitHub draft release" \
"\n\nRequires the following ENVIRONMENT VARIABLES be set:" \
"\n\nCHANNEL: The Brave channel, i.e. \'nightly\', \'dev\', \'beta\', \'release\'" \
"\n\nBRAVE_GITHUB_TOKEN: Github token to publish release. "
parser = argparse.ArgumentParser(
description=desc, formatter_class=RawTextHelpFormatter)
parser.add_argument('-d', '--debug', action='store_true',
help='Print debug statements')
parser.add_argument('-p', '--prerelease', help='Publish the release as a `prerelease` '
'(Default: False)', action='store_true')
return parser.parse_args()
if __name__ == '__main__':
import sys
sys.exit(main())