import org.eclipse.jgit.api.CreateBranchCommand.SetupUpstreamMode
import org.eclipse.jgit.api.Git
import org.eclipse.jgit.merge.MergeStrategy
import org.eclipse.jgit.transport.{UsernamePasswordCredentialsProvider, RefSpec}
import scala.scalajs.sbtplugin.ScalaJSPlugin._
import ScalaJSKeys._
val cloneRepos = taskKey[Unit]("Clone stuff from github")
val sharedSettings = Seq(
scalaVersion := "2.11.4",
libraryDependencies += "com.lihaoyi" %% "acyclic" % "0.1.2" % "provided",
addCompilerPlugin("com.lihaoyi" %% "acyclic" % "0.1.2"),
autoCompilerPlugins := true
)
lazy val scalaParser = project.settings(sharedSettings:_*)
.settings(
libraryDependencies ++= Seq(
"com.lihaoyi" %% "utest" % "0.2.4",
"org.parboiled" %% "parboiled" % "2.0.1"
),
testFrameworks += new TestFramework("utest.runner.JvmFramework")
)
lazy val scalatexApi = project.settings(sharedSettings:_*)
.dependsOn(scalaParser)
.settings(
libraryDependencies ++= Seq(
"com.lihaoyi" %% "utest" % "0.2.4",
"com.scalatags" %% "scalatags" % "0.4.2",
"org.scala-lang" % "scala-reflect" % scalaVersion.value,
"org.parboiled" %% "parboiled" % "2.0.1"
),
testFrameworks += new TestFramework("utest.runner.JvmFramework")
)
lazy val scalatexPlugin = Project(
id = "scalatexPlugin",
base = file("scalatexPlugin"),
dependencies = Seq(scalatexApi)
).settings(sharedSettings:_*).settings(
libraryDependencies += "org.scala-lang" % "scala-compiler" % scalaVersion.value,
publishArtifact in Compile := false
)
lazy val book = Project(
id = "book",
base = file("book"),
dependencies = Seq(scalatexApi)
).settings(sharedSettings:_*).settings(
libraryDependencies ++= Seq(
"org.webjars" % "highlightjs" % "8.2-1",
"org.webjars" % "pure" % "0.5.0",
"org.webjars" % "font-awesome" % "4.2.0",
"com.lihaoyi" %%% "upickle" % "0.2.5"
),
(resources in Compile) += {
(fullOptJS in (demos, Compile)).value
(artifactPath in (demos, Compile, fullOptJS)).value
},
(unmanagedResourceDirectories in Compile) ++=
(unmanagedResourceDirectories in (demos, Compile)).value,
scalacOptions in Compile ++= {
val jar = (Keys.`package` in (scalatexPlugin, Compile)).value
val addPlugin = "-Xplugin:" + jar.getAbsolutePath
// add plugin timestamp to compiler options to trigger recompile of
// main after editing the plugin. (Otherwise a 'clean' is needed.)
val dummy = "-Jdummy=" + jar.lastModified
val options = "-P:scalatex-options:" + sourceDirectory.value / "scalatex"
Seq(addPlugin, dummy)
},
watchSources ++= {
((sourceDirectory in Compile).value / "scalatex" ** "*.scalatex").get
},
cloneRepos := {
val localPath = target.value / "clones"
if (!localPath.isDirectory){
val paths = Seq(
"scala-js" -> "scala-js",
"lihaoyi" -> "workbench-example-app"
)
localPath.delete()
for ((user, repo) <- paths){
println(s"Cloning $repo...")
Git.cloneRepository()
.setURI(s"https://github.com/$user/$repo")
.setDirectory(localPath / repo)
.call()
}
println("Done Cloning")
}else{
println("Already Cloned")
}
},
(run in Compile) <<= (run in Compile).dependsOn(cloneRepos),
initialize := {
System.setProperty("clone.root", target.value.getAbsolutePath + "/clones")
System.setProperty("output.root", target.value.getAbsolutePath + "/output")
},
publish := {
val outputRoot = target.value.getAbsolutePath + "/output"
val repo = Git.init().setDirectory(new File(outputRoot)).call()
val remoteUrl = "https://github.com/lihaoyi/hands-on-scala-js"
val creds = new UsernamePasswordCredentialsProvider(
System.console.readLine("username>"),
System.console.readPassword("password>")
)
repo.add()
.addFilepattern(".")
.call()
repo.commit()
.setAll(true)
.setMessage(".")
.call()
repo.rebase().setUpstream("gh-pages").call()
repo.fetch()
.setRemote(remoteUrl)
.setRefSpecs(new RefSpec("refs/heads/gh-pages:refs/heads/gh-pages"))
.call()
repo.push()
.setRemote(remoteUrl)
.setCredentialsProvider(creds)
.setRefSpecs(new RefSpec("refs/heads/master:refs/heads/gh-pages"))
.call()
streams.value.log("Pushing to Github Pages complete!")
}
)
lazy val demos = project.in(file("examples/demos"))
lazy val simple = project.in(file("examples/crossBuilds/simple"))
lazy val simple2 = project.in(file("examples/crossBuilds/simple2"))
lazy val clientserver = project.in(file("examples/crossBuilds/clientserver"))
lazy val client = ProjectRef(file("examples/crossBuilds/clientserver"), "client")
lazy val server = ProjectRef(file("examples/crossBuilds/clientserver"), "server")
lazy val clientserver2 = project.in(file("examples/crossBuilds/clientserver2"))
lazy val client2 = ProjectRef(file("examples/crossBuilds/clientserver2"), "client")
lazy val server2 = ProjectRef(file("examples/crossBuilds/clientserver2"), "server")