Skip to content
Snippets Groups Projects

Toolchain becomes package set part2

Merged Hans Fangohr requested to merge toolchain_becomes_package_set_part2 into main
2 files
+ 18
18
Compare changes
  • Side-by-side
  • Inline
Files
2
+ 16
16
@@ -354,8 +354,8 @@ def set_up_logging(loglevel="warning", file_path=None):
)
def get_available_toolchains(mpsd_release: str) -> List[str]:
"""Given a release, return the available toolchains.
def get_available_package_sets(mpsd_release: str) -> List[str]:
"""Given a release, return the available package_sets.
This is based on the spack-environment's repository [1]. For this function
to succeed, we need to have Internet access etc.
@@ -367,11 +367,11 @@ def get_available_toolchains(mpsd_release: str) -> List[str]:
Returns
-------
toolchains : List[str]
package_sets : List[str]
Example
-------
>>> get_available_toolchains('dev-23a')
>>> get_available_package_sets('dev-23a')
['foss2021a-cuda-mpi',
'foss2021a-mpi',
'foss2021a-serial',
@@ -382,36 +382,36 @@ def get_available_toolchains(mpsd_release: str) -> List[str]:
'global_generic']
"""
logging.debug(f"get_available_toolchains({mpsd_release=})")
logging.info(f"Retrieving available toolchains for release {mpsd_release}")
logging.debug(f"get_available_package_sets({mpsd_release=})")
logging.info(f"Retrieving available package_sets for release {mpsd_release}")
print_log = logging.getLogger("print")
# create temporary directory
tmp_dir = tempfile.TemporaryDirectory(prefix="mpsd-software-available-")
tmp_dir_path = Path(tmp_dir.name)
# find toolchains by cloning repository and checking out right branch
# find package_sets by cloning repository and checking out right branch
clone_repo(
tmp_dir_path, config_vars["spack_environments_repo"], branch=mpsd_release
)
# look for directories defining the toolchains
# look for directories defining the package_sets
toolchains = os.listdir(tmp_dir_path / "toolchains")
msg = f"Found toolchains {sorted(toolchains)}"
package_sets = os.listdir(tmp_dir_path / "toolchains")
msg = f"Found package_sets {sorted(package_sets)}"
logging.debug(msg)
# the 'toolchains' split into toolchains (such as foss2022a-mpi) and sets
# the 'package_sets' split into toolchains (such as foss2022a-mpi) and sets
# of packages. Here we split them into the two categories for a more useful
# output:
toolchain_list = [
x.parents[0].name
for x in list((tmp_dir_path / "toolchains").glob("*/spack.yaml"))
]
package_sets = [
package_set_list = [
x.parents[0].name for x in list((tmp_dir_path / "toolchains").glob("*/*.list"))
]
logging.debug(f"{toolchain_list=}")
logging.debug(f"{package_sets=}")
logging.debug(f"{package_set_list=}")
# summarise toolchains found for use, and show packages provided for each
# package_set:
@@ -420,7 +420,7 @@ def get_available_toolchains(mpsd_release: str) -> List[str]:
)
print_log.info("Toolchains: \n " + "\n ".join(sorted(toolchain_list)))
print_log.info("Package sets:")
for package_set in package_sets:
for package_set in package_set_list:
# get a list of all packages which
# starts from the first line of the file
# that have the regex pattern \w+@\w+
@@ -436,7 +436,7 @@ def get_available_toolchains(mpsd_release: str) -> List[str]:
# remove temporary directory
tmp_dir.cleanup()
return toolchains
return package_sets
# Helper class to change directory via context manager
@@ -1179,7 +1179,7 @@ def main():
elif args.action == "prepare":
prepare_environment(args.release, root_dir)
elif args.action == "available":
get_available_toolchains(args.release)
get_available_package_sets(args.release)
else:
message = (
f"No known action found ({args.action=}). Should probably never happen."
Loading