Пример #1
0
def test_container_build_with_container_tool(mocker):
    '''
    Tests that container_tool argument is parsed and passed to container build.
    '''
    container_tool = "podman"

    #with docker_build argument
    arg_strings = [
        "path/to/open-ce", "build", "env", "--docker_build", "my-env.yaml",
        "--container_tool", container_tool
    ]
    args = make_args()
    mocker.patch('os.system', return_value=0)

    container_build.build_with_container_tool(args, arg_strings)

    #with container_build argument
    arg_strings = [
        "path/to/open-ce", "build", "env", "--container_build", "my-env.yaml",
        "--container_tool", container_tool
    ]
    args = make_args()
    mocker.patch('os.system', return_value=0)

    container_build.build_with_container_tool(args, arg_strings)
Пример #2
0
def test_container_build_with_container_tool_build_args(mocker):
    '''
    Tests that container build arguments are parsed and passed to container build.
    '''
    build_args = "--build-arg ENV1=test1 --build-arg ENV2=test2 same_setting 0,1"

    #with docker_build argument
    arg_strings = [
        "path/to/open-ce", "build", "env", "--docker_build", "my-env.yaml",
        "--container_build_args", build_args
    ]
    args = make_args()
    mocker.patch('os.system', return_value=0)

    container_build.build_with_container_tool(args, arg_strings)

    #with container_build argument
    arg_strings = [
        "path/to/open-ce", "build", "env", "--container_build", "my-env.yaml",
        "--container_build_args", build_args
    ]
    args = make_args()
    mocker.patch('os.system', return_value=0)

    container_build.build_with_container_tool(args, arg_strings)
Пример #3
0
def test_build_with_container_tool_incompatible_cuda_versions(mocker):
    '''
    Tests that passing incompatible value in --cuda_versions argument fails.
    '''
    mocker.patch('open_ce.container_build._capable_of_cuda_containers',
                 return_value=0)
    mocker.patch('open_ce.utils.get_driver_level', return_value="abc")

    #with docker_build argument
    arg_strings = [
        "path/to/open-ce", "build", "env", "--docker_build", "my-env.yaml",
        "--cuda_versions", "10.2", "--build_types", "cuda"
    ]
    args = make_args()
    with pytest.raises(OpenCEError) as exc:
        container_build.build_with_container_tool(args, arg_strings)
    assert "Driver level" in str(exc.value)

    #with container_build argument
    arg_strings = [
        "path/to/open-ce", "build", "env", "--container_build", "my-env.yaml",
        "--cuda_versions", "10.2", "--build_types", "cuda"
    ]
    args = make_args()
    mocker.patch('open_ce.container_build._capable_of_cuda_containers',
                 return_value=0)
    mocker.patch('open_ce.utils.get_driver_level', return_value="abc")

    with pytest.raises(OpenCEError) as exc:
        container_build.build_with_container_tool(args, arg_strings)
    assert "Driver level" in str(exc.value)
Пример #4
0
def test_build_with_container_tool_failures(mocker):
    '''
    Failure cases for build_with_container_tool
    '''
    arg_strings = [
        "path/to/open-ce", "build", "env", "--container_build", "my-env.yaml",
        "--cuda_versions", "10.2", "--build_types", "cuda"
    ]
    args = make_args()
    mocker.patch('os.system', return_value=1)

    with pytest.raises(OpenCEError) as exc:
        container_build.build_with_container_tool(args, arg_strings)
    assert "Failure building image" in str(exc.value)
