ci: print colored specs in concretization progress (#40711)

This commit is contained in:
Harmen Stoppels 2023-10-30 15:29:27 +01:00 committed by GitHub
parent 060a1ff2f3
commit b1b8500eba
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 33 additions and 32 deletions

View file

@ -25,6 +25,7 @@
import llnl.util.filesystem as fs import llnl.util.filesystem as fs
import llnl.util.tty as tty import llnl.util.tty as tty
from llnl.util.lang import memoized from llnl.util.lang import memoized
from llnl.util.tty.color import cescape, colorize
import spack import spack
import spack.binary_distribution as bindist import spack.binary_distribution as bindist
@ -97,15 +98,6 @@ def _remove_reserved_tags(tags):
return [tag for tag in tags if tag not in SPACK_RESERVED_TAGS] return [tag for tag in tags if tag not in SPACK_RESERVED_TAGS]
def _get_spec_string(spec):
format_elements = ["{name}{@version}", "{%compiler}"]
if spec.architecture:
format_elements.append(" {arch=architecture}")
return spec.format("".join(format_elements))
def _spec_deps_key(s): def _spec_deps_key(s):
return "{0}/{1}".format(s.name, s.dag_hash(7)) return "{0}/{1}".format(s.name, s.dag_hash(7))
@ -210,22 +202,22 @@ def _print_staging_summary(spec_labels, stages, mirrors_to_check, rebuild_decisi
tty.msg("Staging summary ([x] means a job needs rebuilding):") tty.msg("Staging summary ([x] means a job needs rebuilding):")
for stage_index, stage in enumerate(stages): for stage_index, stage in enumerate(stages):
tty.msg(" stage {0} ({1} jobs):".format(stage_index, len(stage))) tty.msg(f" stage {stage_index} ({len(stage)} jobs):")
for job in sorted(stage): for job in sorted(stage, key=lambda j: (not rebuild_decisions[j].rebuild, j)):
s = spec_labels[job] s = spec_labels[job]
rebuild = rebuild_decisions[job].rebuild
reason = rebuild_decisions[job].reason reason = rebuild_decisions[job].reason
reason_msg = " ({0})".format(reason) if reason else "" reason_msg = f" ({reason})" if reason else ""
tty.msg( spec_fmt = "{name}{@version}{%compiler}{/hash:7}"
" [{1}] {0} -> {2}{3}".format( if rebuild_decisions[job].rebuild:
job, "x" if rebuild else " ", _get_spec_string(s), reason_msg status = colorize("@*g{[x]} ")
) msg = f" {status}{s.cformat(spec_fmt)}{reason_msg}"
) else:
if rebuild_decisions[job].mirrors: msg = f"{s.format(spec_fmt)}{reason_msg}"
tty.msg(" found on the following mirrors:") if rebuild_decisions[job].mirrors:
for murl in rebuild_decisions[job].mirrors: msg += f" [{', '.join(rebuild_decisions[job].mirrors)}]"
tty.msg(" {0}".format(murl)) msg = colorize(f" @K - {cescape(msg)}@.")
tty.msg(msg)
def _compute_spec_deps(spec_list): def _compute_spec_deps(spec_list):
@ -2258,13 +2250,13 @@ def build_name(self):
spec.architecture, spec.architecture,
self.build_group, self.build_group,
) )
tty.verbose( tty.debug(
"Generated CDash build name ({0}) from the {1}".format(build_name, spec.name) "Generated CDash build name ({0}) from the {1}".format(build_name, spec.name)
) )
return build_name return build_name
build_name = os.environ.get("SPACK_CDASH_BUILD_NAME") build_name = os.environ.get("SPACK_CDASH_BUILD_NAME")
tty.verbose("Using CDash build name ({0}) from the environment".format(build_name)) tty.debug("Using CDash build name ({0}) from the environment".format(build_name))
return build_name return build_name
@property # type: ignore @property # type: ignore
@ -2278,11 +2270,11 @@ def build_stamp(self):
Returns: (str) current CDash build stamp""" Returns: (str) current CDash build stamp"""
build_stamp = os.environ.get("SPACK_CDASH_BUILD_STAMP") build_stamp = os.environ.get("SPACK_CDASH_BUILD_STAMP")
if build_stamp: if build_stamp:
tty.verbose("Using build stamp ({0}) from the environment".format(build_stamp)) tty.debug("Using build stamp ({0}) from the environment".format(build_stamp))
return build_stamp return build_stamp
build_stamp = cdash_build_stamp(self.build_group, time.time()) build_stamp = cdash_build_stamp(self.build_group, time.time())
tty.verbose("Generated new build stamp ({0})".format(build_stamp)) tty.debug("Generated new build stamp ({0})".format(build_stamp))
return build_stamp return build_stamp
@property # type: ignore @property # type: ignore

