Unverified Commit 7a597a61 authored by Martin Weinelt's avatar Martin Weinelt Committed by GitHub
Browse files

draupnir: init at 2.2.0 (#398489)

parents 7cf9c6aa 45642d71
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -20877,6 +20877,13 @@
    githubId = 76747196;
    name = "Robert Rose";
  };
  RorySys = {
    email = "root@rory.gay";
    github = "TheArcaneBrony";
    githubId = 13570458;
    matrix = "@emma:rory.gay"; # preferred
    name = "Rory&";
  };
  rosehobgoblin = {
    name = "J. L. Bowden";
    github = "rosehobgoblin";
+3 −0
Original line number Diff line number Diff line
{
  "yarn_offline_cache_hash": "sha256-EM1YRbcgn0gLgw/8KImKBbG7T14ztsXqw7U5SINUT+U="
}
+80 −0
Original line number Diff line number Diff line
{
  "name": "draupnir",
  "version": "2.2.0",
  "description": "A moderation tool for Matrix",
  "main": "lib/index.js",
  "repository": "https://github.com/the-draupnir-project/Draupnir.git",
  "author": "Gnuxie",
  "license": "AFL-3.0",
  "private": true,
  "scripts": {
    "build": "tsc --project test/tsconfig.json && tsc > /dev/null 2>&1",
    "postbuild": "corepack yarn describe-version",
    "describe-version": "(git describe > version.txt.tmp && mv version.txt.tmp version.txt) || true && rm -f version.txt.tmp",
    "remove-tests-from-lib": "rm -rf lib/test/ && cp -r lib/src/* lib/ && rm -rf lib/src/",
    "lint": "corepack yarn eslint --cache src test && corepack yarn prettier --cache --ignore-unknown --check src test",
    "start:dev": "corepack yarn build && node --async-stack-traces lib/index.js",
    "test:unit": "mocha --require './test/tsnode.cjs' --forbid-only 'test/unit/**/*.{ts,tsx}'",
    "test:unit:single": "mocha --require test/tsnode.cjs",
    "test:integration": "NODE_ENV=harness mocha --require test/tsnode.cjs --async-stack-traces --forbid-only --require test/integration/fixtures.ts --timeout 300000 --project ./tsconfig.json \"test/integration/**/*Test.ts\"",
    "test:integration:single": "NODE_ENV=harness corepack yarn mocha --require test/tsnode.cjs --require test/integration/fixtures.ts --timeout 300000 --project ./tsconfig.json",
    "test:appservice:integration": "NODE_ENV=harness mocha --require test/tsnode.cjs --async-stack-traces --forbid-only --timeout 300000 --project ./tsconfig.json \"test/appservice/integration/**/*Test.ts\"",
    "test:appservice:integration:single": "NODE_ENV=harness corepack yarn mocha --require test/tsnode.cjs --timeout 300000 --project ./tsconfig.json",
    "test:manual": "NODE_ENV=harness ts-node test/integration/manualLaunchScript.ts",
    "version": "sed -i '/# version automated/s/[0-9][0-9]*\\.[0-9][0-9]*\\.[0-9][^\"]*/'$npm_package_version'/' synapse_antispam/setup.py && git add synapse_antispam/setup.py && cat synapse_antispam/setup.py"
  },
  "devDependencies": {
    "@eslint/js": "^9.7.0",
    "@types/better-sqlite3": "^7.6.9",
    "@types/config": "^3.3.1",
    "@types/crypto-js": "^4.2.2",
    "@types/eslint__js": "^8.42.3",
    "@types/express": "^4.17.21",
    "@types/html-to-text": "^8.0.1",
    "@types/js-yaml": "^4.0.9",
    "@types/jsdom": "21.1.7",
    "@types/mocha": "^10.0.7",
    "@types/nedb": "^1.8.16",
    "@types/node": "^20.14.11",
    "@types/pg": "^8.6.5",
    "@types/request": "^2.48.12",
    "crypto-js": "^4.2.0",
    "eslint": "^9.7.0",
    "expect": "^29.7.0",
    "mocha": "^10.7.0",
    "prettier": "^3.3.3",
    "ts-auto-mock": "^3.7.4",
    "ts-node": "^10.9.2",
    "typescript": "^5.5.3",
    "typescript-eslint": "^7.16.1"
  },
  "dependencies": {
    "@gnuxie/typescript-result": "^1.0.0",
    "@sentry/node": "^7.17.2",
    "@sinclair/typebox": "0.34.13",
    "@the-draupnir-project/interface-manager": "4.0.2",
    "@the-draupnir-project/matrix-basic-types": "1.2.0",
    "better-sqlite3": "^9.4.3",
    "body-parser": "^1.20.2",
    "config": "^3.3.9",
    "express": "^4.19",
    "html-to-text": "^8.0.0",
    "js-yaml": "^4.1.0",
    "jsdom": "^24.0.0",
    "matrix-appservice-bridge": "^10.3.1",
    "matrix-bot-sdk": "npm:@vector-im/matrix-bot-sdk@^0.7.1-element.6",
    "matrix-protection-suite": "npm:@gnuxie/matrix-protection-suite@2.10.0",
    "matrix-protection-suite-for-matrix-bot-sdk": "npm:@gnuxie/matrix-protection-suite-for-matrix-bot-sdk@2.10.1",
    "pg": "^8.8.0",
    "yaml": "^2.3.2"
  },
  "overrides": {
    "matrix-bot-sdk": "$@vector-im/matrix-bot-sdk",
    "@vector-im/matrix-bot-sdk": "npm:@vector-im/matrix-bot-sdk@^0.7.1-element.6",
    "@the-draupnir-project/matrix-basic-types": "@the-draupnir-project/matrix-basic-types@1.2.0"
  },
  "engines": {
    "node": ">=20.0.0"
  },
  "packageManager": "yarn@1.22.22+sha1.ac34549e6aa8e7ead463a7407e1c7390f61a6610"
}
+121 −0
Original line number Diff line number Diff line
{
  lib,
  fetchFromGitHub,
  makeWrapper,
  nodejs,
  matrix-sdk-crypto-nodejs,
  python3,
  sqlite,
  srcOnly,
  removeReferencesTo,
  mkYarnPackage,
  fetchYarnDeps,
  stdenv,
  cctools,
}:

# docs: https://github.com/NixOS/nixpkgs/blob/master/doc/languages-frameworks/javascript.section.md#yarn2nix-javascript-yarn2nix
let
  hashesFile = builtins.fromJSON (builtins.readFile ./hashes.json);
  nodeSources = srcOnly nodejs;
in
mkYarnPackage rec {
  pname = "draupnir";
  version = "2.2.0";

  src = fetchFromGitHub {
    owner = "the-draupnir-project";
    repo = "Draupnir";
    tag = "v${version}";
    hash = "sha256-EeYjtrfnX+z6SeXavUhUU53mURph48gIUZlF3tubl20=";
  };

  nativeBuildInputs = [
    makeWrapper
    sqlite
  ];

  offlineCache = fetchYarnDeps {
    name = "${pname}-yarn-offline-cache";
    yarnLock = src + "/yarn.lock";
    hash = hashesFile.yarn_offline_cache_hash;
  };

  packageJSON = ./package.json;

  pkgConfig = {
    "@matrix-org/matrix-sdk-crypto-nodejs" = {
      postInstall = ''
        # replace with the existing package in nixpkgs
        cd ..
        rm -r matrix-sdk-crypto-nodejs
        ln -s ${matrix-sdk-crypto-nodejs}/lib/node_modules/@matrix-org/* ./
      '';
    };

    better-sqlite3 = {
      nativeBuildInputs = [ python3 ] ++ lib.optional stdenv.hostPlatform.isDarwin cctools.libtool;
      postInstall = ''
        # build native sqlite bindings
        npm run build-release --offline --nodedir="${nodeSources}"
        find build -type f -exec \
          ${lib.getExe removeReferencesTo} -t "${nodeSources}" {} \;
      '';
    };
  };

  preBuild = ''
    # install proper version info
    mkdir --parents deps/draupnir/
    echo "${version}-nix" > deps/draupnir/version.txt

    # makes network requests
    sed -i 's/corepack //g' deps/draupnir/package.json
  '';

  buildPhase = ''
    runHook preBuild

    yarn --offline --verbose build

    runHook postBuild
  '';

  installPhase = ''
    runHook preInstall

    mkdir --parents $out/share
    cp --archive . $out/share/draupnir

    makeWrapper ${lib.getExe nodejs} $out/bin/draupnir \
      --add-flags $out/share/draupnir/deps/draupnir/lib/index.js

    runHook postInstall
  '';

  distPhase = "true";

  passthru.updateScript = ./update.sh;

  meta = with lib; {
    description = "A moderation tool for Matrix";
    homepage = "https://github.com/the-draupnir-project/Draupnir";
    longDescription = ''
      As an all-in-one moderation tool, it can protect your server from
      malicious invites, spam messages, and whatever else you don't want.
      In addition to server-level protection, Draupnir is great for communities
      wanting to protect their rooms without having to use their personal
      accounts for moderation.

      The bot by default includes support for bans, redactions, anti-spam,
      server ACLs, room directory changes, room alias transfers, account
      deactivation, room shutdown, and more.

      A Synapse module is also available to apply the same rulesets the bot
      uses across an entire homeserver.
    '';
    license = licenses.afl3;
    maintainers = with maintainers; [ RorySys ];
    mainProgram = "draupnir";
  };
}
+39 −0
Original line number Diff line number Diff line
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p curl common-updater-scripts coreutils jq prefetch-yarn-deps git

set -euo pipefail
set -x

cd  "$(git rev-parse --show-toplevel)"

TMPDIR=$(mktemp -d)

echo "Getting versions..."
latestVersion="$(curl -sL "https://api.github.com/repos/the-draupnir-project/Draupnir/releases?per_page=1" | jq -r '.[0].tag_name | ltrimstr("v")')"
echo " --> Latest version: ${latestVersion}"
currentVersion=$(nix-instantiate --eval -E "with import ./. {}; draupnir.version or (lib.getVersion draupnir)" | tr -d '"')
echo " --> Current version: ${currentVersion}"
if [[ "$currentVersion" == "$latestVersion" ]]; then
  echo "Draupnir is up-to-date: $currentVersion"
  exit 0
else
  echo "We are out of date..."
fi

curl https://raw.githubusercontent.com/the-draupnir-project/Draupnir/v$latestVersion/package.json -o pkgs/by-name/dr/draupnir/package.json

update-source-version draupnir "$latestVersion"

# Update yarn offline cache hash
cd $TMPDIR

curl https://raw.githubusercontent.com/the-draupnir-project/Draupnir/v$latestVersion/yarn.lock -o yarn.lock
TMP_PREFETCH_HASH=`prefetch-yarn-deps yarn.lock`
NEW_YARN_OFFLINE_HASH=`nix hash to-sri --type sha256 $TMP_PREFETCH_HASH`

cd -
echo "New yarn offline hash: $NEW_YARN_OFFLINE_HASH"

TMPFILE=$(mktemp)
jq '.yarn_offline_cache_hash = "'$NEW_YARN_OFFLINE_HASH'"' pkgs/by-name/dr/draupnir/hashes.json > $TMPFILE
mv -- "$TMPFILE" pkgs/by-name/dr/draupnir/hashes.json