blob: ee6542ba9489c9eb49dbe55a574d63b61d63a421 [file] [log] [blame]
load("@aspect_bazel_lib//lib:copy_to_bin.bzl", "copy_to_bin")
load("@aspect_bazel_lib//lib:transitions.bzl", "platform_transition_filegroup")
load("@aspect_rules_js//js:defs.bzl", "js_binary", "js_image_layer")
load("@io_bazel_rules_docker//container:container.bzl", "container_image")
load("@io_bazel_rules_docker//container:layer.bzl", "container_layer")
load("@io_bazel_rules_docker//contrib:test.bzl", "container_test")
load("@npm//:defs.bzl", "npm_link_all_packages")
npm_link_all_packages(name = "node_modules")
platform(
name = "arm64_linux",
constraint_values = [
"@platforms//os:linux",
"@platforms//cpu:arm64",
],
)
copy_to_bin(
name = "ascii",
srcs = ["src/ascii.art"],
)
platform_transition_filegroup(
name = "transition",
srcs = ["ascii"],
target_platform = ":arm64_linux",
)
js_binary(
name = "bin",
args = ["foo"],
chdir = package_name(),
data = [
"transition",
"//:node_modules/chalk",
],
entry_point = "src/main.js",
)
# Image
js_image_layer(
name = "layers",
binary = ":bin",
generate_empty_layers = True,
root = "/app",
visibility = ["//visibility:__pkg__"],
)
filegroup(
name = "node_tar",
srcs = [":layers"],
output_group = "node",
)
container_layer(
name = "node_layer",
tars = [":node_tar"],
)
filegroup(
name = "package_store_3p_tar",
srcs = [":layers"],
output_group = "package_store_3p",
)
container_layer(
name = "package_store_3p_layer",
tars = [":package_store_3p_tar"],
)
filegroup(
name = "package_store_1p_tar",
srcs = [":layers"],
output_group = "package_store_1p",
)
container_layer(
name = "package_store_1p_layer",
tars = [":package_store_1p_tar"],
)
filegroup(
name = "node_modules_tar",
srcs = [":layers"],
output_group = "node_modules",
)
container_layer(
name = "node_modules_layer",
tars = [":node_modules_tar"],
)
filegroup(
name = "app_tar",
srcs = [":layers"],
output_group = "app",
)
container_layer(
name = "app_layer",
tars = [":app_tar"],
)
container_image(
name = "image",
architecture = "amd64", # or arm64
# Since js_binary depends on bash we have to bring in a base image that has bash
base = "@debian_amd64//image", # or "@debian_arm64//image", if you are on an arm machine
# This is `/[js_image_layer 'root']/[package name of js_image_layer 'binary' target]/[name of js_image_layer 'binary' target]`
cmd = ["/app/bin"],
entrypoint = ["bash"],
layers = [
":node_layer",
":package_store_3p_layer",
":package_store_1p_layer",
":node_modules_layer",
":app_layer",
],
# This is `cmd` + `.runfiles/[workspace name]`
workdir = select({
"@aspect_bazel_lib//lib:bzlmod": "/app/src/bin.runfiles/_main",
"//conditions:default": "/app/src/bin.runfiles/__main__",
}),
)
container_test(
name = "image_test",
configs = [":smoketest.yaml"],
image = ":image",
# ./image_test.image: line 214: /usr/bin/docker: No such file or directory
tags = ["no-remote-exec"],
)