aboutsummaryrefslogtreecommitdiff
path: root/stage2/Scaffold.scala
diff options
context:
space:
mode:
authorChristopher Vogt <oss.nsp@cvogt.org>2016-02-06 13:03:36 -0500
committerChristopher Vogt <oss.nsp@cvogt.org>2016-03-04 15:06:30 -0500
commit974942db43ff2d1fa7ba71ad60f9bb9eae2d8631 (patch)
treed7235df9d4d6a67753dc2a20ab6bfcb7a24dc74c /stage2/Scaffold.scala
downloadcbt-974942db43ff2d1fa7ba71ad60f9bb9eae2d8631.tar.gz
cbt-974942db43ff2d1fa7ba71ad60f9bb9eae2d8631.tar.bz2
cbt-974942db43ff2d1fa7ba71ad60f9bb9eae2d8631.zip
CBT Version 1.0-BETA
Diffstat (limited to 'stage2/Scaffold.scala')
-rw-r--r--stage2/Scaffold.scala148
1 files changed, 148 insertions, 0 deletions
diff --git a/stage2/Scaffold.scala b/stage2/Scaffold.scala
new file mode 100644
index 0000000..00c8706
--- /dev/null
+++ b/stage2/Scaffold.scala
@@ -0,0 +1,148 @@
+package cbt
+import java.io._
+import java.net._
+import ammonite.ops.{cwd => _,_}
+
+trait Scaffold{
+ def logger: Logger
+
+ def generateBasicBuildFile(
+ projectDirectory: File,
+ scalaVersion: String,
+ groupId: String,
+ artifactId: String,
+ version: String
+ ): Unit = {
+ /**
+ TODO:
+ - make behavior more user friendly:
+ - not generate half and then throw exception for one thing already existing
+ - maybe not generate all of this, e.g. offer different variants
+ */
+
+ val generatedFiles = Seq(
+ "build/build.scala" -> s"""import cbt._
+import java.net.URL
+import java.io.File
+import scala.collection.immutable.Seq
+
+class Build(context: Context) extends BasicBuild(context) with BuildShared{
+ override def artifactId: String = "$artifactId"
+ override def groupId = "$groupId"
+
+ override def dependencies = super.dependencies ++ Seq( // don't forget super.dependencies here
+ // "org.cvogt" %% "scala-extensions" % "0.4.1"
+ )
+
+ // required for .pom file
+ override def name = artifactId
+ override def description : String = lib.requiredForPom("description")
+}
+""",
+
+ "build/build/build.scala" -> s"""import cbt._
+import java.net.URL
+import java.io.File
+import scala.collection.immutable.Seq
+
+class Build(context: Context) extends BuildBuild(context){
+ override def scalaVersion: String = "2.11.7"
+
+ override def dependencies = super.dependencies ++ Seq(
+ BuildDependency( projectDirectory + "/../build-shared/")
+ // , "com.lihaoyi" %% "ammonite-ops" % "0.5.5"
+ )
+}
+""",
+
+ "test/Main.scala" -> s"""object Main{
+ def main( args: Array[String] ) = {
+ assert( false, "Go. Write some tests :)!" )
+ }
+}
+""",
+
+ "test/build/build.scala" -> s"""import cbt._
+import java.net.URL
+import java.io.File
+import scala.collection.immutable.Seq
+
+class Build(context: cbt.Context) extends BasicBuild(context) with BuildShared/* with cbt.mixins.ScalaTest*/{
+ // def scalaTestVersion = "2.2.6"
+
+ override def dependencies = super.dependencies ++ Seq(
+ // , "org.scalacheck" %% "scalacheck" % "1.13.0"
+ )
+}
+""",
+
+ "test/build/build/build.scala" -> s"""import cbt._
+import java.net.URL
+import java.io.File
+import scala.collection.immutable.Seq
+
+class Build(context: Context) extends BuildBuild(context){
+ override def scalaVersion: String = "2.11.7"
+
+ override def dependencies = super.dependencies ++ Seq(
+ BuildDependency( projectDirectory + "/../../build-shared/")
+ // , "com.lihaoyi" %% "ammonite-ops" % "0.5.5"
+ )
+}
+""",
+
+ "build-shared/build/build.scala" -> s"""import cbt._
+import java.net.URL
+import java.io.File
+import scala.collection.immutable.Seq
+
+class Build(context: Context) extends BasicBuild(context){
+ override def scalaVersion: String = "$scalaVersion"
+
+ override def dependencies = super.dependencies ++ Seq( // don't forget super.dependencies here
+ CbtDependency
+ // , "org.cvogt" %% "scala-extensions" % "0.4.1"
+ )
+}
+""",
+
+ "build-shared/BuildShared.scala" -> s"""import cbt._
+import java.net.URL
+import java.io.File
+import scala.collection.immutable.Seq
+
+trait BuildShared extends BasicBuild{
+ override def scalaVersion: String = "$scalaVersion"
+ override def enableConcurrency = false // enable for speed, disable for debugging
+
+ override def groupId = "$groupId"
+ override def version = "$version"
+
+ // required for .pom file
+ override def url : URL = lib.requiredForPom("url")
+ override def developers: Seq[Developer] = lib.requiredForPom("developers")
+ override def licenses : Seq[License] = lib.requiredForPom("licenses")
+ override def scmUrl : String = lib.requiredForPom("scmUrl")
+ override def scmConnection: String = lib.requiredForPom("scmConnection")
+ override def pomExtra: Seq[scala.xml.Node] = Seq()
+}
+"""
+ )
+
+ generatedFiles.map{
+ case ( fileName, code ) =>
+ scala.util.Try{
+ write( Path(projectDirectory+"/"+fileName), code )
+ import scala.Console._
+ println( GREEN + "Created " + fileName + RESET )
+ }
+ }.foreach(
+ _.recover{
+ case e: java.nio.file.FileAlreadyExistsException =>
+ e.printStackTrace
+ }.get
+ )
+ return ()
+ }
+
+} \ No newline at end of file