load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library") load("@rules_apko//apko:defs.bzl", "apko_image") load("@rules_pkg//:pkg.bzl", "pkg_tar") load("//hack/build/rules/container:index.bzl", "container_push", "go_oci_image") # Pull latest alpine image and extracts tar file into /tmp apko_image( name = "configured_alpine_image", config = "apko.yaml", contents = "@audio_lock//:contents", tag = "configured_alpine_image:latest", tags = ["requires-network"], ) go_binary( name = "pipewire", embed = [":pipewire_lib"], visibility = ["//visibility:public"], ) go_library( name = "pipewire_lib", srcs = ["main.go"], importpath = "edge-infra.dev/cmd/sds/audio/pipewire", visibility = ["//visibility:private"], deps = [ "//pkg/lib/fog", "//pkg/sds/audio/k8s/controllers/pipewire", "@io_k8s_sigs_controller_runtime//:controller-runtime", ], ) # Packages configuration files for pipewire and wireplumber into tar file. # Most of the files are for disabling D-Bus https://wiki.alpinelinux.org/wiki/PipeWire#Disable_D-Bus_support # One of them sets up a socket for pulseaudio clients to connect to. pkg_tar( name = "config_files", extension = "tgz", files = { ":config/pipewire/pipewire.conf.d/01-disable-dbus.conf": "/etc/pipewire/pipewire.conf.d/01-disable-dbus.conf", ":config/pipewire/pipewire-pulse.conf.d/01-set-pulseaudio-socket.conf": "/etc/pipewire/pipewire-pulse.conf.d/01-set-pulseaudio-socket.conf", ":config/wireplumber/wireplumber.conf": "/etc/wireplumber/wireplumber.conf", ":config/wireplumber/main.lua.d/51-disable-alsa-reserve.lua": "/etc/wireplumber/main.lua.d/51-disable-alsa-reserve.lua", ":config/wireplumber/main.lua.d/51-disable-flatpak-portal.lua": "/etc/wireplumber/main.lua.d/51-disable-flatpak-portal.lua", ":config/wireplumber/main.lua.d/98-set-default-volume.lua": "/etc/wireplumber/main.lua.d/98-set-default-volume.lua", ":config/wireplumber/main.lua.d/99-set-default-sink.lua": "/etc/wireplumber/main.lua.d/99-set-default-sink.lua", }, mode = "755", tags = [ "manual", "no-remote-cache", ], ) go_oci_image( name = "alpine_pipewire_image", base = ":configured_alpine_image", embed = [":pipewire_lib"], tags = [ "manual", "no-remote-cache", ], tars = [":config_files"], ) # Creates and pushes final image named 'audio' to repository container_push( image = ":alpine_pipewire_image", image_name = "alpine-pipewire", repository_file = "//hack/build/rules/container:workloads-repo", tags = [ "manual", "no-remote-cache", ], )