diff --git a/mpsd-software-environment.py b/mpsd-software-environment.py index 553102ed29b226037f55fc3965ef1129702937ec..7e2688348056dfb7dc27c0901dc5355cf2784a7e 100755 --- a/mpsd-software-environment.py +++ b/mpsd-software-environment.py @@ -15,6 +15,7 @@ This function builds toolchains for MPSD-HPC at the appropriate directory, \n for given system architecture and MPSD software stack version.\n The toolchains are built using the bash script spack_setup.sh, and the results are logged. """ + config_vars = { "cmd_log_file": "install.log", "build_log_file": ( @@ -29,8 +30,9 @@ config_vars = { # Helper class to change directory via context manager class os_chdir: """ - The os_chdir class is a context manager that - changes the current directory to a specified directory + The os_chdir class is a context manager. + + It changes the current directory to a specified directory and returns to the original directory after execution. """ @@ -132,20 +134,26 @@ def run(*args, counter=[0], **kwargs): def setup_log_cmd( mpsd_release: str, script_dir: str, msg: str = None, *args, **kwargs ) -> None: - """The setup_log_cmd function logs the command used to build the - toolchains, along with information about the software environment installer - branch, the Spack environments branch, and the commit hashes of each. It - also logs steps taken in install process using the optional message - argument. + """ + Log the command used to build the toolchains. - Args: - mpsd_release (str): The name of the release to install toolchains for. - script_dir (str): The path to the directory where the scripts are located. - msg (str, optional): An optional message to log in the command log file. + It also logs information about the software environment installer branch, + the Spack environments branch, and the commit hashes of each. + It also logs steps taken + in the install process using the optional message argument. - Returns: - None + Parameters + ---------- + - mpsd_release : str + The name of the release to install toolchains for. + - script_dir : str + The path to the directory where the scripts are located. + - msg : str, optional + An optional message to log in the command log file. + Returns + ------- + - None """ release_base_dir = script_dir / mpsd_release @@ -203,17 +211,21 @@ def setup_log_cmd( def create_dir_structure(mpsd_release: str, script_dir: Path) -> None: - """The create_dir_structure function creates the directory structure for + """ + Create the directory structure and clone spack environments repo. + + The create_dir_structure function creates the directory structure for the specified release and clones the Spack environments repository if it doesn't exist. - Args: + Parameters + ---------- - mpsd_release: A string representing the MPSD release version. - script_dir: A Path object representing the path to the scripts directory. - Returns: + Returns + ------- - None - """ # Create the directory structure for the release release_base_dir = script_dir / mpsd_release @@ -244,22 +256,31 @@ def create_dir_structure(mpsd_release: str, script_dir: Path) -> None: def get_release_info(mpsd_release: str, script_dir: Path) -> Tuple[str, str, List[str]]: """ + Get information about the specified release. + Get information about the specified release, such as the branch and commit hash of the Spack environments repository and the available toolchains. - Args: - - mpsd_release (str) : the name of the release to get information for. - - script_dir (pathlib.Path): the base directory where releases are stored. - - Returns: - - spe_branch: str, the name of the branch for the Spack environments repository. - - spe_commit_hash: str, the commit hash for the Spack environments repository. - - available_toolchains: list, a list of strings representing the available - toolchains for the release. + Parameters + ---------- + mpsd_release : str + The name of the release to get information for. + script_dir : pathlib.Path + The base directory where releases are stored. - Raises: - - FileNotFoundError: If the release directory does not exist. Run - `create_dir_structure()` first. + Returns + ------- + spe_branch : str + The name of the branch for the Spack environments repository. + spe_commit_hash : str + The commit hash for the Spack environments repository. + available_toolchains : list + A list of strings representing the available toolchains for the release. + + Raises + ------ + FileNotFoundError + If the release directory does not exist. Run `create_dir_structure()` first. """ # Get the info for release release_base_dir = script_dir / mpsd_release @@ -288,20 +309,26 @@ def get_release_info(mpsd_release: str, script_dir: Path) -> Tuple[str, str, Lis def prepare_environment(mpsd_release: str, script_dir: Path) -> List[str]: """ - - Creates the directory structure for the given MPSD release and clones the - spack-environments repository. - - Determines the branch and commit hash of the spack-environments repository and - the available toolchains. - - Logs the command usage. - - Args: - - mpsd_release (str): The name of the MPSD release to prepare the environment for. - - script_dir (pathlib.Path): The base directory to create the release folder and - clone the spack-environments repository into. - - Returns: - - available_toolchains (list): A list of available toolchains for the given MPSD - release. + Create the directory structure for the given MPSD release. + + It does the following steps: + Clones the spack-environments repository. + Determines the branch and commit hash of the spack-environments repository + and the available toolchains. + Logs the command usage. + + Parameters + ---------- + mpsd_release : str + The name of the MPSD release to prepare the environment for. + script_dir : pathlib.Path + The base directory to create the release folder and + clone the spack-environments repository into. + + Returns + ------- + available_toolchains : list + A list of available toolchains for the given MPSD release. """ create_dir_structure(mpsd_release, script_dir) spe_branch, spe_commit_hash, available_toolchains = get_release_info( @@ -320,30 +347,36 @@ def install_environment( force_reinstall: bool = False, enable_build_cache: bool = False, ) -> None: - """Installs the specified MPSD release and toolchains to the specified - directory using Spack. - - Args: - mpsd_release: A string representing the MPSD release version. - - toolchains: A list of strings representing the toolchains to install - (e.g., "foss2021a-mpi", "global_generic", "ALL"). - - script_dir: A Path object representing the path to the directory where - the release and toolchains will be installed. - - force_reinstall: A boolean indicating whether to force a reinstallation - even if the release and toolchains already exist. Defaults to False. - - enable_build_cache: A boolean indicating whether to build the build - cache when installing toolchains. Defaults to False. + """ + Install the specified MPSD release and toolchains. - Raises: - ValueError: If a requested toolchain is not available in the specified release. + The function installs the toolchain to the specified directory, using Spack. - Returns: - None + Parameters + ---------- + mpsd_release : str + A string representing the MPSD release version. + toolchains : list of str + A list of strings representing the toolchains to install + (e.g., "foss2021a-mpi", "global_generic", "ALL"). + script_dir : pathlib.Path + A Path object representing the path to the directory where + the release and toolchains will be installed. + force_reinstall : bool, optional + A boolean indicating whether to force a reinstallation + even if the release and toolchains already exist. Defaults to False. + enable_build_cache : bool, optional + A boolean indicating whether to build the build cache + when installing toolchains. Defaults to False. + + Raises + ------ + ValueError + If a requested toolchain is not available in the specified release. + Returns + ------- + None """ print( f"Installing release {mpsd_release} with toolchains {toolchains} "