-
-
Notifications
You must be signed in to change notification settings - Fork 14.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
10d9d04
commit 0eac368
Showing
4 changed files
with
255 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
{ | ||
"yarn_offline_cache_hash": "sha256-pT7OV4criLnohiye+8t9bkn9jScJpdXtpv4eualsphM=" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
{ | ||
"name": "draupnir", | ||
"version": "2.0.0-beta.11", | ||
"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/humanize-duration": "^3.27.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", | ||
"@types/shell-quote": "1.7.5", | ||
"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", | ||
"typescript-formatter": "^7.2" | ||
}, | ||
"dependencies": { | ||
"@gnuxie/typescript-result": "^1.0.0", | ||
"@sentry/node": "^7.17.2", | ||
"@sentry/tracing": "^7.17.2", | ||
"@sinclair/typebox": "0.34.13", | ||
"@the-draupnir-project/interface-manager": "3.0.0", | ||
"@the-draupnir-project/matrix-basic-types": "^0.2.0", | ||
"await-lock": "^2.2.2", | ||
"better-sqlite3": "^9.4.3", | ||
"body-parser": "^1.20.2", | ||
"config": "^3.3.9", | ||
"express": "^4.19", | ||
"html-to-text": "^8.0.0", | ||
"humanize-duration": "^3.27.1", | ||
"humanize-duration-ts": "^2.1.1", | ||
"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/[email protected]", | ||
"matrix-protection-suite-for-matrix-bot-sdk": "npm:@gnuxie/[email protected]", | ||
"parse-duration": "^1.0.2", | ||
"pg": "^8.8.0", | ||
"shell-quote": "^1.7.3", | ||
"ulidx": "^2.2.1", | ||
"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" | ||
}, | ||
"engines": { | ||
"node": ">=20.0.0" | ||
}, | ||
"packageManager": "[email protected]+sha1.ac34549e6aa8e7ead463a7407e1c7390f61a6610" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,124 @@ | ||
{ | ||
lib, | ||
fetchFromGitHub, | ||
makeWrapper, | ||
nodejs, | ||
matrix-sdk-crypto-nodejs, | ||
python3, | ||
sqlite, | ||
srcOnly, | ||
removeReferencesTo, | ||
mkYarnPackage, | ||
fetchYarnDeps, | ||
nixosTests, | ||
}: | ||
|
||
# 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.0.0-beta.11"; | ||
src = fetchFromGitHub { | ||
owner = "the-draupnir-project"; | ||
repo = "Draupnir"; | ||
rev = "v${version}"; | ||
hash = "sha256-jh0DpThlopP5nSTKqNh7BLjGGlz2vTFUafUI2R6wOT0="; | ||
}; | ||
|
||
nativeBuildInputs = [ | ||
makeWrapper | ||
sqlite | ||
]; | ||
|
||
offlineCache = fetchYarnDeps { | ||
name = "${pname}-yarn-offline-cache"; | ||
yarnLock = src + "/yarn.lock"; | ||
hash = hashesFile.yarn_offline_cache_hash; | ||
}; | ||
|
||
yarnLock = src + "/yarn.lock"; | ||
packageJSON = ./package.json; | ||
|
||
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}" {} \; | ||
''; | ||
}; | ||
}; | ||
|
||
#prebuild phase | ||
preBuild = '' | ||
echo "Adding version.txt..." | ||
mkdir -p deps/draupnir/ | ||
echo "${version}-nix" > deps/draupnir/version.txt | ||
sed -i 's/corepack //g' deps/draupnir/package.json | ||
''; | ||
|
||
buildPhase = '' | ||
runHook preBuild | ||
echo "Building..." | ||
yarn --offline --verbose build | ||
runHook postBuild | ||
''; | ||
|
||
installPhase = '' | ||
runHook preInstall | ||
mkdir -p $out/share | ||
cp -a . $out/share/draupnir | ||
makeWrapper ${nodejs}/bin/node $out/bin/draupnir \ | ||
--add-flags $out/share/draupnir/deps/draupnir/lib/index.js | ||
runHook postInstall | ||
''; | ||
distPhase = "true"; | ||
|
||
passthru = { | ||
tests = { | ||
inherit (nixosTests) draupnir; | ||
}; | ||
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"; | ||
}; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
#!/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 |