Skip to content
Snippets Groups Projects
mpsd-software.py 39.2 KiB
Newer Older
  • Learn to ignore specific revisions
  •         # get a list of all the toolchains in the microarch
    
            possible_toolchains = (release_base_dir / microarch).glob(
                "lmod/Core/toolchains/*.lua"
            )
    
            # append toolchain which is the name of the file without the .lua extension
            toolchain_map[microarch] = [toolchain.stem for toolchain in possible_toolchains]
    
    
        logging.debug(f"{toolchain_map=}")
    
    
        # pretty print the toolchain map key as the heading
        # and the value as the list of toolchains
    
    Hans Fangohr's avatar
    Hans Fangohr committed
        plog.info(f"Installed toolchains ({mpsd_release}):\n")
    
        for microarch, toolchains in toolchain_map.items():
    
            plog.info(f"- {microarch}")
            for toolchain in toolchains:
    
    Hans Fangohr's avatar
    Hans Fangohr committed
                plog.info(f"    {toolchain}")
    
            plog.info(f"    [module use {str(release_base_dir / microarch / 'lmod/Core')}]")
            plog.info("")
    
        return toolchain_map
    
    def main():
    
        """Execute main entry point."""
    
        parser = argparse.ArgumentParser(description=about_tool)
    
    Hans Fangohr's avatar
    Hans Fangohr committed
            "--log",
            "-l",
            dest="loglevel",
            choices=["warning", "info", "debug"],
            required=False,
            default="warning",
            help="Set the log level",
        )
    
    Hans Fangohr's avatar
    Hans Fangohr committed
        parser.add_argument("--version", action="version", version=__version__)
    
    Ashwin Kumar Karnad's avatar
    Ashwin Kumar Karnad committed
        subparsers = parser.add_subparsers(
            dest="action", title="actions", description="valid actions", required=True
        )
    
        subparsers.required = True
        list_of_cmds = [
    
    Hans Fangohr's avatar
    Hans Fangohr committed
            ("available", "Show toolchains available"),
    
            ("prepare", "Prepare the environment for installation on the disk"),
            ("install", "Install a software environment"),
    
            # ("reinstall", "Reinstall a software environment"),
    
            # ("remove", "Remove a software environment or toolchains from an environment"),
            # ("start-new", "Start a new software environment version"),
    
            ("status", "Show the status of the software environment"),
    
        ]
        for cmd, help_text in list_of_cmds:
            subp = subparsers.add_parser(cmd, help=help_text)
    
    
            if cmd == "start-new":
                subp.add_argument(
                    "--from-release",
                    dest="from_release",
                    type=str,
                    required=True,
                    help="Release version to start from",
                )
                subp.add_argument(
                    "--to-release",
                    dest="to_release",
                    type=str,
                    required=True,
                    help="Release version to create",
                )
    
    Ashwin Kumar Karnad's avatar
    Ashwin Kumar Karnad committed
                subp.add_argument(
    
                    "release",
                    type=str,
                    help="Release version to prepare, install, reinstall or remove",
    
    Ashwin Kumar Karnad's avatar
    Ashwin Kumar Karnad committed
                )
    
                if cmd in ["install", "reinstall", "remove"]:
    
    Ashwin Kumar Karnad's avatar
    Ashwin Kumar Karnad committed
                    # "install" command needs additional documentation
    
    Ashwin Kumar Karnad's avatar
    Ashwin Kumar Karnad committed
                        f"Pass a list of toolchains to command {cmd}. "
                        "Use '--toolchains ALL' to "
                        f"{cmd} all toolchains. If '--toolchain' is not "
                        "specified, list available toolchains for the release "
                        "(after environment has been prepared if not done yet)."
                    )
    
    
                    subp.add_argument(
    
    Ashwin Kumar Karnad's avatar
    Ashwin Kumar Karnad committed
                        "--toolchains",  # first option defines attribute
                        # name `args.toolchains` in `args = parser_args()`
                        "--toolchain",  # allow singular as alternative
                        # (-> creates attribute `args.toolchains` if used)
    
    Ashwin Kumar Karnad's avatar
    Ashwin Kumar Karnad committed
                        nargs="+",
    
                    )
                    subp.add_argument(
                        "--enable-build-cache",
                        action="store_true",
    
                            "Enable Spack build cache. Useful for reinstallation but "
                            "consumes time and disk space."
    
        # Carry out the action
        args = parser.parse_args()
    
        # target dir is the place where this script exists. the
    
        root_dir = Path(os.path.dirname(os.path.realpath(__file__)))
    
            get_installer_log_file_path(args.release, args.action, root_dir),
    
        # Check the command and run related function
    
        if args.action == "remove":
    
            remove_environment(args.release, args.toolchains, root_dir)
    
        elif args.action == "start-new":
    
            start_new_environment(args.from_release, args.to_release, root_dir)
    
        elif args.action == "install":
    
    Ashwin Kumar Karnad's avatar
    Ashwin Kumar Karnad committed
            install_environment(
    
                args.release, args.toolchains, root_dir, False, args.enable_build_cache
    
    Ashwin Kumar Karnad's avatar
    Ashwin Kumar Karnad committed
            )
    
        elif args.action == "status":
    
    Hans Fangohr's avatar
    Hans Fangohr committed
            _ = environment_status(args.release, root_dir)
    
        elif args.action == "prepare":
    
            prepare_environment(args.release, root_dir)
    
    Hans Fangohr's avatar
    Hans Fangohr committed
        elif args.action == "available":
    
            get_available_toolchains(args.release)
    
    Hans Fangohr's avatar
    Hans Fangohr committed
        else:
    
            message = (
                f"No known action found ({args.action=}). Should probably never happen."
            )
    
    Hans Fangohr's avatar
    Hans Fangohr committed
            logging.error(message)
            raise NotImplementedError(message)
    
    if __name__ == "__main__":