mirror of https://github.com/sbt/sbt.git
84 lines
3.1 KiB
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
|
|
)
|
|
|
|
}
|