Skip to content
Snippets Groups Projects
mpsd-software-environment.py 38.5 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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",
        )
    
    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":
    
            _ = 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__":