blob: dc9b80a08932129201587dc4902358d13cbb7aee [file]
load("@npm//:defs.bzl", "npm_link_all_packages")
load("@aspect_rules_js//js:defs.bzl", "js_binary", "js_image_layer")
load("@aspect_bazel_lib//lib:copy_to_bin.bzl", "copy_to_bin")
load("@io_bazel_rules_docker//container:container.bzl", "container_image")
load("@io_bazel_rules_docker//contrib:test.bzl", "container_test")
load("@io_bazel_rules_docker//container:layer.bzl", "container_layer")
load("@aspect_bazel_lib//lib:transitions.bzl", "platform_transition_filegroup")
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 = "main",
args = ["foo"],
data = [
"transition",
"//:node_modules/chalk",
],
entry_point = "src/main.js",
)
# Image
js_image_layer(
name = "layers",
binary = ":main",
root = "/app",
visibility = ["//visibility:__pkg__"],
)
filegroup(
name = "app_tar",
srcs = [":layers"],
output_group = "app",
)
container_layer(
name = "app_layer",
tars = [":app_tar"],
)
filegroup(
name = "node_modules_tar",
srcs = [":layers"],
output_group = "node_modules",
)
container_layer(
name = "node_modules_layer",
tars = [":node_modules_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 going to be /{root of js_image_layer}/{package_name()}/{name of js_binary}
cmd = ["/app/main"],
entrypoint = ["bash"],
layers = [
":app_layer",
":node_modules_layer",
],
)
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"],
)