More release automation...

git-svn-id: https://simple-build-tool.googlecode.com/svn/trunk@1012 d89573ee-9141-11dd-94d4-bdf5e562f29c
This commit is contained in:
dmharrah 2009-09-12 17:45:41 +00:00
parent 2a1c455754
commit 79ad641e36
1 changed files with 31 additions and 12 deletions

View File

@ -8,7 +8,13 @@ import java.io.File
trait ReleaseProject extends ExecProject
{ self: SbtProject =>
def info: ProjectInfo
lazy val releaseChecks = javaVersionCheck && projectVersionCheck
lazy val releaseChecks = javaVersionCheck && projectVersionCheck && fullyCheckedOut
lazy val fullyCheckedOut =
task
{
if(svnArtifactsPath.exists) None
else Some("You need a fully checked out sbt repository with commit rights to do a release.")
}
lazy val javaVersionCheck =
task
{
@ -41,38 +47,51 @@ trait ReleaseProject extends ExecProject
def svnURL = "https://simple-build-tool.googlecode.com/svn/"
def latestURL = svnURL + "artifacts/latest"
def svnArtifactPath = Path.fromFile(info.projectPath.asFile.getParentFile) / "artifacts" / version.toString
def svnArtifactsPath = Path.fromFile(info.projectPath.asFile.getParentFile) / "artifacts"
def svnArtifactPath = svnArtifactsPath / version.toString
def ivyLocalPath = Path.userHome / ".ivy2" / "local" / "sbt" / "simple-build-tool" / version.toString
def manualTasks =
("Upload launcher jar: " + boot.outputJar.absolutePath) ::
"Update and upload documentation" ::
"Update, build, check and commit Hello Lift example" ::
Nil
lazy val copyDocs = main.copyTask ( (main.mainDocPath ##) ** "*", svnArtifactPath / "api") dependsOn(main.doc, releaseChecks)
lazy val copyIvysJars = main.copyTask( (ivyLocalPath ##) ** "*", svnArtifactPath) dependsOn(main.crossPublishLocal, releaseChecks)
lazy val release = manualTaskMessage dependsOn(releaseArtifacts, releaseChecks)
lazy val release = manualTaskMessage dependsOn(commitDocs, releaseArtifacts, releaseChecks)
lazy val releaseArtifacts = nextVersion dependsOn(tag, latestLink, boot.proguard, releaseChecks)
lazy val manualTaskMessage = task { println("The following tasks must be done manually:\n\t" + manualTasks.mkString("\n\t")); None }
import Process._
import sbt.ProcessXML._
lazy val addArtifacts = execTask {<o> svn add {svnArtifactPath} </o>} dependsOn ( copyIvysJars, copyDocs, releaseChecks )
lazy val commitArtifacts = execTask {<o> svn commit -m "Jars, Ivys, and API Docs for {version.toString}" {svnArtifactPath} </o>} dependsOn(addArtifacts, releaseChecks)
lazy val tag = execTask {<o> svn copy -m "Tagging {version.toString}" {svnURL}/trunk/ {svnURL}/tags/{version.toString} </o>}
lazy val tag = execTask {<o> svn copy -m "Tagging {version.toString}" {svnURL}/trunk/ {svnURL}/tags/{version.toString} </o>} dependsOn(releaseChecks)
lazy val latestLink = (deleteLatestLink && makeLatestLink) dependsOn(commitArtifacts, releaseChecks)
lazy val makeLatestLink = execTask {<o> svn copy -m "Creating new latest link" {svnURL}/artifacts/{version.toString}/ {latestURL} </o>}
lazy val deleteLatestLink = execTask {<o> svn del -m "Deleting old latest link" {latestURL} </o>}
lazy val makeLatestLink = execTask {<o> svn copy -m "Creating new latest link" {svnURL}/artifacts/{version.toString}/ {latestURL} </o>} dependsOn(releaseChecks)
lazy val deleteLatestLink = execTask {<o> svn del -m "Deleting old latest link" {latestURL} </o>} dependsOn(releaseChecks)
lazy val commitProperties = execTask {<o> svn commit -m "Bumping versions" project/build.properties </o>} dependsOn(releaseChecks)
lazy val commitDocs = execTask {<o> svn commit -m "Updated documentation for {version.toString}" ../wiki/ </o>} dependsOn(releaseChecks)
lazy val nextVersion = task { incrementVersionNumber(); None } dependsOn(releaseChecks)
def incrementVersionNumber(): Unit =
lazy val nextVersion = (incrementVersions && commitProperties) dependsOn(releaseChecks)
lazy val incrementVersions = task { incrementVersionNumbers(); None }
def incrementVersionNumbers(): Unit =
for( v <- projectVersion)
{
sbtVersion() = v.toString
val incremented = v.asInstanceOf[BasicVersion].incrementMicro // BasicVersion checked by releaseChecks
import incremented._
val newVersion = BasicVersion(major, minor, micro, Some("-SNAPSHOT"))
log.info("Changing version to " + newVersion)
projectVersion() = newVersion
saveEnvironment
}
}
package sbt {
object ProcessXML {
implicit def elemToPB(command: scala.xml.Elem): ProcessBuilder =
impl.CommandParser.parse(command.text.trim).fold(error, Function.tupled(Process.apply))
}
}