import sbt._ import Keys._ import sbt.internal.librarymanagement.IvyActions import com.jsuereth.sbtpgp.SbtPgp import com.typesafe.sbt.packager.universal.{ UniversalPlugin, UniversalDeployPlugin } import com.typesafe.sbt.packager.debian.{ DebianPlugin, DebianDeployPlugin } import com.typesafe.sbt.packager.rpm.{ RpmPlugin, RpmDeployPlugin } import com.jsuereth.sbtpgp.gpgExtension object PackageSignerPlugin extends sbt.AutoPlugin { override def trigger = allRequirements override def requires = SbtPgp && UniversalDeployPlugin && DebianDeployPlugin && RpmDeployPlugin import com.jsuereth.sbtpgp.PgpKeys._ import UniversalPlugin.autoImport._ import DebianPlugin.autoImport._ import RpmPlugin.autoImport._ override def projectSettings: Seq[Setting[_]] = inConfig(Universal)(packageSignerSettings) ++ inConfig(Debian)(packageSignerSettings) ++ inConfig(Rpm)(packageSignerSettings) def subExtension(art: Artifact, ext: String): Artifact = art.withExtension(ext) def packageSignerSettings: Seq[Setting[_]] = Seq( signedArtifacts := { val artifacts = packagedArtifacts.value val r = pgpSigner.value val skipZ = (pgpSigner / skip).value val s = streams.value if (!skipZ) { artifacts flatMap { case (art, f) => Seq(art -> f, subExtension(art, art.extension + gpgExtension) -> r.sign(f, file(f.getAbsolutePath + gpgExtension), s)) } } else artifacts }, publishSignedConfiguration := Classpaths.publishConfig( publishMavenStyle = publishMavenStyle.value, deliverIvyPattern = (Compile / packageBin / artifactPath).value.getParent + "/[artifact]-[revision](-[classifier]).[ext]", status = if (isSnapshot.value) "integration" else "release", configurations = Vector.empty, artifacts = signedArtifacts.value.toVector, checksums = (publish / checksums).value.toVector, resolverName = Classpaths.getPublishTo(publishTo.value).name, logging = ivyLoggingLevel.value, overwrite = isSnapshot.value), publishLocalSignedConfiguration := Classpaths.publishConfig( publishMavenStyle = publishMavenStyle.value, deliverIvyPattern = (Compile / packageBin / artifactPath).value.getParent + "/[artifact]-[revision](-[classifier]).[ext]", status = if (isSnapshot.value) "integration" else "release", configurations = Vector.empty, artifacts = signedArtifacts.value.toVector, checksums = (publish / checksums).value.toVector, resolverName = "local", logging = ivyLoggingLevel.value, overwrite = isSnapshot.value), publishSigned := Def.taskDyn { val config = publishSignedConfiguration.value val s = streams.value Def.task { IvyActions.publish(ivyModule.value, config, s.log) } }.value, publishLocalSigned := Def.taskDyn { val config = publishLocalSignedConfiguration.value val s = streams.value Def.task { IvyActions.publish(ivyModule.value, config, s.log) } }.value ) }