{ 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]}" ]; }; }; } ); }; }