diff options
Diffstat (limited to 'nixpkgs/pkgs/servers/matrix-appservice-discord')
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 |