+load("@bazel_skylib//lib:paths.bzl", "paths")
+
def _nfpm_package(
package_name,
config,
+ exes,
data,
packager,
+ os,
+ arch,
):
extension_map = {
"archlinux": "pkg.tar.zst",
"ENV_DIR": "/etc/default",
},
}
- pkg_prefix = "{}_{}".format(package_name.replace("-", "_"), packager)
extra_args = []
- for target in data:
+ _exes = []
+ exe_suffix = ""
+ if os != "linux" or arch != "amd64":
+ exe_suffix = "_{}_{}".format(os, arch)
+ extra_args.append("--platform={}".format(os))
+ extra_args.append("--arch={}".format(arch))
+
+ for exe in exes:
+ if ":" not in exe:
+ exe += ":" + paths.basename(exe)
+ exe += exe_suffix
+ _exes.append(exe)
+
+ pkg_prefix = "{}_{}".format(package_name.replace("-", "_"), packager)
+ if arch != "amd64":
+ pkg_prefix += "_{}".format(arch)
+ for target in data + _exes:
extra_args.append('--include="$(location {})"'.format(target))
for var, val in distro_vars.get(packager, {}).items():
tools = [
"//pkg/nfpmgen",
],
- srcs = [config] + data,
+ srcs = [config] + data + _exes,
outs = [
"{}_nfpm_config.yaml".format(pkg_prefix),
],
],
srcs = [
":{}_nfpm_config".format(pkg_prefix),
- ] + data,
+ ] + data + _exes,
outs = [
- "{}.{}".format(package_name, extension_map.get(packager, packager)),
+ "{}_{}.{}".format(package_name, arch, extension_map.get(packager, packager)),
],
cmd = " ".join([
"$(location @com_github_goreleaser_nfpm_v2//cmd/nfpm:nfpm)",
def nfpm_package(
name, # type: str
config, # type: str
- data, # type: list[str]
+ exes = [], # type: list[str]
+ data = [], # type: list[str]
+ linux_arm64 = False, # type: bool
):
#for packager in ["deb", "archlinux", "rpm"]:
for packager in ["archlinux", "apk", "deb"]:
- _nfpm_package(name, config, data, packager)
\ No newline at end of file
+ _nfpm_package(name, config, exes, data, packager, "linux", "amd64")
+
+ if linux_arm64:
+ _nfpm_package(name, config, exes, data, packager, "linux", "arm64")
+ _nfpm_package(name, config, exes, data, packager, "linux", "arm")
\ No newline at end of file
"$APCUPSD_EXPORTER_ARGS",
],
description = "apcupsd-exporter polls apcupsd for UPS %i and exports metrics via metric-collector",
- environment_file = "$${const:ExePrefix}apcupsd-exporter@%i",
+ environment_file = "${const:ExePrefix}apcupsd-exporter@%i",
exe = "apcups_exporter",
group = "daemon",
type = "notify",
+load("//bazel:cross.bzl", "go_cross_binaries")
load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
+package(default_visibility = ["//visibility:public"])
+
go_multi_library(
name = "ephs_client_lib",
srcs = ["main.go"],
embed = [":ephs_client_lib"],
visibility = ["//visibility:public"],
)
+
+go_cross_binaries(
+ base_target = "ephs_client",
+ linux_arm = True,
+)
+load("//bazel:cross.bzl", "go_cross_binaries")
load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
load("//bazel:svc.bzl", "systemd_service")
+
+package(default_visibility = ["//visibility:public"])
+
go_multi_library(
name = "http_proxy_lib",
srcs = ["main.go"],
go_multi_binary(
name = "http_proxy",
embed = [":http_proxy_lib"],
- visibility = ["//visibility:public"],
+)
+
+go_cross_binaries(
+ base_target = "http_proxy",
+ linux_arm = True,
)
systemd_service(
+load("//bazel:cross.bzl", "go_cross_binaries")
load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
load("//bazel:svc.bzl", "systemd_dbus_service")
+package(default_visibility = ["//visibility:public"])
+
go_multi_library(
name = "metricbus_server_lib",
srcs = ["main.go"],
visibility = ["//visibility:public"],
)
+go_cross_binaries(
+ base_target = "metricbus_server",
+ linux_arm = True,
+)
+
systemd_dbus_service(
name = "metric-collector",
args = [
+load("//bazel:cross.bzl", "go_cross_binaries")
load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
load("//bazel:svc.bzl", "systemd_service")
+package(default_visibility = ["//visibility:public"])
+
go_multi_library(
name = "mtls_exporter_lib",
srcs = ["main.go"],
visibility = ["//visibility:public"],
)
+go_cross_binaries(
+ base_target = "mtls_exporter",
+ linux_arm = True,
+)
+
systemd_service(
name = "mtls-exporter",
args = [
+load("//bazel:cross.bzl", "go_cross_binaries")
load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
+package(default_visibility = ["//visibility:public"])
+
go_multi_library(
name = "mtls_supervisor_lib",
srcs = [
embed = [":mtls_supervisor_lib"],
visibility = ["//visibility:public"],
)
+
+go_cross_binaries(
+ base_target = "mtls_supervisor",
+ linux_arm = True,
+)
\ No newline at end of file
+load("//bazel:cross.bzl", "go_cross_binaries")
load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
load("//bazel:svc.bzl", "systemd_service")
+package(default_visibility = ["//visibility:public"])
+
go_multi_library(
name = "sd_health_exporter_lib",
srcs = ["main.go"],
visibility = ["//visibility:public"],
)
+go_cross_binaries(
+ base_target = "sd_health_exporter",
+ linux_arm = True,
+)
+
systemd_service(
name = "sd-health-exporter",
args = [
+load("//bazel:cross.bzl", "go_cross_binaries")
load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
+package(default_visibility = ["//visibility:public"])
+
go_multi_library(
name = "sd_publish_lib",
srcs = ["main.go"],
embed = [":sd_publish_lib"],
visibility = ["//visibility:public"],
)
+
+go_cross_binaries(
+ base_target = "sd_publish",
+ linux_arm = True,
+)
+load("//bazel:cross.bzl", "go_cross_binaries")
load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
load("//bazel:svc.bzl", "systemd_service")
+package(default_visibility = ["//visibility:public"])
+
go_multi_library(
name = "sd_register_lib",
srcs = ["main.go"],
visibility = ["//visibility:public"],
)
+go_cross_binaries(
+ base_target = "sd_register",
+ linux_arm = True,
+)
+
systemd_service(
name = "sd-register",
args = [
+load("//bazel:cross.bzl", "go_cross_binaries")
load("//bazel:go.bzl", "go_multi_binary", "go_multi_library")
+package(default_visibility = ["//visibility:public"])
+
go_multi_library(
name = "sd_watcher_lib",
srcs = ["main.go"],
embed = [":sd_watcher_lib"],
visibility = ["//visibility:public"],
)
+
+go_cross_binaries(
+ base_target = "sd_watcher",
+ linux_arm = True,
+)
nfpm_package(
name = "runtime-utils",
config = ":runtime-utils.yaml",
- data = [
+ exes = [
"//cmd/ephs_client",
"//cmd/metricbus_server",
- "//cmd/metricbus_server:metric_collector_systemd_service",
"//cmd/mtls_exporter",
- "//cmd/mtls_exporter:mtls_exporter_systemd_service",
"//cmd/mtls_supervisor",
"//cmd/sd_health_exporter",
- "//cmd/sd_health_exporter:sd_health_exporter_systemd_service",
"//cmd/sd_publish",
"//cmd/sd_register",
+ "//cmd/sd_watcher",
+ "//cmd/sqpkg_upload",
+ ],
+ data = [
+ "//cmd/metricbus_server:metric_collector_systemd_service",
+ "//cmd/mtls_exporter:mtls_exporter_systemd_service",
+ "//cmd/sd_health_exporter:sd_health_exporter_systemd_service",
"//cmd/sd_register:sd_register@_systemd_service",
"//cmd/sd_register:sd_register_systemd_service",
- "//cmd/sd_watcher",
"//metrics/metricbus:dbus_conf",
],
+ linux_arm64 = True,
)
nfpm_package(
name = "apcupsd-exporter",
config = ":apcupsd-exporter.yaml",
- data = [
+ exes = [
"//cmd/apcups_exporter",
+ ],
+ data = [
"//cmd/apcups_exporter:apcupsd_exporter@_systemd_service",
"//cmd/apcups_exporter:apcupsd_exporter_systemd_service",
],
nfpm_package(
name = "http-proxy",
config = ":http-proxy.yaml",
- data = [
+ exes = [
"//cmd/http_proxy",
+ ],
+ data = [
"//cmd/http_proxy:http_proxy@_systemd_service",
],
+ linux_arm64 = True,
)
nfpm_package(
name = "ldap-health-exporter",
config = ":ldap-health-exporter.yaml",
- data = [
+ exes = [
"//cmd/ldap_health_exporter",
+ ],
+ data = [
"//cmd/ldap_health_exporter:ldap_health_exporter@_systemd_service",
],
)
nfpm_package(
name = "prometheus-helpers",
config = ":prometheus-helpers.yaml",
- data = [
+ exes = [
"//cmd/prometheus_http_discovery",
+ ],
+ data = [
"//cmd/prometheus_http_discovery:prometheus_http_discovery_systemd_service",
],
)
nfpm_package(
name = "coredns",
config = ":coredns.yaml",
- data = [
+ exes = [
"//thirdparty/coredns",
],
)
name: "${const:ExePrefix}apcupsd-exporter"
-arch: "amd64"
-platform: "linux"
version: "${sub:${const:Version},+unset,}"
section: "net"
priority: "extra"
name: "${const:ExePrefix}coredns"
-arch: "amd64"
-platform: "linux"
version: "${sub:${const:Version},+unset,}"
section: "net"
priority: "extra"
name: "${const:ExePrefix}http-proxy"
-arch: "amd64"
-platform: "linux"
version: "${sub:${const:Version},+unset,}"
section: "net"
priority: "extra"
name: "${const:ExePrefix}ldap-health-exporter"
-arch: "amd64"
-platform: "linux"
version: "${sub:${const:Version},+unset,}"
section: "net"
priority: "extra"
import (
"flag"
"fmt"
+ "io/fs"
"os"
"path"
"regexp"
return string(e)
}
-func (e executable) buildPath(bazelBinDir string) string {
+func (e executable) buildPath(bazelBinDir string, platform, arch string) string {
+ if platform == "linux" && arch == "amd64" {
+ return path.Join(
+ bazelBinDir, "cmd", e.String(), e.String()+"_", e.String(),
+ )
+ }
+
return path.Join(
- bazelBinDir, "cmd", e.String(), e.String()+"_", e.String())
+ bazelBinDir, "cmd", e.String(), fmt.Sprintf("%s_%s_%s", e.String(), platform, arch),
+ )
}
func (e executable) pkgPath(vars subst.KV) string {
if err != nil {
return fmt.Errorf(
"failed reading runfile %q (abspath: %q): %v\nwd: %q",
- entry.Source, newsrc, err, wd)
+ entry.Source, newsrc, err, wd,
+ )
}
entry.Source = newsrc
}
return nil
}
-func (c *NfpmConfig) DiscoverBinaries(bazelBinDirs []string) error {
+func (c *NfpmConfig) DiscoverBinaries(bazelBinDirs []string, platform, arch string) error {
wd, err := os.Getwd()
if err != nil {
return err
var exePath string
for _, bazelBinDir := range bazelBinDirs {
- checkPath := exe.buildPath(bazelBinDir)
+ checkPath := exe.buildPath(bazelBinDir, platform, arch)
+ debug("evaluating buildPath: %s", checkPath)
if _, ok := c.files[checkPath]; ok {
exePath = checkPath
debug("evaluating exe with buildPath %s", exePath)
- if derefPath, err := os.Readlink(exePath); err == nil {
+ for {
+ if !isSymlink(exePath) {
+ break
+ }
+
+ derefPath, err := os.Readlink(exePath)
+ if err != nil {
+ return fmt.Errorf("readlink(%q): %v", exePath, err)
+ }
if path.IsAbs(derefPath) {
exePath = derefPath
} else {
derefPath,
)
}
-
- debug(" -> dereferenced symlink to: %s", exePath)
}
+ debug(" -> dereferenced symlink to: %s", exePath)
st, err := os.Stat(exePath)
if err != nil {
return string(out), nil
}
+func isSymlink(fullPath string) bool {
+ if stat, err := os.Lstat(fullPath); err == nil {
+ return stat.Mode()&fs.ModeSymlink == fs.ModeSymlink
+ }
+
+ return false
+}
+
func init() {
flag.BoolVar(&verbose, "verbose", false, "enable debug logging")
}
func main() {
yamlFile := flag.String("in", "", "path to yaml template to consume")
outFile := flag.String("out", "", "output file to write; if omitted, uses stdout")
+ arch := flag.String("arch", "amd64", "architecture")
+ platform := flag.String("platform", "linux", "platform")
var includes []string
parseInclude := func(flagVal string) error {
if err != nil {
panic(err)
}
+ c.Platform = *platform
+ c.Arch = *arch
+ if *arch == "arm" {
+ c.Arch = "armv7h"
+ }
wd, err := os.Getwd()
if err != nil {
panic(err)
}
- if err := c.DiscoverBinaries(bazelBinDirs); err != nil {
+ if err := c.DiscoverBinaries(bazelBinDirs, *platform, *arch); err != nil {
panic(err)
}
name: "${const:ExePrefix}prometheus-helpers"
-arch: "amd64"
-platform: "linux"
version: "${sub:${const:Version},+unset,}"
section: "net"
priority: "extra"
name: "${const:ExePrefix}runtime-utils"
-arch: "amd64"
-platform: "linux"
version: "${sub:${const:Version},+unset,}"
section: "net"
priority: "extra"