Skip to content

Commit 60fe14c

Browse files
committed
.
1 parent 9e43eef commit 60fe14c

File tree

5 files changed

+79
-19
lines changed

5 files changed

+79
-19
lines changed

nix/packages/gradescope-build/default.nix

Lines changed: 55 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,6 @@
1313
let
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;
@@ -26,6 +23,9 @@ let
2623
reset-load-path-patch = true;
2724
};
2825
};
26+
pyret-lang-lib-a = pyret-lang-patched.override {
27+
phaseAOnly = true;
28+
};
2929
in
3030
stdenv.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" \

pkgs/gradescope/README.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ Dockerfile:
4949
FROM pyretautograder/gradescope-build:0.0.1-pre.1 as build
5050

5151
COPY spec.arr /spec.arr
52-
RUN gen_autograder /spec.arr # outputs /run_autograder, /compiled.js
52+
RUN gen_autograder -d /spec.arr -o ??? # outputs /run_autograder, /compiled.js
5353

5454
FROM pyretautograder/gradescope-run:0.0.1-pre.1 as run
5555
COPY --from=build /compiled.js /autograder/compiled.js
@@ -58,7 +58,7 @@ COPY --from=build /run_autograder /autograder/run_autograder
5858

5959
spec.arr:
6060
```arr
61-
include autograder
61+
use context autograder-spec
6262
include graders
6363
6464
provide: spec end
@@ -67,11 +67,10 @@ spec = [spec:
6767
6868
6969
]
70-
7170
```
7271

7372
```
74-
printf "include autograder\nprovide: spec end\nspec = [list:]\n" > specification.arr
73+
printf "use context autograder-spec\nprovide: spec end\nspec = [list:]\n" > specification.arr
7574
gen_autograder.sh -d .
7675
```
7776

pkgs/gradescope/src/main.arr

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
use context autograder
2-
31
# NOTE: this file specifier is CUSTOM! it lets us use the CWD as the `current-load-path`
42
# rather than the path of the current file.
53
# See nix/packages/pyret-lang-src/file-reset-load-path-specifier.patch
6-
import spec from file-reset-load-path('./specification.arr')
4+
import spec from file-reset-load-path('./spec.arr')
75

86

97

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
use context empty-context
2+
3+
import autograder as autograder
4+
import graders as graders
5+
import essentials2020 as essentials2020
6+
7+
provide from autograder:
8+
*, type *, data *, module *
9+
end
10+
11+
provide from essentials2020:
12+
*, type *, data *, module *
13+
end
14+
15+
provide:
16+
module autograder,
17+
module graders
18+
end
19+

pkgs/gradescope/trove/include.arr

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import autograder as _
1313
import graders as _
14+
import autograder-spec as _
1415

1516
# not intended to be used in spec:
1617
import gradescope-support as _

0 commit comments

Comments
 (0)