Try another travis structure + build tweaks

I've tried to put together some scripted tests to remove the overhead of
compiling the whole sbt, which is around 3 minutes every time.

This new structure *should* make the scripted tests run faster.

Aside from this, we do some more tweaks:

* Increase memory.
* Fork processes to compile and run (to see if it makes a difference).
* Pass in the server flag to sbt.
This commit is contained in:
jvican 2017-05-03 00:59:51 +02:00
parent 6813eb47af
commit 272afa9d73
No known key found for this signature in database
GPG Key ID: 42DAFA0F112E8050
3 changed files with 24 additions and 24 deletions

View File

@ -16,29 +16,17 @@ matrix:
env:
matrix:
- SBT_CMD=";test:compile;scalafmtCheck"
- SBT_CMD="mimaReportBinaryIssues"
- SBT_CMD="safeUnitTests"
- SBT_CMD="otherUnitTests"
- SBT_CMD=";mimaReportBinaryIssues;test:compile;scalafmtCheck;safeUnitTests;otherUnitTests"
- SBT_CMD="scripted actions/*"
- SBT_CMD="scripted apiinfo/*"
- SBT_CMD="scripted compiler-project/*"
- SBT_CMD="scripted apiinfo/* compiler-project/* ivy-deps-management/*"
- SBT_CMD="scripted dependency-management/*1of4"
- SBT_CMD="scripted dependency-management/*2of4"
- SBT_CMD="scripted dependency-management/*3of4"
- SBT_CMD="scripted dependency-management/*4of4"
- SBT_CMD="scripted ivy-deps-management/*"
- SBT_CMD="scripted java/*"
- SBT_CMD="scripted package/*"
- SBT_CMD="scripted project/*1of2"
- SBT_CMD="scripted project/*2of2"
- SBT_CMD="scripted reporter/*"
- SBT_CMD="scripted run/*"
- SBT_CMD="scripted source-dependencies/*1of3"
- SBT_CMD="scripted source-dependencies/*2of3"
- SBT_CMD="scripted source-dependencies/*3of3"
- SBT_CMD="scripted java/* package/* reporter/* run/*"
- SBT_CMD="scripted project/* project-load/*"
- SBT_CMD="scripted source-dependencies/*"
- SBT_CMD="scripted tests/*"
- SBT_CMD="scripted project-load/*"
- SBT_CMD="repoOverrideTest:scripted dependency-management/*"
notifications:
@ -46,7 +34,8 @@ notifications:
- sbt-dev-bot@googlegroups.com
script:
- sbt -J-XX:ReservedCodeCacheSize=128m -J-Xmx1g -J-Xms1g "$SBT_CMD"
# It doesn't need that much memory because compile and run are forked
- sbt -J-XX:ReservedCodeCacheSize=128m -J-Xmx800M -J-Xms800M -J-server "$SBT_CMD"
before_cache:
- find $HOME/.ivy2 -name "ivydata-*.properties" -print -delete

View File

@ -53,7 +53,9 @@ def commonSettings: Seq[Setting[_]] =
mimaBinaryIssueFilters ++= {
import com.typesafe.tools.mima.core._, ProblemFilters._
Seq()
}
},
fork in compile := true,
fork in run := true
) flatMap (_.settings)
def minimalSettings: Seq[Setting[_]] =
@ -352,7 +354,7 @@ def otherRootSettings =
scriptedUnpublished := scriptedUnpublishedTask.evaluated,
scriptedSource := (sourceDirectory in sbtProj).value / "sbt-test",
// scriptedPrescripted := { addSbtAlternateResolver _ },
scriptedLaunchOpts := List("-Xmx1024M", "-Xms512M"),
scriptedLaunchOpts := List("-Xmx1500M", "-Xms512M", "-server"),
publishAll := { val _ = (publishLocal).all(ScopeFilter(inAnyProject)).value },
publishLocalBinAll := { val _ = (publishLocalBin).all(ScopeFilter(inAnyProject)).value },
aggregate in bintrayRelease := false
@ -362,8 +364,9 @@ def otherRootSettings =
()
},
scriptedLaunchOpts := {
List("-Xmx1024M",
List("-Xmx1500M",
"-Xms512M",
"-server",
"-Dsbt.override.build.repos=true",
s"""-Dsbt.repository.config=${scriptedSource.value / "repo.config"}""")
},

View File

@ -111,7 +111,7 @@ final class ScriptedTests(resourceBaseDirectory: File,
*
* It sets the name of the local root project for those tests run in batch mode.
*
* This is necessary because the current design to run tests in batch mode force
* This is necessary because the current design to run tests in batch mode forces
* scripted tests to share one common sbt dir instead of each one having its own.
*
* Sbt extracts the local root project name from the directory name. So those
@ -184,14 +184,22 @@ final class ScriptedTests(resourceBaseDirectory: File,
// Reload and initialize (to reload contents of .sbtrc files)
val pluginImplementation = createAutoPlugin(name)
IO.write(tempTestDir / "project" / "InstrumentScripted.scala", pluginImplementation)
val sbtHandler = handlers.getOrElse('>', sys.error("Missing sbt handler."))
val sbtHandlerError = "Missing sbt handler. Scripted is misconfigured."
val sbtHandler = handlers.getOrElse('>', sbtHandlerError).asInstanceOf[SbtHandler]
val commandsToRun = ";reload;setUpScripted"
val statement = Statement(commandsToRun, Nil, successExpected = true, line = -1)
// Run reload inside the hook to reuse error handling for pending tests
val wrapHook = (file: File) => {
preHook(file)
runner.processStatement(sbtHandler.asInstanceOf[SbtHandler], statement, states)
try runner.processStatement(sbtHandler, statement, states)
catch {
case t: Throwable =>
val newMsg = "Reload for scripted batch execution failed."
throw new TestException(statement, newMsg, t)
}
}
commonRunTest(label, tempTestDir, wrapHook, handlers, runner, states, buffer)
}