summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.travis.yml11
-rwxr-xr-xci/release.sh5
-rw-r--r--core/src/mill/main/Resolve.scala26
3 files changed, 30 insertions, 12 deletions
diff --git a/.travis.yml b/.travis.yml
index 7ced7d08..6884b327 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -10,9 +10,14 @@ jdk:
matrix:
include:
- - env: CI_SCRIPT=ci/test.sh
- - env: CI_SCRIPT=ci/test2.sh
- - env: CI_SCRIPT=ci/test3.sh
+ - stage: build
+ env: CI_SCRIPT=ci/test.sh
+ - stage: build
+ env: CI_SCRIPT=ci/test2.sh
+ - stage: build
+ env: CI_SCRIPT=ci/test3.sh
+ - stage: release
+ env: CI_SCRIPT=ci/release.sh
script:
- "$CI_SCRIPT"
diff --git a/ci/release.sh b/ci/release.sh
new file mode 100755
index 00000000..29b4e688
--- /dev/null
+++ b/ci/release.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+
+set -eux
+
+sbt bin/test:assembly \ No newline at end of file
diff --git a/core/src/mill/main/Resolve.scala b/core/src/mill/main/Resolve.scala
index 42b9eeb8..fa39e81c 100644
--- a/core/src/mill/main/Resolve.scala
+++ b/core/src/mill/main/Resolve.scala
@@ -4,6 +4,7 @@ import mill.define._
import mill.define.TaskModule
import ammonite.main.Router
import ammonite.main.Router.EntryPoint
+import ammonite.util.Res
object Resolve {
def resolve[T, V](remainingSelector: List[Segment],
@@ -23,16 +24,23 @@ object Resolve {
.find(_.label == last)
.map(Right(_))
- def invokeCommand(target: mill.Module, name: String) = {
+ def invokeCommand(target: mill.Module, name: String) = for{
+ (cls, entryPoints) <- discover.value.filterKeys(_.isAssignableFrom(target.getClass))
+ ep <- entryPoints
+ if ep._2.name == name
+ } yield ammonite.main.Scripts.runMainMethod(
+ target,
+ ep._2.asInstanceOf[EntryPoint[mill.Module]],
+ ammonite.main.Scripts.groupArgs(rest.toList)
+ ) match{
+ case Res.Success(v) => Right(v)
+ case Res.Failure(msg) => Left(msg)
+ case Res.Exception(ex, msg) =>
+ val sw = new java.io.StringWriter()
+ ex.printStackTrace(new java.io.PrintWriter(sw))
+ val prefix = if (msg.nonEmpty) msg + "\n" else msg
+ Left(prefix + sw.toString)
- for{
- (cls, entryPoints) <- discover.value.filterKeys(_.isAssignableFrom(target.getClass))
- ep <- entryPoints
- if ep._2.name == name
- } yield ep._2.asInstanceOf[EntryPoint[mill.Module]].invoke(target, ammonite.main.Scripts.groupArgs(rest.toList)) match {
- case Router.Result.Success(v) => Right(v)
- case _ => Left(s"Command failed $last")
- }
}
val runDefault = for{