Пример #5
0
def build_env(args):
    '''Entry Function'''
    utils.check_conda_build_configs_exist(args.conda_build_configs)

    if args.container_build:
        if len(args.cuda_versions.split(',')) > 1:
            raise OpenCEError(Error.TOO_MANY_CUDA)
        container_build.build_with_container_tool(args, sys.argv)
        return

    # Importing BuildTree is intentionally done here because it checks for the
    # existence of conda-build as BuildTree uses conda_build APIs.
    from open_ce.build_tree import construct_build_tree  # pylint: disable=import-outside-toplevel

    build_tree = construct_build_tree(args)
    # Generate conda environment files
    conda_env_files = build_tree.write_conda_env_files(
        output_folder=os.path.abspath(args.output_folder),
        path=os.path.abspath(args.output_folder))
    log.info(
        "Generated conda environment files from the selected build arguments: %s",
        conda_env_files.values())
    log.info("One can use these environment files to create a conda" \
          " environment using \"conda env create -f <conda_env_file_name>.\"")

    if not args.skip_build_packages:
        # Build each package in the packages list
        for build_command in build_tree:
            if not build_command.all_outputs_exist(args.output_folder):
                try:
                    log.info("Building %s", build_command.recipe)
                    build_feedstock.build_feedstock_from_command(
                        build_command,
                        output_folder=os.path.abspath(args.output_folder),
                        pkg_format=args.conda_pkg_format)
                except OpenCEError as exc:
                    raise OpenCEError(Error.BUILD_RECIPE,
                                      build_command.repository,
                                      exc.msg) from exc
            else:
                log.info("Skipping build of %s because it already exists.",
                         build_command.recipe)

    if args.run_tests:
        _run_tests(build_tree, inputs.parse_arg_list(args.test_labels),
                   conda_env_files, os.path.abspath(args.output_folder))
Пример #6
0
def test_build_with_container_tool(mocker):
    '''
    Simple test for build_with_container_tool
    '''
    image_name = "my_image"
    arg_strings = [
        "path/to/open-ce", "build", "env", "--container_build", "my-env.yaml",
        "--cuda_versions", "10.2", "--build_types", "cuda"
    ]
    args = make_args()

    mocker.patch('open_ce.container_build.build_image',
                 return_value=(0, image_name))

    mocker.patch('open_ce.container_build.build_in_container', return_value=0)

    mocker.patch('os.system', return_value=0)
    container_build.build_with_container_tool(args, arg_strings)
Пример #7
0
def build_env(args):
    '''Entry Function'''

    utils.check_conda_build_configs_exist(args.conda_build_configs)

    if args.container_build:
        if len(args.cuda_versions.split(',')) > 1:
            raise OpenCEError(Error.TOO_MANY_CUDA)
        container_build.build_with_container_tool(args, sys.argv)
        return

    # Checking conda-build existence if --container_build is not specified
    utils.check_if_package_exists('conda-build')

    # Here, importing BuildTree is intentionally done after checking
    # existence of conda-build as BuildTree uses conda_build APIs.
    from open_ce.build_tree import BuildTree  # pylint: disable=import-outside-toplevel

    # If repository_folder doesn't exist, create it
    if args.repository_folder and not os.path.exists(args.repository_folder):
        os.mkdir(args.repository_folder)

    # Create the build tree
    build_tree = BuildTree(
        env_config_files=args.env_config_file,
        python_versions=inputs.parse_arg_list(args.python_versions),
        build_types=inputs.parse_arg_list(args.build_types),
        mpi_types=inputs.parse_arg_list(args.mpi_types),
        cuda_versions=inputs.parse_arg_list(args.cuda_versions),
        repository_folder=args.repository_folder,
        channels=args.channels_list,
        git_location=args.git_location,
        git_tag_for_env=args.git_tag_for_env,
        git_up_to_date=args.git_up_to_date,
        conda_build_config=args.conda_build_configs,
        packages=inputs.parse_arg_list(args.packages))

    # Generate conda environment files
    conda_env_files = build_tree.write_conda_env_files(
        output_folder=os.path.abspath(args.output_folder),
        path=os.path.abspath(args.output_folder))
    print(
        "Generated conda environment files from the selected build arguments:",
        conda_env_files.values())
    print("INFO: One can use these environment files to create a conda" \
          " environment using \"conda env create -f <conda_env_file_name>.\"")

    if not args.skip_build_packages:
        # Build each package in the packages list
        for build_command in build_tree:
            if not build_command.all_outputs_exist(args.output_folder):
                try:
                    print("Building " + build_command.recipe)
                    build_feedstock.build_feedstock_from_command(
                        build_command,
                        output_folder=os.path.abspath(args.output_folder))
                except OpenCEError as exc:
                    raise OpenCEError(Error.BUILD_RECIPE,
                                      build_command.repository,
                                      exc.msg) from exc
            else:
                print("Skipping build of " + build_command.recipe +
                      " because it already exists")

    if args.run_tests:
        _run_tests(build_tree, inputs.parse_arg_list(args.test_labels),
                   conda_env_files)