Skip to content

Commit 17ad9d2

Browse files
authored
Merge pull request #3 from usethesource/feature/add-packager-phase
Add packager phase
2 parents 6ecedd5 + 5371d74 commit 17ad9d2

2 files changed

Lines changed: 74 additions & 51 deletions

File tree

.github/workflows/run-integration-test.yml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ on:
1616
description: 'Run the typechecker on the compiler'
1717
required: true
1818
default: 'true'
19+
do_package:
20+
description: 'Run the packager'
21+
required: true
22+
default: 'true'
1923

2024
env:
2125
MAVEN_OPTS: "-Xmx4G -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"
@@ -75,4 +79,5 @@ jobs:
7579
--repoFolder "|cwd:///repos|" \
7680
--full false \
7781
--clean \
78-
--tests ${{ matrix.target }}
82+
--package "${{inputs.do_package}}" \
83+
--tests ${{ matrix.target }}

src/main/rascal/Main.rsc

Lines changed: 68 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,6 @@ str buildFSPath(loc l) {
6767
str buildCP(loc entries...) = intercalate(getSystemProperty("path.separator"), [ buildFSPath(l) | l <- entries]);
6868

6969

70-
71-
loc tplPath(loc repoFolder, str name) = (repoFolder + name) + "target/classes";
72-
7370
loc projectRoot(loc repoFolder, str name, Project proj) = (repoFolder + name) + proj.subdir;
7471

7572

@@ -79,7 +76,7 @@ tuple[list[loc], list[loc]] calcSourcePaths(str name, Project proj, loc repoFold
7976
return <srcs, ignores>;
8077
}
8178

82-
PathConfig generatePathConfig(str name, Project proj, loc repoFolder, false) {
79+
PathConfig generatePathConfig(str name, Project proj, loc repoFolder, false, false, loc _packageTarget) {
8380
<srcs, ignores> = calcSourcePaths(name, proj, repoFolder);
8481
for (str dep <- proj.dependencies, <dep, projDep> <- projects) {
8582
<nestedSrcs, nestedIgnores> = calcSourcePaths(dep, projDep, repoFolder);
@@ -94,14 +91,14 @@ PathConfig generatePathConfig(str name, Project proj, loc repoFolder, false) {
9491
libs = [repoFolder + "shared-tpls"] + (proj.rascalLib ? [|std:///|] : [])
9592
);
9693
}
97-
PathConfig generatePathConfig(str name, Project proj, loc repoFolder, true) {
94+
PathConfig generatePathConfig(str name, Project proj, loc repoFolder, true, bool package, loc packageTarget) {
9895
<srcs, ignores> = calcSourcePaths(name, proj, repoFolder);
9996
result = pathConfig(
10097
projectRoot = projectRoot(repoFolder, name, proj),
10198
srcs = srcs,
10299
ignores = ignores,
103-
bin = tplPath(repoFolder, name),
104-
libs = [ tplPath(repoFolder, dep) | dep <- proj.dependencies ] + (proj.rascalLib ? [|std:///|] : [])
100+
bin = repoFolder + name + "target" + "classes",
101+
libs = [ resolve(repoFolder + dep, package ? packageTarget : |relative:///target/classes|) | dep <- proj.dependencies ] + (proj.rascalLib ? [|std:///|] : [])
105102
);
106103
/*
107104
if (name == "rascal-lsp-all" || name == "rascal-all") {
@@ -145,7 +142,7 @@ int updateRepos(Projects projs, loc repoFolder, bool full) {
145142
bool isIgnored(loc f, list[loc] ignores)
146143
= size(ignores) > 0 && any(i <- ignores, (relativize(i, f) != f || i == f));
147144

148-
list[str] addParallelFlags(Project proj, PathConfig pcfg, list[loc] rascalFiles, int maxCores) {
145+
list[str] addParallelFlags(Project proj, list[loc] rascalFiles, int maxCores) {
149146
if (!proj.parallel) {
150147
return [];
151148
}
@@ -161,6 +158,8 @@ int main(
161158
int maxCores = 4,
162159
bool libs=true, // put the tpls of dependencies on the lib path
163160
bool update=false, // update all projects from remote
161+
bool package=libs,
162+
loc packageTarget = |relative:///target/rewrittenClasses|,
164163
bool full=true, // do a full clone
165164
bool clean=true, // do a clean of the to build folders
166165
loc repoFolder = |tmp:///repo/|,
@@ -194,7 +193,7 @@ int main(
194193

195194
// prepare path configs
196195
println("*** Calculating class paths");
197-
pcfgs = [<n, generatePathConfig(n, proj, repoFolder, libs)> | n <- buildOrder, proj <- toBuild[n]];
196+
pcfgs = [<n, generatePathConfig(n, proj, repoFolder, libs, package, packageTarget)> | n <- buildOrder, proj <- toBuild[n]];
198197

199198

200199
if (clean) {
@@ -211,7 +210,7 @@ int main(
211210

212211
for (n <- buildOrder, proj <- toBuild[n]) {
213212
println("*** Preparing: <n>");
214-
p = generatePathConfig(n, proj, repoFolder, libs);
213+
p = generatePathConfig(n, proj, repoFolder, libs, package, packageTarget);
215214
if (clean) {
216215
for (f <- find(p.bin, "tpl")) {
217216
remove(f);
@@ -222,46 +221,10 @@ int main(
222221
rProjectRoot = resolveLocation(projectRoot);
223222
rascalFiles = [*find(s, "rsc") | s <- p.srcs, (startsWith(s.path, projectRoot.path) || startsWith(s.path, rProjectRoot.path))];
224223
rascalFiles = sort([f | f <- rascalFiles, !isIgnored(f, p.ignores)]);
225-
println("*** Starting: <n> (<size(rascalFiles)> to check)");
226-
startTime = realTime();
227-
runner = createProcess("java", args=[
228-
"-Xmx<memory>",
229-
"-Drascal.monitor.batch", // disable fancy progress bar
230-
"-cp", buildFSPath(rascalVersion),
231-
"org.rascalmpl.shell.RascalCompile",
232-
*addParallelFlags(proj, p, rascalFiles, maxCores),
233-
"-projectRoot", "<rProjectRoot>",
234-
"-srcs", *[ "<s>" | s <- p.srcs],
235-
*["-libs" | p.libs != []], *[ "<l>" | l <- p.libs],
236-
"-bin", "<p.bin>",
237-
"-modules", *[ "<f>" | f <- rascalFiles]
238-
]);
239-
try {
240-
while (isAlive(runner)) {
241-
stdOut = readWithWait(runner, 500);
242-
if (stdOut != "") {
243-
print(stdOut);
244-
}
245-
stdErr = readFromErr(runner);
246-
while (stdErr != "") {
247-
println(stdErr);
248-
stdErr = readFromErr(runner);
249-
}
250-
}
251-
stopTime = realTime();
252-
println(readEntireStream(runner));
253-
println(readEntireErrStream(runner));
254-
code = exitCode(runner);
255-
result += code;
256-
println("*** Finished: <n> < code == 0 ? "✅" : "❌ Failed with error <code>"> (<(stopTime - startTime)/1000>s)");
257-
stats += <n, code, (stopTime - startTime)/1000>;
258-
}
259-
catch ex :{
260-
println("Running the runner for <n> crashed with <ex>");
261-
result += 1;
262-
}
263-
finally {
264-
killProcess(runner);
224+
225+
result += run("org.rascalmpl.shell.RascalCompile", n, rProjectRoot, p, rascalFiles, memory, rascalVersion, stats, extraArgs = [*addParallelFlags(proj, rascalFiles, maxCores), "-modules", *[ "<f>" | f <- rascalFiles]]);
226+
if (package) {
227+
result += run("org.rascalmpl.shell.RascalPackage", n, rProjectRoot, p, rascalFiles, memory, rascalVersion, stats, extraArgs = ["-sourceLookup", "<rascalVersion>", "-relocatedClasses", "<resolve(rProjectRoot, packageTarget)>"]);
265228
}
266229
}
267230
println("******\nDone running ");
@@ -270,3 +233,58 @@ int main(
270233
}
271234
return result;
272235
}
236+
237+
int run(
238+
str class,
239+
str projectName,
240+
loc resolvedRoot,
241+
PathConfig pcfg,
242+
list[loc] rascalFiles,
243+
str memory,
244+
loc rascalVersion,
245+
lrel[str, int, int] stats,
246+
list[str] extraArgs = []
247+
) {
248+
result = 0;
249+
println("*** Starting: <class> on <projectName> (<size(rascalFiles)>)");
250+
startTime = realTime();
251+
runner = createProcess("java", args=[
252+
"-Xmx<memory>",
253+
"-Drascal.monitor.batch", // disable fancy progress bar
254+
"-cp", buildFSPath(rascalVersion),
255+
class,
256+
"-projectRoot", "<resolvedRoot>",
257+
"-srcs", *[ "<s>" | s <- pcfg.srcs],
258+
*["-libs" | pcfg.libs != []], *[ "<l>" | l <- pcfg.libs],
259+
"-bin", "<pcfg.bin>",
260+
*extraArgs
261+
]);
262+
try {
263+
while (isAlive(runner)) {
264+
stdOut = readWithWait(runner, 500);
265+
if (stdOut != "") {
266+
print(stdOut);
267+
}
268+
stdErr = readFromErr(runner);
269+
while (stdErr != "") {
270+
println(stdErr);
271+
stdErr = readFromErr(runner);
272+
}
273+
}
274+
stopTime = realTime();
275+
println(readEntireStream(runner));
276+
println(readEntireErrStream(runner));
277+
code = exitCode(runner);
278+
result += code;
279+
println("*** Finished: <class> on <projectName> < code == 0 ? "✅" : "❌ Failed with error <code>"> (<(stopTime - startTime)/1000>s)");
280+
stats += <projectName, code, (stopTime - startTime)/1000>;
281+
}
282+
catch ex :{
283+
println("Running the runner for <projectName> crashed with <ex>");
284+
result += 1;
285+
}
286+
finally {
287+
killProcess(runner);
288+
}
289+
return result;
290+
}

0 commit comments

Comments
 (0)