Skip to content

Commit

Permalink
#20 Publish rpm and deb packages
Browse files Browse the repository at this point in the history
  • Loading branch information
To-om committed May 12, 2017
1 parent 1016858 commit bdf3a2f
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 10 deletions.
12 changes: 9 additions & 3 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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")
Expand All @@ -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 }
Expand Down Expand Up @@ -135,6 +139,8 @@ publish := {
(publish in Docker).value
PublishToBinTray.publishRelease.value
PublishToBinTray.publishLatest.value
PublishToBinTray.publishRpm.value
PublishToBinTray.publishDebian.value
}

// Scalariform //
Expand Down
61 changes: 54 additions & 7 deletions project/Bintray.scala
Original file line number Diff line number Diff line change
@@ -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._

Expand All @@ -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 := {
Expand Down Expand Up @@ -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) })

Expand All @@ -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")
}
}
Expand Down

0 comments on commit bdf3a2f

Please sign in to comment.