| 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") |
| ) |