Skip to content

Instantly share code, notes, and snippets.

@yyuu
Created March 9, 2012 04:25
Show Gist options
  • Select an option

  • Save yyuu/2005039 to your computer and use it in GitHub Desktop.

Select an option

Save yyuu/2005039 to your computer and use it in GitHub Desktop.
experimental capistrano recipe to build project with sbt
namespace(:sbt) {
_cset(:sbt_version, '0.11.2')
_cset(:sbt_jar_url) {
"http://typesafe.artifactoryonline.com/typesafe/ivy-releases/org.scala-tools.sbt/sbt-launch/#{sbt_version}/sbt-launch.jar"
}
_cset(:sbt_jar_file) {
File.join(shared_path, "sbt", sbt_version, "sbt-launch.jar")
}
_cset(:sbt_cmd) { # override this if you want to set env vars (e.g. JAVA_HOME) for sbt
"#{java} -jar #{sbt_jar_file}"
}
_cset(:sbt_jar_file_local) {
File.join(".", "sbt", sbt_version, "sbt-launch.jar")
}
_cset(:sbt_cmd_local) { # override this if you want to set env vars (e.g. JAVA_HOME) for sbt
"#{java} -jar #{sbt_jar_file_local}"
}
_cset(:sbt_compile_locally, false) # perform precompilation on localhost
namespace(:setup) {
desc("install sbt if needed")
task(:default, :except => { :no_release => true }) {
transaction {
if sbt_compile_locally
install_sbt_locally
else
install_sbt
end
}
}
task(:install_sbt, :roles => :app, :except => { :no_release => true }) {
run(<<-E)
( test -d #{File.dirname(sbt_jar_file)} || mkdir -p #{File.dirname(sbt_jar_file)} ) &&
( test -f #{sbt_jar_file} || wget --no-verbose -O #{sbt_jar_file} #{sbt_jar_url} ) &&
test -f #{sbt_jar_file};
E
}
task(:install_sbt_locally, :except => { :no_release => true }) { # TODO: make install_sbt and install_sbt_locally together
logger.info(run_locally(<<-E))
( test -d #{File.dirname(sbt_jar_file_local)} || mkdir -p #{File.dirname(sbt_jar_file_local)} ) &&
( test -f #{sbt_jar_file_local} || wget --no-verbose -O #{sbt_jar_file_local} #{sbt_jar_url} ) &&
test -f #{sbt_jar_file_local};
E
}
}
desc("perform compile with sbt")
task(:update, :roles => :app, :except => { :no_release => true }) {
transaction {
if sbt_compile_locally
setup.install_sbt_locally
package_locally
else
package
end
}
}
task(:package, :roles => :app, :except => { :no_release => true }) {
on_rollback {
run("cd #{release_path} && #{sbt_cmd} clean")
}
run("cd #{release_path} && #{sbt_cmd} package")
}
task(:package_locally, :roles => :app, :except => { :no_release => true }) {
on_rollback {
logger.info(run_locally("#{sbt_cmd_local} clean"))
}
logger.info(run_locally("#{sbt_cmd_local} package"))
run("mkdir -p #{release_path}/target")
find_servers_for_task(current_task).each { |server|
logger.info(run_locally("rsync -lrt --chmod=u+rwX,go+rX ./target/ #{user}@#{server.host}:#{release_path}/target/"))
}
}
}
@yyuu
Copy link
Copy Markdown
Author

yyuu commented Aug 27, 2012

Created as new github project.

https://github.com/yyuu/capistrano-sbt

Also, uploaded gem to rubygems.org.

https://rubygems.org/gems/capistrano-sbt

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment