matrix-hookshot: cleanup

Cleans up the package significantly. Both fetchYarnDeps and
fetchCargoVendor have prefetchers built into nix-update, so we can
delete the custom updater script now. Further, mkYarnPackage is
deprecated, so switch to stdenv.mkDerivation which also allows us to
remove the package.json file. Finally, just some misc cleanup and
modernization to follow nixpkgs' standards. Woo!
This commit is contained in:
dish
2025-11-13 18:28:31 -05:00
parent a603d123fc
commit d61bed73d7
4 changed files with 37 additions and 212 deletions
@@ -1,131 +0,0 @@
{
"name": "matrix-hookshot",
"version": "7.1.0",
"description": "A bridge between Matrix and multiple project management services, such as GitHub, GitLab and JIRA.",
"main": "lib/app.js",
"repository": "https://github.com/matrix-org/matrix-hookshot",
"author": "matrix.org",
"license": "Apache-2.0",
"napi": {
"name": "matrix-hookshot-rs"
},
"engines": {
"node": ">=22"
},
"scripts": {
"build:web": "vite build",
"build:app": "tsc --project tsconfig.json",
"build:app:rs": "napi build --dts ../src/libRs.d.ts --release ./lib",
"build:app:fix-defs": "ts-node scripts/definitions-fixer.ts src/libRs.d.ts",
"build:docs": "ts-node scripts/build-metrics-docs.ts > docs/metrics.md && mdbook build",
"dev:web": "vite dev",
"build": "scripts/build-app.sh",
"clean:web": "rimraf public/",
"clean:app": "tsc --build tsconfig.json --clean",
"clean:app:rs": "rimraf src/libRs.d.ts target/",
"clean:docs": "mdbook clean",
"clean": "scripts/clean.sh",
"prepare": "yarn build",
"start": "node --require source-map-support/register lib/App/BridgeApp.js",
"start:app": "node --require source-map-support/register lib/App/BridgeApp.js",
"start:webhooks": "node --require source-map-support/register lib/App/GithubWebhookApp.js",
"start:matrixsender": "node --require source-map-support/register lib/App/MatrixSenderApp.js",
"start:resetcrypto": "node --require source-map-support/register lib/App/ResetCryptoStore.js",
"test": "NODE_OPTIONS=--no-experimental-strip-types mocha -r ts-node/register tests/init.ts 'tests/*.ts' 'tests/**/*.ts'",
"test:e2e": "vitest",
"test:cover": "NODE_OPTIONS=--no-experimental-strip-types nyc --reporter=lcov --reporter=text yarn test",
"lint": "yarn run lint:js && yarn run lint:rs",
"lint:js": "yarn prettier -c src tests spec web scripts docs && eslint",
"lint:js:apply": "yarn prettier -w src tests spec web scripts docs && eslint --fix",
"lint:rs": "cargo fmt --all -- --check && cargo clippy -- -Dwarnings",
"lint:rs:apply": "cargo clippy --fix && cargo fmt --all",
"generate-default-config": "ts-node src/config/Defaults.ts --config > config.sample.yml",
"validate-config": "ts-node src/config/Config.ts"
},
"dependencies": {
"@alloc/quick-lru": "^5.2.0",
"@octokit/auth-app": "^6.0.2",
"@octokit/auth-token": "^4.0.0",
"@octokit/rest": "^20.0.2",
"@octokit/webhooks": "^12.0.10",
"@sentry/node": "^7.52.1",
"@vector-im/compound-design-tokens": "^2.0.1",
"@vector-im/compound-web": "^7.3.0",
"ajv": "^8.11.0",
"axios": "^1.8.2",
"clsx": "^2.1.1",
"cors": "^2.8.5",
"date-fns": "^4.1.0",
"express": "^4.21.2",
"figma-js": "^1.16.1-0",
"helmet": "^7.1.0",
"http-status-codes": "^2.2.0",
"ioredis": "^5.6.1",
"jira-client": "^8.2.2",
"markdown-it": "^14.0.0",
"matrix-appservice-bridge": "^11.0.0",
"matrix-bot-sdk": "npm:@vector-im/matrix-bot-sdk@0.7.1-element.14",
"matrix-widget-api": "^1.10.0",
"micromatch": "^4.0.8",
"mime": "^4.0.4",
"node-emoji": "^2.1.3",
"parse-duration": "^2.1.3",
"preact-render-to-string": "^6.3.1",
"prom-client": "^15.1.0",
"quickjs-emscripten": "^0.31.0",
"reflect-metadata": "^0.2.1",
"source-map-support": "^0.5.21",
"string-argv": "^0.3.1",
"tiny-typed-emitter": "^2.1.0",
"url-join": "^5.0.0",
"vite-plugin-magical-svg": "^1.1.1",
"winston": "^3.11.0",
"xml2js": "^0.6.2",
"yaml": "^2.3.4"
},
"devDependencies": {
"@babel/core": "^7.26.9",
"@codemirror/lang-javascript": "^6.0.2",
"@eslint/eslintrc": "^3.2.0",
"@eslint/js": "^9.15.0",
"@fontsource/inter": "^5.1.0",
"@napi-rs/cli": "^2.13.2",
"@octokit/webhooks-types": "^7.6.1",
"@preact/preset-vite": "^2.9.1",
"@rollup/plugin-alias": "^5.1.0",
"@testcontainers/redis": "^10.25.0",
"@tsconfig/node22": "^22",
"@types/ajv": "^1.0.0",
"@types/busboy": "^1.5.4",
"@types/chai": "^4.2.22",
"@types/cors": "^2.8.12",
"@types/express": "^4.17.23",
"@types/jira-client": "^7.1.0",
"@types/markdown-it": "^13.0.7",
"@types/micromatch": "^4.0.1",
"@types/mime": "^3.0.4",
"@types/mocha": "^10.0.6",
"@types/node": "^22",
"@types/xml2js": "^0.4.11",
"@uiw/react-codemirror": "^4.12.3",
"busboy": "^1.6.0",
"chai": "^4",
"eslint": "^9.15.0",
"eslint-plugin-chai-expect": "^3.1.0",
"eslint-plugin-mocha": "^10.5.0",
"eslint-plugin-react": "^7.37.2",
"mocha": "^10.8.2",
"nyc": "^17.1.0",
"preact": "^10.26.2",
"prettier": "^3.5.3",
"rimraf": "6.0.1",
"sass": "^1.81.0",
"testcontainers": "^10.25.0",
"ts-node": "10.9.2",
"typescript": "^5.7.2",
"typescript-eslint": "^8.16.0",
"vite": "^5.4.19",
"vitest": "^3.1.3"
},
"packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
}
+37 -38
View File
@@ -5,87 +5,86 @@
fetchYarnDeps,
makeWrapper,
matrix-sdk-crypto-nodejs,
mkYarnPackage,
yarnConfigHook,
yarnInstallHook,
cargo,
rustPlatform,
rustc,
napi-rs-cli,
pkg-config,
nodejs_24,
nodejs,
openssl,
nix-update-script,
}:
let
data = lib.importJSON ./pin.json;
in
mkYarnPackage rec {
stdenv.mkDerivation (finalAttrs: {
pname = "matrix-hookshot";
version = data.version;
version = "7.1.0";
src = fetchFromGitHub {
owner = "matrix-org";
repo = "matrix-hookshot";
rev = data.version;
hash = data.srcHash;
tag = finalAttrs.version;
hash = "sha256-jRLax1vqC0K3XvAWrH1J7nqtFioLr4n6Df9Kra/KKKU=";
};
packageJSON = ./package.json;
nodejs = nodejs_24;
offlineCache = fetchYarnDeps {
yarnLock = src + "/yarn.lock";
sha256 = data.yarnHash;
inherit (finalAttrs) src;
hash = "sha256-bxSeaJyQojfqIl/X4pjG+QRATKYKjsQhTQ3JOY/HDFQ=";
};
cargoDeps = rustPlatform.fetchCargoVendor {
inherit pname version src;
hash = data.cargoHash;
inherit (finalAttrs) pname version src;
hash = "sha256-1eBiLZHGNJxXNCVavkKt0xckAD2cilOW2wNCtqJ8O4g=";
};
packageResolutions = {
"@matrix-org/matrix-sdk-crypto-nodejs" =
"${matrix-sdk-crypto-nodejs}/lib/node_modules/@matrix-org/matrix-sdk-crypto-nodejs";
};
extraBuildInputs = [ openssl ];
buildInputs = [ openssl ];
nativeBuildInputs = [
rustPlatform.cargoSetupHook
yarnConfigHook
yarnInstallHook
pkg-config
cargo
rustc
napi-rs-cli
makeWrapper
nodejs
];
preBuild = ''
# We want nixpkgs' version of this instead
rm -rf node_modules/@matrix-org/matrix-sdk-crypto-nodejs
cp -r ${matrix-sdk-crypto-nodejs}/lib/node_modules/@matrix-org/matrix-sdk-crypto-nodejs \
node_modules/@matrix-org/matrix-sdk-crypto-nodejs
chmod -R a+rwx node_modules/@matrix-org/matrix-sdk-crypto-nodejs
'';
buildPhase = ''
runHook preBuild
cd deps/${pname}
napi build --target ${stdenv.hostPlatform.rust.rustcTargetSpec} --dts ../src/libRs.d.ts --release ./lib
yarn run build:app:rs --target ${stdenv.hostPlatform.rust.rustcTargetSpec}
yarn run build:app:fix-defs
yarn run build:app
yarn run build:web
cd ../..
runHook postBuild
'';
postInstall = ''
makeWrapper '${nodejs_24}/bin/node' "$out/bin/matrix-hookshot" --add-flags \
"$out/libexec/matrix-hookshot/deps/matrix-hookshot/lib/App/BridgeApp.js"
makeWrapper '${lib.getExe nodejs}' "$out/bin/matrix-hookshot" --add-flags \
"$out/lib/node_modules/matrix-hookshot/lib/App/BridgeApp.js"
'';
postFixup = ''
# Scrub reference to rustc
rm $out/libexec/matrix-hookshot/deps/matrix-hookshot/target/.rustc_info.json
'';
passthru.updateScript = nix-update-script { };
doDist = false;
meta = with lib; {
meta = {
changelog = "https://github.com/matrix-org/matrix-hookshot/blob/${finalAttrs.version}/CHANGELOG.md";
description = "Bridge between Matrix and multiple project management services, such as GitHub, GitLab and JIRA";
homepage = "https://matrix-org.github.io/matrix-hookshot/";
mainProgram = "matrix-hookshot";
maintainers = with maintainers; [ chvp ];
license = licenses.asl20;
platforms = platforms.linux;
maintainers = with lib.maintainers; [ chvp ];
license = lib.licenses.asl20;
platforms = lib.platforms.linux;
};
}
})
-6
View File
@@ -1,6 +0,0 @@
{
"version": "7.1.0",
"srcHash": "sha256-jRLax1vqC0K3XvAWrH1J7nqtFioLr4n6Df9Kra/KKKU=",
"yarnHash": "0m0cqy7kkj8d9lhw93halr64017rqscf5msz4bm3g8lhkil9w53g",
"cargoHash": "sha256-1eBiLZHGNJxXNCVavkKt0xckAD2cilOW2wNCtqJ8O4g="
}
-37
View File
@@ -1,37 +0,0 @@
#!/usr/bin/env -S nix shell nixpkgs#nix nixpkgs#curl nixpkgs#jq nixpkgs#prefetch-yarn-deps nixpkgs#nix-prefetch-github nixpkgs#nix-prefetch-git --command bash
if [ "$#" -gt 1 ] || [[ "$1" == -* ]]; then
echo "Regenerates packaging data for matrix-hookshot."
echo "Usage: $0 [git release tag]"
exit 1
fi
version="$1"
set -euo pipefail
if [ -z "$version" ]; then
version="$(curl "https://api.github.com/repos/matrix-org/matrix-hookshot/releases?per_page=1" | jq -r '.[0].tag_name')"
fi
src="https://raw.githubusercontent.com/matrix-org/matrix-hookshot/$version"
src_hash=$(nix-prefetch-github matrix-org matrix-hookshot --rev ${version} | jq -r .hash)
tmpdir=$(mktemp -d)
trap 'rm -rf "$tmpdir"' EXIT
pushd $tmpdir
curl -O "$src/yarn.lock"
yarn_hash=$(prefetch-yarn-deps yarn.lock)
popd
curl -O "$src/package.json"
# There is no prefetcher for the cargo hash, but care should still be taken to update it
cat > pin.json << EOF
{
"version": "$version",
"srcHash": "$src_hash",
"yarnHash": "$yarn_hash",
"cargoHash": "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
}
EOF