load("@aspect_bazel_lib//lib:tar.bzl", "tar") load("@aspect_bazel_lib//lib:transitions.bzl", "platform_transition_binary", "platform_transition_filegroup") load("@crates//:defs.bzl", "aliases", "all_crate_deps") load("@rules_oci//oci:defs.bzl", "oci_image", "oci_image_index", "oci_load") load("@rules_rust//cargo:defs.bzl", "cargo_build_script") load("@rules_rust//rust:defs.bzl", "rust_binary", "rust_clippy", "rust_unpretty") load("//:build/prebuilt_protoc.bzl", "prebuilt_protoc") config_setting( name = "fastbuild", values = { "compilation_mode": "fastbuild", }, ) prebuilt_protoc( name = "protoc", visibility = ["//visibility:public"], ) cargo_build_script( name = "build_script", srcs = ["build.rs"], build_script_env = { "PROTOC": "$(execpath //:protoc)", }, data = [ "proto/lvmd.proto", "//:protoc", ], edition = "2024", deps = all_crate_deps( build = True, normal = True, ), ) rust_binary( name = "lvmd-stratis", srcs = glob(["src/**/*.rs"]), aliases = aliases(), compile_data = ["Cargo.toml"], edition = "2024", proc_macro_deps = all_crate_deps( proc_macro = True, ), rustc_flags = select({ # Hack to get incremental builds working w/ Bazel. ":fastbuild": ["-Cincremental=/tmp/lvmd-stratis-incremental"], "//conditions:default": [], }) + [ "-Cpanic=abort", ], visibility = ["//visibility:public"], deps = [":build_script"] + all_crate_deps(), ) rust_unpretty( name = "lvmd-stratis_unpretty", deps = [":lvmd-stratis"], ) rust_clippy( name = "clippy", deps = [":lvmd-stratis"], ) [platform_transition_binary( name = "lvmd-stratis_{}".format(arch), binary = ":lvmd-stratis", target_platform = "@aspect_bazel_lib//platforms:linux_{}".format(arch), visibility = ["//visibility:public"], ) for arch in ("amd64", "arm64")] genrule( name = "fake-xfsprogs_mtree", srcs = [ "@topolvm-oci", "fake-xfsprogs.sh", ], outs = ["mtree.txt"], cmd = r""" ( echo '#mtree' echo 'fake-xfsprogs.sh uid=0 gid=0 mode=0755 time=0 type=file contents=$(execpath fake-xfsprogs.sh)' # Note that 'xfs_io' must be untouched so mountutil can get the current size. find $(execpath @topolvm-oci)/blobs/sha256 -mindepth 1 \ -exec $(BSDTAR_BIN) -Oxf '{}' var/lib/dpkg/info/xfsprogs.list \; 2>/dev/null \ | grep 'bin/' \ | grep -v xfs_io \ | sed \ -e 's,^/,,' \ -e 's,^sbin,usr/sbin,' \ -e 's,$$, uid=0 gid=0 mode=0755 time=0 type=link link=/fake-xfsprogs.sh,' ) > "$@" """, toolchains = [ "@bsd_tar_toolchains//:resolved_toolchain", ], ) tar( name = "fake-xfsprogs_layer", srcs = [ "fake-xfsprogs.sh", "@topolvm-oci", ], mtree = ":fake-xfsprogs_mtree", ) tar( name = "lvmd-stratis_layer", srcs = [":lvmd-stratis"], mtree = [ "lvmd uid=0 gid=0 mode=0755 time=0 type=file contents=$(execpath :lvmd-stratis)", ], ) oci_image( name = "oci", base = "@topolvm-oci", tars = [ ":fake-xfsprogs_layer", ":lvmd-stratis_layer", ], ) [platform_transition_filegroup( name = "oci_{}".format(arch), srcs = [":oci"], target_platform = "@aspect_bazel_lib//platforms:linux_{}".format(arch), ) for arch in ("amd64", "arm64")] oci_image_index( name = "oci_index", images = [ ":oci_amd64", ":oci_arm64", ], ) oci_load( name = "load", image = ":oci", repo_tags = ["quay.io/refi64/topolvm-stratis:latest"], ) exports_files(["proto/lvmd.proto"])