diff --git a/mpsd-software-environment.py b/mpsd-software-environment.py index 7653de779f1ecc84c85c3012c37e803d7a8ee0e0..28fcc70235f15880773fda0adae22a34a8466452 100755 --- a/mpsd-software-environment.py +++ b/mpsd-software-environment.py @@ -14,6 +14,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": ( @@ -28,8 +29,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. """ @@ -47,20 +49,26 @@ class os_chdir: 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. - - 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. - - Returns: - None + """ + Log the command used to build the toolchains. + + 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. + + 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 @@ -125,15 +133,14 @@ def create_dir_structure(mpsd_release: str, script_dir: Path) -> None: 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 ------- - None - """ # Create the directory structure for the release release_base_dir = script_dir / mpsd_release @@ -169,28 +176,26 @@ def get_release_info(mpsd_release: str, script_dir: Path) -> Tuple[str, str, Lis Get information about the specified release, such as the branch and commit hash of the Spack environments repository and the available toolchains. - Args - ---- + Parameters + ---------- mpsd_release : str - the name of the release to get information for. + The name of the release to get information for. script_dir : pathlib.Path - the base directory where releases are stored. + The base directory where releases are stored. Returns ------- spe_branch : str - the name of the branch for the Spack environments repository. + The name of the branch for the Spack environments repository. spe_commit_hash : str - the commit hash for the Spack environments repository. + The commit hash for the Spack environments repository. available_toolchains : list - a list of strings representing the available - toolchains for the release. + 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. + 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 @@ -219,21 +224,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 - - 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( @@ -252,30 +262,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. + """ + Install the specified MPSD release and toolchains. - enable_build_cache: A boolean indicating whether to build the build - cache when installing toolchains. Defaults to False. + The function installs the toolchain to the specified directory, using Spack. - Raises: - ValueError: If a requested toolchain is not available in the specified release. + 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. - Returns: - None + Raises + ------ + ValueError + If a requested toolchain is not available in the specified release. + Returns + ------- + None """ print( f"Installing release {mpsd_release} with toolchains {toolchains} "