You've already forked tribes-plugin-sender
forked from tribes/tribes-plugin-template
07eb4e01c4
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.
179 lines
5.5 KiB
Nix
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]}"
|
|
];
|
|
};
|
|
};
|
|
}
|
|
);
|
|
};
|
|
}
|