From bdf3a2fe50dae4af233f4b78c3e3e9b31e5955d3 Mon Sep 17 00:00:00 2001 From: To-om Date: Fri, 12 May 2017 11:33:23 +0200 Subject: [PATCH] #20 Publish rpm and deb packages --- build.sbt | 12 ++++++--- project/Bintray.scala | 61 ++++++++++++++++++++++++++++++++++++++----- 2 files changed, 63 insertions(+), 10 deletions(-) diff --git a/build.sbt b/build.sbt index 5bc8677c3..f4212af3b 100644 --- a/build.sbt +++ b/build.sbt @@ -69,10 +69,9 @@ linuxPackageMappings ~= { _.map { pm => packageBin := { (packageBin in Universal).value (packageBin in Debian).value - //(packageBin in Rpm).value + (packageBin in Rpm).value } // DEB // -//debianPackageRecommends := Seq("elasticsearch") debianPackageDependencies += "java8-runtime-headless | java8-runtime" maintainerScripts in Debian := maintainerScriptsFromDirectory( baseDirectory.value / "package" / "debian", @@ -82,7 +81,7 @@ linuxEtcDefaultTemplate in Debian := (baseDirectory.value / "package" / "etc_def linuxMakeStartScript in Debian := None // RPM // -rpmRelease := "8" +rpmRelease := "1" rpmVendor in Rpm := "TheHive Project" rpmUrl := Some("http://thehive-project.org/") rpmLicense := Some("AGPL") @@ -94,6 +93,11 @@ maintainerScripts in Rpm := maintainerScriptsFromDirectory( linuxPackageSymlinks in Rpm := Nil rpmPrefix := Some(defaultLinuxInstallLocation.value) linuxEtcDefaultTemplate in Rpm := (baseDirectory.value / "package" / "etc_default_cortex").asURL +packageBin in Rpm := { + val rpmFile = (packageBin in Rpm).value + s"rpm --addsign $rpmFile".!! + rpmFile +} // DOCKER // import com.typesafe.sbt.packager.docker.{ Cmd, ExecCmd } @@ -135,6 +139,8 @@ publish := { (publish in Docker).value PublishToBinTray.publishRelease.value PublishToBinTray.publishLatest.value + PublishToBinTray.publishRpm.value + PublishToBinTray.publishDebian.value } // Scalariform // diff --git a/project/Bintray.scala b/project/Bintray.scala index 55dec6007..40644bf90 100644 --- a/project/Bintray.scala +++ b/project/Bintray.scala @@ -1,10 +1,13 @@ import java.io.File import bintray.BintrayCredentials -import bintray.BintrayKeys.{bintrayEnsureCredentials, bintrayOrganization, bintrayPackage, bintrayRepository} +import bintray.BintrayKeys.{ bintrayEnsureCredentials, bintrayOrganization, bintrayPackage, bintrayRepository } import bintry.Client +import com.typesafe.sbt.packager.Keys.debianSign +import com.typesafe.sbt.packager.debian.DebianPlugin.autoImport.Debian +import com.typesafe.sbt.packager.rpm.RpmPlugin.autoImport.Rpm import com.typesafe.sbt.packager.universal.UniversalPlugin.autoImport.Universal -import dispatch.{FunctionHandler, Http} +import dispatch.{ FunctionHandler, Http } import sbt.Keys._ import sbt._ @@ -15,6 +18,9 @@ import scala.concurrent.duration.Duration object PublishToBinTray extends Plugin { val publishRelease: TaskKey[Unit] = taskKey[Unit]("Publish binary in bintray") val publishLatest: TaskKey[Unit] = taskKey[Unit]("Publish latest binary in bintray") + val publishDebian: TaskKey[Unit] = taskKey[Unit]("publish debian package in Bintray") + val publishRpm: TaskKey[Unit] = taskKey[Unit]("publish rpm package in Bintray") + override def settings = Seq( publishRelease := { @@ -48,7 +54,34 @@ object PublishToBinTray extends Plugin { "latest", sLog.value) } - }) + }, + publishDebian in ThisBuild := { + val file = (debianSign in Debian).value + btPublish(file.getName, + file, + bintrayEnsureCredentials.value, + bintrayOrganization.value, + "debian", + bintrayPackage.value, + version.value, + sLog.value, + "deb_distribution" -> "any", + "deb_component" -> "main", + "deb_architecture" -> "all" + ) + }, + publishRpm in ThisBuild := { + val file = (packageBin in Rpm).value + btPublish(file.getName, + file, + bintrayEnsureCredentials.value, + bintrayOrganization.value, + "rpm", + bintrayPackage.value, + version.value, + sLog.value) + } + ) private def asStatusAndBody = new FunctionHandler({ r => (r.getStatusCode, r.getResponseBody) }) @@ -61,15 +94,29 @@ object PublishToBinTray extends Plugin { } } - private def btPublish(filename: String, file: File, credential: BintrayCredentials, org: Option[String], repoName: String, packageName: String, version: String, log: Logger) = { + private def btPublish(filename: String, + file: File, + credential: BintrayCredentials, + org: Option[String], + repoName: String, + packageName: String, + version: String, + log: Logger, + additionalParams: (String, String)*) = { val BintrayCredentials(user, key) = credential val owner: String = org.getOrElse(user) val client: Client = Client(user, key, new Http()) val repo: Client#Repo = client.repo(org.getOrElse(user), repoName) - log.info(s"Uploading $file ...") - Await.result(repo.get(packageName).version(version).upload(filename, file)(asStatusAndBody), Duration.Inf) match { - case (201, _) => log.info(s"$file was uploaded to $owner/$packageName@$version") + + val params = additionalParams + .map { case (k, v) => s"$k=$v" } + .mkString(";", ";", "") + val upload = repo.get(packageName).version(version).upload(filename + params, file) + + log.info(s"Uploading $file ... (${org.getOrElse(user)}/$repoName/$packageName/$version/$filename$params)") + Await.result(upload(asStatusAndBody), Duration.Inf) match { + case (201, _) => log.info(s"$file was uploaded to $owner/$packageName@$version") case (_, fail) => sys.error(s"failed to upload $file to $owner/$packageName@$version: $fail") } }