Skip to content
Snippets Groups Projects
mpsd-software.py 39.2 KiB
Newer Older
    for microarch in list_of_microarchs:
        # 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 = [
        ("available", "Show software available for installation"),
        ("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 status: what is installed?"),
        ("prepare", "Prepare installation of MPSD-release (dev only)"),
    ]
    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(
Hans Fangohr's avatar
Hans Fangohr committed
            args.release, args.toolchains, root_dir, 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__":