mirror of https://github.com/k3s-io/k3s
bazel: refactor multi-arch container builds into starlark
parent
e7888f2cf0
commit
d7c2c2a606
|
@ -0,0 +1,72 @@
|
||||||
|
# Copyright 2019 The Kubernetes Authors.
|
||||||
|
#
|
||||||
|
# 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("@io_bazel_rules_docker//container:container.bzl", "container_bundle", "container_image")
|
||||||
|
load("//build:platforms.bzl", "go_platform_constraint")
|
||||||
|
|
||||||
|
# multi_arch_container produces a private internal container_image, multiple
|
||||||
|
# arch-specific tagged container_bundles (named NAME-ARCH) and aliases
|
||||||
|
# from NAME and NAME.tar to the appropriately NAME-ARCH container_bundle target
|
||||||
|
# for the currently-configured architecture.
|
||||||
|
# Args:
|
||||||
|
# name: name used for the alias; the internal container_image and
|
||||||
|
# container_bundles are based on this name
|
||||||
|
# architectures: list of architectures (in GOARCH naming parlance) to
|
||||||
|
# configure
|
||||||
|
# base: base image to use for the containers. The format string {ARCH} will
|
||||||
|
# be replaced with the configured GOARCH.
|
||||||
|
# docker_tags: list of docker tags to apply to the image. The format string
|
||||||
|
# {ARCH} will be replaced with the configured GOARCH; any stamping variables
|
||||||
|
# should be escaped, e.g. {{STABLE_MY_VAR}}.
|
||||||
|
# tags: will be applied to all rules
|
||||||
|
# visiblity: will be applied only to the container_bundles; the internal
|
||||||
|
# container_image is private
|
||||||
|
# All other args will be applied to the internal container_image.
|
||||||
|
def multi_arch_container(
|
||||||
|
name,
|
||||||
|
architectures,
|
||||||
|
base,
|
||||||
|
docker_tags,
|
||||||
|
tags = None,
|
||||||
|
visibility = None,
|
||||||
|
**kwargs):
|
||||||
|
container_image(
|
||||||
|
name = "%s-internal" % name,
|
||||||
|
base = select({
|
||||||
|
go_platform_constraint(os = "linux", arch = arch): base.format(ARCH = arch)
|
||||||
|
for arch in architectures
|
||||||
|
}),
|
||||||
|
tags = tags,
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
**kwargs
|
||||||
|
)
|
||||||
|
|
||||||
|
for arch in architectures:
|
||||||
|
container_bundle(
|
||||||
|
name = "%s-%s" % (name, arch),
|
||||||
|
images = {
|
||||||
|
docker_tag.format(ARCH = arch): ":%s-internal" % name
|
||||||
|
for docker_tag in docker_tags
|
||||||
|
},
|
||||||
|
tags = tags,
|
||||||
|
visibility = visibility,
|
||||||
|
)
|
||||||
|
for suffix in ["", ".tar"]:
|
||||||
|
native.alias(
|
||||||
|
name = "%s%s" % (name, suffix),
|
||||||
|
actual = select({
|
||||||
|
go_platform_constraint(os = "linux", arch = arch): "%s-%s%s" % (name, arch, suffix)
|
||||||
|
for arch in architectures
|
||||||
|
}),
|
||||||
|
)
|
|
@ -1,5 +1,6 @@
|
||||||
load("@io_bazel_rules_docker//container:container.bzl", "container_bundle", "container_image", "container_layer")
|
load("@io_bazel_rules_docker//container:container.bzl", "container_layer")
|
||||||
load("//build:platforms.bzl", "SERVER_PLATFORMS", "for_platforms")
|
load("//build:platforms.bzl", "SERVER_PLATFORMS")
|
||||||
|
load("//build:container.bzl", "multi_arch_container")
|
||||||
|
|
||||||
container_layer(
|
container_layer(
|
||||||
name = "cluster-srcs",
|
name = "cluster-srcs",
|
||||||
|
@ -18,17 +19,18 @@ container_layer(
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
container_image(
|
multi_arch_container(
|
||||||
name = "conformance-internal",
|
name = "conformance",
|
||||||
base = select(for_platforms(
|
architectures = SERVER_PLATFORMS["linux"],
|
||||||
for_server = "@debian-hyperkube-base-{ARCH}//image",
|
base = "@debian-hyperkube-base-{ARCH}//image",
|
||||||
only_os = "linux",
|
|
||||||
)),
|
|
||||||
cmd = [
|
cmd = [
|
||||||
"/bin/bash",
|
"/bin/bash",
|
||||||
"-c",
|
"-c",
|
||||||
"/run_e2e.sh",
|
"/run_e2e.sh",
|
||||||
],
|
],
|
||||||
|
# {ARCH} is replaced by the macro, but STABLE_DOCKER_TAG is replaced by the
|
||||||
|
# build stamping, so we need to escape it
|
||||||
|
docker_tags = ["k8s.gcr.io/conformance-{ARCH}:{{STABLE_DOCKER_TAG}}"],
|
||||||
env = {
|
env = {
|
||||||
"E2E_FOCUS": "\[Conformance\]",
|
"E2E_FOCUS": "\[Conformance\]",
|
||||||
"E2E_SKIP": "",
|
"E2E_SKIP": "",
|
||||||
|
@ -45,23 +47,10 @@ container_image(
|
||||||
":bins",
|
":bins",
|
||||||
],
|
],
|
||||||
stamp = True,
|
stamp = True,
|
||||||
workdir = "/usr/local/bin",
|
|
||||||
)
|
|
||||||
|
|
||||||
[container_bundle(
|
|
||||||
name = "conformance-%s" % arch,
|
|
||||||
images = {"k8s.gcr.io/conformance-%s:{STABLE_DOCKER_TAG}" % arch: "conformance-internal"},
|
|
||||||
tags = ["manual"],
|
tags = ["manual"],
|
||||||
visibility = ["//visibility:public"],
|
visibility = ["//visibility:public"],
|
||||||
) for arch in SERVER_PLATFORMS["linux"]]
|
workdir = "/usr/local/bin",
|
||||||
|
)
|
||||||
[alias(
|
|
||||||
name = "conformance%s" % suffix,
|
|
||||||
actual = select(for_platforms(for_server = "conformance-{ARCH}%s" % suffix)),
|
|
||||||
) for suffix in [
|
|
||||||
"",
|
|
||||||
".tar",
|
|
||||||
]]
|
|
||||||
|
|
||||||
filegroup(
|
filegroup(
|
||||||
name = "package-srcs",
|
name = "package-srcs",
|
||||||
|
|
|
@ -1,32 +1,20 @@
|
||||||
load("@io_bazel_rules_docker//container:container.bzl", "container_bundle", "container_image")
|
load("//build:container.bzl", "multi_arch_container")
|
||||||
load("//build:platforms.bzl", "SERVER_PLATFORMS", "for_platforms")
|
load("//build:platforms.bzl", "SERVER_PLATFORMS")
|
||||||
|
|
||||||
container_image(
|
multi_arch_container(
|
||||||
name = "hyperkube-internal",
|
name = "hyperkube",
|
||||||
base = select(for_platforms(
|
architectures = SERVER_PLATFORMS["linux"],
|
||||||
for_server = "@debian-hyperkube-base-{ARCH}//image",
|
base = "@debian-hyperkube-base-{ARCH}//image",
|
||||||
only_os = "linux",
|
# {ARCH} is replaced by the macro, but STABLE_DOCKER_TAG is replaced by the
|
||||||
)),
|
# build stamping, so we need to escape it
|
||||||
|
docker_tags = ["k8s.gcr.io/hyperkube-{ARCH}:{{STABLE_DOCKER_TAG}}"],
|
||||||
files = [
|
files = [
|
||||||
"//cmd/hyperkube",
|
"//cmd/hyperkube",
|
||||||
],
|
],
|
||||||
stamp = True,
|
stamp = True,
|
||||||
)
|
|
||||||
|
|
||||||
[container_bundle(
|
|
||||||
name = "hyperkube-%s" % arch,
|
|
||||||
images = {"k8s.gcr.io/hyperkube-%s:{STABLE_DOCKER_TAG}" % arch: "hyperkube-internal"},
|
|
||||||
tags = ["manual"],
|
tags = ["manual"],
|
||||||
visibility = ["//visibility:public"],
|
visibility = ["//visibility:public"],
|
||||||
) for arch in SERVER_PLATFORMS["linux"]]
|
)
|
||||||
|
|
||||||
[alias(
|
|
||||||
name = "hyperkube%s" % suffix,
|
|
||||||
actual = select(for_platforms(for_server = "hyperkube-{ARCH}%s" % suffix)),
|
|
||||||
) for suffix in [
|
|
||||||
"",
|
|
||||||
".tar",
|
|
||||||
]]
|
|
||||||
|
|
||||||
filegroup(
|
filegroup(
|
||||||
name = "package-srcs",
|
name = "package-srcs",
|
||||||
|
|
Loading…
Reference in New Issue