Skip to content

Commit 53d3cd8

Browse files
committed
Merge pull request #250 from sbt/wip/name-delegation
Clean up name delegation in the plugin. A few rules:
2 parents 90c5697 + 70bdbae commit 53d3cd8

File tree

40 files changed

+311
-73
lines changed

40 files changed

+311
-73
lines changed

src/main/scala/com/typesafe/sbt/PackagerPlugin.scala

+4-4
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@ package com.typesafe.sbt
33
import packager._
44

55
import debian.Keys.genChanges
6-
import Keys.packageZipTarball
7-
import Keys.packageXzTarball
6+
import Keys.{ packageName, packageZipTarball, packageXzTarball }
87
import sbt._
9-
import sbt.Keys.packageBin
8+
import sbt.Keys.{ normalizedName, packageBin }
109

1110
object SbtNativePackager extends Plugin
1211
with linux.LinuxPlugin
@@ -30,7 +29,8 @@ object SbtNativePackager extends Plugin
3029
Seq( // Bad defaults that let us at least not explode users who don't care about native packagers
3130
NativePackagerKeys.maintainer := "",
3231
NativePackagerKeys.packageDescription := "",
33-
NativePackagerKeys.packageSummary := ""
32+
NativePackagerKeys.packageSummary := "",
33+
packageName <<= normalizedName
3434
)
3535

3636
import SettingsHelper._

src/main/scala/com/typesafe/sbt/packager/GenericPackageSettings.scala

+3-3
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ trait GenericPackageSettings
6666
mapGenericMappingsToLinux(MappingsHelper contentOf dir, Users.Root, Users.Root)(identity)
6767
},
6868
// Now we look at the src/universal files.
69-
linuxPackageMappings <++= (normalizedName in Universal, mappings in Universal, defaultLinuxInstallLocation) map {
69+
linuxPackageMappings <++= (packageName in Linux, mappings in Universal, defaultLinuxInstallLocation) map {
7070
(pkg, mappings, installLocation) =>
7171
// TODO - More windows filters...
7272
def isWindowsFile(f: (File, String)): Boolean =
@@ -77,7 +77,7 @@ trait GenericPackageSettings
7777
}
7878
},
7979
// Now we generate symlinks.
80-
linuxPackageSymlinks <++= (normalizedName in Universal, mappings in Universal, defaultLinuxInstallLocation) map { (pkg, mappings, installLocation) =>
80+
linuxPackageSymlinks <++= (packageName in Linux, mappings in Universal, defaultLinuxInstallLocation) map { (pkg, mappings, installLocation) =>
8181
for {
8282
(file, name) <- mappings
8383
if !file.isDirectory
@@ -86,7 +86,7 @@ trait GenericPackageSettings
8686
} yield LinuxSymlink("/usr/" + name, installLocation + "/" + pkg + "/" + name)
8787
},
8888
// Map configuration files
89-
linuxPackageSymlinks <++= (normalizedName in Universal, mappings in Universal, defaultLinuxInstallLocation, defaultLinuxConfigLocation)
89+
linuxPackageSymlinks <++= (packageName in Linux, mappings in Universal, defaultLinuxInstallLocation, defaultLinuxConfigLocation)
9090
map { (pkg, mappings, installLocation, configLocation) =>
9191
val needsConfLink =
9292
mappings exists {

src/main/scala/com/typesafe/sbt/packager/Keys.scala

+4
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ object Keys extends linux.Keys
1111
with universal.UniversalKeys {
1212

1313
// These keys are used by the JavaApp/JavaServer archetypes.
14+
val packageName = SettingKey[String]("packageName", "Name of the created output package. Used for dirs/scripts.")
1415
val makeBashScript = TaskKey[Option[File]]("makeBashScript", "Creates or discovers the bash script used by this project.")
1516
val bashScriptDefines = TaskKey[Seq[String]]("bashScriptDefines", "A list of definitions that should be written to the bash file template.")
1617
val bashScriptExtraDefines = TaskKey[Seq[String]]("bashScriptExtraDefines", "A list of extra definitions that should be written to the bash file template.")
@@ -27,8 +28,11 @@ object Keys extends linux.Keys
2728
| APP_NAME - the name of the app
2829
| APP_DEFINES - the defines to go into the app
2930
| """.stripMargin)
31+
32+
// TODO put these into the linux plugin
3033
val defaultLinuxInstallLocation = SettingKey[String]("defaultLinuxInstallLocation", "The location where we will install generic linux packages.")
3134
val defaultLinuxLogsLocation = SettingKey[String]("defaultLinuxLogsLocation", "The location where application logs will be stored.")
3235
val defaultLinuxConfigLocation = SettingKey[String]("defaultLinuxConfigLocation", "The location where application config files will be stored")
3336
val defaultLinuxStartScriptLocation = SettingKey[String]("defaultLinuxStartScriptLocation", "The location where start script for server application will be stored")
37+
3438
}

src/main/scala/com/typesafe/sbt/packager/archetypes/JavaApp.scala

+5-5
Original file line numberDiff line numberDiff line change
@@ -45,26 +45,26 @@ object JavaAppPackaging {
4545
hasMain getOrElse Nil
4646
},
4747
// TODO - Overridable bash template.
48-
makeBashScript <<= (bashScriptDefines, target in Universal, normalizedName, sourceDirectory) map makeUniversalBinScript,
48+
makeBashScript <<= (bashScriptDefines, target in Universal, packageName, sourceDirectory) map makeUniversalBinScript,
4949
batScriptExtraDefines := Nil,
5050
batScriptReplacements <<= (normalizedName, Keys.mainClass in Compile, scriptClasspath, batScriptExtraDefines) map { (name, mainClass, cp, extras) =>
5151
mainClass map { mc =>
5252
JavaAppBatScript.makeReplacements(name = name, mainClass = mc, appClasspath = cp, extras = extras)
5353
} getOrElse Nil
5454

5555
},
56-
makeBatScript <<= (batScriptReplacements, target in Universal, normalizedName, sourceDirectory) map makeUniversalBatScript,
57-
mappings in Universal <++= (makeBashScript, normalizedName) map { (script, name) =>
56+
makeBatScript <<= (batScriptReplacements, target in Universal, packageName, sourceDirectory) map makeUniversalBatScript,
57+
mappings in Universal <++= (makeBashScript, packageName) map { (script, name) =>
5858
for {
5959
s <- script.toSeq
6060
} yield s -> ("bin/" + name)
6161
},
62-
mappings in Universal <++= (makeBatScript, normalizedName) map { (script, name) =>
62+
mappings in Universal <++= (makeBatScript, packageName) map { (script, name) =>
6363
for {
6464
s <- script.toSeq
6565
} yield s -> ("bin/" + name + ".bat")
6666
},
67-
linuxPackageMappings in Debian <+= (normalizedName, defaultLinuxInstallLocation, target in Debian) map {
67+
linuxPackageMappings in Debian <+= (packageName in Debian, defaultLinuxInstallLocation, target in Debian) map {
6868
(name, installLocation, target) =>
6969
// create empty var/log directory
7070
val d = target / installLocation

src/main/scala/com/typesafe/sbt/packager/archetypes/JavaServerApplication.scala

+31-30
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ package archetypes
44

55
import Keys._
66
import sbt._
7-
import sbt.Keys.{ target, mainClass, normalizedName, sourceDirectory, streams }
7+
import sbt.Keys.{ target, mainClass, sourceDirectory, streams }
88
import SbtNativePackager._
99
import com.typesafe.sbt.packager.linux.{ LinuxFileMetaData, LinuxPackageMapping, LinuxSymlink, LinuxPlugin }
1010
import com.typesafe.sbt.packager.debian.DebianPlugin
@@ -89,53 +89,53 @@ object JavaServerAppPackaging {
8989
*/
9090
def linuxSettings: Seq[Setting[_]] = Seq(
9191
// === logging directory mapping ===
92-
linuxPackageMappings <+= (normalizedName, defaultLinuxLogsLocation, daemonUser in Linux, daemonGroup in Linux) map {
92+
linuxPackageMappings <+= (packageName in Linux, defaultLinuxLogsLocation, daemonUser in Linux, daemonGroup in Linux) map {
9393
(name, logsDir, user, group) => packageTemplateMapping(logsDir + "/" + name)() withUser user withGroup group withPerms "755"
9494
},
95-
linuxPackageSymlinks <+= (normalizedName, defaultLinuxInstallLocation, defaultLinuxLogsLocation) map {
95+
linuxPackageSymlinks <+= (packageName in Linux, defaultLinuxInstallLocation, defaultLinuxLogsLocation) map {
9696
(name, install, logsDir) => LinuxSymlink(install + "/" + name + "/logs", logsDir + "/" + name)
9797
},
9898
// === etc config mapping ===
99-
bashScriptConfigLocation <<= normalizedName map (name => Some("/etc/default/" + name)),
99+
bashScriptConfigLocation <<= (packageName in Linux) map (name => Some("/etc/default/" + name)),
100100
linuxEtcDefaultTemplate <<= sourceDirectory map { dir =>
101101
val overrideScript = dir / "templates" / "etc-default"
102102
if (overrideScript.exists) overrideScript.toURI.toURL
103103
else etcDefaultTemplateSource
104104
},
105-
makeEtcDefault <<= (normalizedName, target in Universal, linuxEtcDefaultTemplate, linuxScriptReplacements)
105+
makeEtcDefault <<= (packageName in Linux, target in Universal, linuxEtcDefaultTemplate, linuxScriptReplacements)
106106
map makeEtcDefaultScript,
107-
linuxPackageMappings <++= (makeEtcDefault, normalizedName) map { (conf, name) =>
107+
linuxPackageMappings <++= (makeEtcDefault, packageName in Linux) map { (conf, name) =>
108108
conf.map(c => LinuxPackageMapping(Seq(c -> ("/etc/default/" + name)),
109109
LinuxFileMetaData(Users.Root, Users.Root)).withConfig()).toSeq
110110
},
111111

112112
// === /var/run/app pid folder ===
113-
linuxPackageMappings <+= (normalizedName, daemonUser in Linux, daemonGroup in Linux) map { (name, user, group) =>
113+
linuxPackageMappings <+= (packageName in Linux, daemonUser in Linux, daemonGroup in Linux) map { (name, user, group) =>
114114
packageTemplateMapping("/var/run/" + name)() withUser user withGroup group withPerms "755"
115115
})
116116

117117
def debianSettings: Seq[Setting[_]] = {
118118
import DebianPlugin.Names.{ Preinst, Postinst, Prerm, Postrm }
119-
Seq(
120-
serverLoading in Debian := Upstart,
121-
startRunlevels in Debian <<= (serverLoading in Debian) apply defaultStartRunlevels,
122-
stopRunlevels in Debian <<= (serverLoading in Debian) apply defaultStopRunlevels,
123-
requiredStartFacilities in Debian <<= (serverLoading in Debian) apply defaultFacilities,
124-
requiredStopFacilities in Debian <<= (serverLoading in Debian) apply defaultFacilities,
125-
linuxJavaAppStartScriptBuilder in Debian := JavaAppStartScript.Debian,
119+
inConfig(Debian)(Seq(
120+
serverLoading := Upstart,
121+
startRunlevels <<= (serverLoading) apply defaultStartRunlevels,
122+
stopRunlevels <<= (serverLoading) apply defaultStopRunlevels,
123+
requiredStartFacilities <<= (serverLoading) apply defaultFacilities,
124+
requiredStopFacilities <<= (serverLoading) apply defaultFacilities,
125+
linuxJavaAppStartScriptBuilder := JavaAppStartScript.Debian,
126126
// === Startscript creation ===
127-
linuxScriptReplacements in Debian <++= (requiredStartFacilities in Debian, requiredStopFacilities in Debian, startRunlevels in Debian, stopRunlevels in Debian, serverLoading in Debian) apply
127+
linuxScriptReplacements <++= (requiredStartFacilities, requiredStopFacilities, startRunlevels, stopRunlevels, serverLoading) apply
128128
makeStartScriptReplacements,
129-
linuxStartScriptTemplate in Debian <<= (serverLoading in Debian, sourceDirectory, linuxJavaAppStartScriptBuilder in Debian) map {
129+
linuxStartScriptTemplate <<= (serverLoading, sourceDirectory, linuxJavaAppStartScriptBuilder) map {
130130
(loader, dir, builder) => builder.defaultStartScriptTemplate(loader, dir / "templates" / "start")
131131
},
132-
defaultLinuxStartScriptLocation in Debian <<= (serverLoading in Debian) apply getStartScriptLocation,
133-
linuxMakeStartScript in Debian <<= (target in Universal, serverLoading in Debian, linuxScriptReplacements in Debian, linuxStartScriptTemplate in Debian, linuxJavaAppStartScriptBuilder in Debian)
132+
defaultLinuxStartScriptLocation <<= (serverLoading) apply getStartScriptLocation,
133+
linuxMakeStartScript <<= (target in Universal, serverLoading, linuxScriptReplacements, linuxStartScriptTemplate, linuxJavaAppStartScriptBuilder)
134134
map { (tmpDir, loader, replacements, template, builder) =>
135135
makeMaintainerScript(builder.startScript, Some(template))(tmpDir, loader, replacements, builder)
136136
},
137-
linuxPackageMappings in Debian <++= (normalizedName, linuxMakeStartScript in Debian, serverLoading in Debian, defaultLinuxStartScriptLocation in Debian) map startScriptMapping,
138-
137+
linuxPackageMappings <++= (packageName, linuxMakeStartScript, serverLoading, defaultLinuxStartScriptLocation) map startScriptMapping
138+
)) ++ Seq(
139139
// === Maintainer scripts ===
140140
debianMakePreinstScript <<= (target in Universal, serverLoading in Debian, linuxScriptReplacements, linuxJavaAppStartScriptBuilder in Debian) map makeMaintainerScript(Preinst),
141141
debianMakePostinstScript <<= (target in Universal, serverLoading in Debian, linuxScriptReplacements, linuxJavaAppStartScriptBuilder in Debian) map makeMaintainerScript(Postinst),
@@ -145,15 +145,16 @@ object JavaServerAppPackaging {
145145

146146
def rpmSettings: Seq[Setting[_]] = {
147147
import RpmPlugin.Names.{ Pre, Post, Preun, Postun }
148-
Seq(
149-
serverLoading in Rpm := SystemV,
150-
startRunlevels in Rpm <<= (serverLoading in Rpm) apply defaultStartRunlevels,
151-
stopRunlevels in Rpm <<= (serverLoading in Rpm) apply defaultStopRunlevels,
152-
requiredStartFacilities in Rpm <<= (serverLoading in Rpm) apply defaultFacilities,
153-
requiredStopFacilities in Rpm <<= (serverLoading in Rpm) apply defaultFacilities,
154-
linuxJavaAppStartScriptBuilder in Rpm := JavaAppStartScript.Rpm,
155-
linuxScriptReplacements in Rpm <++= (requiredStartFacilities in Rpm, requiredStopFacilities in Rpm, startRunlevels in Rpm, stopRunlevels in Rpm, serverLoading in Rpm) apply
156-
makeStartScriptReplacements,
148+
inConfig(Rpm)(Seq(
149+
serverLoading := SystemV,
150+
startRunlevels <<= (serverLoading) apply defaultStartRunlevels,
151+
stopRunlevels in Rpm <<= (serverLoading) apply defaultStopRunlevels,
152+
requiredStartFacilities in Rpm <<= (serverLoading) apply defaultFacilities,
153+
requiredStopFacilities in Rpm <<= (serverLoading) apply defaultFacilities,
154+
linuxJavaAppStartScriptBuilder := JavaAppStartScript.Rpm,
155+
linuxScriptReplacements <++= (requiredStartFacilities, requiredStopFacilities, startRunlevels, stopRunlevels, serverLoading) apply
156+
makeStartScriptReplacements
157+
)) ++ Seq(
157158
// === Startscript creation ===
158159
linuxStartScriptTemplate in Rpm <<= (serverLoading in Rpm, sourceDirectory, linuxJavaAppStartScriptBuilder in Rpm) map {
159160
(loader, dir, builder) =>
@@ -164,7 +165,7 @@ object JavaServerAppPackaging {
164165
makeMaintainerScript(builder.startScript, Some(template))(tmpDir, loader, replacements, builder)
165166
},
166167
defaultLinuxStartScriptLocation in Rpm <<= (serverLoading in Rpm) apply getStartScriptLocation,
167-
linuxPackageMappings in Rpm <++= (normalizedName, linuxMakeStartScript in Rpm, serverLoading in Rpm, defaultLinuxStartScriptLocation in Rpm) map startScriptMapping,
168+
linuxPackageMappings in Rpm <++= (packageName in Rpm, linuxMakeStartScript in Rpm, serverLoading in Rpm, defaultLinuxStartScriptLocation in Rpm) map startScriptMapping,
168169

169170
// == Maintainer scripts ===
170171
// TODO this is very basic - align debian and rpm plugin

src/main/scala/com/typesafe/sbt/packager/debian/DebianPlugin.scala

+6-5
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ trait DebianPlugin extends Plugin with linux.LinuxPlugin with NativePackaging wi
2727
debianSignRole := "builder",
2828
target in Debian <<= (target, name in Debian, version in Debian) apply ((t, n, v) => t / (n + "-" + v)),
2929
name in Debian <<= (name in Linux),
30+
packageName in Debian <<= (packageName in Linux),
3031
version in Debian <<= (version in Linux),
3132
linuxPackageMappings in Debian <<= linuxPackageMappings,
3233
packageDescription in Debian <<= packageDescription in Linux,
@@ -46,15 +47,15 @@ trait DebianPlugin extends Plugin with linux.LinuxPlugin with NativePackaging wi
4647
debianMaintainerScripts <++= (debianMakePrermScript, debianControlScriptsDirectory) map scriptMapping(Names.Prerm),
4748
debianMaintainerScripts <++= (debianMakePreinstScript, debianControlScriptsDirectory) map scriptMapping(Names.Preinst),
4849
debianMaintainerScripts <++= (debianMakePostinstScript, debianControlScriptsDirectory) map scriptMapping(Names.Postinst),
49-
debianMaintainerScripts <++= (debianMakePostrmScript, debianControlScriptsDirectory) map scriptMapping(Names.Postrm)) ++ inConfig(Debian)(
50-
/* ==== Debian scoped settings ==== */
50+
debianMaintainerScripts <++= (debianMakePostrmScript, debianControlScriptsDirectory) map scriptMapping(Names.Postrm)) ++
51+
/* ==== Debian scoped settings ==== */
52+
inConfig(Debian)(
5153
Seq(
5254
packageArchitecture := "all",
5355
debianPackageInfo <<=
54-
(normalizedName, version, maintainer, packageSummary, packageDescription) apply PackageInfo,
56+
(packageName, version, maintainer, packageSummary, packageDescription) apply PackageInfo,
5557
debianPackageMetadata <<=
56-
(debianPackageInfo,
57-
debianPriority, packageArchitecture, debianSection,
58+
(debianPackageInfo, debianPriority, packageArchitecture, debianSection,
5859
debianPackageDependencies, debianPackageRecommends) apply PackageMetaData,
5960
debianPackageInstallSize <<= linuxPackageMappings map { mappings =>
6061
(for {

src/main/scala/com/typesafe/sbt/packager/debian/Keys.scala

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ trait DebianKeys {
4747
object Keys extends DebianKeys {
4848
// Metadata keys
4949
def name = sbt.Keys.name
50+
def packageName = linux.Keys.packageName
5051
def version = sbt.Keys.version
5152
def maintainer = linux.Keys.maintainer
5253
def packageArchitecture = linux.Keys.packageArchitecture

src/main/scala/com/typesafe/sbt/packager/debian/NativePackaging.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ package debian
44

55
import Keys._
66
import sbt._
7-
import sbt.Keys.{ target, name, normalizedName, TaskStreams }
7+
import sbt.Keys.{ target, name, TaskStreams }
88
import linux.{ LinuxFileMetaData, LinuxPackageMapping, LinuxSymlink }
99
import linux.Keys.{ linuxScriptReplacements, daemonShell }
1010
import com.typesafe.sbt.packager.Hashing

src/main/scala/com/typesafe/sbt/packager/docker/DockerPlugin.scala

+12-11
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ trait DockerPlugin extends Plugin with UniversalPlugin {
4949
}
5050

5151
private[this] final def generateDockerConfig(
52-
dockerBaseImage: String, dockerBaseDirectory: String, maintainer: String, daemonUser: String, normalizedName: String, exposedPorts: Seq[Int], exposedVolumes: Seq[String], target: File) = {
53-
val dockerContent = makeDockerContent(dockerBaseImage, dockerBaseDirectory, maintainer, daemonUser, normalizedName, exposedPorts, exposedVolumes)
52+
dockerBaseImage: String, dockerBaseDirectory: String, maintainer: String, daemonUser: String, packageName: String, exposedPorts: Seq[Int], exposedVolumes: Seq[String], target: File) = {
53+
val dockerContent = makeDockerContent(dockerBaseImage, dockerBaseDirectory, maintainer, daemonUser, packageName, exposedPorts, exposedVolumes)
5454

5555
val f = target / "Dockerfile"
5656
IO.write(f, dockerContent)
@@ -149,9 +149,16 @@ trait DockerPlugin extends Plugin with UniversalPlugin {
149149
def dockerSettings: Seq[Setting[_]] = Seq(
150150
dockerBaseImage := "dockerfile/java",
151151
name in Docker <<= name,
152+
packageName in Docker <<= packageName,
152153
dockerRepository := None,
153154
sourceDirectory in Docker <<= sourceDirectory apply (_ / "docker"),
154-
target in Docker <<= target apply (_ / "docker")
155+
target in Docker <<= target apply (_ / "docker"),
156+
157+
// TODO this must be changed, when there is a setting for the startScripts name
158+
dockerGenerateConfig <<=
159+
(dockerBaseImage in Docker, defaultLinuxInstallLocation in Docker, maintainer in Docker, daemonUser in Docker,
160+
packageName /* this is not scoped!*/ , dockerExposedPorts in Docker, dockerExposedVolumes in Docker, target in Docker) map
161+
generateDockerConfig
155162
) ++ mapGenericFilesToDocker ++ inConfig(Docker)(Seq(
156163
daemonUser := "daemon",
157164
defaultLinuxInstallLocation := "/opt/docker",
@@ -161,15 +168,14 @@ trait DockerPlugin extends Plugin with UniversalPlugin {
161168
MappingsHelper contentOf dir
162169
},
163170
mappings <++= dockerPackageMappings,
164-
normalizedName <<= name apply StringUtilities.normalize,
165171
stage <<= (dockerGenerateConfig, dockerGenerateContext) map { (configFile, contextDir) => () },
166172
dockerGenerateContext <<= (cacheDirectory, mappings, target) map {
167173
(cacheDirectory, mappings, t) =>
168174
val contextDir = t / "files"
169175
stageFiles("docker")(cacheDirectory, contextDir, mappings)
170176
contextDir
171177
},
172-
dockerTarget <<= (dockerRepository, normalizedName, version) map {
178+
dockerTarget <<= (dockerRepository, packageName, version) map {
173179
(repo, name, version) =>
174180
repo.map(_ + "/").getOrElse("") + name + ":" + version
175181
},
@@ -180,11 +186,6 @@ trait DockerPlugin extends Plugin with UniversalPlugin {
180186
publish <<= (publishLocal, dockerTarget, streams) map {
181187
(_, target, s) =>
182188
publishDocker(target, s.log)
183-
},
184-
dockerGenerateConfig <<=
185-
(dockerBaseImage, defaultLinuxInstallLocation, maintainer, daemonUser, normalizedName, dockerExposedPorts, dockerExposedVolumes, target) map {
186-
case (dockerBaseImage, baseDirectory, maintainer, daemonUser, normalizedName, exposedPorts, exposedVolumes, target) =>
187-
generateDockerConfig(dockerBaseImage, baseDirectory, maintainer, daemonUser, normalizedName, exposedPorts, exposedVolumes, target)
188-
}
189+
}
189190
))
190191
}

0 commit comments

Comments
 (0)