Run config audits in CI, add a new audit to detect wrongly named external specs (#42289)
This commit is contained in:
parent
19df8e45ec
commit
e77128dfa2
@ -244,7 +244,7 @@ def _search_duplicate_specs_in_externals(error_cls):
|
|||||||
+ lines
|
+ lines
|
||||||
+ ["as they might result in non-deterministic hashes"]
|
+ ["as they might result in non-deterministic hashes"]
|
||||||
)
|
)
|
||||||
except TypeError:
|
except (TypeError, AttributeError):
|
||||||
details = []
|
details = []
|
||||||
|
|
||||||
errors.append(error_cls(summary=error_msg, details=details))
|
errors.append(error_cls(summary=error_msg, details=details))
|
||||||
@ -292,12 +292,6 @@ def _avoid_mismatched_variants(error_cls):
|
|||||||
errors = []
|
errors = []
|
||||||
packages_yaml = spack.config.CONFIG.get_config("packages")
|
packages_yaml = spack.config.CONFIG.get_config("packages")
|
||||||
|
|
||||||
def make_error(config_data, summary):
|
|
||||||
s = io.StringIO()
|
|
||||||
s.write("Occurring in the following file:\n")
|
|
||||||
syaml.dump_config(config_data, stream=s, blame=True)
|
|
||||||
return error_cls(summary=summary, details=[s.getvalue()])
|
|
||||||
|
|
||||||
for pkg_name in packages_yaml:
|
for pkg_name in packages_yaml:
|
||||||
# 'all:' must be more forgiving, since it is setting defaults for everything
|
# 'all:' must be more forgiving, since it is setting defaults for everything
|
||||||
if pkg_name == "all" or "variants" not in packages_yaml[pkg_name]:
|
if pkg_name == "all" or "variants" not in packages_yaml[pkg_name]:
|
||||||
@ -317,7 +311,7 @@ def make_error(config_data, summary):
|
|||||||
f"Setting a preference for the '{pkg_name}' package to the "
|
f"Setting a preference for the '{pkg_name}' package to the "
|
||||||
f"non-existing variant '{variant.name}'"
|
f"non-existing variant '{variant.name}'"
|
||||||
)
|
)
|
||||||
errors.append(make_error(preferences, summary))
|
errors.append(_make_config_error(preferences, summary, error_cls=error_cls))
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Variant cannot accept this value
|
# Variant cannot accept this value
|
||||||
@ -329,11 +323,41 @@ def make_error(config_data, summary):
|
|||||||
f"Setting the variant '{variant.name}' of the '{pkg_name}' package "
|
f"Setting the variant '{variant.name}' of the '{pkg_name}' package "
|
||||||
f"to the invalid value '{str(variant)}'"
|
f"to the invalid value '{str(variant)}'"
|
||||||
)
|
)
|
||||||
errors.append(make_error(preferences, summary))
|
errors.append(_make_config_error(preferences, summary, error_cls=error_cls))
|
||||||
|
|
||||||
return errors
|
return errors
|
||||||
|
|
||||||
|
|
||||||
|
@config_packages
|
||||||
|
def _wrongly_named_spec(error_cls):
|
||||||
|
"""Warns if the wrong name is used for an external spec"""
|
||||||
|
errors = []
|
||||||
|
packages_yaml = spack.config.CONFIG.get_config("packages")
|
||||||
|
for pkg_name in packages_yaml:
|
||||||
|
if pkg_name == "all":
|
||||||
|
continue
|
||||||
|
|
||||||
|
externals = packages_yaml[pkg_name].get("externals", [])
|
||||||
|
is_virtual = spack.repo.PATH.is_virtual(pkg_name)
|
||||||
|
for entry in externals:
|
||||||
|
spec = spack.spec.Spec(entry["spec"])
|
||||||
|
regular_pkg_is_wrong = not is_virtual and pkg_name != spec.name
|
||||||
|
virtual_pkg_is_wrong = is_virtual and not any(
|
||||||
|
p.name == spec.name for p in spack.repo.PATH.providers_for(pkg_name)
|
||||||
|
)
|
||||||
|
if regular_pkg_is_wrong or virtual_pkg_is_wrong:
|
||||||
|
summary = f"Wrong external spec detected for '{pkg_name}': {spec}"
|
||||||
|
errors.append(_make_config_error(entry, summary, error_cls=error_cls))
|
||||||
|
return errors
|
||||||
|
|
||||||
|
|
||||||
|
def _make_config_error(config_data, summary, error_cls):
|
||||||
|
s = io.StringIO()
|
||||||
|
s.write("Occurring in the following file:\n")
|
||||||
|
syaml.dump_config(config_data, stream=s, blame=True)
|
||||||
|
return error_cls(summary=summary, details=[s.getvalue()])
|
||||||
|
|
||||||
|
|
||||||
#: Sanity checks on package directives
|
#: Sanity checks on package directives
|
||||||
package_directives = AuditClass(
|
package_directives = AuditClass(
|
||||||
group="packages",
|
group="packages",
|
||||||
|
@ -154,6 +154,12 @@ default:
|
|||||||
--config-scope "${SPACK_CI_CONFIG_ROOT}/${SPACK_TARGET_PLATFORM}/${SPACK_TARGET_ARCH}"
|
--config-scope "${SPACK_CI_CONFIG_ROOT}/${SPACK_TARGET_PLATFORM}/${SPACK_TARGET_ARCH}"
|
||||||
${CI_STACK_CONFIG_SCOPES}
|
${CI_STACK_CONFIG_SCOPES}
|
||||||
compiler find
|
compiler find
|
||||||
|
- spack
|
||||||
|
--config-scope "${SPACK_CI_CONFIG_ROOT}"
|
||||||
|
--config-scope "${SPACK_CI_CONFIG_ROOT}/${SPACK_TARGET_PLATFORM}"
|
||||||
|
--config-scope "${SPACK_CI_CONFIG_ROOT}/${SPACK_TARGET_PLATFORM}/${SPACK_TARGET_ARCH}"
|
||||||
|
${CI_STACK_CONFIG_SCOPES}
|
||||||
|
audit configs
|
||||||
- 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"
|
||||||
|
@ -21,7 +21,7 @@ spack:
|
|||||||
version:
|
version:
|
||||||
- 1.8.20
|
- 1.8.20
|
||||||
elfutils:
|
elfutils:
|
||||||
variants: +bzip2 ~nls +xz
|
variants: ~nls
|
||||||
hdf5:
|
hdf5:
|
||||||
variants: +fortran +hl +shared
|
variants: +fortran +hl +shared
|
||||||
libfabric:
|
libfabric:
|
||||||
|
@ -21,7 +21,7 @@ spack:
|
|||||||
version:
|
version:
|
||||||
- 1.8.20
|
- 1.8.20
|
||||||
elfutils:
|
elfutils:
|
||||||
variants: +bzip2 ~nls +xz
|
variants: ~nls
|
||||||
hdf5:
|
hdf5:
|
||||||
variants: +fortran +hl +shared
|
variants: +fortran +hl +shared
|
||||||
libfabric:
|
libfabric:
|
||||||
|
@ -31,7 +31,7 @@ spack:
|
|||||||
cuda:
|
cuda:
|
||||||
version: [11.7.0]
|
version: [11.7.0]
|
||||||
elfutils:
|
elfutils:
|
||||||
variants: +bzip2 ~nls +xz
|
variants: ~nls
|
||||||
require: "%gcc"
|
require: "%gcc"
|
||||||
gcc-runtime:
|
gcc-runtime:
|
||||||
require: "%gcc"
|
require: "%gcc"
|
||||||
|
@ -29,7 +29,7 @@ spack:
|
|||||||
cuda:
|
cuda:
|
||||||
version: [11.7.0]
|
version: [11.7.0]
|
||||||
elfutils:
|
elfutils:
|
||||||
variants: +bzip2 ~nls +xz
|
variants: ~nls
|
||||||
require: "%gcc"
|
require: "%gcc"
|
||||||
hdf5:
|
hdf5:
|
||||||
variants: +fortran +hl +shared
|
variants: +fortran +hl +shared
|
||||||
|
@ -15,7 +15,7 @@ spack:
|
|||||||
binutils:
|
binutils:
|
||||||
variants: +ld +gold +headers +libiberty ~nls
|
variants: +ld +gold +headers +libiberty ~nls
|
||||||
elfutils:
|
elfutils:
|
||||||
variants: +bzip2 ~nls +xz
|
variants: ~nls
|
||||||
hdf5:
|
hdf5:
|
||||||
variants: +fortran +hl +shared
|
variants: +fortran +hl +shared
|
||||||
libfabric:
|
libfabric:
|
||||||
|
@ -15,7 +15,7 @@ spack:
|
|||||||
binutils:
|
binutils:
|
||||||
variants: +ld +gold +headers +libiberty ~nls
|
variants: +ld +gold +headers +libiberty ~nls
|
||||||
elfutils:
|
elfutils:
|
||||||
variants: +bzip2 ~nls +xz
|
variants: ~nls
|
||||||
hdf5:
|
hdf5:
|
||||||
variants: +fortran +hl +shared
|
variants: +fortran +hl +shared
|
||||||
libfabric:
|
libfabric:
|
||||||
|
@ -17,7 +17,7 @@ spack:
|
|||||||
tbb: [intel-tbb]
|
tbb: [intel-tbb]
|
||||||
variants: +mpi
|
variants: +mpi
|
||||||
elfutils:
|
elfutils:
|
||||||
variants: +bzip2 ~nls +xz
|
variants: ~nls
|
||||||
gcc-runtime:
|
gcc-runtime:
|
||||||
require: "%gcc"
|
require: "%gcc"
|
||||||
hdf5:
|
hdf5:
|
||||||
|
@ -16,7 +16,7 @@ spack:
|
|||||||
binutils:
|
binutils:
|
||||||
variants: +ld +gold +headers +libiberty ~nls
|
variants: +ld +gold +headers +libiberty ~nls
|
||||||
elfutils:
|
elfutils:
|
||||||
variants: +bzip2 ~nls +xz
|
variants: ~nls
|
||||||
hdf5:
|
hdf5:
|
||||||
variants: +fortran +hl +shared
|
variants: +fortran +hl +shared
|
||||||
libfabric:
|
libfabric:
|
||||||
|
@ -15,7 +15,7 @@ spack:
|
|||||||
binutils:
|
binutils:
|
||||||
variants: +ld +gold +headers +libiberty ~nls
|
variants: +ld +gold +headers +libiberty ~nls
|
||||||
elfutils:
|
elfutils:
|
||||||
variants: +bzip2 ~nls +xz
|
variants: ~nls
|
||||||
hdf5:
|
hdf5:
|
||||||
variants: +fortran +hl +shared
|
variants: +fortran +hl +shared
|
||||||
libfabric:
|
libfabric:
|
||||||
@ -91,7 +91,7 @@ spack:
|
|||||||
miopen-hip:
|
miopen-hip:
|
||||||
buildable: false
|
buildable: false
|
||||||
externals:
|
externals:
|
||||||
- spec: hip-rocclr@5.4.3
|
- spec: miopen-hip@5.4.3
|
||||||
prefix: /opt/rocm-5.4.3/
|
prefix: /opt/rocm-5.4.3/
|
||||||
miopengemm:
|
miopengemm:
|
||||||
buildable: false
|
buildable: false
|
||||||
|
@ -15,7 +15,7 @@ spack:
|
|||||||
binutils:
|
binutils:
|
||||||
variants: +ld +gold +headers +libiberty ~nls
|
variants: +ld +gold +headers +libiberty ~nls
|
||||||
elfutils:
|
elfutils:
|
||||||
variants: +bzip2 ~nls +xz
|
variants: ~nls
|
||||||
hdf5:
|
hdf5:
|
||||||
variants: +fortran +hl +shared
|
variants: +fortran +hl +shared
|
||||||
libfabric:
|
libfabric:
|
||||||
|
Loading…
Reference in New Issue
Block a user