# Copyright 2017 The Bazel Authors. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

licenses(["notice"])  # Apache 2.0

package(default_visibility = ["//visibility:public"])

load("//rules:docker_config.bzl", "docker_toolchain_autoconfig")
load(
    "//rules:environments.bzl",
    "clang_env",
    "debian8_clang_default_keys",
    "debian8_clang_default_packages",
    "debian8_clang_default_repos",
    "gcc_env",
)

bazel_next_release = "0.20.0"

bazel_next_release_rc = "3"

docker_toolchain_autoconfig(
    name = "ubuntu-xenial-autoconfig",
    base = "//tests/container:rbe-test-xenial-with-pkgs.tar",
    env = gcc_env(),
    incompatible_changes_off = True,
    tags = ["manual"],
    test = True,
)

docker_toolchain_autoconfig(
    name = "external-repo-autoconfig",
    base = "//tests/container:rbe-test-xenial-with-pkgs.tar",
    config_repos = [
        "local_config_sh",
        "local_config_cc",
    ],
    env = gcc_env(),
    git_repo = "https://github.com/bazelbuild/bazel",
    incompatible_changes_off = True,
    tags = ["manual"],
    test = True,
)

# To build this target run:
# bazel build //tests/config:this-project-repo-autoconfig --define mount_project=$(realpath .)
# To test it run:
# bazel test //tests/config:this-project-repo-autoconfig_test --define mount_project=$(realpath .)
docker_toolchain_autoconfig(
    name = "this-project-repo-autoconfig",
    base = "//tests/container:rbe-test-xenial-with-pkgs.tar",
    config_repos = [
        "local_config_sh",
        "local_config_cc",
    ],
    env = gcc_env(),
    incompatible_changes_off = True,
    mount_project = "$(mount_project)",
    tags = ["manual"],
    test = True,
)

docker_toolchain_autoconfig(
    name = "ubuntu-xenial-bazel-head-autoconfig",
    base = "//tests/container:rbe-test-xenial-with-pkgs.tar",
    env = gcc_env(),
    tags = ["manual"],
    test = True,
    use_bazel_head = True,
)

# Note that we only support Bazel rc versions at 0.10.0 or above.
docker_toolchain_autoconfig(
    name = "ubuntu-xenial-custom-bazel-rc-version-autoconfig",
    base = "//tests/container:rbe-test-xenial-with-pkgs.tar",
    bazel_rc_version = bazel_next_release_rc,
    bazel_version = bazel_next_release,
    env = gcc_env(),
    tags = ["manual"],
    test = True,
)

# For test purpose only. Used by //tests/config:debian8_clang_autoconfig_test.
# debian8_clang_autoconfig_test compares configs generated by this target and those
# already published in the repo to make sure the current docker_toolchain_autoconfig
# can generate the exact same configs as before.
# Container: gcr.io/cloud-marketplace/google/clang-debian8@sha256:ac3b1fdc22c0f2b95abe67f2daf33788425fab52d4e6845900bfe1a42443098f
docker_toolchain_autoconfig(
    name = "debian8-clang-0.3.0-bazel_0.10.0-autoconfig",
    additional_repos = debian8_clang_default_repos(),
    base = "@debian8-clang-test//image",
    bazel_version = "0.10.0",
    env = clang_env(),
    keys = debian8_clang_default_keys(),
    packages = debian8_clang_default_packages(),
    tags = ["manual"],
    test = True,
)

sh_test(
    name = "debian8_clang_autoconfig_test",
    size = "medium",
    timeout = "long",
    srcs = ["debian8_clang_autoconfig_test.sh"],
    data = [
        ":debian8-clang-0.3.0-bazel_0.10.0-autoconfig_outputs.tar",
        "@bazel_toolchains_test//file",
    ],
)
