kong--kong
89 行
2.7 KiB
Python
89 行
2.7 KiB
Python
"""
|
|
NFPM package rule.
|
|
"""
|
|
|
|
load("@bazel_skylib//lib:dicts.bzl", "dicts")
|
|
load("@kong_bindings//:variables.bzl", "KONG_VAR")
|
|
|
|
def _nfpm_pkg_impl(ctx):
|
|
env = dicts.add(ctx.attr.env, ctx.attr.extra_env, KONG_VAR, ctx.configuration.default_shell_env)
|
|
|
|
target_cpu = ctx.attr._cc_toolchain[cc_common.CcToolchainInfo].cpu
|
|
if target_cpu == "k8" or target_cpu == "x86_64" or target_cpu == "amd64":
|
|
target_arch = "amd64"
|
|
elif target_cpu == "aarch64" or target_cpu == "arm64":
|
|
target_arch = "arm64"
|
|
else:
|
|
fail("Unsupported platform cpu: %s" % target_cpu)
|
|
env["ARCH"] = target_arch
|
|
|
|
# XXX: remove the "env" from KONG_VAR which is a list
|
|
env["OPENRESTY_PATCHES"] = ""
|
|
|
|
pkg_ext = ctx.attr.packager
|
|
|
|
# create like kong.amd64.deb
|
|
out = ctx.actions.declare_file("%s/%s.%s.%s" % (
|
|
ctx.attr.out_dir,
|
|
ctx.attr.pkg_name,
|
|
target_arch,
|
|
pkg_ext,
|
|
))
|
|
|
|
nfpm_args = ctx.actions.args()
|
|
nfpm_args.add("pkg")
|
|
nfpm_args.add("-f", ctx.file.config.path)
|
|
nfpm_args.add("-p", ctx.attr.packager)
|
|
nfpm_args.add("-t", out.path)
|
|
|
|
build_destdir = ctx.var["BINDIR"] + "/build/" + KONG_VAR["BUILD_NAME"]
|
|
|
|
ctx.actions.run_shell(
|
|
inputs = ctx.files._nfpm_bin,
|
|
mnemonic = "nFPM",
|
|
command = "ln -sf %s nfpm-prefix; external/nfpm/nfpm $@" % build_destdir,
|
|
arguments = [nfpm_args],
|
|
outputs = [out],
|
|
env = env,
|
|
)
|
|
|
|
# TODO: fix runfiles so that it can used as a dep
|
|
return [DefaultInfo(files = depset([out]), runfiles = ctx.runfiles(files = ctx.files.config))]
|
|
|
|
nfpm_pkg = rule(
|
|
_nfpm_pkg_impl,
|
|
attrs = {
|
|
"config": attr.label(
|
|
mandatory = True,
|
|
allow_single_file = True,
|
|
doc = "nFPM configuration file.",
|
|
),
|
|
"packager": attr.string(
|
|
mandatory = True,
|
|
doc = "Packager name.",
|
|
),
|
|
"env": attr.string_dict(
|
|
doc = "Environment variables to set when running nFPM.",
|
|
),
|
|
"extra_env": attr.string_dict(
|
|
# https://github.com/bazelbuild/bazel/issues/12457
|
|
doc = "Additional environment variables to set when running nFPM. This is a workaround since Bazel doesn't support union operator for select yet.",
|
|
),
|
|
"pkg_name": attr.string(
|
|
mandatory = True,
|
|
doc = "Output package name.",
|
|
),
|
|
"out_dir": attr.string(
|
|
doc = "Output directory name.",
|
|
default = "pkg",
|
|
),
|
|
# hidden attributes
|
|
"_nfpm_bin": attr.label(
|
|
default = "@nfpm//:all_srcs",
|
|
),
|
|
"_cc_toolchain": attr.label(
|
|
default = "@bazel_tools//tools/cpp:current_cc_toolchain",
|
|
),
|
|
},
|
|
)
|