Don't require manually running npm install before the JS tests

This commit is contained in:
Alexandre Archambault 2018-03-12 11:18:20 +01:00
parent c98393838a
commit b1fde7291d
4 changed files with 29 additions and 11 deletions

View File

@ -1,6 +1,4 @@
language: java language: java
install:
- npm install
os: os:
- osx - osx
script: script:

View File

@ -90,14 +90,9 @@ $ sbt
## Run unit tests (JS) ## Run unit tests (JS)
The JS tests require node to be installed, and a few dependencies to have been The JS tests require node to be installed. They automatically run `npm install` from the root of the coursier sources if needed.
fetched with
```
$ npm install
```
(run from the root of the coursier sources).
JS tests can then be run like JVM tests, like JS tests can be run like JVM tests, like
``` ```
$ sbt $ sbt
> ++2.12.4 > ++2.12.4
@ -190,4 +185,4 @@ we need to put 2) and 3) into `message`:
Typically there needs to be at least 2 minor versions between since-version and to-be-removed-version to help migration. Typically there needs to be at least 2 minor versions between since-version and to-be-removed-version to help migration.
For example, if since version is 1.1.0, then deprecation can be removed in 1.3.0 For example, if since version is 1.1.0, then deprecation can be removed in 1.3.0

View File

@ -41,7 +41,8 @@ lazy val tests = crossProject
.disablePlugins(ScriptedPlugin) .disablePlugins(ScriptedPlugin)
.dependsOn(core, cache % "test", scalaz) .dependsOn(core, cache % "test", scalaz)
.jsSettings( .jsSettings(
scalaJSStage.in(Global) := FastOptStage scalaJSStage.in(Global) := FastOptStage,
testOptions := testOptions.dependsOn(runNpmInstallIfNeeded).value
) )
.configs(Integration) .configs(Integration)
.settings( .settings(

View File

@ -1,4 +1,6 @@
import java.nio.file.Files
import sbt._ import sbt._
import sbt.Keys._ import sbt.Keys._
import sbt.ScriptedPlugin.autoImport.{sbtLauncher, scriptedBufferLog, ScriptedLaunchConf, scriptedLaunchOpts} import sbt.ScriptedPlugin.autoImport.{sbtLauncher, scriptedBufferLog, ScriptedLaunchConf, scriptedLaunchOpts}
@ -45,6 +47,28 @@ object Settings {
javacOptions.in(Keys.doc) := Seq() javacOptions.in(Keys.doc) := Seq()
) )
val runNpmInstallIfNeeded = Def.task {
val baseDir = baseDirectory.in(ThisBuild).value
val evFile = baseDir / "node_modules" / ".npm_run"
val log = streams.value.log
if (!evFile.exists()) {
val cmd = Seq("npm", "install")
val b = new ProcessBuilder(cmd: _*)
b.directory(baseDir)
b.inheritIO()
log.info(s"Running ${cmd.mkString(" ")}")
val p = b.start()
val retCode = p.waitFor()
if (retCode == 0)
log.info(s"${cmd.mkString(" ")} ran successfully")
else
sys.error(s"${cmd.mkString(" ")} failed (return code $retCode)")
// Parent dir should have been created by npm install
Files.write(evFile.toPath, Array.emptyByteArray)
}
}
lazy val shared = javaScalaPluginShared ++ Seq( lazy val shared = javaScalaPluginShared ++ Seq(
scalaVersion := scala212, scalaVersion := scala212,
libs ++= { libs ++= {