# Copyright 2018 Google LLC
#
# 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.

load("@bazel_gazelle//:def.bzl", "gazelle")
load("@io_bazel_rules_docker//go:image.bzl", "go_image")
load("@io_bazel_rules_docker//container:container.bzl", "container_image")
load("@package_bundle_amd64//file:packages.bzl", packages_amd64 = "packages")
load("@package_bundle_arm64//file:packages.bzl", packages_arm64 = "packages")
load("@rules_pkg//:pkg.bzl", "pkg_deb", "pkg_tar")

# gazelle:prefix cos.googlesource.com/cos/tools.git
gazelle(name = "gazelle")

exports_files(glob(["src/data/**"]))

genrule(
    name = "workspace_dir",
    outs = ["workspace"],
    cmd = "mkdir $@",
)

genrule(
    name = "tmp_dir",
    outs = ["tmp"],
    cmd = "mkdir $@",
)

container_image(
    name = "veritysetup_amd64",
    debs = [
        packages_amd64["coreutils"],
        packages_amd64["tar"],
        packages_amd64["libacl1"],
        packages_amd64["libattr1"],
        packages_amd64["libc6"],
        packages_amd64["libselinux1"],
        packages_amd64["libpcre3"],
        packages_amd64["cryptsetup-bin"],
        packages_amd64["libcryptsetup4"],
        packages_amd64["libpopt0"],
        packages_amd64["libuuid1"],
        packages_amd64["libdevmapper1.02.1"],
        packages_amd64["libgcrypt20"],
        packages_amd64["libargon2-0"],
        packages_amd64["libjson-c3"],
        packages_amd64["libudev1"],
        packages_amd64["libpthread-stubs0-dev"],
        packages_amd64["libm17n-0"],
        packages_amd64["libgpg-error0"],
    ],
    repository = "veritysetup",
    visibility = ["//visibility:public"],
)

container_image(
    name = "veritysetup_arm64",
    debs = [
        packages_arm64["coreutils"],
        packages_arm64["tar"],
        packages_arm64["libacl1"],
        packages_arm64["libattr1"],
        packages_arm64["libc6"],
        packages_arm64["libselinux1"],
        packages_arm64["libpcre3"],
        packages_arm64["cryptsetup-bin"],
        packages_arm64["libcryptsetup4"],
        packages_arm64["libpopt0"],
        packages_arm64["libuuid1"],
        packages_arm64["libdevmapper1.02.1"],
        packages_arm64["libgcrypt20"],
        packages_arm64["libargon2-0"],
        packages_arm64["libjson-c3"],
        packages_arm64["libudev1"],
        packages_arm64["libpthread-stubs0-dev"],
        packages_arm64["libm17n-0"],
        packages_arm64["libgpg-error0"],
    ],
    repository = "veritysetup",
    visibility = ["//visibility:public"],
)

pkg_tar(
    name = "data_tar",
    srcs = glob(["src/data/**"]),
    strip_prefix = "src/",
)

container_image(
    name = "cos_customizer_base",
    base = "@daisy//image",
    data_path = ".",
    debs = [
        packages_amd64["coreutils"],
        packages_amd64["tar"],
        packages_amd64["libacl1"],
        packages_amd64["libattr1"],
        packages_amd64["libc6"],
        packages_amd64["libselinux1"],
        packages_amd64["libpcre3"],
        packages_amd64["mtools"],
    ],
    files = [
        ":tmp_dir",
        ":workspace_dir",
    ],
    tars = [
        ":data_tar",
    ],
)

go_image(
    name = "cos_customizer",
    base = ":cos_customizer_base",
    embed = ["//src/cmd/cos_customizer:cos_customizer_lib"],
    goarch = "amd64",
    goos = "linux",
    pure = "on",
    visibility = ["//visibility:public"],
)
