Skip to content

Commit

Permalink
Avoid compiling scope test for package/run/ commands (#638)
Browse files Browse the repository at this point in the history
* Avoid compiling scope test for package/run/

* Print fullClassPath from test if someone pass --class-path

* Remove shouldCompileTest from BuildOptions
  • Loading branch information
lwronski authored Feb 17, 2022
1 parent 98508de commit acba26c
Show file tree
Hide file tree
Showing 13 changed files with 182 additions and 56 deletions.
95 changes: 57 additions & 38 deletions modules/build/src/main/scala/scala/build/Build.scala
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,8 @@ object Build {
logger: Logger,
buildClient: BloopBuildClient,
bloopServer: bloop.BloopServer,
crossBuilds: Boolean
crossBuilds: Boolean,
buildTests: Boolean
): Either[BuildException, Builds] = either {

val crossSources = value {
Expand Down Expand Up @@ -171,7 +172,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,48 @@ object Build {
scope,
logger,
buildClient,
bloopServer
bloopServer,
buildTests
)

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 (buildTests) {
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)
for (testBuild <- testBuildOpt)
doPostProcess(testBuild, 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,20 +267,21 @@ object Build {
.sequence
.left.map(CompositeBuildException(_))
}
(extraBuilds.map(_._1), extraBuilds.map(_._2))
(extraBuilds.map(_._1), extraBuilds.flatMap(_._2))
}
else
(Nil, Nil)

(mainBuild, extraMainBuilds, testBuild, extraTestBuilds)
}

val (mainBuild, extraBuilds, testBuild, extraTestBuilds) = value(buildScopes())
val (mainBuild, extraBuilds, testBuildOpt, extraTestBuilds) = value(buildScopes())

copyResourceToClassesDir(mainBuild)
copyResourceToClassesDir(testBuild)
for (testBuild <- testBuildOpt)
copyResourceToClassesDir(testBuild)

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

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

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

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

val buildClient = BloopBuildClient.create(
Expand Down Expand Up @@ -478,7 +494,8 @@ object Build {
logger,
buildClient,
bloopServer,
crossBuilds = crossBuilds
crossBuilds = crossBuilds,
buildTests
)
action(res)
}
Expand Down Expand Up @@ -908,7 +925,8 @@ object Build {
logger: Logger,
javaCommand: String,
buildClient: BloopBuildClient,
bloopServer: bloop.BloopServer
bloopServer: bloop.BloopServer,
buildTests: Boolean
): Either[BuildException, Option[Build]] = either {
val jmhProjectName = inputs.projectName + "_jmh"
val jmhOutputDir = inputs.workspace / Constants.workspaceDirName / jmhProjectName
Expand Down Expand Up @@ -954,7 +972,8 @@ object Build {
logger,
buildClient,
bloopServer,
crossBuilds = false
crossBuilds = false,
buildTests
)
}
Some(jmhBuilds.main)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@ final case class TestInputs(
buildThreads,
bloopConfig,
TestLogger(),
crossBuilds = false
crossBuilds = false,
buildTests = true
)
f(root, inputs, res.map(_.main))
}
Expand Down
12 changes: 9 additions & 3 deletions modules/cli/src/main/scala/scala/cli/commands/Compile.scala
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import caseapp._

import java.io.File

import scala.build.options.Scope
import scala.build.{Build, Builds}
import scala.cli.CurrentParams

Expand Down Expand Up @@ -51,7 +52,10 @@ object Compile extends ScalaCommand[CompileOptions] {
sys.exit(1)
}
else if (options.classPath)
for (s <- builds.main.successfulOpt) {
for {
build <- builds.get(Scope.Test).orElse(builds.get(Scope.Main))
s <- build.successfulOpt
} {
val cp = s.fullClassPath.map(_.toAbsolutePath.toString).mkString(File.pathSeparator)
println(cp)
}
Expand All @@ -67,7 +71,8 @@ object Compile extends ScalaCommand[CompileOptions] {
bloopRifleConfig,
logger,
crossBuilds = cross,
postAction = () => WatchUtil.printWatchMessage()
postAction = () => WatchUtil.printWatchMessage(),
buildTests = options.test
) { res =>
for (builds <- res.orReport(logger))
postBuild(builds, allowExit = false)
Expand All @@ -81,7 +86,8 @@ object Compile extends ScalaCommand[CompileOptions] {
buildOptions,
bloopRifleConfig,
logger,
crossBuilds = cross
crossBuilds = cross,
buildTests = options.test
)
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)

}

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,
buildTests = 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 @@ -52,7 +52,8 @@ object Package extends ScalaCommand[PackageOptions] {
bloopRifleConfig,
logger,
crossBuilds = cross,
postAction = () => WatchUtil.printWatchMessage()
postAction = () => WatchUtil.printWatchMessage(),
buildTests = false
) { res =>
res.orReport(logger).map(_.main).foreach {
case s: Build.Successful =>
Expand All @@ -67,7 +68,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,
buildTests = 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(),
buildTests = 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,
buildTests = 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(),
buildTests = 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,
buildTests = false
)
.orExit(logger)
builds.main match {
case s: Build.Successful =>
Expand Down
Loading

0 comments on commit acba26c

Please sign in to comment.