Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
# dry_run: print all easyconfigs and dependencies, and whether they are already built
if options.dry_run or options.dry_run_short:
print_dry_run(easyconfigs, short=not options.dry_run, build_specs=build_specs)
if any([options.dry_run, options.dry_run_short, options.regtest, options.search, options.search_short]):
cleanup(logfile, eb_tmpdir, testing)
sys.exit(0)
# skip modules that are already installed unless forced
if not options.force:
easyconfigs = skip_available(easyconfigs, testing=testing)
# determine an order that will allow all specs in the set to build
if len(easyconfigs) > 0:
print_msg("resolving dependencies ...", log=_log, silent=testing)
ordered_ecs = resolve_dependencies(easyconfigs, build_specs=build_specs)
else:
print_msg("No easyconfigs left to be built.", log=_log, silent=testing)
ordered_ecs = []
# create dependency graph and exit
if options.dep_graph:
_log.info("Creating dependency graph %s" % options.dep_graph)
dep_graph(options.dep_graph, ordered_ecs)
sys.exit(0)
# submit build as job(s) and exit
if options.job:
curdir = os.getcwd()
# the options to ignore (help options can't reach here)
def warning(message):
"""
Print warning message.
"""
print_msg("WARNING: %s\n" % message)
if not testing:
for skipped_ec in [ec for ec in easyconfigs if ec not in retained_ecs]:
print_msg("%s is already installed (module found), skipping" % skipped_ec['full_mod_name'])
easyconfigs = retained_ecs
# keep track for which easyconfigs we should set the corresponding module as default
if options.set_default_module:
for easyconfig in easyconfigs:
easyconfig['ec'].set_default_module = True
# determine an order that will allow all specs in the set to build
if len(easyconfigs) > 0:
# resolve dependencies if robot is enabled, except in dry run mode
# one exception: deps *are* resolved with --new-pr or --update-pr when dry run mode is enabled
if options.robot and (not dry_run_mode or pr_options):
print_msg("resolving dependencies ...", log=_log, silent=testing)
ordered_ecs = resolve_dependencies(easyconfigs, modtool)
else:
ordered_ecs = easyconfigs
elif pr_options:
ordered_ecs = None
else:
print_msg("No easyconfigs left to be built.", log=_log, silent=testing)
ordered_ecs = []
# creating/updating PRs
if pr_options:
if options.new_pr:
new_pr(categorized_paths, ordered_ecs)
elif options.new_branch_github:
new_branch_github(categorized_paths, ordered_ecs)
elif options.new_pr_from_branch:
"""
Handle running of contribution and style checks on specified easyconfigs (if desired).
:return: boolean indicating whether or not any checks were actually performed
"""
check_actions = {
'contribution': (check_contrib, run_contrib_checks),
'style': (check_style, cmdline_easyconfigs_style_check),
}
for check_label, (run_check, check_function) in sorted(check_actions.items()):
if run_check:
_log.info("Running %s checks on %d specified easyconfigs...", check_label, len(ecs))
if check_function(ecs):
print_msg("\n>> All %s checks PASSed!\n" % check_label, prefix=False)
else:
print_msg('', prefix=False)
raise EasyBuildError("One or more %s checks FAILED!" % check_label)
return check_contrib or check_style
for ec in ecs:
# if an EasyConfig instance is provided, just grab the corresponding file path
if isinstance(ec, EasyConfig):
path = ec.path
elif isinstance(ec, basestring):
path = ec
else:
raise EasyBuildError("Value of unknown type encountered in cmdline_easyconfigs_style_check: %s (type: %s)",
ec, type(ec))
if check_easyconfigs_style([path]) == 0:
res = 'PASS'
else:
res = 'FAIL'
style_check_passed = False
print_msg('[%s] %s' % (res, path), prefix=False)
return style_check_passed
if pr_data['state'] == GITHUB_STATE_CLOSED:
raise EasyBuildError("PR #%d from %s/%s is already closed.", pr, pr_target_account, pr_target_repo)
pr_owner = pr_data['user']['login']
msg = "\n%s/%s PR #%s was submitted by %s, " % (pr_target_account, pr_target_repo, pr, pr_owner)
msg += "you are using GitHub account '%s'\n" % github_user
msg += "\nPR Title: \"%s\"\n" % pr_data['title']
print_msg(msg, prefix=False)
dry_run = build_option('dry_run') or build_option('extended_dry_run')
reopen = motivation_msg == VALID_CLOSE_PR_REASONS['retest']
if not motivation_msg:
print_msg("No reason or message specified, looking for possible reasons\n")
possible_reasons = reasons_for_closing(pr_data)
if not possible_reasons:
raise EasyBuildError("No reason specified and none found from PR data, "
"please use --close-pr-reasons or --close-pr-msg")
else:
motivation_msg = ", ".join([VALID_CLOSE_PR_REASONS[reason] for reason in possible_reasons])
print_msg("\nNo reason specified but found possible reasons: %s.\n" % motivation_msg, prefix=False)
msg = "@%s, this PR is being closed for the following reason(s): %s." % (pr_data['user']['login'], motivation_msg)
if not reopen:
msg += "\nPlease don't hesitate to reopen this PR or add a comment if you feel this contribution is still "
msg += "relevant.\nFor more information on our policy w.r.t. closing PRs, see "
msg += "https://easybuild.readthedocs.io/en/latest/Contributing.html"
msg += "#why-a-pull-request-may-be-closed-by-a-maintainer"
post_comment_in_issue(pr, msg, account=pr_target_account, repo=pr_target_repo, github_user=github_user)
* check whether a GitHub token is available, and whether it works
* check whether git and GitPython are available
* check whether push access to own GitHub repositories works
* check whether creating gists works
* check whether location to local working directories for Git repositories is available (not strictly needed)
"""
# start by assuming that everything works, individual checks will disable action that won't work
status = {}
for action in ['--from-pr', '--new-pr', '--review-pr', '--upload-test-report', '--update-pr']:
status[action] = True
print_msg("\nChecking status of GitHub integration...\n", log=_log, prefix=False)
# check whether we're online; if not, half of the checks are going to fail...
try:
print_msg("Making sure we're online...", log=_log, prefix=False, newline=False)
urlopen(GITHUB_URL, timeout=5)
print_msg("OK\n", log=_log, prefix=False)
except URLError as err:
print_msg("FAIL")
raise EasyBuildError("checking status of GitHub integration must be done online")
# GitHub user
print_msg("* GitHub user...", log=_log, prefix=False, newline=False)
github_user = build_option('github_user')
github_account = build_option('github_org') or build_option('github_user')
if github_user is None:
check_res = "(none available) => FAIL"
status['--new-pr'] = status['--update-pr'] = status['--upload-test-report'] = False
else:
check_res = "%s => OK" % github_user
self.startfrom()
## CONFIGURE
print_msg("configuring...", self.log)
self.runstep('configure', [self.configure], skippable=True)
## MAKE
print_msg("building...", self.log)
self.runstep('make', [self.make], skippable=True)
## TEST
print_msg("testing...", self.log)
self.runstep('test', [self.test], skippable=True)
## INSTALL
print_msg("installing...", self.log)
self.runstep('install', [self.make_installdir, self.make_install], skippable=True)
## Packages
self.runstep('packages', [self.packages])
print_msg("finishing up...", self.log)
## POSTPROC
self.runstep('postproc', [self.postproc], skippable=True)
## CLEANUP
self.runstep('cleanup', [self.cleanup])
## SANITY CHECK
self.runstep('sanity check', [self.sanitycheck], skippable=False)