1313let
1414 autograder-lib = callPackage ./autograder-lib.nix { } ;
1515 gen-autograder = callPackage ./gen-autograder.nix { } ;
16- pyret-lang-lib-a = pyret-lang . override {
17- phaseAOnly = true ;
18- } ;
1916 buildtime-deps = runtime-deps . override {
2017 keep-additional = [ "ws" ] ;
2118 # npmDepsHash = lib.fakeHash;
2623 reset-load-path-patch = true ;
2724 } ;
2825 } ;
26+ pyret-lang-lib-a = pyret-lang-patched . override {
27+ phaseAOnly = true ;
28+ } ;
2929in
3030stdenv . mkDerivation {
3131 name = "pyret-autograder-gradescope-build" ;
@@ -43,21 +43,64 @@ stdenv.mkDerivation {
4343 SHARE=$out/share/pyret-autograder
4444 mkdir -p $SHARE
4545
46- cp -r ${ autograder-lib } /compiled/. $SHARE/autograder-lib
47- cp -r ${ pyret-lang-lib-a } /build/phaseA/lib-compiled/. $SHARE/pyret-lib
46+ cp -r --no-preserve=mode,ownership ${ autograder-lib } /compiled/. $SHARE/autograder-lib
47+ cp -r --no-preserve=mode,ownership ${ pyret-lang-lib-a } /build/phaseA/lib-compiled/. $SHARE/pyret-lib
48+ cp -r --no-preserve=mode,ownership ${ pyret-lang-lib-a } /build/phaseA/js/. $SHARE/js
49+ cp -r --no-preserve=mode,ownership ${ pyret-lang-lib-a } /build/phaseA/bundled-node-deps.js $SHARE/
4850 cp ${ pyret-lang-patched } /build/phaseA/pyret.jarr $SHARE/pyret.jarr
49- cp ${ pyret-lang } /src/js/base/handalone.js $SHARE/handalone.js
50- cp ${ pyret-lang } /src/scripts/standalone-configA.json $SHARE/standalone-configA.json
51- # TODO: rename
51+ cp ${ pyret-lang-patched } /src/js/base/handalone.js $SHARE/handalone.js
52+ cp ${ pyret-lang-patched } /src/scripts/standalone-configA.json $SHARE/standalone-configA.json
53+ cp ${ pyret-lang-patched } /build/phaseA/config.json $SHARE/
54+ # TODO: `main` isn't a great name for this...
5255 cp ${ pyret-autograder-src } /pkgs/gradescope/src/main.arr $SHARE/main.arr
53- cp -r --no-preserve=mode,ownership ${ buildtime-deps } /node_modules $out/node_modules
56+
57+
58+
59+ # FIXME: we want to have somthing like this:
60+ # makeWrapper ${ lib . getExe nodejs-slim-stripped } $BIN/wrapped-pyret \
61+ # --add-flags "$SHARE/pyret.jarr" \
62+ # --add-flags "--require-config $SHARE/standalone-configA.json" \
63+ # --add-flags "--compiled-read-only-dir $SHARE/pyret-lib" \
64+ # --add-flags "--compiled-read-only-dir $SHARE/autograder-lib" \
65+ # --add-flags "--standalone-file $SHARE/handalone.js" \
66+ # --add-flags "-no-check-mode"
67+
68+ # TODO: we shouldn't have to ship pyret library node_modules
69+
70+ NODE_MODULES=$out/node_modules
71+ mkdir -p $NODE_MODULES
72+ cp -r --no-preserve=mode,ownership ${ buildtime-deps } /node_modules/. $NODE_MODULES
73+
74+
75+ find $SHARE/autograder-lib -type f -name '*.js' -print0 \
76+ | xargs -0 grep -lF '/build/workspace-prepared/pkgs/core/' \
77+ | xargs sed -i "s|/build/workspace-prepared/pkgs/core/|$NODE_MODULES/pyret-autograder/|g"
78+
5479 # FIXME: see if we can inline npm resolution inside the compiled files.
55- mkdir -p $out/node_modules/pyret-autograder/
56- cp -r ${ pyret-autograder-src } /pkgs/core/. $out/node_modules/pyret-autograder/
80+ # HACK: temporarily we will just copy the pyret source files into node_modules
81+ mkdir -p $NODE_MODULES/pyret-autograder/
82+ cp -r ${ pyret-autograder-src } /pkgs/core/. $NODE_MODULES/pyret-autograder/
83+ mkdir -p $NODE_MODULES/pyret-lang/
84+ cp -r ${ pyret-lang-src } /src/ $NODE_MODULES/pyret-lang/
85+ cp ${ pyret-lang-src } /package.json $NODE_MODULES/pyret-lang/
86+ # HACK: file referenced by the package's `main` should exist
87+ mkdir -p $NODE_MODULES/pyret-lang/build/phase0
88+ touch $NODE_MODULES/pyret-lang/build/phase0/main-wrapper.js
89+
90+ # makeWrapper ${ lib . getExe nodejs-slim-stripped } $BIN/wrapped-pyret \
91+ # --add-flags "$SHARE/pyret.jarr" \
92+ # --add-flags "--builtin-js-dir $NODE_MODULES/pyret-lang/src/js/trove/" \
93+ # --add-flags "--builtin-arr-dir $NODE_MODULES/pyret-lang/src/arr/trove/" \
94+ # --add-flags "--builtin-js-dir $NODE_MODULES/pyret-autograder/trove/js/" \
95+ # --add-flags "--builtin-arr-dir $NODE_MODULES/pyret-autograder/trove/arr/" \
96+ # --add-flags "--compiled-read-only-dir $SHARE/pyret-lib" \
97+ # --add-flags "--compiled-read-only-dir $SHARE/autograder-lib" \
98+ # --add-flags "--standalone-file $SHARE/handalone.js" \
99+ # --add-flags "-no-check-mode"
100+
57101
58102 makeWrapper ${ lib . getExe nodejs-slim-stripped } $BIN/wrapped-pyret \
59103 --add-flags "$SHARE/pyret.jarr" \
60- --add-flags "--require-config $SHARE/standalone-configA.json" \
61104 --add-flags "--compiled-read-only-dir $SHARE/pyret-lib" \
62105 --add-flags "--compiled-read-only-dir $SHARE/autograder-lib" \
63106 --add-flags "--standalone-file $SHARE/handalone.js" \
0 commit comments