Skip to content

Commit

Permalink
Avoid compiling scope test for package/run/
Browse files Browse the repository at this point in the history
  • Loading branch information
lwronski committed Feb 9, 2022
1 parent c127772 commit 4b4237e
Show file tree
Hide file tree
Showing 14 changed files with 165 additions and 60 deletions.
91 changes: 54 additions & 37 deletions modules/build/src/main/scala/scala/build/Build.scala
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,8 @@ object Build {
logger: Logger,
buildClient: BloopBuildClient,
bloopServer: bloop.BloopServer,
crossBuilds: Boolean
crossBuilds: Boolean,
isTest: Boolean
): Either[BuildException, Builds] = either {

val crossSources = value {
Expand Down Expand Up @@ -170,7 +171,7 @@ object Build {

def doBuild(
overrideOptions: BuildOptions
): Either[BuildException, (Build, Build)] = either {
): Either[BuildException, (Build, Option[Build])] = either {

val baseOptions = overrideOptions.orElse(sharedOptions)
val scopedSources = value(crossSources.scopedSources(baseOptions))
Expand Down Expand Up @@ -212,41 +213,47 @@ object Build {
scope,
logger,
buildClient,
bloopServer
bloopServer,
isTest
)

value(res)
}

val mainBuild = value(doBuildScope(mainOptions, mainSources, Scope.Main))

val testBuild = value {
mainBuild match {
case s: Build.Successful =>
val extraTestOptions = BuildOptions(
classPathOptions = ClassPathOptions(
extraClassPath = Seq(s.output)
)
)
val testOptions0 = extraTestOptions.orElse(testOptions)
doBuildScope(testOptions0, testSources, Scope.Test)
case _ =>
Right(Build.Cancelled(
inputs,
sharedOptions,
Scope.Test,
"Parent build failed or cancelled"
))
val testBuildOpt =
if (isTest) {
val testBuild = value {
mainBuild match {
case s: Build.Successful =>
val extraTestOptions = BuildOptions(
classPathOptions = ClassPathOptions(
extraClassPath = Seq(s.output)
)
)
val testOptions0 = extraTestOptions.orElse(testOptions)
doBuildScope(testOptions0, testSources, Scope.Test)
case _ =>
Right(Build.Cancelled(
inputs,
sharedOptions,
Scope.Test,
"Parent build failed or cancelled"
))
}
}
Some(testBuild)
}
}
else None

doPostProcess(mainBuild, inputs0, Scope.Main)
doPostProcess(testBuild, inputs0, Scope.Test)
if (testBuildOpt.nonEmpty) doPostProcess(testBuildOpt.get, inputs0, Scope.Test)

(mainBuild, testBuild)
(mainBuild, testBuildOpt)
}

def buildScopes(): Either[BuildException, (Build, Seq[Build], Build, Seq[Build])] =
def buildScopes(): Either[BuildException, (Build, Seq[Build], Option[Build], Seq[Build])] =
either {
val (mainBuild, testBuild) = value(doBuild(BuildOptions()))

Expand All @@ -259,7 +266,7 @@ object Build {
.sequence
.left.map(CompositeBuildException(_))
}
(extraBuilds.map(_._1), extraBuilds.map(_._2))
(extraBuilds.map(_._1), extraBuilds.flatMap(_._2))
}
else
(Nil, Nil)
Expand All @@ -270,9 +277,9 @@ object Build {
val (mainBuild, extraBuilds, testBuild, extraTestBuilds) = value(buildScopes())

copyResourceToClassesDir(mainBuild)
copyResourceToClassesDir(testBuild)
if (isTest) copyResourceToClassesDir(testBuild.get) // TODO

Builds(Seq(mainBuild, testBuild), Seq(extraBuilds, extraTestBuilds))
Builds(Seq(mainBuild) ++ testBuild.toSeq, Seq(extraBuilds, extraTestBuilds))
}

private def copyResourceToClassesDir(build: Build) = build match {
Expand Down Expand Up @@ -304,7 +311,8 @@ object Build {
scope: Scope,
logger: Logger,
buildClient: BloopBuildClient,
bloopServer: bloop.BloopServer
bloopServer: bloop.BloopServer,
isTest: Boolean
): Either[BuildException, Build] = either {

val build0 = value {
Expand All @@ -331,7 +339,8 @@ object Build {
logger,
successful.options.javaHome().value.javaCommand,
buildClient,
bloopServer
bloopServer,
isTest
)
res.flatMap {
case Some(b) => Right(b)
Expand Down Expand Up @@ -390,7 +399,8 @@ object Build {
threads: BuildThreads,
bloopConfig: BloopRifleConfig,
logger: Logger,
crossBuilds: Boolean
crossBuilds: Boolean,
isTest: Boolean
): Either[BuildException, Builds] = {
val buildClient = BloopBuildClient.create(
logger,
Expand All @@ -414,7 +424,8 @@ object Build {
logger = logger,
buildClient = buildClient,
bloopServer = bloopServer,
crossBuilds = crossBuilds
crossBuilds = crossBuilds,
isTest
)
}
}
Expand All @@ -424,14 +435,16 @@ object Build {
options: BuildOptions,
bloopConfig: BloopRifleConfig,
logger: Logger,
crossBuilds: Boolean
crossBuilds: Boolean,
isTest: Boolean
): Either[BuildException, Builds] =
build(
inputs,
options, /*scope,*/ BuildThreads.create(),
bloopConfig,
logger,
crossBuilds = crossBuilds
crossBuilds = crossBuilds,
isTest
)

def validate(
Expand All @@ -452,7 +465,8 @@ object Build {
bloopConfig: BloopRifleConfig,
logger: Logger,
crossBuilds: Boolean,
postAction: () => Unit = () => ()
postAction: () => Unit = () => (),
isTest: Boolean
)(action: Either[BuildException, Builds] => Unit): Watcher = {

val buildClient = BloopBuildClient.create(
Expand Down Expand Up @@ -480,7 +494,8 @@ object Build {
logger,
buildClient,
bloopServer,
crossBuilds = crossBuilds
crossBuilds = crossBuilds,
isTest
)
action(res)
}
Expand Down Expand Up @@ -909,7 +924,8 @@ object Build {
logger: Logger,
javaCommand: String,
buildClient: BloopBuildClient,
bloopServer: bloop.BloopServer
bloopServer: bloop.BloopServer,
isTest: Boolean
): Either[BuildException, Option[Build]] = either {
val jmhProjectName = inputs.projectName + "_jmh"
val jmhOutputDir = inputs.workspace / Constants.workspaceDirName / jmhProjectName
Expand Down Expand Up @@ -955,7 +971,8 @@ object Build {
logger,
buildClient,
bloopServer,
crossBuilds = false
crossBuilds = false,
isTest
)
}
Some(jmhBuilds.main)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package scala.build.options

final case class TestOptions(
frameworkOpt: Option[String] = None
frameworkOpt: Option[String] = None,
isTest: Option[Boolean] = None
)

object TestOptions {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@ final case class TestInputs(
buildThreads,
bloopConfig,
TestLogger(),
crossBuilds = false
crossBuilds = false,
isTest = true
)
f(root, inputs, res.map(_.main))
}
Expand Down
6 changes: 4 additions & 2 deletions modules/cli/src/main/scala/scala/cli/commands/Compile.scala
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,8 @@ object Compile extends ScalaCommand[CompileOptions] {
bloopRifleConfig,
logger,
crossBuilds = cross,
postAction = () => WatchUtil.printWatchMessage()
postAction = () => WatchUtil.printWatchMessage(),
isTest = buildOptions.testOptions.isTest.getOrElse(false)
) { res =>
for (builds <- res.orReport(logger))
postBuild(builds, allowExit = false)
Expand All @@ -81,7 +82,8 @@ object Compile extends ScalaCommand[CompileOptions] {
buildOptions,
bloopRifleConfig,
logger,
crossBuilds = cross
crossBuilds = cross,
isTest = buildOptions.testOptions.isTest.getOrElse(false)
)
val builds = res.orExit(logger)
postBuild(builds, allowExit = true)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,15 @@ final case class CompileOptions(
@Name("p")
@Name("classpath")
@HelpMessage("Print the resulting class path")
classPath: Boolean = false
classPath: Boolean = false,
@HelpMessage("Compile test scope")
test: Boolean = false
) {
// format: on

def buildOptions: BuildOptions =
shared.buildOptions(enableJmh = false, jmhVersion = None)
shared.buildOptions(enableJmh = false, jmhVersion = None, isTest = test)

}

object CompileOptions {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,14 @@ object Metabrowse extends ScalaCommand[MetabrowseOptions] {
val bloopRifleConfig = options.shared.bloopRifleConfig()

val builds =
Build.build(inputs, options.buildOptions, bloopRifleConfig, logger, crossBuilds = false)
Build.build(
inputs,
options.buildOptions,
bloopRifleConfig,
logger,
crossBuilds = false,
isTest = false
)
.orExit(logger)

val successfulBuild = builds.main match {
Expand Down
12 changes: 10 additions & 2 deletions modules/cli/src/main/scala/scala/cli/commands/Package.scala
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,8 @@ object Package extends ScalaCommand[PackageOptions] {
bloopRifleConfig,
logger,
crossBuilds = cross,
postAction = () => WatchUtil.printWatchMessage()
postAction = () => WatchUtil.printWatchMessage(),
isTest = false
) { res =>
res.orReport(logger).map(_.main).foreach {
case s: Build.Successful =>
Expand All @@ -69,7 +70,14 @@ object Package extends ScalaCommand[PackageOptions] {
}
else {
val builds =
Build.build(inputs, initialBuildOptions, bloopRifleConfig, logger, crossBuilds = cross)
Build.build(
inputs,
initialBuildOptions,
bloopRifleConfig,
logger,
crossBuilds = cross,
isTest = false
)
.orExit(logger)
builds.main match {
case s: Build.Successful =>
Expand Down
12 changes: 10 additions & 2 deletions modules/cli/src/main/scala/scala/cli/commands/Repl.scala
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,8 @@ object Repl extends ScalaCommand[ReplOptions] {
bloopRifleConfig,
logger,
crossBuilds = cross,
postAction = () => WatchUtil.printWatchMessage()
postAction = () => WatchUtil.printWatchMessage(),
isTest = false
) { res =>
for (builds <- res.orReport(logger))
builds.main match {
Expand All @@ -98,7 +99,14 @@ object Repl extends ScalaCommand[ReplOptions] {
}
else {
val builds =
Build.build(inputs, initialBuildOptions, bloopRifleConfig, logger, crossBuilds = cross)
Build.build(
inputs,
initialBuildOptions,
bloopRifleConfig,
logger,
crossBuilds = cross,
isTest = false
)
.orExit(logger)
builds.main match {
case s: Build.Successful =>
Expand Down
12 changes: 10 additions & 2 deletions modules/cli/src/main/scala/scala/cli/commands/Run.scala
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,8 @@ object Run extends ScalaCommand[RunOptions] {
bloopRifleConfig,
logger,
crossBuilds = cross,
postAction = () => WatchUtil.printWatchMessage()
postAction = () => WatchUtil.printWatchMessage(),
isTest = false
) { res =>
res.orReport(logger).map(_.main).foreach {
case s: Build.Successful =>
Expand All @@ -84,7 +85,14 @@ object Run extends ScalaCommand[RunOptions] {
}
else {
val builds =
Build.build(inputs, initialBuildOptions, bloopRifleConfig, logger, crossBuilds = cross)
Build.build(
inputs,
initialBuildOptions,
bloopRifleConfig,
logger,
crossBuilds = cross,
isTest = false
)
.orExit(logger)
builds.main match {
case s: Build.Successful =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,8 @@ final case class SharedOptions(
def buildOptions(
enableJmh: Boolean,
jmhVersion: Option[String],
ignoreErrors: Boolean = false
ignoreErrors: Boolean = false,
isTest: Boolean = false
): BuildOptions = {
val platformOpt =
if (js.js) Some(Platform.JS)
Expand Down Expand Up @@ -166,7 +167,8 @@ final case class SharedOptions(
cache = Some(coursierCache),
localRepository = LocalRepo.localRepo(directories.directories.localRepoDir),
verbosity = Some(logging.verbosity)
)
),
testOptions = scala.build.options.TestOptions(isTest = Some(isTest))
)
}

Expand Down
Loading

0 comments on commit 4b4237e

Please sign in to comment.