matrix-appservice-discord: rewrite using yarn{Config,Build}Hooks (#493048)
This commit is contained in:
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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";
|
||||
};
|
||||
}
|
||||
})
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"version": "4.0.0",
|
||||
"srcHash": "sha256-UyRMMbnX4aJVv8oQfgn/rkZT1cRATtcgFj4fXszDKqo=",
|
||||
"yarnSha256": "11zw1nkvsplnsiddyi1nb9zgdxn1mkh24nlcvaa69rpsjns9rj5k"
|
||||
}
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user