From 81761627f2a48e288ecd30e6922031a4792121af Mon Sep 17 00:00:00 2001 From: adrianciu <adrian.ciu@codemart.ro> Date: Tue, 15 Apr 2025 17:31:25 +0300 Subject: [PATCH] VT-109: facade design pattern for SpackOperation --- dedal/docs/resources/dedal_UML_facade.png | Bin 0 -> 136087 bytes dedal/error_handling/exceptions.py | 5 + dedal/spack_factory/SpackCacheOperation.py | 174 +++++++++ dedal/spack_factory/SpackEnvOperation.py | 189 ++++++++++ dedal/spack_factory/SpackOperation.py | 420 ++++----------------- dedal/spack_factory/SpackToolOperation.py | 107 ++++++ 6 files changed, 547 insertions(+), 348 deletions(-) create mode 100644 dedal/docs/resources/dedal_UML_facade.png create mode 100644 dedal/spack_factory/SpackCacheOperation.py create mode 100644 dedal/spack_factory/SpackEnvOperation.py create mode 100644 dedal/spack_factory/SpackToolOperation.py diff --git a/dedal/docs/resources/dedal_UML_facade.png b/dedal/docs/resources/dedal_UML_facade.png new file mode 100644 index 0000000000000000000000000000000000000000..d16e40ba7b2cee0c2ad78cae626d28bcdc704010 GIT binary patch literal 136087 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�^M^d1JnF>avR3Y^!Nr(rxUkxnoGy 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 literal 0 HcmV?d00001 diff --git a/dedal/error_handling/exceptions.py b/dedal/error_handling/exceptions.py index 76844ac6..d0a383dd 100644 --- a/dedal/error_handling/exceptions.py +++ b/dedal/error_handling/exceptions.py @@ -87,4 +87,9 @@ class SpackConfigException(BashCommandException): class SpackFindException(BashCommandException): """ To be thrown when the spack find command fails + """ + +class MissingAttributeException(BashCommandException): + """ + To be thrown when a missing attribute for a class is missing """ \ No newline at end of file diff --git a/dedal/spack_factory/SpackCacheOperation.py b/dedal/spack_factory/SpackCacheOperation.py new file mode 100644 index 00000000..91a69c1e --- /dev/null +++ b/dedal/spack_factory/SpackCacheOperation.py @@ -0,0 +1,174 @@ +# Dedal library - Wrapper over Spack for building multiple target +# environments: ESD, Virtual Boxes, HPC compatible kernels, etc. + +# (c) Copyright 2025 Dedal developers + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import subprocess +from pathlib import Path + +from dedal.utils.utils import run_command, get_first_word + +from dedal.wrapper.spack_wrapper import check_spack_env + +from dedal.error_handling.exceptions import MissingAttributeException, SpackGpgException, SpackMirrorException, \ + SpackReindexException +from dedal.logger.logger_builder import get_logger + +from dedal.configuration.SpackConfig import SpackConfig + + +class SpackCacheOperation: + def __init__(self, spack_config: SpackConfig = SpackConfig(), logger=get_logger(__name__), spack_setup_script=None, + spack_dir=Path('./').resolve(), spack_command_on_env=None): + self.spack_config = spack_config + self.logger = logger + if spack_setup_script and spack_command_on_env: + self.spack_setup_script = spack_setup_script + self.spack_command_on_env = spack_command_on_env + else: + raise MissingAttributeException(f'Missing attribute for class {__name__}') + self.spack_dir = spack_dir + + def add_mirror(self, mirror_name: str, mirror_path: Path, signed=False, autopush=False, global_mirror=False): + """Adds a Spack mirror. + Adds a new mirror to the Spack configuration, either globally or to a specific environment. + Args: + mirror_name (str): The name of the mirror. + mirror_path (str): The path or URL of the mirror. + signed (bool): Whether to require signed packages from the mirror. + autopush (bool): Whether to enable autopush for the mirror. + global_mirror (bool): Whether to add the mirror globally (True) or to the current environment (False). + Raises: + ValueError: If mirror_name or mirror_path are empty. + NoSpackEnvironmentException: If global_mirror is False and no environment is defined. + """ + autopush = '--autopush' if autopush else '' + signed = '--signed' if signed else '' + spack_add_mirror = f'spack mirror add {autopush} {signed} {mirror_name} {mirror_path}' + if global_mirror: + run_command("bash", "-c", + f'{self.spack_setup_script} && {spack_add_mirror}', + check=True, + logger=self.logger, + info_msg=f'Added mirror {mirror_name}', + exception_msg=f'Failed to add mirror {mirror_name}', + exception=SpackMirrorException) + else: + check_spack_env( + run_command("bash", "-c", + f'{self.spack_command_on_env} && {spack_add_mirror}', + check=True, + logger=self.logger, + info_msg=f'Added mirror {mirror_name}', + exception_msg=f'Failed to add mirror {mirror_name}', + exception=SpackMirrorException)) + + def trust_gpg_key(self, public_key_path: str): + """Adds a GPG public key to the trusted keyring. + This method attempts to add the provided GPG public key to the + Spack trusted keyring. + Args: + public_key_path (str): Path to the GPG public key file. + Returns: + bool: True if the key was added successfully, False otherwise. + Raises: + ValueError: If public_key_path is empty. + NoSpackEnvironmentException: If the spack environment is not set up. + """ + if not public_key_path: + raise ValueError("public_key_path is required") + + run_command("bash", "-c", + f'{self.spack_command_on_env} && spack gpg trust {public_key_path}', + check=True, + logger=self.logger, + info_msg=f'Trusted GPG key for {self.spack_config.env.name}', + exception_msg=f'Failed to trust GPG key for {self.spack_config.env.name}', + exception=SpackGpgException) + + def mirror_list(self): + """Returns of available mirrors. When an environment is activated it will return the mirrors associated with it, + otherwise the mirrors set globally""" + mirrors = run_command("bash", "-c", + f'{self.spack_command_on_env} && spack mirror list', + check=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True, + logger=self.logger, + info_msg=f'Listing mirrors', + exception_msg=f'Failed list mirrors', + exception=SpackMirrorException).stdout + return list(map(get_first_word, list(mirrors.strip().splitlines()))) + + def remove_mirror(self, mirror_name: str): + """Removes a mirror from an environment (if it is activated), otherwise removes the mirror globally.""" + if not mirror_name: + raise ValueError("mirror_name is required") + run_command("bash", "-c", + f'{self.spack_command_on_env} && spack mirror rm {mirror_name}', + check=True, + logger=self.logger, + info_msg=f'Removing mirror {mirror_name}', + exception_msg=f'Failed to remove mirror {mirror_name}', + exception=SpackMirrorException) + + def update_buildcache_index(self, mirror_path: str): + """Updates buildcache index""" + if not mirror_path: + raise ValueError("mirror_path is required") + run_command("bash", "-c", + f'{self.spack_command_on_env} && spack buildcache update-index {mirror_path}', + check=True, + logger=self.logger, + info_msg=f'Updating build cache index for mirror {mirror_path}', + exception_msg=f'Failed to update build cache index for mirror {mirror_path}', + exception=SpackMirrorException) + + def install_gpg_keys(self): + """Install gpg keys""" + run_command("bash", "-c", + f'{self.spack_command_on_env} && spack buildcache keys --install --trust', + check=True, + logger=self.logger, + info_msg=f'Installing gpg keys from mirror', + exception_msg=f'Failed to install gpg keys from mirror', + exception=SpackGpgException) + + def create_gpg_keys(self): + """Creates GPG keys (which can be used when creating binary cashes) and adds it to the trusted keyring.""" + if self.spack_config.gpg: + run_command("bash", "-c", + f'{self.spack_setup_script} && spack gpg init && spack gpg create {self.spack_config.gpg.name} {self.spack_config.gpg.mail}', + check=True, + logger=self.logger, + info_msg=f'Created pgp keys for {self.spack_config.env.name}', + exception_msg=f'Failed to create pgp keys mirror {self.spack_config.env.name}', + exception=SpackGpgException) + else: + raise SpackGpgException('No GPG configuration was defined is spack configuration') + + def reindex(self): + """Reindex step for a spack environment + Raises: + SpackReindexException: If the spack reindex command fails. + """ + run_command("bash", "-c", + f'{self.spack_command_on_env} && spack reindex', + check=True, + logger=self.logger, + info_msg=f'Reindex step.', + exception_msg=f'Failed the reindex.', + exception=SpackReindexException) diff --git a/dedal/spack_factory/SpackEnvOperation.py b/dedal/spack_factory/SpackEnvOperation.py new file mode 100644 index 00000000..01955aff --- /dev/null +++ b/dedal/spack_factory/SpackEnvOperation.py @@ -0,0 +1,189 @@ +# Dedal library - Wrapper over Spack for building multiple target +# environments: ESD, Virtual Boxes, HPC compatible kernels, etc. + +# (c) Copyright 2025 Dedal developers + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import re +import os +import subprocess +from pathlib import Path +from dedal.enum.SpackConfigCommand import SpackConfigCommand +from dedal.wrapper.spack_wrapper import check_spack_env +from dedal.error_handling.exceptions import BashCommandException, MissingAttributeException, \ + NoSpackEnvironmentException, SpackRepoException, SpackConfigException, SpackFindException, SpackSpecException +from dedal.utils.utils import git_clone_repo, run_command +from dedal.logger.logger_builder import get_logger +from dedal.configuration.SpackConfig import SpackConfig + + +class SpackEnvOperation: + def __init__(self, spack_config: SpackConfig = SpackConfig(), logger=get_logger(__name__), spack_setup_script=None, + env_path=None, spack_command_on_env=None): + self.spack_config = spack_config + self.logger = logger + self.env_path = env_path + if spack_setup_script and spack_command_on_env: + self.spack_setup_script = spack_setup_script + self.spack_command_on_env = spack_command_on_env + else: + raise MissingAttributeException(f'Missing attribute for class {__name__}') + + def create_fetch_spack_environment(self): + """Fetches a spack environment if the git path is defined, otherwise creates it.""" + if self.spack_config.env and self.spack_config.env.git_path: + git_clone_repo(self.spack_config.env.name, self.spack_config.env.path / self.spack_config.env.name, + self.spack_config.env.git_path, + logger=self.logger) + else: + os.makedirs(self.spack_config.env.path / self.spack_config.env.name, exist_ok=True) + if self.env_path: + run_command("bash", "-c", + f'{self.spack_setup_script} && spack env create -d {self.env_path}', + check=True, logger=self.logger, + info_msg=f"Created {self.spack_config.env.name} spack environment", + exception_msg=f"Failed to create {self.spack_config.env.name} spack environment", + exception=BashCommandException) + else: + raise MissingAttributeException(f'Missing env_path attribute class {__name__}') + + def spack_repo_exists(self, repo_name: str) -> bool | None: + """Check if the given Spack repository exists. + Returns: + True if spack repository exists, False otherwise. + """ + if self.spack_config.env is None: + result = run_command("bash", "-c", + f'{self.spack_setup_script} && spack repo list', + check=True, + capture_output=True, text=True, logger=self.logger, + info_msg=f'Checking if {repo_name} exists') + if result is None: + return False + else: + if self.spack_env_exists(): + result = run_command("bash", "-c", + f'{self.spack_command_on_env} && spack repo list', + check=True, + capture_output=True, text=True, logger=self.logger, + info_msg=f'Checking if repository {repo_name} was added').stdout + else: + self.logger.debug('No spack environment defined') + raise NoSpackEnvironmentException('No spack environment defined') + if result is None: + return False + return any(line.strip().endswith(repo_name) for line in result.splitlines()) + + def spack_env_exists(self): + """Checks if a spack environments exists. + Returns: + True if spack environments exists, False otherwise. + """ + result = run_command("bash", "-c", + self.spack_command_on_env, + check=True, + capture_output=True, text=True, logger=self.logger, + info_msg=f'Checking if environment {self.spack_config.env.name} exists') + return result is not None + + def add_spack_repo(self, repo_path: Path, repo_name: str): + """Add the Spack repository if it does not exist.""" + run_command("bash", "-c", + f'{self.spack_command_on_env} && spack repo add {repo_path}/{repo_name}', + check=True, logger=self.logger, + info_msg=f"Added {repo_name} to spack environment {self.spack_config.env.name}", + exception_msg=f"Failed to add {repo_name} to spack environment {self.spack_config.env.name}", + exception=SpackRepoException) + + def get_compiler_version(self): + """Returns the compiler version + Raises: + NoSpackEnvironmentException: If the spack environment is not set up. + """ + result = run_command("bash", "-c", + f'{self.spack_command_on_env} && spack compiler list', + check=True, logger=self.logger, + capture_output=True, text=True, + info_msg=f"Checking spack environment compiler version for {self.spack_config.env.name}", + exception_msg=f"Failed to checking spack environment compiler version for {self.spack_config.env.name}", + exception=BashCommandException) + + if result.stdout is None: + self.logger.debug(f'No gcc found for {self.spack_config.env.name}') + return None + + # Find the first occurrence of a GCC compiler using regex + match = re.search(r"gcc@([\d\.]+)", result.stdout) + gcc_version = match.group(1) + self.logger.debug(f'Found gcc for {self.spack_config.env.name}: {gcc_version}') + return gcc_version + + def config(self, config_type: SpackConfigCommand, config_parameter): + run_command("bash", "-c", + f'{self.spack_command_on_env} && spack config {config_type.value} \"{config_parameter}\"', + check=True, + logger=self.logger, + info_msg='Spack config command', + exception_msg='Spack config command failed', + exception=SpackConfigException) + + def find_packages(self): + """Returns a dictionary of installed Spack packages in the current environment. + Each key is the name of a Spack package, and the corresponding value is a list of + installed versions for that package. + Raises: + NoSpackEnvironmentException: If the spack environment is not set up. + """ + packages = run_command("bash", "-c", + f'{self.spack_command_on_env} && spack find -c', + check=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True, + logger=self.logger, + info_msg=f'Listing installed packages.', + exception_msg=f'Failed to list installed packages', + exception=SpackFindException).stdout + dict_packages = {} + for package in packages.strip().splitlines(): + if package.startswith('[+]'): + package = package.replace('@', ' ').split() + if len(package) == 3: + _, name, version = package + dict_packages.setdefault(name, []).append(version) + return dict_packages + + def spec_pacakge(self, package_name: str): + """Reindex step for a spack environment + Raises: + SpackSpecException: If the spack spec command fails. + """ + try: + spec_output = run_command("bash", "-c", + f'{self.spack_command_on_env} && spack spec {package_name}', + check=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True, + logger=self.logger, + info_msg=f'Spack spec {package_name}.', + exception_msg=f'Failed to spack spec {package_name}.', + exception=SpackSpecException).stdout + pattern = r'^\s*-\s*([\w.-]+@[\d.]+)' + match = re.search(pattern, spec_output) + if match: + return match.group(1) + return None + except SpackSpecException: + return None diff --git a/dedal/spack_factory/SpackOperation.py b/dedal/spack_factory/SpackOperation.py index 52d1a200..3b3645bb 100644 --- a/dedal/spack_factory/SpackOperation.py +++ b/dedal/spack_factory/SpackOperation.py @@ -16,19 +16,19 @@ # limitations under the License. import os -import re import subprocess from pathlib import Path from dedal.configuration.SpackConfig import SpackConfig from dedal.enum.SpackConfigCommand import SpackConfigCommand -from dedal.error_handling.exceptions import BashCommandException, NoSpackEnvironmentException, \ - SpackInstallPackagesException, SpackConcertizeException, SpackMirrorException, SpackGpgException, \ - SpackRepoException, SpackReindexException, SpackSpecException, SpackConfigException, SpackFindException +from dedal.error_handling.exceptions import SpackInstallPackagesException, SpackConcertizeException, SpackGpgException, \ + SpackReindexException from dedal.logger.logger_builder import get_logger +from dedal.spack_factory.SpackCacheOperation import SpackCacheOperation +from dedal.spack_factory.SpackEnvOperation import SpackEnvOperation +from dedal.spack_factory.SpackToolOperation import SpackToolOperation from dedal.tests.testing_variables import SPACK_VERSION -from dedal.utils.utils import run_command, git_clone_repo, log_command, set_bashrc_variable, get_first_word +from dedal.utils.utils import run_command, git_clone_repo, log_command, set_bashrc_variable from dedal.wrapper.spack_wrapper import check_spack_env -import glob class SpackOperation: @@ -47,12 +47,12 @@ class SpackOperation: def __init__(self, spack_config: SpackConfig = SpackConfig(), logger=get_logger(__name__)): self.spack_config = spack_config + self.logger = logger self.spack_config.install_dir = spack_config.install_dir os.makedirs(self.spack_config.install_dir, exist_ok=True) self.spack_dir = self.spack_config.install_dir / 'spack' - + self.env_path = None self.spack_setup_script = "" if self.spack_config.use_spack_global else f"source {self.spack_dir / 'share' / 'spack' / 'setup-env.sh'}" - self.logger = logger self.spack_config.concretization_dir = spack_config.concretization_dir if self.spack_config.concretization_dir: os.makedirs(self.spack_config.concretization_dir, exist_ok=True) @@ -69,21 +69,17 @@ class SpackOperation: self.spack_command_on_env = self.spack_setup_script if self.spack_config.env and spack_config.env.path: self.spack_config.env.path.mkdir(parents=True, exist_ok=True) - - def create_fetch_spack_environment(self): - """Fetches a spack environment if the git path is defined, otherwise creates it.""" - if self.spack_config.env and self.spack_config.env.git_path: - git_clone_repo(self.spack_config.env.name, self.spack_config.env.path / self.spack_config.env.name, - self.spack_config.env.git_path, - logger=self.logger) - else: - os.makedirs(self.spack_config.env.path / self.spack_config.env.name, exist_ok=True) - run_command("bash", "-c", - f'{self.spack_setup_script} && spack env create -d {self.env_path}', - check=True, logger=self.logger, - info_msg=f"Created {self.spack_config.env.name} spack environment", - exception_msg=f"Failed to create {self.spack_config.env.name} spack environment", - exception=BashCommandException) + self.spack_tool_operation = SpackToolOperation(spack_config=spack_config, + spack_setup_script=self.spack_setup_script, + spack_dir=self.spack_dir) + self.spack_env_operation = SpackEnvOperation(spack_config=spack_config, + spack_setup_script=self.spack_setup_script, + env_path=self.env_path, + spack_command_on_env=self.spack_command_on_env) + self.spack_cache_operation = SpackCacheOperation(spack_config=spack_config, + spack_setup_script=self.spack_setup_script, + spack_command_on_env=self.spack_command_on_env, + spack_dir=self.spack_dir) def setup_spack_env(self): """ @@ -103,7 +99,7 @@ class SpackOperation: self.logger.error(f'Invalid installation path: {self.spack_dir}') # Restart the bash after adding environment variables if self.spack_config.env: - self.create_fetch_spack_environment() + self.spack_env_operation.create_fetch_spack_environment() if self.spack_config.install_dir.exists(): for repo in self.spack_config.repos: repo_dir = self.spack_config.install_dir / repo.path / repo.name @@ -114,89 +110,6 @@ class SpackOperation: else: self.logger.debug(f'Spack repository {repo.name} already added') - def spack_repo_exists(self, repo_name: str) -> bool | None: - """Check if the given Spack repository exists. - Returns: - True if spack repository exists, False otherwise. - """ - if self.spack_config.env is None: - result = run_command("bash", "-c", - f'{self.spack_setup_script} && spack repo list', - check=True, - capture_output=True, text=True, logger=self.logger, - info_msg=f'Checking if {repo_name} exists') - if result is None: - return False - else: - if self.spack_env_exists(): - result = run_command("bash", "-c", - f'{self.spack_command_on_env} && spack repo list', - check=True, - capture_output=True, text=True, logger=self.logger, - info_msg=f'Checking if repository {repo_name} was added').stdout - else: - self.logger.debug('No spack environment defined') - raise NoSpackEnvironmentException('No spack environment defined') - if result is None: - return False - return any(line.strip().endswith(repo_name) for line in result.splitlines()) - - def spack_env_exists(self): - """Checks if a spack environments exists. - Returns: - True if spack environments exists, False otherwise. - """ - result = run_command("bash", "-c", - self.spack_command_on_env, - check=True, - capture_output=True, text=True, logger=self.logger, - info_msg=f'Checking if environment {self.spack_config.env.name} exists') - return result is not None - - def add_spack_repo(self, repo_path: Path, repo_name: str): - """Add the Spack repository if it does not exist.""" - run_command("bash", "-c", - f'{self.spack_command_on_env} && spack repo add {repo_path}/{repo_name}', - check=True, logger=self.logger, - info_msg=f"Added {repo_name} to spack environment {self.spack_config.env.name}", - exception_msg=f"Failed to add {repo_name} to spack environment {self.spack_config.env.name}", - exception=SpackRepoException) - - @check_spack_env - def get_compiler_version(self): - """Returns the compiler version - Raises: - NoSpackEnvironmentException: If the spack environment is not set up. - """ - result = run_command("bash", "-c", - f'{self.spack_command_on_env} && spack compiler list', - check=True, logger=self.logger, - capture_output=True, text=True, - info_msg=f"Checking spack environment compiler version for {self.spack_config.env.name}", - exception_msg=f"Failed to checking spack environment compiler version for {self.spack_config.env.name}", - exception=BashCommandException) - - if result.stdout is None: - self.logger.debug(f'No gcc found for {self.spack_config.env.name}') - return None - - # Find the first occurrence of a GCC compiler using regex - match = re.search(r"gcc@([\d\.]+)", result.stdout) - gcc_version = match.group(1) - self.logger.debug(f'Found gcc for {self.spack_config.env.name}: {gcc_version}') - return gcc_version - - def get_spack_installed_version(self): - """Returns the spack installed version""" - spack_version = run_command("bash", "-c", f'{self.spack_setup_script} && spack --version', - capture_output=True, text=True, check=True, - logger=self.logger, - info_msg=f"Getting spack version", - exception_msg=f"Error retrieving Spack version") - if spack_version: - return spack_version.stdout.strip().split()[0] - return None - @check_spack_env def concretize_spack_env(self, force=True, test=None): """Concretization step for a spack environment @@ -216,172 +129,6 @@ class SpackOperation: exception_msg=f'Failed the concertization step for {self.spack_config.env.name}', exception=SpackConcertizeException) - def reindex(self): - """Reindex step for a spack environment - Raises: - SpackReindexException: If the spack reindex command fails. - """ - run_command("bash", "-c", - f'{self.spack_command_on_env} && spack reindex', - check=True, - logger=self.logger, - info_msg=f'Reindex step.', - exception_msg=f'Failed the reindex.', - exception=SpackReindexException) - - def spec_pacakge(self, package_name: str): - """Reindex step for a spack environment - Raises: - SpackSpecException: If the spack spec command fails. - """ - try: - spec_output = run_command("bash", "-c", - f'{self.spack_command_on_env} && spack spec {package_name}', - check=True, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - text=True, - logger=self.logger, - info_msg=f'Spack spec {package_name}.', - exception_msg=f'Failed to spack spec {package_name}.', - exception=SpackSpecException).stdout - pattern = r'^\s*-\s*([\w.-]+@[\d.]+)' - match = re.search(pattern, spec_output) - if match: - return match.group(1) - return None - except SpackSpecException: - return None - - def create_gpg_keys(self): - """Creates GPG keys (which can be used when creating binary cashes) and adds it to the trusted keyring.""" - if self.spack_config.gpg: - run_command("bash", "-c", - f'{self.spack_setup_script} && spack gpg init && spack gpg create {self.spack_config.gpg.name} {self.spack_config.gpg.mail}', - check=True, - logger=self.logger, - info_msg=f'Created pgp keys for {self.spack_config.env.name}', - exception_msg=f'Failed to create pgp keys mirror {self.spack_config.env.name}', - exception=SpackGpgException) - else: - raise SpackGpgException('No GPG configuration was defined is spack configuration') - - def add_mirror(self, mirror_name: str, mirror_path: Path, signed=False, autopush=False, global_mirror=False): - """Adds a Spack mirror. - Adds a new mirror to the Spack configuration, either globally or to a specific environment. - Args: - mirror_name (str): The name of the mirror. - mirror_path (str): The path or URL of the mirror. - signed (bool): Whether to require signed packages from the mirror. - autopush (bool): Whether to enable autopush for the mirror. - global_mirror (bool): Whether to add the mirror globally (True) or to the current environment (False). - Raises: - ValueError: If mirror_name or mirror_path are empty. - NoSpackEnvironmentException: If global_mirror is False and no environment is defined. - """ - autopush = '--autopush' if autopush else '' - signed = '--signed' if signed else '' - spack_add_mirror = f'spack mirror add {autopush} {signed} {mirror_name} {mirror_path}' - if global_mirror: - run_command("bash", "-c", - f'{self.spack_setup_script} && {spack_add_mirror}', - check=True, - logger=self.logger, - info_msg=f'Added mirror {mirror_name}', - exception_msg=f'Failed to add mirror {mirror_name}', - exception=SpackMirrorException) - else: - check_spack_env( - run_command("bash", "-c", - f'{self.spack_command_on_env} && {spack_add_mirror}', - check=True, - logger=self.logger, - info_msg=f'Added mirror {mirror_name}', - exception_msg=f'Failed to add mirror {mirror_name}', - exception=SpackMirrorException)) - - @check_spack_env - def trust_gpg_key(self, public_key_path: str): - """Adds a GPG public key to the trusted keyring. - This method attempts to add the provided GPG public key to the - Spack trusted keyring. - Args: - public_key_path (str): Path to the GPG public key file. - Returns: - bool: True if the key was added successfully, False otherwise. - Raises: - ValueError: If public_key_path is empty. - NoSpackEnvironmentException: If the spack environment is not set up. - """ - if not public_key_path: - raise ValueError("public_key_path is required") - - run_command("bash", "-c", - f'{self.spack_command_on_env} && spack gpg trust {public_key_path}', - check=True, - logger=self.logger, - info_msg=f'Trusted GPG key for {self.spack_config.env.name}', - exception_msg=f'Failed to trust GPG key for {self.spack_config.env.name}', - exception=SpackGpgException) - - def config(self, config_type: SpackConfigCommand, config_parameter): - run_command("bash", "-c", - f'{self.spack_command_on_env} && spack config {config_type.value} \"{config_parameter}\"', - check=True, - logger=self.logger, - info_msg='Spack config command', - exception_msg='Spack config command failed', - exception=SpackConfigException) - - def mirror_list(self): - """Returns of available mirrors. When an environment is activated it will return the mirrors associated with it, - otherwise the mirrors set globally""" - mirrors = run_command("bash", "-c", - f'{self.spack_command_on_env} && spack mirror list', - check=True, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - text=True, - logger=self.logger, - info_msg=f'Listing mirrors', - exception_msg=f'Failed list mirrors', - exception=SpackMirrorException).stdout - return list(map(get_first_word, list(mirrors.strip().splitlines()))) - - def remove_mirror(self, mirror_name: str): - """Removes a mirror from an environment (if it is activated), otherwise removes the mirror globally.""" - if not mirror_name: - raise ValueError("mirror_name is required") - run_command("bash", "-c", - f'{self.spack_command_on_env} && spack mirror rm {mirror_name}', - check=True, - logger=self.logger, - info_msg=f'Removing mirror {mirror_name}', - exception_msg=f'Failed to remove mirror {mirror_name}', - exception=SpackMirrorException) - - def update_buildcache_index(self, mirror_path: str): - """Updates buildcache index""" - if not mirror_path: - raise ValueError("mirror_path is required") - run_command("bash", "-c", - f'{self.spack_command_on_env} && spack buildcache update-index {mirror_path}', - check=True, - logger=self.logger, - info_msg=f'Updating build cache index for mirror {mirror_path}', - exception_msg=f'Failed to update build cache index for mirror {mirror_path}', - exception=SpackMirrorException) - - def install_gpg_keys(self): - """Install gpg keys""" - run_command("bash", "-c", - f'{self.spack_command_on_env} && spack buildcache keys --install --trust', - check=True, - logger=self.logger, - info_msg=f'Installing gpg keys from mirror', - exception_msg=f'Failed to install gpg keys from mirror', - exception=SpackGpgException) - @check_spack_env def install_packages(self, jobs: int, signed=True, fresh=False, debug=False, test=None): """Installs all spack packages. @@ -408,83 +155,60 @@ class SpackOperation: self.logger.error(f'Something went wrong during installation. Please check the logs.') return install_result + def create_fetch_spack_environment(self): + self.spack_env_operation.create_fetch_spack_environment() + + def add_spack_repo(self, repo_path: Path, repo_name: str): + self.spack_env_operation.add_spack_repo(repo_path, repo_name) + + def spack_repo_exists(self, repo_name: str) -> bool | None: + return self.spack_env_operation.spack_repo_exists(repo_name) + + def spack_env_exists(self): + return self.spack_env_operation.spack_env_exists() + + @check_spack_env + def get_compiler_version(self): + return self.spack_env_operation.get_compiler_version() + + def get_spack_installed_version(self): + return self.spack_tool_operation.get_spack_installed_version() + + def reindex(self): + self.spack_cache_operation.reindex() + + def spec_pacakge(self, package_name: str): + return self.spack_env_operation.spec_pacakge(package_name) + + def create_gpg_keys(self): + self.spack_cache_operation.create_gpg_keys() + + def add_mirror(self, mirror_name: str, mirror_path: Path, signed=False, autopush=False, global_mirror=False): + return self.spack_cache_operation.add_mirror(mirror_name, mirror_path, signed, autopush, global_mirror) + + @check_spack_env + def trust_gpg_key(self, public_key_path: str): + self.spack_cache_operation.trust_gpg_key(public_key_path) + + def config(self, config_type: SpackConfigCommand, config_parameter): + self.spack_env_operation.config(config_type, config_parameter) + + def mirror_list(self): + return self.spack_cache_operation.mirror_list() + + def remove_mirror(self, mirror_name: str): + self.spack_cache_operation.remove_mirror(mirror_name) + + def update_buildcache_index(self, mirror_path: str): + self.spack_cache_operation.update_buildcache_index(mirror_path) + + def install_gpg_keys(self): + self.spack_cache_operation.install_gpg_keys() + @check_spack_env def find_packages(self): - """Returns a dictionary of installed Spack packages in the current environment. - Each key is the name of a Spack package, and the corresponding value is a list of - installed versions for that package. - Raises: - NoSpackEnvironmentException: If the spack environment is not set up. - """ - packages = run_command("bash", "-c", - f'{self.spack_command_on_env} && spack find -c', - check=True, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - text=True, - logger=self.logger, - info_msg=f'Listing installed packages.', - exception_msg=f'Failed to list installed packages', - exception=SpackFindException).stdout - dict_packages = {} - for package in packages.strip().splitlines(): - if package.startswith('[+]'): - package = package.replace('@', ' ').split() - if len(package) == 3: - _, name, version = package - dict_packages.setdefault(name, []).append(version) - return dict_packages + return self.spack_env_operation.find_packages() def install_spack(self, spack_version=f'{SPACK_VERSION}', spack_repo='https://github.com/spack/spack', bashrc_path=os.path.expanduser("~/.bashrc")): - """Install spack. - Args: - spack_version (str): spack version - spack_repo (str): Git path to the Spack repository. - bashrc_path (str): Path to the .bashrc file. - """ - spack_version = f'v{spack_version}' - try: - user = os.getlogin() - except OSError: - user = None - - self.logger.info(f"Starting to install Spack into {self.spack_dir} from branch {spack_version}") - if not self.spack_dir.exists(): - run_command( - "git", "clone", "--depth", "1", - "-c", "advice.detachedHead=false", - "-c", "feature.manyFiles=true", - "--branch", spack_version, spack_repo, self.spack_dir - , check=True, logger=self.logger) - self.logger.debug("Cloned spack") - else: - self.logger.debug("Spack already cloned.") - - if bashrc_path: - # ensure the file exists before opening it - if not os.path.exists(bashrc_path): - open(bashrc_path, "w").close() - # add spack setup commands to .bashrc - with open(bashrc_path, "a") as bashrc: - bashrc.write(f'export PATH="{self.spack_dir}/bin:$PATH"\n') - spack_setup_script = f"source {self.spack_dir / 'share' / 'spack' / 'setup-env.sh'}" - bashrc.write(f"{spack_setup_script}\n") - self.logger.info("Added Spack PATH to .bashrc") - if user: - run_command("chown", "-R", f"{user}:{user}", self.spack_dir, check=True, logger=self.logger, - info_msg='Adding permissions to the logged in user') - self.logger.info("Spack install completed") - if self.spack_config.use_spack_global is True and bashrc_path is not None: - # Restart the bash only of the spack is used globally - self.logger.info('Restarting bash') - run_command("bash", "-c", f"source {bashrc_path}", check=True, logger=self.logger, info_msg='Restart bash') - os.system("exec bash") - # Configure upstream Spack instance if specified - if self.spack_config.upstream_instance: - search_path = os.path.join(self.spack_config.upstream_instance, 'spack', 'opt', 'spack', '**', '.spack-db') - spack_db_dirs = glob.glob(search_path, recursive=True) - upstream_prefix = [os.path.dirname(dir) for dir in spack_db_dirs] - for prefix in upstream_prefix: - self.config(SpackConfigCommand.ADD, f':upstream-spack-instance:install_tree:{prefix}') - self.logger.info("Added upstream spack instance") + self.spack_tool_operation.install_spack(spack_version, spack_repo, bashrc_path) diff --git a/dedal/spack_factory/SpackToolOperation.py b/dedal/spack_factory/SpackToolOperation.py new file mode 100644 index 00000000..99682480 --- /dev/null +++ b/dedal/spack_factory/SpackToolOperation.py @@ -0,0 +1,107 @@ +# Dedal library - Wrapper over Spack for building multiple target +# environments: ESD, Virtual Boxes, HPC compatible kernels, etc. + +# (c) Copyright 2025 Dedal developers + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import glob +import os +from pathlib import Path +from dedal.enum.SpackConfigCommand import SpackConfigCommand +from dedal.error_handling.exceptions import MissingAttributeException +from dedal.spack_factory.SpackEnvOperation import SpackEnvOperation +from dedal.tests.testing_variables import SPACK_VERSION +from dedal.utils.utils import run_command +from dedal.logger.logger_builder import get_logger +from dedal.configuration.SpackConfig import SpackConfig + + +class SpackToolOperation: + def __init__(self, spack_config: SpackConfig = SpackConfig(), logger=get_logger(__name__), spack_setup_script=None, + spack_dir=Path('./').resolve()): + self.spack_config = spack_config + self.logger = logger + if spack_setup_script: + self.spack_setup_script = spack_setup_script + else: + raise MissingAttributeException(f'Missing attribute for class {__name__}') + self.spack_dir = spack_dir + + def get_spack_installed_version(self): + """Returns the spack installed version""" + spack_version = run_command("bash", "-c", f'{self.spack_setup_script} && spack --version', + capture_output=True, text=True, check=True, + logger=self.logger, + info_msg=f"Getting spack version", + exception_msg=f"Error retrieving Spack version") + if spack_version: + return spack_version.stdout.strip().split()[0] + return None + + def install_spack(self, spack_version=f'{SPACK_VERSION}', spack_repo='https://github.com/spack/spack', + bashrc_path=os.path.expanduser("~/.bashrc")): + """Install spack. + Args: + spack_version (str): spack version + spack_repo (str): Git path to the Spack repository. + bashrc_path (str): Path to the .bashrc file. + """ + spack_version = f'v{spack_version}' + try: + user = os.getlogin() + except OSError: + user = None + + self.logger.info(f"Starting to install Spack into {self.spack_dir} from branch {spack_version}") + if not self.spack_dir.exists(): + run_command( + "git", "clone", "--depth", "1", + "-c", "advice.detachedHead=false", + "-c", "feature.manyFiles=true", + "--branch", spack_version, spack_repo, self.spack_dir + , check=True, logger=self.logger) + self.logger.debug("Cloned spack") + else: + self.logger.debug("Spack already cloned.") + + if bashrc_path: + # ensure the file exists before opening it + if not os.path.exists(bashrc_path): + open(bashrc_path, "w").close() + # add spack setup commands to .bashrc + with open(bashrc_path, "a") as bashrc: + bashrc.write(f'export PATH="{self.spack_dir}/bin:$PATH"\n') + spack_setup_script = f"source {self.spack_dir / 'share' / 'spack' / 'setup-env.sh'}" + bashrc.write(f"{spack_setup_script}\n") + self.logger.info("Added Spack PATH to .bashrc") + if user: + run_command("chown", "-R", f"{user}:{user}", self.spack_dir, check=True, logger=self.logger, + info_msg='Adding permissions to the logged in user') + self.logger.info("Spack install completed") + if self.spack_config.use_spack_global is True and bashrc_path is not None: + # Restart the bash only of the spack is used globally + self.logger.info('Restarting bash') + run_command("bash", "-c", f"source {bashrc_path}", check=True, logger=self.logger, info_msg='Restart bash') + os.system("exec bash") + # Configure upstream Spack instance if specified + if self.spack_config.upstream_instance: + search_path = os.path.join(self.spack_config.upstream_instance, 'spack', 'opt', 'spack', '**', '.spack-db') + spack_db_dirs = glob.glob(search_path, recursive=True) + upstream_prefix = [os.path.dirname(dir) for dir in spack_db_dirs] + spack_env_operation = SpackEnvOperation(spack_config=self.spack_config, + spack_setup_script=self.spack_setup_script) + for prefix in upstream_prefix: + # todo fix + spack_env_operation.config(SpackConfigCommand.ADD, f':upstream-spack-instance:install_tree:{prefix}') + self.logger.info("Added upstream spack instance") -- GitLab