2018-10-02 19:38:18 +02:00
|
|
|
import sbt._
|
|
|
|
|
import Keys._
|
|
|
|
|
|
|
|
|
|
import java.io.File
|
|
|
|
|
import java.util.UUID.randomUUID
|
|
|
|
|
|
|
|
|
|
object SbtScriptedIT extends AutoPlugin {
|
|
|
|
|
|
|
|
|
|
object autoImport {
|
|
|
|
|
val scriptedTestSbtRepo = settingKey[String]("SBT repository to be used in scripted tests")
|
|
|
|
|
val scriptedTestSbtRef = settingKey[String]("SBT branch to be used in scripted tests")
|
|
|
|
|
val scriptedTestLMImpl = settingKey[String]("Librarymanagement implementation to be used in scripted tests")
|
|
|
|
|
val scriptedSbtVersion = settingKey[String]("SBT version to be published locally for IT tests")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
import autoImport._
|
|
|
|
|
override def requires = ScriptedPlugin
|
|
|
|
|
|
|
|
|
|
override def trigger = noTrigger
|
|
|
|
|
|
|
|
|
|
override lazy val globalSettings = Seq(
|
|
|
|
|
scriptedTestSbtRepo := "https://github.com/sbt/sbt.git",
|
|
|
|
|
scriptedTestSbtRef := "develop",
|
|
|
|
|
scriptedTestLMImpl := "ivy",
|
|
|
|
|
scriptedSbtVersion := s"""${sbtVersion.value}-LM-SNAPSHOT"""
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
private def cloneSbt(targetDir: File, repo: String, ref: String) = {
|
|
|
|
|
import org.eclipse.jgit.api._
|
|
|
|
|
|
|
|
|
|
if (!targetDir.exists) {
|
|
|
|
|
IO.createDirectory(targetDir)
|
|
|
|
|
|
|
|
|
|
new CloneCommand()
|
|
|
|
|
.setDirectory(targetDir)
|
|
|
|
|
.setURI(repo)
|
|
|
|
|
.call()
|
|
|
|
|
|
|
|
|
|
val git = Git.open(targetDir)
|
|
|
|
|
|
|
|
|
|
git.checkout().setName(ref).call()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private def publishLocalSbt(
|
|
|
|
|
targetDir: File,
|
|
|
|
|
lmVersion: String,
|
|
|
|
|
lmGroupID: String,
|
|
|
|
|
lmArtifactID: String,
|
|
|
|
|
version: String) = {
|
|
|
|
|
import sys.process._
|
|
|
|
|
Process(
|
|
|
|
|
Seq(
|
|
|
|
|
"sbt",
|
|
|
|
|
"-J-Xms2048m",
|
|
|
|
|
"-J-Xmx2048m",
|
|
|
|
|
"-J-XX:ReservedCodeCacheSize=256m",
|
|
|
|
|
"-J-XX:MaxMetaspaceSize=512m",
|
|
|
|
|
s"""-Dsbt.build.lm.version=${lmVersion}""",
|
|
|
|
|
s"""-Dsbt.build.lm.organization=${lmGroupID}""",
|
|
|
|
|
s"""-Dsbt.build.lm.moduleName=${lmArtifactID}""",
|
|
|
|
|
s"""set ThisBuild / version := "${version}"""",
|
|
|
|
|
"clean",
|
|
|
|
|
"publishLocal"
|
|
|
|
|
),
|
|
|
|
|
Some(targetDir)
|
|
|
|
|
) !
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private def setScriptedTestsSbtVersion(baseDir: File, version: String) = {
|
|
|
|
|
IO.listFiles(baseDir).foreach { d =>
|
|
|
|
|
if (d.isDirectory) {
|
|
|
|
|
IO.createDirectory(d / "project")
|
|
|
|
|
IO.write(
|
|
|
|
|
d / "project" / "build.properties",
|
|
|
|
|
s"sbt.version=$version"
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
import sbt.ScriptedPlugin.autoImport._
|
|
|
|
|
|
|
|
|
|
override lazy val projectSettings = Seq(
|
|
|
|
|
scriptedTests := {
|
|
|
|
|
val targetDir = target.value / "sbt"
|
|
|
|
|
|
2018-10-16 13:31:07 +02:00
|
|
|
if (!targetDir.exists) {
|
|
|
|
|
cloneSbt(targetDir, scriptedTestSbtRepo.value, scriptedTestSbtRef.value)
|
|
|
|
|
|
|
|
|
|
publishLocalSbt(
|
|
|
|
|
targetDir,
|
|
|
|
|
version.value,
|
|
|
|
|
organization.value,
|
|
|
|
|
s"librarymanagement-${scriptedTestLMImpl.value}",
|
|
|
|
|
scriptedSbtVersion.value
|
|
|
|
|
)
|
|
|
|
|
}
|
2018-10-02 19:38:18 +02:00
|
|
|
|
|
|
|
|
setScriptedTestsSbtVersion(
|
|
|
|
|
sbtTestDirectory.value / thisProject.value.id,
|
|
|
|
|
scriptedSbtVersion.value
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
scriptedTests.value
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
}
|