Skip to content
Snippets Groups Projects
Commit 53ddcc41 authored by Adrian Ciu's avatar Adrian Ciu
Browse files

esd-spack-installation: added spack env exceptions

parent 49f82dfb
No related branches found
No related tags found
2 merge requests!7Dedal Release,!5Methods for caching; CLI
......@@ -11,3 +11,8 @@ class BashCommandException(SpackException):
"""
To be thrown when an invalid input is received.
"""
class NoSpackEnvironmentException(SpackException):
"""
To be thrown when an invalid input is received.
"""
\ No newline at end of file
......@@ -2,7 +2,7 @@ import os
from abc import ABC, abstractmethod
from pathlib import Path
from esd.error_handling.exceptions import BashCommandException
from esd.error_handling.exceptions import BashCommandException, NoSpackEnvironmentException
from esd.logger.logger_builder import get_logger
from esd.model.SpackModel import SpackModel
from esd.utils.utils import run_command, git_clone_repo
......@@ -90,7 +90,7 @@ class SpackManager(ABC):
else:
self.logger.debug(f'Spack repository {repo.env_name} already added')
def spack_repo_exists(self, repo_name: str) -> bool:
def spack_repo_exists(self, repo_name: str) -> bool | None:
"""Check if the given Spack repository exists."""
if self.env is None:
result = run_command("bash", "-c",
......@@ -101,11 +101,15 @@ class SpackManager(ABC):
if result is None:
return False
else:
result = run_command("bash", "-c",
if self.spack_env_exists():
result = run_command("bash", "-c",
f'source {self.spack_setup_script} && spack env activate -p {self.env_path} && spack repo list',
check=True,
capture_output=True, text=True, logger=self.logger,
debug_msg=f'Checking if repository {repo_name} was added')
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.stdout.splitlines())
......@@ -122,12 +126,16 @@ class SpackManager(ABC):
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'source {self.spack_setup_script} && spack env activate -p {self.env_path} && spack repo add {repo_path}/{repo_name}',
check=True, logger=self.logger,
debug_msg=f"Added {repo_name} to spack environment {self.env.env_name}",
exception_msg=f"Failed to add {repo_name} to spack environment {self.env.env_name}",
exception=BashCommandException)
if self.spack_env_exists():
run_command("bash", "-c",
f'source {self.spack_setup_script} && spack env activate -p {self.env_path} && spack repo add {repo_path}/{repo_name}',
check=True, logger=self.logger,
debug_msg=f"Added {repo_name} to spack environment {self.env.env_name}",
exception_msg=f"Failed to add {repo_name} to spack environment {self.env.env_name}",
exception=BashCommandException)
else:
self.logger.debug('No spack environment defined')
raise NoSpackEnvironmentException('No spack environment defined')
def get_spack_installed_version(self):
spack_version = run_command("bash", "-c", f'source {self.spack_setup_script} && spack --version',
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment