blob: 2a2c22ecebbc12b1d393921e5ee5fcf3d72d2102 [file] [log] [blame]
import sbt.Keys.version
import sbtassembly.AssemblyKeys
enablePlugins(GitVersioning)
enablePlugins(DockerPlugin)
git.useGitDescribe := true
organization := "gerritforge"
name := "analytics-etl"
scalaVersion := "2.11.8"
val sparkVersion = "2.3.2"
val gerritApiVersion = "2.13.7"
val pluginName = "analytics-etl"
val mainClassPackage = "com.gerritforge.analytics.job.Main"
val dockerRepository = "spark-gerrit-analytics-etl"
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % sparkVersion % "provided"
exclude("org.spark-project.spark", "unused"),
"org.apache.spark" %% "spark-sql" % sparkVersion % "provided",
"org.elasticsearch" %% "elasticsearch-spark-20" % "6.2.0"
excludeAll ExclusionRule(organization = "org.apache.spark"),
// json4s still needed by GerritProjects
"org.json4s" %% "json4s-native" % "3.2.11",
"com.google.gerrit" % "gerrit-plugin-api" % gerritApiVersion % Provided withSources(),
"com.typesafe.scala-logging" %% "scala-logging" % "3.7.2",
"com.github.scopt" %% "scopt" % "3.6.0",
"org.scalactic" %% "scalactic" % "3.0.1" % "test",
"org.scalatest" %% "scalatest" % "3.0.1" % "test"
)
mainClass in (Compile,run) := Some(mainClassPackage)
assemblyJarName in assembly := s"${name.value}.jar"
parallelExecution in Test := false
// Docker settings
docker := (docker dependsOn AssemblyKeys.assembly).value
dockerfile in docker := {
val artifact: File = assembly.value
val artifactTargetPath = s"/app/${name.value}-assembly.jar"
val entryPointBase = s"/app"
new Dockerfile {
from("openjdk:8-alpine")
label("maintainer" -> "GerritForge <info@gerritforge.com>")
runRaw("apk --update add curl tar bash && rm -rf /var/lib/apt/lists/* && rm /var/cache/apk/*")
env("SPARK_VERSION", sparkVersion)
env("SPARK_HOME", "/usr/local/spark-$SPARK_VERSION-bin-hadoop2.7")
env("PATH","$PATH:$SPARK_HOME/bin")
env("SPARK_JAR_PATH", artifactTargetPath)
env("SPARK_JAR_CLASS",mainClassPackage)
runRaw("curl -sL \"http://www-eu.apache.org/dist/spark/spark-$SPARK_VERSION/spark-$SPARK_VERSION-bin-hadoop2.7.tgz\" | tar -xz -C /usr/local")
copy(baseDirectory(_ / "scripts" / "gerrit-analytics-etl.sh").value, file(s"$entryPointBase/gerrit-analytics-etl.sh"))
copy(baseDirectory(_ / "scripts" / "wait-for-elasticsearch.sh").value, file(s"$entryPointBase/wait-for-elasticsearch.sh"))
add(artifact, artifactTargetPath)
runRaw(s"chmod +x $artifactTargetPath")
cmd(s"/bin/sh", s"$entryPointBase/gerrit-analytics-etl.sh")
}
}
imageNames in docker := Seq(
ImageName(
namespace = Some(organization.value),
repository = dockerRepository,
tag = Some("latest")
),
ImageName(
namespace = Some(organization.value),
repository = dockerRepository,
tag = Some(version.value)
)
)
buildOptions in docker := BuildOptions(cache = false)
packageOptions in(Compile, packageBin) += Package.ManifestAttributes(
("Gerrit-ApiType", "plugin"),
("Gerrit-PluginName", pluginName),
("Gerrit-Module", "com.gerritforge.analytics.plugin.Module"),
("Gerrit-SshModule", "com.gerritforge.analytics.plugin.SshModule"),
("Implementation-Title", "Analytics ETL plugin"),
("Implementation-URL", "https://gerrit.googlesource.com/plugins/analytics-etl")
)