Skip to content

Commit 7e515ae

Browse files
committed
TS: Verify yarn installation
1 parent b306eee commit 7e515ae

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed

javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,10 @@
2121
import com.semmle.util.process.Env;
2222
import com.semmle.util.projectstructure.ProjectLayout;
2323
import com.semmle.util.trap.TrapWriter;
24+
import java.io.BufferedReader;
2425
import java.io.File;
2526
import java.io.IOException;
27+
import java.io.InputStreamReader;
2628
import java.io.Reader;
2729
import java.lang.ProcessBuilder.Redirect;
2830
import java.net.URI;
@@ -562,7 +564,32 @@ private void extractSource() throws IOException {
562564
}
563565
}
564566

567+
/** Returns true if yarn is installed, otherwise prints a warning and returns false. */
568+
private boolean verifyYarnInstallation() {
569+
ProcessBuilder pb = new ProcessBuilder(Arrays.asList("yarn", "-v"));
570+
try {
571+
Process process = pb.start();
572+
boolean completed = process.waitFor(this.installDependenciesTimeout, TimeUnit.MILLISECONDS);
573+
if (!completed) {
574+
System.err.println("Yarn could not be launched. Timeout during 'yarn -v'.");
575+
return false;
576+
}
577+
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
578+
String version = reader.readLine();
579+
System.out.println("Found yarn version: " + version);
580+
return true;
581+
} catch (IOException | InterruptedException ex) {
582+
System.err.println(
583+
"Yarn not found. Please put 'yarn' on the PATH for automatic dependency installation.");
584+
Exceptions.ignore(ex, "Continue without dependency installation");
585+
return false;
586+
}
587+
}
588+
565589
protected void installDependencies(Set<Path> filesToExtract) {
590+
if (!verifyYarnInstallation()) {
591+
return;
592+
}
566593
for (Path file : filesToExtract) {
567594
if (file.getFileName().toString().equals("package.json")) {
568595
System.out.println("Installing dependencies from " + file);

0 commit comments

Comments
 (0)