peridot/rules_byc/internal/container/container.bzl
2022-07-07 22:13:21 +02:00

92 lines
3.4 KiB
Python

load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar")
load("@io_bazel_rules_docker//container:container.bzl", "container_image", "container_push", "container_layer")
load("@io_bazel_rules_docker//nodejs:image.bzl", "nodejs_image")
REGISTRY_VARIANT = "aws"
def migration_tar():
pkg_tar(
name = "migrate",
srcs = native.glob(["*.sql"]),
package_dir = "/migrations",
)
def container(image_name, files, tars_to_layer = [], base = "//bases/bazel/go", registry = "{STABLE_OCI_REGISTRY}", repository = "{STABLE_OCI_REGISTRY_REPO}", full_img_path = None, frontend = False, server_files = [], server_entrypoint = None, architecture = None, force_normal_tags = False, disable_conditional = False):
container_layer(
name = "%s_bin" % image_name,
directory = "/home/app/%s" % "bundle" if frontend else "bundle",
files = files,
visibility = [":__subpackages__"],
)
extra_layers = []
if len(tars_to_layer) > 0:
layer_name = "%s_tar_layer" % image_name
container_layer(
name = layer_name,
tars = tars_to_layer,
visibility = [":__subpackages__"],
)
extra_layers += [layer_name]
if not architecture:
container_image(
name = "%s_image" % image_name,
architecture = select({
"//platforms:arm64": "arm64",
"//platforms:x86_64": "amd64",
"//platforms:s390x": "s390x",
"//platforms:ppc64le": "ppc64le",
}),
base = base,
layers = [":%s_bin" % image_name] + extra_layers,
visibility = ["//visibility:public"],
)
else:
container_image(
name = "%s_image" % image_name,
architecture = architecture,
base = base,
layers = [":%s_bin" % image_name] + extra_layers,
visibility = ["//visibility:public"],
)
tag = "{STABLE_BUILD_TAG}"
img_path = "%s/%s" % (repository, image_name)
if full_img_path != None:
img_path = full_img_path
should_use_aws_format = full_img_path == None and REGISTRY_VARIANT == "aws" and not force_normal_tags
if should_use_aws_format:
tag = "%s-{STABLE_BUILD_TAG}" % image_name
img_path = repository
if len(server_files) > 0:
nodejs_image(
name = "%s_image_node" %image_name,
entry_point = server_entrypoint,
data = server_files,
base = ":%s_image" % image_name
)
container_push(
name = "%s_container" % image_name,
format = "Docker",
image = (":%s_image_node" if server_entrypoint else ":%s_image") % image_name,
registry = registry,
repository = select({
"//platforms:arm64": img_path,
"//platforms:x86_64": img_path,
"//platforms:s390x": "%s/%s_s390x" % (repository, image_name),
"//platforms:ppc64le": "%s/%s_ppc64le" % (repository, image_name),
}) if not should_use_aws_format and not disable_conditional else img_path,
tag = select({
"//platforms:arm64": tag,
"//platforms:x86_64": tag,
"//platforms:s390x": "%s_s390x-{STABLE_BUILD_TAG}" % image_name,
"//platforms:ppc64le": "%s_ppc64le-{STABLE_BUILD_TAG}" % image_name,
}) if should_use_aws_format and not disable_conditional else tag,
visibility = ["//visibility:public"],
)