Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
verify_track(args.track, tracks_dict['tracks'][args.track])
git_clone = GitClone()
with git_clone:
quiet_git_clone_warning(True)
disable_git_clone(True)
execute_track(args.track, tracks_dict['tracks'][args.track],
args.release_increment, args.pretend, args.debug,
args.unsafe, interactive=args.interactive)
disable_git_clone(False)
quiet_git_clone_warning(False)
git_clone.commit()
# Notify the user of success and next action suggestions
info('\n\n', use_prefix=False)
warning("Tip: Check to ensure that the debian tags created have the same "
"version as the upstream version you are releasing.")
info(fmt("@{gf}@!Everything went as expected, "
"you should check that the new tags match your expectations, and "
"then push to the release repo with:@|"))
info(fmt(" git push --all && git push --tags "
"@{kf}@!# You might have to add --force to the second command if you "
info("Processing release track settings for '{0}'".format(track))
settings = process_track_settings(track_dict, release_inc, interactive=interactive)
# setup extra settings
archive_dir_path = tempfile.mkdtemp()
settings['archive_dir_path'] = archive_dir_path
if settings['release_tag'] != ':{none}':
archive_file = '{name}-{release_tag}.tar.gz'.format(**settings)
else:
archive_file = '{name}.tar.gz'.format(**settings)
settings['archive_path'] = os.path.join(archive_dir_path, archive_file)
# execute actions
info("", use_prefix=False)
info("Executing release track '{0}'".format(track))
for action in track_dict['actions']:
if 'bloom-export-upstream' in action and settings['vcs_type'] == 'tar':
warning("Explicitly skipping bloom-export-upstream for tar.")
settings['archive_path'] = settings['vcs_uri']
continue
templated_action = template_str(action, settings)
info(fmt("@{bf}@!==> @|@!" + sanitize(str(templated_action))))
if pretend:
continue
stdout = None
stderr = None
if bloom.util._quiet:
stdout = subprocess.PIPE
stderr = subprocess.STDOUT
if debug and 'DEBUG' not in os.environ:
os.environ['DEBUG'] = '1'
if fast and 'BLOOM_UNSAFE' not in os.environ:
os.environ['BLOOM_UNSAFE'] = '1'
templated_action = templated_action.split()
):
peer_packages = peer_packages or []
data = {}
# Name, Version, Description
data['Name'] = package.name
data['Version'] = package.version
data['Description'] = rpmify_string(package.description)
# License
if not package.licenses or not package.licenses[0]:
error("No license set for package '{0}', aborting.".format(package.name), exit=True)
data['License'] = package.licenses[0]
# Websites
websites = [str(url) for url in package.urls if url.type == 'website']
data['Homepage'] = websites[0] if websites else ''
if data['Homepage'] == '':
warning("No homepage set")
# RPM Increment Number
data['RPMInc'] = rpm_inc
# Package name
data['Package'] = sanitize_package_name(package.name)
# Installation prefix
data['InstallationPrefix'] = installation_prefix
# Resolve dependencies
evaluate_package_conditions(package, ros_distro)
depends = [
dep for dep in (package.run_depends + package.buildtool_export_depends)
if dep.evaluated_condition is not False]
build_depends = [
dep for dep in (package.build_depends + package.buildtool_depends + package.test_depends)
if dep.evaluated_condition is not False]
unresolved_keys = [
dep for dep in (depends + build_depends + package.replaces + package.conflicts)
def update_track(track_dict):
for key, value in DEFAULT_TEMPLATE.items():
if key in ['actions']:
if track_dict[key] != DEFAULT_TEMPLATE[key]:
warning("Your track's '{0}' configuration is not the same as the default."
.format(key))
default = 'n'
if key == 'actions':
default = 'y'
warning("Unless you have manually modified your 'actions' "
"(the commands which get run for a release), "
"you should update to the new default.")
warning("Should it be updated to the default setting?")
if maybe_continue(default):
track_dict[key] = DEFAULT_TEMPLATE[key]
elif key not in track_dict:
value = value.default if isinstance(value, PromptEntry) else value
track_dict[key] = value
return track_dict
# Use the time stamp to set the date strings
stamp = datetime.datetime.now(tz.tzlocal())
data['Date'] = stamp.strftime('%a, %d %b %Y %T %z')
data['YYYY'] = stamp.strftime('%Y')
# Maintainers
maintainers = []
for m in package.maintainers:
maintainers.append(str(m))
data['Maintainer'] = maintainers[0]
data['Maintainers'] = ', '.join(maintainers)
# Changelog
changelogs = get_changelogs(package, releaser_history)
if changelogs and package.version not in [x[0] for x in changelogs]:
warning("")
warning("A CHANGELOG.rst was found, but no changelog for this version was found.")
warning("You REALLY should have a entry (even a blank one) for each version of your package.")
warning("")
if not changelogs:
# Ensure at least a minimal changelog
changelogs = []
if package.version not in [x[0] for x in changelogs]:
changelogs.insert(0, (
package.version,
get_rfc_2822_date(datetime.datetime.now()),
' * Autogenerated, no changelog for this version found in CHANGELOG.rst.',
package.maintainers[0].name,
package.maintainers[0].email
))
bad_changelog = False
# Make sure that the first change log is the version being released
if package.version != changelogs[0][0]:
error("")
def _trim(config, force, directory):
debug("_trim(" + str(config) + ", " + str(force) + ", " +
str(directory) + ")")
if config['trimbase'] != '':
warning("It looks like the trim operation has already been done, "
"nested trimming is not supported.")
if force:
warning("Proceeding anyways because of '--force'")
else:
warning("If you would like to continue anyways use '--force'")
return None
current_branch = get_current_branch(directory)
if current_branch is None:
error("Could not determine current branch.", exit=True)
config['trimbase'] = get_commit_hash(current_branch)
tmp_dir = tempfile.mkdtemp()
try:
# Buckup trim sub directory
git_root = get_root()
sub_dir = os.path.join(git_root, config['trim'])
storage = os.path.join(tmp_dir, config['trim'])
shutil.copytree(sub_dir, storage)
# Clear out any untracked files
execute_command('git clean -fdx', cwd=directory)
# Collect al files (excluding .git)
items = []
def _trim(config, force, directory):
debug("_trim(" + str(config) + ", " + str(force) + ", " +
str(directory) + ")")
if config['trimbase'] != '':
warning("It looks like the trim operation has already been done, "
"nested trimming is not supported.")
if force:
warning("Proceeding anyways because of '--force'")
else:
warning("If you would like to continue anyways use '--force'")
return None
current_branch = get_current_branch(directory)
if current_branch is None:
error("Could not determine current branch.", exit=True)
config['trimbase'] = get_commit_hash(current_branch)
tmp_dir = tempfile.mkdtemp()
try:
# Buckup trim sub directory
git_root = get_root()
sub_dir = os.path.join(git_root, config['trim'])
storage = os.path.join(tmp_dir, config['trim'])
config = json.loads(f.read())
token = config.get('oauth_token', None)
username = config.get('github_user', None)
if token and username:
return Github(username, auth=auth_header_from_oauth_token(token), token=token)
if not os.path.isdir(os.path.dirname(oauth_config_path)):
os.makedirs(os.path.dirname(oauth_config_path))
if quiet:
return None
# Ok, now we have to ask for the user name and pass word
info("")
warning("Looks like bloom doesn't have an oauth token for you yet.")
warning("Therefore bloom will require your GitHub username and password just this once.")
warning("With your GitHub username and password bloom will create an oauth token on your behalf.")
warning("The token will be stored in `~/.config/bloom`.")
warning("You can delete the token from that file to have a new token generated.")
warning("Guard this token like a password, because it allows someone/something to act on your behalf.")
warning("If you need to unauthorize it, remove it from the 'Applications' menu in your GitHub account page.")
info("")
if not maybe_continue('y', "Would you like to create an OAuth token now"):
return None
token = None
while token is None:
try:
username = getpass.getuser()
username = safe_input("GitHub username [{0}]: ".format(username)) or username
password = getpass.getpass("GitHub password (never stored): ")
except (KeyboardInterrupt, EOFError):
return None
if not password:
error("No password was given, aborting.")
return None
changelog = get_changelog_from_path(changelog_path)
changelogs = []
maintainer = (package.maintainers[0].name, package.maintainers[0].email)
for version, date, changes in changelog.foreach_version(reverse=True):
changes_str = []
date_str = get_rfc_2822_date(date)
for item in changes:
changes_str.extend([' ' + i for i in to_unicode(item).splitlines()])
# Each entry has (version, date, changes, releaser, releaser_email)
releaser, email = releaser_history.get(version, maintainer)
changelogs.append((
version, date_str, '\n'.join(changes_str), releaser, email
))
return changelogs
else:
warning("No {0} found for package '{1}'"
.format(CHANGELOG_FILENAME, package.name))
return []