View file

@ -1525,7 +1525,10 @@ def _concretize_separately(self, tests=False):
): ):
batch.append((i, concrete)) batch.append((i, concrete))
percentage = (j + 1) / len(args) * 100 percentage = (j + 1) / len(args) * 100
tty.verbose(f"{duration:6.1f}s [{percentage:3.0f}%] {root_specs[i]}") tty.verbose(
f"{duration:6.1f}s [{percentage:3.0f}%] {concrete.cformat('{hash:7}')} "
f"{root_specs[i].colored_str}"
)
sys.stdout.flush() sys.stdout.flush()
# Add specs in original order # Add specs in original order

View file

@ -4491,10 +4491,16 @@ def format_path(
def __str__(self): def __str__(self):
sorted_nodes = [self] + sorted( sorted_nodes = [self] + sorted(
self.traverse(root=False), key=lambda x: x.name or x.abstract_hash self.traverse(root=False), key=lambda x: (x.name, x.abstract_hash)
) )
spec_str = " ^".join(d.format() for d in sorted_nodes) return " ^".join(d.format() for d in sorted_nodes).strip()
return spec_str.strip()
@property
def colored_str(self):
sorted_nodes = [self] + sorted(
self.traverse(root=False), key=lambda x: (x.name, x.abstract_hash)
)
return " ^".join(d.cformat() for d in sorted_nodes).strip()
def install_status(self): def install_status(self):
"""Helper for tree to print DB install status.""" """Helper for tree to print DB install status."""

View file

@ -150,7 +150,7 @@ default:
- spack python -c "import os,sys; print(os.path.expandvars(sys.stdin.read()))" - spack python -c "import os,sys; print(os.path.expandvars(sys.stdin.read()))"
< "${SPACK_CI_CONFIG_ROOT}/${PIPELINE_MIRROR_TEMPLATE}" > "${SPACK_CI_CONFIG_ROOT}/mirrors.yaml" < "${SPACK_CI_CONFIG_ROOT}/${PIPELINE_MIRROR_TEMPLATE}" > "${SPACK_CI_CONFIG_ROOT}/mirrors.yaml"
- spack config add -f "${SPACK_CI_CONFIG_ROOT}/mirrors.yaml" - spack config add -f "${SPACK_CI_CONFIG_ROOT}/mirrors.yaml"
- spack -v - spack -v --color=always
--config-scope "${SPACK_CI_CONFIG_ROOT}" --config-scope "${SPACK_CI_CONFIG_ROOT}"
--config-scope "${SPACK_CI_CONFIG_ROOT}/${SPACK_TARGET_PLATFORM}" --config-scope "${SPACK_CI_CONFIG_ROOT}/${SPACK_TARGET_PLATFORM}"
--config-scope "${SPACK_CI_CONFIG_ROOT}/${SPACK_TARGET_PLATFORM}/${SPACK_TARGET_ARCH}" --config-scope "${SPACK_CI_CONFIG_ROOT}/${SPACK_TARGET_PLATFORM}/${SPACK_TARGET_ARCH}"
@ -203,7 +203,7 @@ default:
- spack --version - spack --version
- cd share/spack/gitlab/cloud_pipelines/stacks/${SPACK_CI_STACK_NAME} - cd share/spack/gitlab/cloud_pipelines/stacks/${SPACK_CI_STACK_NAME}
- spack env activate --without-view . - spack env activate --without-view .
- spack -v - spack -v --color=always
ci generate --check-index-only ci generate --check-index-only
--buildcache-destination "${PUSH_BUILDCACHE_DEPRECATED}" --buildcache-destination "${PUSH_BUILDCACHE_DEPRECATED}"
--artifacts-root "${CI_PROJECT_DIR}/jobs_scratch_dir" --artifacts-root "${CI_PROJECT_DIR}/jobs_scratch_dir"