From 520b2a5f98930318f8a247e4448533029ec6ec10 Mon Sep 17 00:00:00 2001 From: Endrigo Antonini Date: Sun, 24 Aug 2014 16:19:37 -0300 Subject: [PATCH 1/5] Created a option so now it's possible to import a changelog to the RPM. Issue: #330. --- .../scala/com/typesafe/sbt/packager/rpm/Keys.scala | 3 +++ .../com/typesafe/sbt/packager/rpm/RpmMetadata.scala | 13 ++++++++++--- .../com/typesafe/sbt/packager/rpm/RpmPlugin.scala | 3 ++- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/main/scala/com/typesafe/sbt/packager/rpm/Keys.scala b/src/main/scala/com/typesafe/sbt/packager/rpm/Keys.scala index ce2519202..c97dfbb83 100644 --- a/src/main/scala/com/typesafe/sbt/packager/rpm/Keys.scala +++ b/src/main/scala/com/typesafe/sbt/packager/rpm/Keys.scala @@ -14,6 +14,9 @@ trait RpmKeys { val rpmPrefix = SettingKey[Option[String]]("rpm-prefix", "File system prefix for relocatable package.") val rpmMetadata = SettingKey[RpmMetadata]("rpm-metadata", "Metadata associated with the generated RPM.") + // Changelog + val rpmChangelogFile = SettingKey[Option[String]]("rpm-changelog-file", "RPM changelog file to be imported") + // DESCRIPTION KEYS // TODO - Summary and license are required. val rpmLicense = SettingKey[Option[String]]("rpm-license", "License of the code within the RPM.") diff --git a/src/main/scala/com/typesafe/sbt/packager/rpm/RpmMetadata.scala b/src/main/scala/com/typesafe/sbt/packager/rpm/RpmMetadata.scala index 0b6e6c6e7..eac34da7e 100644 --- a/src/main/scala/com/typesafe/sbt/packager/rpm/RpmMetadata.scala +++ b/src/main/scala/com/typesafe/sbt/packager/rpm/RpmMetadata.scala @@ -5,6 +5,7 @@ package rpm import linux.{ LinuxPackageMapping, LinuxFileMetaData } import sbt._ import com.typesafe.sbt.packager.linux.LinuxSymlink +import java.nio.file.{ Paths, Files } case class RpmMetadata( name: String, @@ -29,7 +30,8 @@ case class RpmDescription( url: Option[String] = None, group: Option[String] = None, packager: Option[String] = None, - icon: Option[String] = None) + icon: Option[String] = None, + changelogFile: Option[String] = None) case class RpmDependencies( provides: Seq[String] = Seq.empty, @@ -204,8 +206,13 @@ case class RpmSpec(meta: RpmMetadata, // Write file mappings sb append fileSection // TODO - Write triggers... - // TODO - Write changelog... - + desc.changelogFile foreach { changelog => + if (Files.exists(Paths.get(changelog))) { + val content = scala.io.Source.fromFile(changelog).mkString + sb append "%changelog\n" + sb append ("%s\n" format content) + } + } sb.toString } } diff --git a/src/main/scala/com/typesafe/sbt/packager/rpm/RpmPlugin.scala b/src/main/scala/com/typesafe/sbt/packager/rpm/RpmPlugin.scala index 5aa2e8486..79736a2cf 100644 --- a/src/main/scala/com/typesafe/sbt/packager/rpm/RpmPlugin.scala +++ b/src/main/scala/com/typesafe/sbt/packager/rpm/RpmPlugin.scala @@ -39,6 +39,7 @@ trait RpmPlugin extends Plugin with LinuxPlugin { rpmPosttrans := None, rpmPreun := None, rpmPostun := None, + rpmChangelogFile := None, rpmBrpJavaRepackJars := false, rpmScriptsDirectory <<= sourceDirectory apply (_ / "rpm" / Names.Scriptlets), // Explicitly defer default settings to generic Linux Settings. @@ -53,7 +54,7 @@ trait RpmPlugin extends Plugin with LinuxPlugin { rpmMetadata <<= (packageName, version, rpmRelease, rpmPrefix, packageArchitecture, rpmVendor, rpmOs, packageSummary, packageDescription, rpmAutoprov, rpmAutoreq) apply RpmMetadata, rpmDescription <<= - (rpmLicense, rpmDistribution, rpmUrl, rpmGroup, rpmPackager, rpmIcon) apply RpmDescription, + (rpmLicense, rpmDistribution, rpmUrl, rpmGroup, rpmPackager, rpmIcon, rpmChangelogFile) apply RpmDescription, rpmDependencies <<= (rpmProvides, rpmRequirements, rpmPrerequisites, rpmObsoletes, rpmConflicts) apply RpmDependencies, rpmPre <<= (rpmPre, rpmBrpJavaRepackJars) apply { From 9ad6da4cccf5927925ad8ce795b4772ccaf0e20b Mon Sep 17 00:00:00 2001 From: Endrigo Antonini Date: Sun, 24 Aug 2014 16:34:08 -0300 Subject: [PATCH 2/5] Added example on the documentation of the API. Issue: #330. --- src/sphinx/DetailedTopics/redhat.rst | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/sphinx/DetailedTopics/redhat.rst b/src/sphinx/DetailedTopics/redhat.rst index 1e6ba3187..eaf43d770 100644 --- a/src/sphinx/DetailedTopics/redhat.rst +++ b/src/sphinx/DetailedTopics/redhat.rst @@ -16,6 +16,7 @@ Rpms require the following specific settings: rpmVendor := "typesafe", rpmUrl := Some("http://github.com/paulp/sbt-extras"), rpmLicense := Some("BSD"), + rpmChangelogFile := Some("changelog") Informational Settings @@ -63,6 +64,9 @@ Meta Settings ``rpmPrefix`` The path passed set as the base for the revocable package + ``rpmChangelogFile`` + External file to be imported and used to generate the changelog of the RPM. + Scriptlet Settings ~~~~~~~~~~~~~~~~~~ @@ -119,6 +123,28 @@ Example Settings defaultLinuxLogsLocation := defaultLinuxInstallLocation + "/" + name +rpmChangelogFile +---------- +The rpmChangelogFile property allows you to set a source that will be imported and used on the RPM generation. So if you use rpm commands to see the changelog it brings that information. You have to create the content on that file following the RPM conventions that are available here http://fedoraproject.org/wiki/Packaging:Guidelines#Changelogs. + +Example Settings +~~~~~~~~~~~~~~~~~~ + +.. code-block:: scala + + changelog := "changelog.txt", + rpmChangelogFile := Some(changelog) + + +.. code-block:: txt + * Sun Aug 24 2014 Team - 1.1.0 + -Allow to login using social networks + * Wed Aug 20 2014 Team - 1.0.1 + -Vulnerability fix. + * Tue Aug 19 2014 Team - 1.0.0 + -First version of the system + + Template Changes ~~~~~~~~~~~~~~~~~~ Apply the following changes to the default init start script. You can find this in the sbt-native-packager source. From 2fb540e072eed5dcdd6fd67112388b00980e3085 Mon Sep 17 00:00:00 2001 From: Endrigo Antonini Date: Sun, 24 Aug 2014 20:02:36 -0300 Subject: [PATCH 3/5] Added test to the RPM generation with changelog --- test-project/build.sbt | 2 ++ test-project/changelog.txt | 9 +++++++++ 2 files changed, 11 insertions(+) create mode 100644 test-project/changelog.txt diff --git a/test-project/build.sbt b/test-project/build.sbt index 5814cf6fb..449a44ef1 100644 --- a/test-project/build.sbt +++ b/test-project/build.sbt @@ -29,6 +29,8 @@ rpmVendor := "typesafe" rpmLicense := Some("BSD") +rpmChangelogFile := Some("changelog.txt") + //debianMakePrermScript := Some(sourceDirectory.value / "deb" / "control" / "prerm") //change defaults diff --git a/test-project/changelog.txt b/test-project/changelog.txt new file mode 100644 index 000000000..204c2593f --- /dev/null +++ b/test-project/changelog.txt @@ -0,0 +1,9 @@ +* Sun Aug 24 2014 Team - 1.1.0 +-Allow to login using social networks +* Wed Aug 20 2014 Team - 1.0.1 +-Vulnerability fix. +-Other information. +-Feature list. +* Tue Aug 19 2014 Team - 1.0.0 +-First version of the system + From dca2117d76f1183a86b79e67764f1c6dc5bc2eb6 Mon Sep 17 00:00:00 2001 From: Endrigo Antonini Date: Fri, 29 Aug 2014 03:01:12 +0000 Subject: [PATCH 4/5] Changed to use native methods from JVM. Issue: #330 --- .../scala/com/typesafe/sbt/packager/rpm/RpmMetadata.scala | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/scala/com/typesafe/sbt/packager/rpm/RpmMetadata.scala b/src/main/scala/com/typesafe/sbt/packager/rpm/RpmMetadata.scala index eac34da7e..58500e8ba 100644 --- a/src/main/scala/com/typesafe/sbt/packager/rpm/RpmMetadata.scala +++ b/src/main/scala/com/typesafe/sbt/packager/rpm/RpmMetadata.scala @@ -5,7 +5,7 @@ package rpm import linux.{ LinuxPackageMapping, LinuxFileMetaData } import sbt._ import com.typesafe.sbt.packager.linux.LinuxSymlink -import java.nio.file.{ Paths, Files } +import java.io.File case class RpmMetadata( name: String, @@ -207,7 +207,9 @@ case class RpmSpec(meta: RpmMetadata, sb append fileSection // TODO - Write triggers... desc.changelogFile foreach { changelog => - if (Files.exists(Paths.get(changelog))) { + val tmpFile = new File(changelog) + if (tmpFile.isFile() && tmpFile.exists()) { + // if (Files.exists(Paths.get(changelog))) { val content = scala.io.Source.fromFile(changelog).mkString sb append "%changelog\n" sb append ("%s\n" format content) From cc85056cc26e8a298b474ae030e77bc7e873bf58 Mon Sep 17 00:00:00 2001 From: Endrigo Antonini Date: Fri, 29 Aug 2014 03:23:58 +0000 Subject: [PATCH 5/5] Added the automated test about the changelog on the RPM SPEC file. Worked on issue #330 --- src/sbt-test/rpm/changelog-test/build.sbt | 33 +++++++++++++++++++ .../rpm/changelog-test/conf/changelog | 9 +++++ .../rpm/changelog-test/project/plugins.sbt | 1 + src/sbt-test/rpm/changelog-test/test | 9 +++++ 4 files changed, 52 insertions(+) create mode 100644 src/sbt-test/rpm/changelog-test/build.sbt create mode 100644 src/sbt-test/rpm/changelog-test/conf/changelog create mode 100644 src/sbt-test/rpm/changelog-test/project/plugins.sbt create mode 100644 src/sbt-test/rpm/changelog-test/test diff --git a/src/sbt-test/rpm/changelog-test/build.sbt b/src/sbt-test/rpm/changelog-test/build.sbt new file mode 100644 index 000000000..23938119e --- /dev/null +++ b/src/sbt-test/rpm/changelog-test/build.sbt @@ -0,0 +1,33 @@ +import NativePackagerKeys._ + +packageArchetype.java_server + +name := "rpm-test" + +version := "0.1.0" + +maintainer := "Endrigo Antonini " + +packageSummary := "Test rpm package with changelog" + +packageDescription := """A fun package description of our software, + with multiple lines.""" + +rpmRelease := "1" + +rpmVendor := "eidoscode" + +rpmUrl := Some("http://github.com/sbt/sbt-native-packager") + +rpmLicense := Some("BSD") + +rpmChangelogFile := Some("conf/changelog") + +TaskKey[Unit]("check-spec-file") <<= (target, streams) map { (target, out) => + val spec = IO.read(target / "rpm" / "SPECS" / "rpm-test.spec") + // Check if the RPM writted the changelog tag on the task + assert(spec contains "%changelog\n", "Spec doesn't contain %changelog tag on the SPEC") + out.log.success("Successfully tested rpm test file") + () +} + diff --git a/src/sbt-test/rpm/changelog-test/conf/changelog b/src/sbt-test/rpm/changelog-test/conf/changelog new file mode 100644 index 000000000..204c2593f --- /dev/null +++ b/src/sbt-test/rpm/changelog-test/conf/changelog @@ -0,0 +1,9 @@ +* Sun Aug 24 2014 Team - 1.1.0 +-Allow to login using social networks +* Wed Aug 20 2014 Team - 1.0.1 +-Vulnerability fix. +-Other information. +-Feature list. +* Tue Aug 19 2014 Team - 1.0.0 +-First version of the system + diff --git a/src/sbt-test/rpm/changelog-test/project/plugins.sbt b/src/sbt-test/rpm/changelog-test/project/plugins.sbt new file mode 100644 index 000000000..b53de154c --- /dev/null +++ b/src/sbt-test/rpm/changelog-test/project/plugins.sbt @@ -0,0 +1 @@ +addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % sys.props("project.version")) diff --git a/src/sbt-test/rpm/changelog-test/test b/src/sbt-test/rpm/changelog-test/test new file mode 100644 index 000000000..8abe513e5 --- /dev/null +++ b/src/sbt-test/rpm/changelog-test/test @@ -0,0 +1,9 @@ +# Run the debian packaging. +> rpm:package-bin +$ exists target/rpm/RPMS/noarch/rpm-test-0.1.0-1.noarch.rpm +$ exists target/rpm/SPECS/rpm-test.spec + +# Check files for defaults +> check-spec-file +> set NativePackagerKeys.rpmBrpJavaRepackJars := true +> check-spec-file