sbt/project/PackageSignerPlugin.scala

84 lines
3.1 KiB
Scala

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