load("@aspect_bazel_lib//lib:tar.bzl", "mtree_spec", "tar") load("@aspect_bazel_lib//lib:transitions.bzl", "platform_transition_filegroup") load("@bazel_skylib//rules:build_test.bzl", "build_test") load("@rules_oci//oci:defs.bzl", "oci_image", "oci_load", "oci_push") load("//bazel:zig.bzl", "zig_cc_binary") zig_cc_binary( name = "simple_layer", main = "main.zig", deps = [ "//async", "//zml", ], ) # Manifest created from the simple_layer binary and friends mtree_spec( name = "mtree", srcs = [":simple_layer"], ) # Create a tar archive from the above manifest tar( name = "archive", srcs = [":simple_layer"], args = [ "--options", ",".join([ "zstd:compression-level=9", "zstd:threads=16", ]), ], compress = "zstd", mtree = ":mtree", ) # The actual docker image, with entrypoint, created from tar archive oci_image( name = "image_", base = "@distroless_cc_debian12", entrypoint = ["/{}/simple_layer".format(package_name())], target_compatible_with = [ "@platforms//os:linux", ], tars = [":archive"], ) # We always want to create the image for Linux platform_transition_filegroup( name = "image", srcs = [":image_"], tags = ["manual"], target_platform = "//platforms:linux_amd64", ) # Load will immediatly load the image (eg: docker load) oci_load( name = "load", image = ":image", repo_tags = [ "distroless/simple_layer:latest", ], tags = ["manual"], ) # Bazel target for pushing the Linux image to the docker registry oci_push( name = "push", image = ":image", remote_tags = ["latest"], # override with -- --repository foo.bar/org/image repository = "index.docker.io/zmlai/simple_layer", tags = ["manual"], ) build_test( name = "test", targets = [":simple_layer"], )