From 939e1b8f65354be2099907d05968ec19104ad441 Mon Sep 17 00:00:00 2001 From: Doron Behar Date: Sun, 22 Feb 2026 15:13:48 +0200 Subject: [PATCH] matrix-appservice-discord: rewrite using yarn{Config,Build}Hooks Addresses #324246 . --- .../ma/matrix-appservice-discord/package.json | 84 ---------- .../ma/matrix-appservice-discord/package.nix | 145 ++++++++++-------- .../ma/matrix-appservice-discord/pin.json | 5 - .../ma/matrix-appservice-discord/update.sh | 42 ----- 4 files changed, 78 insertions(+), 198 deletions(-) delete mode 100644 pkgs/by-name/ma/matrix-appservice-discord/package.json delete mode 100644 pkgs/by-name/ma/matrix-appservice-discord/pin.json delete mode 100755 pkgs/by-name/ma/matrix-appservice-discord/update.sh diff --git a/pkgs/by-name/ma/matrix-appservice-discord/package.json b/pkgs/by-name/ma/matrix-appservice-discord/package.json deleted file mode 100644 index f2ea8a3d924d..000000000000 --- a/pkgs/by-name/ma/matrix-appservice-discord/package.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "name": "matrix-appservice-discord", - "version": "4.0.0", - "description": "A bridge between Matrix and Discord", - "main": "discordas.js", - "engines": { - "npm": "please-use-yarn", - "node": ">=18 <=20" - }, - "scripts": { - "test": "mocha -r ts-node/register test/config.ts test/test_*.ts test/**/test_*.ts", - "lint": "eslint -c .eslintrc --max-warnings 200 src/**/*.ts test/**/*.ts", - "coverage": "tsc && nyc mocha build/test/config.js build/test", - "build": "tsc", - "postinstall": "yarn build", - "start": "node ./build/src/discordas.js", - "debug": "node --inspect ./build/src/discordas.js", - "addbot": "node ./build/tools/addbot.js", - "adminme": "node ./build/tools/adminme.js", - "usertool": "node ./build/tools/userClientTools.js", - "directoryfix": "node ./build/tools/addRoomsToDirectory.js", - "ghostfix": "node ./build/tools/ghostfix.js", - "chanfix": "node ./build/tools/chanfix.js" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/Half-Shot/matrix-appservice-discord.git" - }, - "keywords": [ - "matrix", - "discord", - "bridge", - "application-service", - "as" - ], - "author": "Half-Shot", - "license": "Apache-2.0", - "bugs": { - "url": "https://github.com/Half-Shot/matrix-appservice-discord/issues" - }, - "homepage": "https://github.com/Half-Shot/matrix-appservice-discord#readme", - "dependencies": { - "@mx-puppet/better-discord.js": "^12.5.1", - "@mx-puppet/matrix-discord-parser": "^0.1.10", - "better-sqlite3": "^8.6.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.1.0", - "escape-html": "^1.0.3", - "escape-string-regexp": "^4.0.0", - "js-yaml": "^3.14.0", - "marked": "^1.2.2", - "matrix-appservice-bridge": "^9.0.1", - "mime": "^2.4.6", - "p-queue": "^6.4.0", - "pg-promise": "^10.5.6", - "prom-client": "^12.0.0", - "uuid": "^8.3.1", - "winston": "^3.2.1", - "winston-daily-rotate-file": "^4.5.0" - }, - "devDependencies": { - "@istanbuljs/nyc-config-typescript": "^1.0.1", - "@types/better-sqlite3": "^5.4.1", - "@types/chai": "^4.2.11", - "@types/command-line-args": "^5.0.0", - "@types/express": "^4.17.9", - "@types/js-yaml": "^3.12.4", - "@types/marked": "^1.1.0", - "@types/mime": "^2.0.2", - "@types/mocha": "^7.0.2", - "@types/node": "^14", - "@typescript-eslint/eslint-plugin": "^5.4.0", - "@typescript-eslint/parser": "^5.4.0", - "chai": "^4.2.0", - "eslint": "^7.4.0", - "mocha": "^8.0.1", - "nyc": "^15.1.0", - "proxyquire": "^1.7.11", - "source-map-support": "^0.5.19", - "ts-node": "^8.10.2", - "typescript": "^4.2.3", - "why-is-node-running": "^2.2.0" - } -} diff --git a/pkgs/by-name/ma/matrix-appservice-discord/package.nix b/pkgs/by-name/ma/matrix-appservice-discord/package.nix index bd8f6d9c5db4..a397c6226bde 100644 --- a/pkgs/by-name/ma/matrix-appservice-discord/package.nix +++ b/pkgs/by-name/ma/matrix-appservice-discord/package.nix @@ -1,74 +1,108 @@ { lib, - mkYarnPackage, + stdenv, fetchYarnDeps, fetchFromGitHub, - srcOnly, - makeWrapper, - removeReferencesTo, + + # native + yarn, + yarnConfigHook, + node-gyp, python3, + srcOnly, + removeReferencesTo, + yarnBuildHook, + makeWrapper, + + # buildInputs nodejs_20, matrix-sdk-crypto-nodejs, + napi-rs-cli, }: let - nodejs = nodejs_20; # only supports nodejs v18.X - v20.X - pin = lib.importJSON ./pin.json; - nodeSources = srcOnly nodejs; - + yarn' = yarn.override { + nodejs = nodejs_20; + }; + yarnConfigHook' = yarnConfigHook.override { + nodejs = nodejs_20; + yarn = yarn'; + }; + yarnBuildHook' = yarnBuildHook.override { + nodejs = nodejs_20; + yarn = yarn'; + }; + matrix-sdk-crypto-nodejs' = matrix-sdk-crypto-nodejs.override { + nodejs = nodejs_20; + napi-rs-cli = napi-rs-cli.override { + nodejs = nodejs_20; + }; + }; + nodeSources = srcOnly nodejs_20; in -mkYarnPackage rec { +stdenv.mkDerivation (finalAttrs: { pname = "matrix-appservice-discord"; - inherit (pin) version; - inherit nodejs; + version = "4.0.0"; src = fetchFromGitHub { owner = "matrix-org"; repo = "matrix-appservice-discord"; - rev = "v${version}"; - hash = pin.srcHash; + tag = "v${finalAttrs.version}"; + hash = "sha256-UyRMMbnX4aJVv8oQfgn/rkZT1cRATtcgFj4fXszDKqo="; }; - packageJSON = ./package.json; - offlineCache = fetchYarnDeps { - yarnLock = "${src}/yarn.lock"; - sha256 = pin.yarnSha256; + yarnOfflineCache = fetchYarnDeps { + yarnLock = "${finalAttrs.src}/yarn.lock"; + hash = "sha256-s8ictJX65mSU2oxaIuCswfb2flo2RN9a1JZevacN/Ic="; }; - pkgConfig = { - "@matrix-org/matrix-sdk-crypto-nodejs" = { - postInstall = '' - # replace with the built package - cd .. - rm -r matrix-sdk-crypto-nodejs - ln -s ${matrix-sdk-crypto-nodejs}/lib/node_modules/@matrix-org/* ./ - ''; - }; + nativeBuildInputs = [ + yarnConfigHook' + yarnBuildHook' + nodejs_20 + node-gyp + python3 + removeReferencesTo + makeWrapper + ]; - better-sqlite3 = { - nativeBuildInputs = [ python3 ]; - postInstall = '' - # build native sqlite bindings - npm run build-release --offline --nodedir="${nodeSources}" - find build -type f -exec \ - ${removeReferencesTo}/bin/remove-references-to \ - -t "${nodeSources}" {} \; - ''; - }; - }; + preBuild = '' + cp -r ${matrix-sdk-crypto-nodejs'}/lib/node_modules/@matrix-org ./node_modules + cd ./node_modules/better-sqlite3 + npm run build-release --offline --nodedir="${nodeSources}" + find build -type f -exec remove-references-to -t "${nodeSources}" {} \; + cd ../../ + ''; - nativeBuildInputs = [ makeWrapper ]; + # npmHooks.npmInstallHook and yarnInstallHook don't work for this package + # because: + # + # - There is no `bin` key in + # package.json, which instructs it to create a binary file for the package. + # - The build/ directory, containing the compiled `.js` files from some + # doesn't get picked up by `yarn pack`. + installPhase = '' + runHook preInstall - buildPhase = '' - runHook preBuild + mkdir -p $out/lib/node_modules - # compile TypeScript sources - yarn --offline build + mv build $out/lib/node_modules/matrix-appservice-discord + cp -r node_modules $out/lib/node_modules/matrix-appservice-discord + makeWrapper '${nodejs_20}/bin/node' "$out/bin/matrix-appservice-discord" \ + --add-flags "$out/lib/node_modules/matrix-appservice-discord/src/discordas.js" - runHook postBuild + # admin tools wrappers + for toolPath in $out/lib/node_modules/matrix-appservice-discord/tools/*; do + makeWrapper '${nodejs_20}/bin/node' \ + "$out/bin/matrix-appservice-discord-$(basename $toolPath .js)" \ + --add-flags "$toolPath" + done + + runHook postInstall ''; doCheck = true; + checkPhase = '' runHook preCheck @@ -78,29 +112,6 @@ mkYarnPackage rec { runHook postCheck ''; - postInstall = '' - OUT_JS_DIR="$out/${passthru.nodeAppDir}/build" - - # server wrapper - makeWrapper '${nodejs}/bin/node' "$out/bin/${pname}" \ - --add-flags "$OUT_JS_DIR/src/discordas.js" - - # admin tools wrappers - for toolPath in $OUT_JS_DIR/tools/*; do - makeWrapper '${nodejs}/bin/node' \ - "$out/bin/${pname}-$(basename $toolPath .js)" \ - --add-flags "$toolPath" - done - ''; - - # don't generate the dist tarball - doDist = false; - - passthru = { - nodeAppDir = "libexec/${pname}/deps/${pname}"; - updateScript = ./update.sh; - }; - meta = { description = "Bridge between Matrix and Discord"; homepage = "https://github.com/matrix-org/matrix-appservice-discord"; @@ -109,4 +120,4 @@ mkYarnPackage rec { platforms = lib.platforms.linux; mainProgram = "matrix-appservice-discord"; }; -} +}) diff --git a/pkgs/by-name/ma/matrix-appservice-discord/pin.json b/pkgs/by-name/ma/matrix-appservice-discord/pin.json deleted file mode 100644 index 7dc4bdcff293..000000000000 --- a/pkgs/by-name/ma/matrix-appservice-discord/pin.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "version": "4.0.0", - "srcHash": "sha256-UyRMMbnX4aJVv8oQfgn/rkZT1cRATtcgFj4fXszDKqo=", - "yarnSha256": "11zw1nkvsplnsiddyi1nb9zgdxn1mkh24nlcvaa69rpsjns9rj5k" -} diff --git a/pkgs/by-name/ma/matrix-appservice-discord/update.sh b/pkgs/by-name/ma/matrix-appservice-discord/update.sh deleted file mode 100755 index 6e6359dfa373..000000000000 --- a/pkgs/by-name/ma/matrix-appservice-discord/update.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env nix-shell -#!nix-shell -I nixpkgs=../../../ -i bash -p nix curl jq prefetch-yarn-deps nix-prefetch-github - -ORG="matrix-org" -PROJ="matrix-appservice-discord" - -if [ "$#" -gt 1 ] || [[ "$1" == -* ]]; then - echo "Regenerates packaging data for $PROJ." - echo "Usage: $0 [git release tag]" - exit 1 -fi - -tag="$1" - -set -euo pipefail - -if [ -z "$tag" ]; then - tag="$( - curl "https://api.github.com/repos/$ORG/$PROJ/releases?per_page=1" | - jq -r '.[0].tag_name' - )" -fi - -src="https://raw.githubusercontent.com/$ORG/$PROJ/$tag" -src_hash=$(nix-prefetch-github $ORG $PROJ --rev ${tag} | jq -r .hash) - -tmpdir=$(mktemp -d) -trap 'rm -rf "$tmpdir"' EXIT - -pushd $tmpdir -curl -O "$src/yarn.lock" -yarn_sha256=$(prefetch-yarn-deps yarn.lock) -popd - -curl -O "$src/package.json" -cat > pin.json << EOF -{ - "version": "$(echo $tag | grep -P '(\d|\.)+' -o)", - "srcHash": "$src_hash", - "yarnSha256": "$yarn_sha256" -} -EOF