Add --fail-fast option for generating build caches (#38496)
Co-authored-by: Harmen Stoppels <me@harmenstoppels.nl>
This commit is contained in:
parent
bfdebae831
commit
31d5f56913
3 changed files with 33 additions and 5 deletions
|
@ -20,6 +20,7 @@
|
||||||
import spack.cmd.common.arguments as arguments
|
import spack.cmd.common.arguments as arguments
|
||||||
import spack.config
|
import spack.config
|
||||||
import spack.environment as ev
|
import spack.environment as ev
|
||||||
|
import spack.error
|
||||||
import spack.mirror
|
import spack.mirror
|
||||||
import spack.relocate
|
import spack.relocate
|
||||||
import spack.repo
|
import spack.repo
|
||||||
|
@ -78,6 +79,11 @@ def setup_parser(subparser: argparse.ArgumentParser):
|
||||||
"Alternatively, one can decide to build a cache for only the package or only the "
|
"Alternatively, one can decide to build a cache for only the package or only the "
|
||||||
"dependencies",
|
"dependencies",
|
||||||
)
|
)
|
||||||
|
push.add_argument(
|
||||||
|
"--fail-fast",
|
||||||
|
action="store_true",
|
||||||
|
help="stop pushing on first failure (default is best effort)",
|
||||||
|
)
|
||||||
arguments.add_common_arguments(push, ["specs"])
|
arguments.add_common_arguments(push, ["specs"])
|
||||||
push.set_defaults(func=push_fn)
|
push.set_defaults(func=push_fn)
|
||||||
|
|
||||||
|
@ -296,6 +302,7 @@ def push_fn(args):
|
||||||
tty.info(f"Selected {len(specs)} specs to push to {url}")
|
tty.info(f"Selected {len(specs)} specs to push to {url}")
|
||||||
|
|
||||||
skipped = []
|
skipped = []
|
||||||
|
failed = []
|
||||||
|
|
||||||
# tty printing
|
# tty printing
|
||||||
color = clr.get_color_when()
|
color = clr.get_color_when()
|
||||||
|
@ -326,11 +333,17 @@ def push_fn(args):
|
||||||
except bindist.NoOverwriteException:
|
except bindist.NoOverwriteException:
|
||||||
skipped.append(format_spec(spec))
|
skipped.append(format_spec(spec))
|
||||||
|
|
||||||
|
# Catch any other exception unless the fail fast option is set
|
||||||
|
except Exception as e:
|
||||||
|
if args.fail_fast or isinstance(e, (bindist.PickKeyException, bindist.NoKeyException)):
|
||||||
|
raise
|
||||||
|
failed.append((format_spec(spec), e))
|
||||||
|
|
||||||
if skipped:
|
if skipped:
|
||||||
if len(specs) == 1:
|
if len(specs) == 1:
|
||||||
tty.info("The spec is already in the buildcache. Use --force to overwrite it.")
|
tty.info("The spec is already in the buildcache. Use --force to overwrite it.")
|
||||||
elif len(skipped) == len(specs):
|
elif len(skipped) == len(specs):
|
||||||
tty.info("All specs are already in the buildcache. Use --force to overwite them.")
|
tty.info("All specs are already in the buildcache. Use --force to overwrite them.")
|
||||||
else:
|
else:
|
||||||
tty.info(
|
tty.info(
|
||||||
"The following {} specs were skipped as they already exist in the buildcache:\n"
|
"The following {} specs were skipped as they already exist in the buildcache:\n"
|
||||||
|
@ -340,6 +353,17 @@ def push_fn(args):
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if failed:
|
||||||
|
if len(failed) == 1:
|
||||||
|
raise failed[0][1]
|
||||||
|
|
||||||
|
raise spack.error.SpackError(
|
||||||
|
f"The following {len(failed)} errors occurred while pushing specs to the buildcache",
|
||||||
|
"\n".join(
|
||||||
|
elide_list([f" {spec}: {e.__class__.__name__}: {e}" for spec, e in failed], 5)
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def install_fn(args):
|
def install_fn(args):
|
||||||
"""install from a binary package"""
|
"""install from a binary package"""
|
||||||
|
|
|
@ -498,7 +498,7 @@ _spack_buildcache() {
|
||||||
_spack_buildcache_push() {
|
_spack_buildcache_push() {
|
||||||
if $list_options
|
if $list_options
|
||||||
then
|
then
|
||||||
SPACK_COMPREPLY="-h --help -f --force --allow-root -a --unsigned -u --key -k --update-index --rebuild-index --spec-file --only"
|
SPACK_COMPREPLY="-h --help -f --force --allow-root -a --unsigned -u --key -k --update-index --rebuild-index --spec-file --only --fail-fast"
|
||||||
else
|
else
|
||||||
_mirrors
|
_mirrors
|
||||||
fi
|
fi
|
||||||
|
@ -507,7 +507,7 @@ _spack_buildcache_push() {
|
||||||
_spack_buildcache_create() {
|
_spack_buildcache_create() {
|
||||||
if $list_options
|
if $list_options
|
||||||
then
|
then
|
||||||
SPACK_COMPREPLY="-h --help -f --force --allow-root -a --unsigned -u --key -k --update-index --rebuild-index --spec-file --only"
|
SPACK_COMPREPLY="-h --help -f --force --allow-root -a --unsigned -u --key -k --update-index --rebuild-index --spec-file --only --fail-fast"
|
||||||
else
|
else
|
||||||
_mirrors
|
_mirrors
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -685,7 +685,7 @@ complete -c spack -n '__fish_spack_using_command buildcache' -s h -l help -f -a
|
||||||
complete -c spack -n '__fish_spack_using_command buildcache' -s h -l help -d 'show this help message and exit'
|
complete -c spack -n '__fish_spack_using_command buildcache' -s h -l help -d 'show this help message and exit'
|
||||||
|
|
||||||
# spack buildcache push
|
# spack buildcache push
|
||||||
set -g __fish_spack_optspecs_spack_buildcache_push h/help f/force a/allow-root u/unsigned k/key= update-index spec-file= only=
|
set -g __fish_spack_optspecs_spack_buildcache_push h/help f/force a/allow-root u/unsigned k/key= update-index spec-file= only= fail-fast
|
||||||
complete -c spack -n '__fish_spack_using_command_pos_remainder 1 buildcache push' -f -k -a '(__fish_spack_specs)'
|
complete -c spack -n '__fish_spack_using_command_pos_remainder 1 buildcache push' -f -k -a '(__fish_spack_specs)'
|
||||||
complete -c spack -n '__fish_spack_using_command buildcache push' -s h -l help -f -a help
|
complete -c spack -n '__fish_spack_using_command buildcache push' -s h -l help -f -a help
|
||||||
complete -c spack -n '__fish_spack_using_command buildcache push' -s h -l help -d 'show this help message and exit'
|
complete -c spack -n '__fish_spack_using_command buildcache push' -s h -l help -d 'show this help message and exit'
|
||||||
|
@ -703,9 +703,11 @@ complete -c spack -n '__fish_spack_using_command buildcache push' -l spec-file -
|
||||||
complete -c spack -n '__fish_spack_using_command buildcache push' -l spec-file -r -d 'create buildcache entry for spec from json or yaml file'
|
complete -c spack -n '__fish_spack_using_command buildcache push' -l spec-file -r -d 'create buildcache entry for spec from json or yaml file'
|
||||||
complete -c spack -n '__fish_spack_using_command buildcache push' -l only -r -f -a 'package dependencies'
|
complete -c spack -n '__fish_spack_using_command buildcache push' -l only -r -f -a 'package dependencies'
|
||||||
complete -c spack -n '__fish_spack_using_command buildcache push' -l only -r -d 'select the buildcache mode. The default is to build a cache for the package along with all its dependencies. Alternatively, one can decide to build a cache for only the package or only the dependencies'
|
complete -c spack -n '__fish_spack_using_command buildcache push' -l only -r -d 'select the buildcache mode. The default is to build a cache for the package along with all its dependencies. Alternatively, one can decide to build a cache for only the package or only the dependencies'
|
||||||
|
complete -c spack -n '__fish_spack_using_command buildcache push' -l fail-fast -f -a fail_fast
|
||||||
|
complete -c spack -n '__fish_spack_using_command buildcache push' -l fail-fast -d 'stop pushing on first failure (default is best effort)'
|
||||||
|
|
||||||
# spack buildcache create
|
# spack buildcache create
|
||||||
set -g __fish_spack_optspecs_spack_buildcache_create h/help f/force a/allow-root u/unsigned k/key= update-index spec-file= only=
|
set -g __fish_spack_optspecs_spack_buildcache_create h/help f/force a/allow-root u/unsigned k/key= update-index spec-file= only= fail-fast
|
||||||
complete -c spack -n '__fish_spack_using_command_pos_remainder 1 buildcache create' -f -k -a '(__fish_spack_specs)'
|
complete -c spack -n '__fish_spack_using_command_pos_remainder 1 buildcache create' -f -k -a '(__fish_spack_specs)'
|
||||||
complete -c spack -n '__fish_spack_using_command buildcache create' -s h -l help -f -a help
|
complete -c spack -n '__fish_spack_using_command buildcache create' -s h -l help -f -a help
|
||||||
complete -c spack -n '__fish_spack_using_command buildcache create' -s h -l help -d 'show this help message and exit'
|
complete -c spack -n '__fish_spack_using_command buildcache create' -s h -l help -d 'show this help message and exit'
|
||||||
|
@ -723,6 +725,8 @@ complete -c spack -n '__fish_spack_using_command buildcache create' -l spec-file
|
||||||
complete -c spack -n '__fish_spack_using_command buildcache create' -l spec-file -r -d 'create buildcache entry for spec from json or yaml file'
|
complete -c spack -n '__fish_spack_using_command buildcache create' -l spec-file -r -d 'create buildcache entry for spec from json or yaml file'
|
||||||
complete -c spack -n '__fish_spack_using_command buildcache create' -l only -r -f -a 'package dependencies'
|
complete -c spack -n '__fish_spack_using_command buildcache create' -l only -r -f -a 'package dependencies'
|
||||||
complete -c spack -n '__fish_spack_using_command buildcache create' -l only -r -d 'select the buildcache mode. The default is to build a cache for the package along with all its dependencies. Alternatively, one can decide to build a cache for only the package or only the dependencies'
|
complete -c spack -n '__fish_spack_using_command buildcache create' -l only -r -d 'select the buildcache mode. The default is to build a cache for the package along with all its dependencies. Alternatively, one can decide to build a cache for only the package or only the dependencies'
|
||||||
|
complete -c spack -n '__fish_spack_using_command buildcache create' -l fail-fast -f -a fail_fast
|
||||||
|
complete -c spack -n '__fish_spack_using_command buildcache create' -l fail-fast -d 'stop pushing on first failure (default is best effort)'
|
||||||
|
|
||||||
# spack buildcache install
|
# spack buildcache install
|
||||||
set -g __fish_spack_optspecs_spack_buildcache_install h/help f/force m/multiple u/unsigned o/otherarch
|
set -g __fish_spack_optspecs_spack_buildcache_install h/help f/force m/multiple u/unsigned o/otherarch
|
||||||
|
|
Loading…
Reference in a new issue