diff options
author | Jakob Odersky <jakob@odersky.com> | 2016-01-24 13:04:15 -0800 |
---|---|---|
committer | Jakob Odersky <jakob@odersky.com> | 2016-01-24 13:04:15 -0800 |
commit | 22ec7e9927ac62b01a8864eb4dcf506a561355b5 (patch) | |
tree | a9518463ab3d1e849088beb05958e336feb5fb09 /project/Release.scala | |
parent | 5521a9377fa35278e2407ab13b26f86b5ce4eb36 (diff) | |
download | akka-serial-22ec7e9927ac62b01a8864eb4dcf506a561355b5.tar.gz akka-serial-22ec7e9927ac62b01a8864eb4dcf506a561355b5.tar.bz2 akka-serial-22ec7e9927ac62b01a8864eb4dcf506a561355b5.zip |
Use release plugin
Diffstat (limited to 'project/Release.scala')
-rw-r--r-- | project/Release.scala | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/project/Release.scala b/project/Release.scala new file mode 100644 index 0000000..1992a8b --- /dev/null +++ b/project/Release.scala @@ -0,0 +1,117 @@ +package flow + +import sbt._ +import sbtrelease._ +import sbtrelease.ReleasePlugin.autoImport._ +import sbtrelease.ReleaseStateTransformations._ + +import ch.jodersky.sbt.jni.plugins.JniNative.autoImport._ +import ch.jodersky.sbt.jni.plugins.JniPackaging.autoImport._ + +import com.typesafe.sbt.pgp.PgpKeys._ + +object Release { + + + def settings: Seq[Setting[_]] = Seq( + + //sign git tags + releaseVcs := Some(new SignedGit(Keys.baseDirectory.value)), + + //publish signed + releasePublishArtifactsAction := publishSigned.value, + + //build for multiple scala versions, + releaseCrossBuild := true, + + releaseProcess := Seq[ReleaseStep]( + + //Check that there are no snapshot dependencies + checkSnapshotDependencies, + + //During a release, only native libraries in lib_native will be packaged + disableLocalBuild, + + //Check that there are native libraries in lib_native and list all + //libraries that will be packaged + checkNativeLibs, + + //Ask for release version and next development version + inquireVersions, + + //Set version to release version and save + setReleaseVersion, + + //Clean + runClean, + + //Compile and test + runTest, + + //If all tests pass, commit the updated version + commitReleaseVersion, + + //Also create a tag + tagRelease, + + //Publish artifacts, note that they will only be uploaded, not yet be released to the public + publishArtifacts, + + //Bump version to next development + setNextVersion, + + //update website + + //Commit + commitNextVersion, + + //Push all changes (commits and tags) to GitHub + pushChanges + + //Release artifact on bintray + ) + ) + + /** Set `enableNativeCompilations` to false. */ + lazy val disableLocalBuild = ReleaseStep(st => { + val st1 = ReleaseStateTransformations.reapply(Seq( + enableNativeCompilation in FlowBuild.native in Compile := false + ), st) + st1.log.info("Disabled compilation of native libraries during release process.") + st1 + }) + + /** Release step that prints all native libraries that will be packaged + * and awaits approval from user. */ + lazy val checkNativeLibs = ReleaseStep(action = st0 => { + val log = st0.log + val project = FlowBuild.native + + val extracted = Project.extract(st0) + val (st1, libs) = extracted.runTask(unmanagedNativeLibraries in project in Compile, st0) + + log.info("The following native libraries will be packaged:") + log.info("Kernel\tArchitecture\tFile") + log.info("---------------------") + libs.toSeq.sortBy(_._1.id).foreach{ case (platform, file) => + log.info(platform.kernel + "\t" + platform.arch + "\t" + file.getAbsolutePath) + } + + val currentPlatform = extracted.get(nativePlatform in project in Compile) + if (!libs.contains(currentPlatform)) { + log.warn("Native library for the current platform does not exist! It will not be released.") + } + SimpleReader.readLine("Are the all native libraries listed (y/n)? [n] ") match { + case Some("y") => //do nothing + case _ => sys.error("Mssing native libaries. Aborting release.") + } + st1 + }) + + /** A Git wrapper that signs tags. */ + class SignedGit(baseDir: File) extends Git(baseDir) { + override def tag(name: String, comment: String, force: Boolean = false) = + cmd("tag", "-s", name, "-m", comment, if(force) "-f" else "") + } + +} |