Files
self 3e288a7e95 feat: prefix Sender plugin slug
Rename Sender plugin identity to tribe-one-sender across manifest, runtime API routes, metrics, e2e fixtures, and tests.
2026-06-17 22:33:33 +02:00

179 lines
5.5 KiB
Nix

{
description = "Tribes Sender plugin";
inputs = {
tribes.url = "git+https://git.teralink.net/tribes/tribes.git";
};
outputs = {
self,
tribes,
}: let
systems = [
"x86_64-linux"
"aarch64-linux"
"x86_64-darwin"
"aarch64-darwin"
];
forAllSystems = tribes.inputs.nixpkgs.lib.genAttrs systems;
in {
formatter = forAllSystems (system: (import tribes.inputs.nixpkgs {inherit system;}).alejandra);
packages = forAllSystems (
system: let
pkgs = import tribes.inputs.nixpkgs {inherit system;};
lib = pkgs.lib;
version = "0.1.0";
cleanSource = src:
lib.cleanSourceWith {
inherit src;
filter = path: type: let
pathStr = toString path;
rootStr = toString src;
relPath =
if pathStr == rootStr
then "."
else lib.removePrefix "${rootStr}/" pathStr;
excluded = [
".devenv"
".direnv"
".git"
"_build"
"deps"
"node_modules"
"result"
];
base = baseNameOf pathStr;
in
lib.cleanSourceFilter path type
&& !(lib.any (prefix: relPath == prefix || lib.hasPrefix "${prefix}/" relPath) excluded)
&& relPath != ".env"
&& !(lib.hasPrefix ".devenv" base)
&& !(lib.hasSuffix ".log" base)
&& !(lib.hasSuffix ".tsbuildinfo" base);
};
src = cleanSource ./.;
senderManifest = builtins.fromJSON (builtins.readFile ./manifest.json);
senderAssets = pkgs.buildNpmPackage {
pname = "tribes-plugin-sender-assets";
inherit version src;
sourceRoot = "${src.name}/assets";
npmDepsHash = "sha256-buX0qpsHdL9E9Sg1g3x/L/Ji2ksM1eccrT1xLl7iwlo=";
preBuild = ''
chmod -R u+w ..
'';
installPhase = ''
runHook preInstall
mkdir -p "$out"
cp -r ../priv/static "$out/static"
runHook postInstall
'';
};
buildTribesPlugin = pkgs.callPackage "${tribes}/nix/tribes-plugin-package.nix" {};
senderPlugin = buildTribesPlugin {
pname = "tribes-plugin-sender";
inherit version src;
hostRelease = tribes.packages.${system}.tribesRelease;
hostSource = tribes;
mixFodDepsHash = "sha256-XcX20Q8KN6PTIlLt3nLDx5/XrWew9BYep73HFBhIScg=";
assets = senderAssets;
nativeBuildInputs = [pkgs.gcc pkgs.gnumake];
meta.description = "RTMP ingest and HLS streaming plugin for Tribes";
};
senderPluginE2E = buildTribesPlugin {
pname = "tribes-plugin-sender";
inherit version src;
hostRelease = tribes.packages.${system}.tribesReleaseE2E;
hostSource = tribes;
mixFodDepsHash = "sha256-XcX20Q8KN6PTIlLt3nLDx5/XrWew9BYep73HFBhIScg=";
assets = senderAssets;
nativeBuildInputs = [pkgs.gcc pkgs.gnumake];
meta.description = "RTMP ingest and HLS streaming plugin for Tribes";
};
senderExternalPlugin = package: {
name = "tribe-one-sender";
inherit package;
manifest = senderManifest;
extraPackages = [pkgs.ffmpeg];
};
senderWithTribesE2E =
(import "${tribes}/default.nix" {
inherit pkgs lib;
hostRelease = tribes.packages.${system}.tribesReleaseE2E;
projectRoot = tribes;
pluginConfigs = [
{
name = "tribe-one-tribes-ui";
path = "./plugins/tribes_ui";
}
(senderExternalPlugin senderPluginE2E)
];
})
.release;
in
{
default = senderPlugin;
inherit senderAssets senderPlugin senderPluginE2E senderWithTribesE2E;
}
// lib.optionalAttrs pkgs.stdenv.hostPlatform.isLinux {
senderDockerE2E = pkgs.dockerTools.buildLayeredImage {
name = "tribes-sender-e2e";
tag = "latest";
contents = [
senderWithTribesE2E
pkgs.bash
pkgs.cacert
pkgs.coreutils
pkgs.fakeNss
pkgs.ffmpeg
];
extraCommands = ''
mkdir -p tmp etc/ssl/certs
ln -s ${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt etc/ssl/certs/ca-certificates.crt
ln -s ${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt etc/ssl/cert.pem
chmod 1777 tmp
'';
config = {
Entrypoint = ["${senderWithTribesE2E}/bin/tribes"];
Cmd = ["start"];
ExposedPorts = {
"4000/tcp" = {};
"4413/tcp" = {};
"1935/tcp" = {};
};
WorkingDir = "/";
User = "65534:65534";
Env = [
"HOME=/tmp"
"LANG=C.UTF-8"
"LC_ALL=C.UTF-8"
"MIX_ENV=prod"
"PHX_SERVER=true"
"PORT=4000"
"RELEASE_DISTRIBUTION=none"
"RELEASE_MODE=interactive"
"SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt"
"TRIBES_PLUGIN_DIR=${senderWithTribesE2E}/plugins"
"PATH=${lib.makeBinPath [pkgs.ffmpeg pkgs.bash pkgs.coreutils]}"
];
};
};
}
);
};
}