Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP: Use import $repo instead of system property ivy.home #155

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ import mill.scalalib.publish._
import os.ProcessOutput.Readlines
import os.{PathRedirect, ProcessOutput}

import scala.annotation.nowarn
import scala.util.chaining.scalaUtilChainingOps

/**
* Run Integration test for Mill Plugins.
*/
Expand Down Expand Up @@ -100,12 +103,23 @@ trait MillIntegrationTestModule extends TaskModule with ExtraCoursierSupport wit
val artifactMetadata = Target.sequence(pluginsUnderTest.map(_.artifactMetadata))()

val importFileContents = {
val header = Seq("// Import a locally published version of the plugin under test")
val body = artifactMetadata.map { meta =>
val imports = artifactMetadata.map { meta =>
s"import $$ivy.`${meta.group}:${meta.id}:${meta.version}`"
}
header ++ body
}.mkString("\n")
val ivyRepoAsUrl =
s"ivy:${ivyPath.toNIO.toUri().toURL().toExternalForm().pipe { url =>
if (url.endsWith("/")) url.substring(0, url.size - 1)
else url
}.pipe { url =>
if(url.startsWith("file:") && !url.startsWith("file://")) ("file://" + url.substring("file:".length))
else url
}}/local/[organisation]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]"
s"""// Define a local repository containing the plugin under test
|import $$repo.`${ivyRepoAsUrl}`
|// Import a locally published version of the plugin under test
|${imports.mkString("\n")}
|""".stripMargin
}

val testCases = testInvocations()
// val testInvocationsMap: Map[PathRef, TestInvocation.Targets] = testCases.toMap
Expand Down Expand Up @@ -137,6 +151,7 @@ trait MillIntegrationTestModule extends TaskModule with ExtraCoursierSupport wit
}

// Write the plugins.sc file
println(importFileContents)
os.write(testPath / "plugins.sc", importFileContents)

val millExe = downloadMillTestVersion().path
Expand All @@ -145,15 +160,13 @@ trait MillIntegrationTestModule extends TaskModule with ExtraCoursierSupport wit
val (runScript, scriptBody, perms) =
if (scala.util.Properties.isWin) (
testPath / "mill.bat",
s"""set JAVA_OPTS="-Divy.home=${ivyPath.toIO.getAbsolutePath()}"
|"${millExe.toIO.getAbsolutePath()}" %*
s""""${millExe.toIO.getAbsolutePath()}" %*
|""".stripMargin,
null
)
else (
testPath / "mill",
s"""#!/usr/bin/env sh
|export JAVA_OPTS="-Divy.home=${ivyPath.toIO.getAbsolutePath()}"
|exec ${millExe.toIO.getAbsolutePath()} "$$@"
|""".stripMargin,
os.PermSet(0) +
Expand Down Expand Up @@ -187,10 +200,7 @@ trait MillIntegrationTestModule extends TaskModule with ExtraCoursierSupport wit
val millOpts =
// --no-server is better, but not supported in older Mill versions
(if (noServer) Seq("-i") else Seq()) ++
Seq("--color", "false") ++
// -D is only supported since mill verison ???
(if (!noServer) Seq("-D", s"ivy.home=${ivyPath.toIO.getAbsolutePath()}") else Seq())

Seq("--color", "false")
// run mill with test targets
// ENV=env mill -i testTargets
val result = os.proc(
Expand Down Expand Up @@ -375,7 +385,7 @@ trait MillIntegrationTestModule extends TaskModule with ExtraCoursierSupport wit
* Defaults to run `TestIncokation.Targets` with the targets from [[testTargets]] and expecting successful execution.
*/
def testInvocations: Target[Seq[(PathRef, Seq[TestInvocation.Targets])]] = T {
testCases().map(tc => tc -> Seq(TestInvocation.Targets(testTargets())))
testCases().map(tc => tc -> Seq(TestInvocation.Targets(testTargets(): @nowarn)))
}

/**
Expand Down Expand Up @@ -418,8 +428,7 @@ trait MillIntegrationTestModule extends TaskModule with ExtraCoursierSupport wit
* Internal target used to trigger required artifacts of the plugins under test.
* You should not need to use or override this in you buildfile.
*/
protected def temporaryIvyModulesDetails
: Task[Seq[(PathRef, (PathRef, (PathRef, (PathRef, (PathRef, Artifact)))))]] =
protected def temporaryIvyModulesDetails: Task[Seq[(PathRef, (PathRef, (PathRef, (PathRef, (PathRef, Artifact)))))]] =
T.traverse(transitiveTemporaryIvyModules) { p =>
p.jar zip (p.sourceJar zip (p.docJar zip (p.pom zip (p.ivy zip p.artifactMetadata))))
}
Expand Down