summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Fischer <nfischer921@gmail.com>2019-04-09 14:04:57 -0700
committerTobias Roeser <le.petit.fou@web.de>2019-04-17 08:06:46 +0200
commitc285ddaabe980b72e6cff240ed1c22664913a2e6 (patch)
treea712a01239932f857e09ce164831faecacaee6df
parent32a86977bbd03137f55981f3ce4ca8e24f239649 (diff)
downloadmill-c285ddaabe980b72e6cff240ed1c22664913a2e6.tar.gz
mill-c285ddaabe980b72e6cff240ed1c22664913a2e6.tar.bz2
mill-c285ddaabe980b72e6cff240ed1c22664913a2e6.zip
Flyway module
-rwxr-xr-xbuild.sc6
-rw-r--r--contrib/flyway/src/FlywayModule.scala59
2 files changed, 65 insertions, 0 deletions
diff --git a/build.sc b/build.sc
index 4161b169..9cba7f9d 100755
--- a/build.sc
+++ b/build.sc
@@ -301,6 +301,12 @@ object contrib extends MillModule {
def moduleDeps = Seq(scalalib)
def testArgs = Seq("-DMILL_VERSION=" + build.publishVersion()._2)
}
+
+ object flyway extends MillModule {
+ def moduleDeps = Seq(scalalib)
+
+ def ivyDeps = Agg(ivy"org.flywaydb:flyway-core:5.2.4")
+ }
}
diff --git a/contrib/flyway/src/FlywayModule.scala b/contrib/flyway/src/FlywayModule.scala
new file mode 100644
index 00000000..86e7ea32
--- /dev/null
+++ b/contrib/flyway/src/FlywayModule.scala
@@ -0,0 +1,59 @@
+package mill
+package contrib.flyway
+
+import java.net.URLClassLoader
+
+import mill.scalalib.Lib.resolveDependencies
+import mill.scalalib._
+import org.flywaydb.core.Flyway
+import org.flywaydb.core.api.logging.LogFactory
+import org.flywaydb.core.internal.configuration.{ConfigUtils => flyway}
+import org.flywaydb.core.internal.logging.console.ConsoleLog.Level
+import org.flywaydb.core.internal.logging.console.ConsoleLogCreator
+
+import scala.collection.JavaConverters._
+
+
+trait FlywayModule extends JavaModule {
+
+ def flywayUrl: T[String]
+ def flywayUser: T[String] = T("")
+ def flywayPassword: T[String] = T("")
+ //def flywayClassLocationDeps: T[Agg[Dep]] = Agg.empty[Dep]
+ //def flywayClassLocations: T[Seq[String]] = T(Nil)
+ def flywayFileLocations: T[Seq[PathRef]] = T(resources().map(pr => PathRef(pr.path / "db" / "migration", pr.quick)))
+ def flywayDriverDeps: T[Agg[Dep]]
+ def jdbcClasspath = T ( resolveDependencies(
+ repositories,
+ Lib.depToDependencyJava(_),
+ flywayDriverDeps()
+ ))
+
+ private def tToOptPair[A](key: String, t: A) =
+ Option(t)
+ .filter {
+ case a: String => a.nonEmpty
+ case _ => true
+ }
+ .map(key -> _)
+
+ def flywayInstance = T {
+ val jdbcClassloader = new URLClassLoader(jdbcClasspath().map(_.path.toIO.toURI.toURL).toArray)
+
+ val configProps = Map(flyway.URL -> flywayUrl()) ++
+ tToOptPair(flyway.USER, flywayUser()) ++
+ tToOptPair(flyway.PASSWORD, flywayPassword())
+
+ LogFactory.setLogCreator(new ConsoleLogCreator(Level.INFO))
+
+ Flyway
+ .configure(jdbcClassloader)
+ .locations(flywayFileLocations().map("filesystem:" + _.path):_*)
+ .configuration(configProps.asJava)
+ .load
+ }
+
+ def flywayMigrate() = T.command (
+ flywayInstance().migrate()
+ )
+}