Files
self 07eb4e01c4 fix: align sender startup with current node info
Use the current node_info node_pubkey field in the Docker e2e runner and refresh the Nix Mix dependency hash after the muontrap dependency update. Keep edge session reconciliation alive when it runs before the host repo is ready during startup.
2026-05-18 18:30:57 +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 = "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 = "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]}"
];
};
};
}
);
};
}