-
-
Notifications
You must be signed in to change notification settings - Fork 366
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Make builds able to depend on external projects (#291)
* Make builds able to depend on external projects Builds are now able to load external projects and depend on them as if they were local submodules. `import $file.external.path.build` * Disambiguate "dest" for foreign modules. * Calling modules loaded from external directories "Foreign" to avoid conflicting with the already existing concept of "ExternalModule". * Amended the way `dest` is computed for foreign modules * Added tests to check that the source paths and dest are as expected * Added a test to show that local modules do not conflict with foreign modules when they are named the same * WIP windows build fail * Added bootstrapping step in CYGWIN CI job * * Revert externalOutPath deletion * Add documentation for foreign-modules * reverting appveyor changes * Disabling Foreign modules tests against Java9 See #302
- Loading branch information
Showing
20 changed files
with
320 additions
and
24 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
import $file.inner.{build => innerBuild} | ||
import mill._ | ||
import ammonite.ops._ | ||
|
||
// In this build, we have a local module targeting | ||
// the 'inner sub-directory, and an imported foreign | ||
// module in that same directory. Their sourcePaths | ||
// should be the same, but their dest paths should | ||
// be different to avoid both modules over-writing | ||
// each other's caches . | ||
|
||
def checkPaths : T[Unit] = T { | ||
if (innerBuild.millSourcePath != inner.millSourcePath) | ||
throw new Exception("Source paths should be the same") | ||
} | ||
|
||
def checkDests : T[Unit] = T { | ||
if (innerBuild.selfDest == inner.selfDest) | ||
throw new Exception("Dest paths should be different") | ||
} | ||
|
||
object inner extends mill.Module { | ||
def selfDest = T { T.ctx().dest / up / up } | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
import mill._ | ||
import ammonite.ops._ | ||
|
||
def selfDest = T { T.ctx().dest / up / up } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
import $file.inner.build | ||
import mill._ | ||
import ammonite.ops._ | ||
|
||
trait PathAware extends mill.Module { | ||
def selfPath = T { millSourcePath } | ||
} | ||
|
||
trait DestAware extends mill.Module { | ||
def selfDest = T { T.ctx().dest / up / up } | ||
} | ||
|
||
object sub extends PathAware with DestAware { | ||
object sub extends PathAware with DestAware | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
import mill._ | ||
import ammonite.ops._ | ||
|
||
trait PathAware extends mill.Module { | ||
def selfPath = T { millSourcePath } | ||
} | ||
|
||
trait DestAware extends mill.Module { | ||
def selfDest = T { T.ctx().dest / up / up } | ||
} | ||
|
||
object sub extends PathAware with DestAware { | ||
object sub extends PathAware with DestAware | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
import $file.^.outer.build | ||
import $file.inner.build | ||
|
||
import ammonite.ops._ | ||
import mill._ | ||
|
||
def assertPaths(p1 : Path, p2 : Path) : Unit = if (p1 != p2) throw new Exception( | ||
s"Paths were not equal : \n- $p1 \n- $p2" | ||
) | ||
|
||
object sub extends PathAware with DestAware { | ||
|
||
object sub extends PathAware with DestAware | ||
|
||
object sub2 extends ^.outer.build.PathAware with ^.outer.build.DestAware | ||
|
||
} | ||
|
||
def checkProjectPaths = T { | ||
val thisPath : Path = millSourcePath | ||
assert(thisPath.last == "project") | ||
assertPaths(sub.selfPath(), thisPath / 'sub) | ||
assertPaths(sub.sub.selfPath(), thisPath / 'sub / 'sub) | ||
assertPaths(sub.sub2.selfPath(), thisPath / 'sub / 'sub2) | ||
} | ||
|
||
def checkInnerPaths = T { | ||
val thisPath : Path = millSourcePath | ||
assertPaths(inner.build.millSourcePath, thisPath / 'inner ) | ||
assertPaths(inner.build.sub.selfPath(), thisPath / 'inner / 'sub) | ||
assertPaths(inner.build.sub.sub.selfPath(), thisPath / 'inner / 'sub / 'sub) | ||
} | ||
|
||
def checkOuterPaths = T { | ||
val thisPath : Path = millSourcePath | ||
assertPaths(^.outer.build.millSourcePath, thisPath / up / 'outer ) | ||
assertPaths(^.outer.build.sub.selfPath(), thisPath / up / 'outer / 'sub) | ||
assertPaths(^.outer.build.sub.sub.selfPath(), thisPath / up / 'outer / 'sub / 'sub) | ||
} | ||
|
||
def checkOuterInnerPaths = T { | ||
val thisPath : Path = millSourcePath | ||
assertPaths(^.outer.inner.build.millSourcePath, thisPath / up / 'outer / 'inner ) | ||
assertPaths(^.outer.inner.build.sub.selfPath(), thisPath / up / 'outer / 'inner /'sub) | ||
assertPaths(^.outer.inner.build.sub.sub.selfPath(), thisPath / up / 'outer / 'inner / 'sub / 'sub) | ||
} | ||
|
||
def checkProjectDests = T { | ||
val outPath : Path = millSourcePath / 'out | ||
assertPaths(sub.selfDest(), outPath / 'sub) | ||
assertPaths(sub.sub.selfDest(), outPath / 'sub / 'sub) | ||
assertPaths(sub.sub2.selfDest(), outPath / 'sub / 'sub2) | ||
} | ||
|
||
def checkInnerDests = T { | ||
val foreignOut : Path = millSourcePath / 'out / "foreign-modules" | ||
assertPaths(inner.build.sub.selfDest(), foreignOut / 'inner / 'sub) | ||
assertPaths(inner.build.sub.sub.selfDest(), foreignOut / 'inner / 'sub / 'sub) | ||
} | ||
|
||
def checkOuterDests = T { | ||
val foreignOut : Path = millSourcePath / 'out / "foreign-modules" | ||
assertPaths(^.outer.build.sub.selfDest(), foreignOut / "up-1" / 'outer/ 'sub ) | ||
assertPaths(^.outer.build.sub.sub.selfDest(), foreignOut / "up-1" / 'outer/ 'sub / 'sub) | ||
} | ||
|
||
def checkOuterInnerDests = T { | ||
val foreignOut : Path = millSourcePath / 'out / "foreign-modules" | ||
assertPaths(^.outer.inner.build.sub.selfDest(), foreignOut / "up-1" / 'outer/ 'inner / 'sub) | ||
assertPaths(^.outer.inner.build.sub.sub.selfDest(), foreignOut / "up-1" / 'outer/ 'inner / 'sub / 'sub) | ||
} | ||
|
||
|
||
trait PathAware extends mill.Module { | ||
|
||
def selfPath = T { millSourcePath } | ||
} | ||
|
||
trait DestAware extends mill.Module { | ||
def selfDest = T { T.ctx().dest / up / up } | ||
} | ||
|
Oops, something went wrong.