lib/capistrano-sbt/deploy.rb in capistrano-sbt-0.0.5 vs lib/capistrano-sbt/deploy.rb in capistrano-sbt-0.0.6

- old
+ new

@@ -1,16 +1,15 @@ require 'capistrano' -require 'tempfile' require 'uri' module Capistrano module Sbt def self.extended(configuration) configuration.load { namespace(:sbt) { - _cset(:sbt_version, '0.11.2') + _cset(:sbt_version, '0.12.2') _cset(:sbt_group_id) { case sbt_version when /^0\.(?:7|10)\.\d+$/, /^0\.11\.[0-2]$/ 'org.scala-tools.sbt' else @@ -182,11 +181,11 @@ execute.join(' && ') end task(:update_settings, :roles => :app, :except => { :no_release => true }) { srcs = sbt_settings.map { |f| File.join(sbt_template_path, f) } - tmps = sbt_settings.map { |f| t=Tempfile.new('sbt');s=t.path;t.close(true);s } + tmps = sbt_settings.map { |f| capture("mktemp").chomp } dsts = sbt_settings.map { |f| File.join(sbt_settings_path, f) } begin srcs.zip(tmps).each do |src, tmp| put(template(src), tmp) end @@ -196,11 +195,11 @@ end } task(:update_settings_locally, :except => { :no_release => true }) { srcs = sbt_settings_local.map { |f| File.join(sbt_template_path, f) } - tmps = sbt_settings.map { |f| t=Tempfile.new('sbt');s=t.path;t.close(true);s } + tmps = sbt_settings.map { |f| `mktemp`.chomp } dsts = sbt_settings_local.map { |f| File.join(sbt_settings_path_local, f) } begin srcs.zip(tmps).each do |src, tmp| File.open(tmp, 'wb') { |fp| fp.write(template(src)) } end @@ -228,25 +227,55 @@ execute_locally upload_locally } } + def _sbt(cmd, path, goals=[]) + "cd #{path.dump} && #{cmd} #{goals.map { |s| s.dump }.join(' ')}" + end + + def _sbt_parse_version(s) + # FIXME: is there any better way to get project version? + lastline = s.split(/(?:\r?\n)+/)[-1] + lastline.split[-1] + end + + _cset(:sbt_release_build, false) + _cset(:sbt_snapshot_pattern, /-SNAPSHOT$/i) + _cset(:sbt_project_version) { + _sbt_parse_version(capture(_sbt(sbt_cmd, sbt_project_path, ["show version"]))) + } + _cset(:sbt_project_version_local) { + _sbt_parse_version(run_locally(_sbt(sbt_cmd_local, sbt_project_path_local, ["show version"]))) + } + + def _validate_project_version(version_key) + if sbt_release_build + version = fetch(version_key) + if sbt_snapshot_pattern === version + abort("Skip to build project since \`#{version}' is a SNAPSHOT version.") + end + end + end + desc("Perform sbt build.") task(:execute, :roles => :app, :except => { :no_release => true }) { on_rollback { - run("cd #{sbt_project_path} && #{sbt_cmd} clean") + run(_sbt(sbt_cmd, sbt_project_path, %w(clean))) } - run("cd #{sbt_project_path} && #{sbt_cmd} #{sbt_goals.join(' ')}") + _validate_project_version(:sbt_project_version) + run(_sbt(sbt_cmd, sbt_project_path, sbt_goals)) } desc("Perform sbt build locally.") task(:execute_locally, :roles => :app, :except => { :no_release => true }) { on_rollback { - run_locally("cd #{sbt_project_path_local} && #{sbt_cmd_local} clean") + run_locally(_sbt(sbt_cmd_local, sbt_project_path_local, %w(clean))) } - cmd = "cd #{sbt_project_path_local} && #{sbt_cmd_local} #{sbt_goals.join(' ')}" - logger.info(cmd) - abort("execution failure") unless system(cmd) + _validate_project_version(:sbt_project_version_local) + cmdline = _sbt(sbt_cmd_local, sbt_project_path_local, sbt_goals) + logger.info(cmdline) + abort("execution failure") unless system(cmdline) } _cset(:sbt_tar, 'tar') _cset(:sbt_tar_local, 'tar') _cset(:sbt_target_archive) {