dolos fixed
CI / Nix Flake Check (push) Successful in 52s
CI / Build Packages (default) (push) Successful in 52s
CI / Build Packages (example-a) (push) Successful in 46s
CI / Build Packages (example-b) (push) Successful in 46s
CI / Build Packages (pyzotero) (push) Successful in 54s
CI / Build Packages (pyzotero-cli) (push) Successful in 56s

This commit is contained in:
2026-06-05 16:51:59 +02:00
parent 8bd0898386
commit 4f610e96a0
2 changed files with 151 additions and 0 deletions
+1
View File
@@ -3,6 +3,7 @@
}:
let
self = {
dolos = pkgs.callPackage ./dolos { nodejs = pkgs.nodejs_22; };
example-a = pkgs.callPackage ./example-a { };
example-b = pkgs.callPackage ./example-b { };
pyzotero = pkgs.callPackage ./pyzotero { };
+150
View File
@@ -0,0 +1,150 @@
{
lib,
buildNpmPackage,
fetchFromGitHub,
python3,
nodejs,
}:
let
version = "2.9.3";
tree-sitter-elixir = fetchFromGitHub {
owner = "elixir-lang";
repo = "tree-sitter-elixir";
rev = "v0.3.5";
hash = "sha256-C5/+t49pcFh45GqLZRjRs/sH8Ej+dklR/brad+snsyQ=";
};
in
buildNpmPackage rec {
pname = "dolos";
inherit version;
inherit nodejs;
src = fetchFromGitHub {
owner = "dodona-edu";
repo = "dolos";
rev = "v${version}";
hash = "sha256-kilCxSe4njHyoXVXpyLmx5HnGkzFptLYOypQmldGnzc=";
fetchSubmodules = true;
};
npmWorkspace = "cli";
npmDepsHash = "sha256-3RMUWo6vybfi0BvQ12jjxuYFPDe3HkTv24L3BsuOCFg=";
nativeBuildInputs = [ python3 ];
TREE_SITTER_BUILD_FROM_SOURCE = "1";
npm_config_build_from_source = "true";
dontNpmBuild = true;
npmRebuildFlags = [ "--ignore-scripts" ];
postConfigure = ''
sed -i '2s/^/process.exit(0);\n/' node_modules/tree-sitter-cli/install.js
npm rebuild
'';
preBuild = ''
cp -r ${tree-sitter-elixir} parsers/elixir
chmod -R u+w parsers/elixir
cat > parsers/elixir/binding.gyp << 'GYPEOF'
{
"targets": [
{
"target_name": "tree_sitter_elixir_binding",
"dependencies": [
"<!(node -p \"require('node-addon-api').targets\"):node_addon_api_except",
],
"include_dirs": [
"src",
"src/tree_sitter",
],
"sources": [
"bindings/node/binding.cc",
"src/parser.c",
"src/scanner.c",
],
"cflags_c": ["-std=c11"],
}
]
}
GYPEOF
cat > parsers/binding.gyp << 'GYPEOF'
{
"includes": [
"bash/binding.gyp",
"c/binding.gyp",
"cpp/binding.gyp",
"c_sharp/binding.gyp",
"elm/binding.gyp",
"elixir/binding.gyp",
"go/binding.gyp",
"groovy/binding.gyp",
"java/binding.gyp",
"javascript/binding.gyp",
"modelica/binding.gyp",
"ocaml/binding.gyp",
"php/binding.gyp",
"python/binding.gyp",
"r/binding.gyp",
"rust/binding.gyp",
"scala/binding.gyp",
"sql/binding.gyp",
"typescript/binding.gyp",
"verilog/binding.gyp"
]
}
GYPEOF
sed -i '/^parsers.verilog/a \
parsers.elixir = require("./build/Release/tree_sitter_elixir_binding");\
parsers.elixir.nodeTypeInfo = require("./elixir/src/node-types.json");
' parsers/index.js
npm run build -w parsers
'';
buildPhase = ''
runHook preBuild
npm run build -w cli
npm run build -w lib
npm run build -w core
npm run build -w web
runHook postBuild
'';
postInstall = ''
cp -r lib $out/lib/node_modules/dolos-meta/lib
chmod -R u+w $out/lib/node_modules/dolos-meta/lib
cp -r core $out/lib/node_modules/dolos-meta/core
chmod -R u+w $out/lib/node_modules/dolos-meta/core
cp -r parsers $out/lib/node_modules/dolos-meta/parsers
chmod -R u+w $out/lib/node_modules/dolos-meta/parsers
dolonsDir="$out/lib/node_modules/dolos-meta/node_modules/@dodona"
rm -rf "$dolonsDir/dolos-web"
mkdir -p "$dolonsDir/dolos-web"
install -m644 web/index.js "$dolonsDir/dolos-web/index.js"
install -m644 web/index.d.ts "$dolonsDir/dolos-web/index.d.ts" 2>/dev/null || true
install -m644 web/package.json "$dolonsDir/dolos-web/package.json"
cp -r web/dist "$dolonsDir/dolos-web/dist"
chmod -R u+w "$dolonsDir/dolos-web"
rm "$dolonsDir/dolos"
ln -s ../.. "$dolonsDir/dolos"
'';
meta = {
description = "Source code plagiarism detection tool for programming exercises";
homepage = "https://dolos.ugent.be";
license = lib.licenses.mit;
mainProgram = "dolos";
platforms = lib.platforms.linux ++ lib.platforms.darwin;
};
}