about summary refs log tree commit diff
path: root/nixpkgs/pkgs/servers/matrix-appservice-discord
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/servers/matrix-appservice-discord')
-rw-r--r--nixpkgs/pkgs/servers/matrix-appservice-discord/default.nix108
-rw-r--r--nixpkgs/pkgs/servers/matrix-appservice-discord/package.json84
-rw-r--r--nixpkgs/pkgs/servers/matrix-appservice-discord/pin.json5
-rwxr-xr-xnixpkgs/pkgs/servers/matrix-appservice-discord/update.sh42
4 files changed, 239 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/servers/matrix-appservice-discord/default.nix b/nixpkgs/pkgs/servers/matrix-appservice-discord/default.nix
new file mode 100644
index 000000000000..605df82b5771
--- /dev/null
+++ b/nixpkgs/pkgs/servers/matrix-appservice-discord/default.nix
@@ -0,0 +1,108 @@
+{ lib
+, mkYarnPackage
+, fetchYarnDeps
+, fetchFromGitHub
+, srcOnly
+, makeWrapper
+, removeReferencesTo
+, python3
+, nodejs
+, matrix-sdk-crypto-nodejs
+}:
+
+let
+  pin = lib.importJSON ./pin.json;
+  nodeSources = srcOnly nodejs;
+
+in mkYarnPackage rec {
+  pname = "matrix-appservice-discord";
+  inherit (pin) version;
+
+  src = fetchFromGitHub {
+    owner = "matrix-org";
+    repo = "matrix-appservice-discord";
+    rev = "v${version}";
+    hash = pin.srcHash;
+  };
+
+  packageJSON = ./package.json;
+  offlineCache = fetchYarnDeps {
+    yarnLock = "${src}/yarn.lock";
+    sha256 = pin.yarnSha256;
+  };
+
+  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/* ./
+      '';
+    };
+
+    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}" {} \;
+     '';
+    };
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildPhase = ''
+    runHook preBuild
+
+    # compile TypeScript sources
+    yarn --offline build
+
+    runHook postBuild
+  '';
+
+  doCheck = true;
+  checkPhase = ''
+    runHook preCheck
+
+    # the default 2000ms timeout is sometimes too short on our busy builders
+    yarn --offline test --timeout 10000
+
+    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 = "A bridge between Matrix and Discord";
+    homepage = "https://github.com/Half-Shot/matrix-appservice-discord";
+    license = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ pacien ];
+    platforms = lib.platforms.linux;
+    mainProgram = "matrix-appservice-discord";
+  };
+}
diff --git a/nixpkgs/pkgs/servers/matrix-appservice-discord/package.json b/nixpkgs/pkgs/servers/matrix-appservice-discord/package.json
new file mode 100644
index 000000000000..f2ea8a3d924d
--- /dev/null
+++ b/nixpkgs/pkgs/servers/matrix-appservice-discord/package.json
@@ -0,0 +1,84 @@
+{
+  "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/nixpkgs/pkgs/servers/matrix-appservice-discord/pin.json b/nixpkgs/pkgs/servers/matrix-appservice-discord/pin.json
new file mode 100644
index 000000000000..7dc4bdcff293
--- /dev/null
+++ b/nixpkgs/pkgs/servers/matrix-appservice-discord/pin.json
@@ -0,0 +1,5 @@
+{
+  "version": "4.0.0",
+  "srcHash": "sha256-UyRMMbnX4aJVv8oQfgn/rkZT1cRATtcgFj4fXszDKqo=",
+  "yarnSha256": "11zw1nkvsplnsiddyi1nb9zgdxn1mkh24nlcvaa69rpsjns9rj5k"
+}
diff --git a/nixpkgs/pkgs/servers/matrix-appservice-discord/update.sh b/nixpkgs/pkgs/servers/matrix-appservice-discord/update.sh
new file mode 100755
index 000000000000..6e6359dfa373
--- /dev/null
+++ b/nixpkgs/pkgs/servers/matrix-appservice-discord/update.sh
@@ -0,0 +1,42 @@
+#!/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