From 5e5f4ae2080b28e0950332d0ff194809e4409f4b Mon Sep 17 00:00:00 2001 From: asepharyana Date: Sat, 15 Aug 2026 21:56:22 +0700 Subject: [PATCH] build(gateway): use @discordjs/opus prebuilt instead of compiling from source Drop npm_config_build_from_source=true so node-pre-gyp downloads the published prebuilt .node for Node 22 (ABI node-v127, linux-x64-glibc-2.35) instead of compiling libopus C++ every build. Replace the hardcoded 'npm run install' (node-gyp compile) loop with 'pnpm rebuild @discordjs/opus' which runs the package's own install script (prebuilt fetch, source build only as fallback). sharp already uses @img prebuilt packages (its install script failure is non-fatal), so only opus was actually compiling. --- flake.nix | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/flake.nix b/flake.nix index 6392ee7..6b0266f 100644 --- a/flake.nix +++ b/flake.nix @@ -48,8 +48,8 @@ export GIT_SSL_CAINFO=${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt export NIX_SSL_CERT_FILE=${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt - # pnpm uses node-gyp for native addons — provide build tools - export npm_config_build_from_source=true + # pnpm uses node-gyp for native addons — provide build tools (kept for + # the rare case a prebuilt is unavailable and it falls back to compile). export CPPFLAGS="-I${pkgs.lib.getDev pkgs.openssl}/include" export LDFLAGS="-L${pkgs.lib.getLib pkgs.openssl}/lib" @@ -180,15 +180,15 @@ WRAPPER # pnpm rebuild aborts on the first failing package and runs scripts # from the wrong cwd — build each native dep explicitly with its own # install script. Each failure is tolerated (|| true); the packages - # that matter (opus) are verified at runtime. - for pkg in \ - node_modules/.pnpm/@discordjs+opus@*/node_modules/@discordjs/opus - do - if [ -d "$pkg" ]; then - echo "--- native build: $pkg ---" - (cd "$pkg" && npm run install 2>&1 || true) - fi - done + # @discordjs/opus ships prebuilt binaries for Node 22 (ABI node-v127, + # linux-x64-glibc-2.35) — node-pre-gyp downloads the prebuilt .node + # instead of compiling C++ from source. With build_from_source unset + # (above), `pnpm rebuild` runs the package's own install script which + # fetches the matching prebuilt; it only falls back to a source build + # if the download fails. This keeps voice working without a per-build + # native compile. + echo "=== Rebuilding @discordjs/opus (prebuilt download) ===" + pnpm rebuild @discordjs/opus 2>&1 || true echo "=== Compiling TypeScript ====" npx tsc 2>&1 echo "=== Fixing @/ path aliases to relative paths ==="