lib/capistrano-maven/deploy.rb in capistrano-maven-0.0.5 vs lib/capistrano-maven/deploy.rb in capistrano-maven-0.0.6
- old
+ new
@@ -1,8 +1,7 @@
require 'capistrano'
-require 'tempfile'
require 'uri'
module Capistrano
module Maven
def self.extended(configuration)
@@ -199,11 +198,11 @@
execute.join(' && ')
end
task(:update_settings, :roles => :app, :except => { :no_release => true }) {
srcs = mvn_settings.map { |f| File.join(mvn_template_path, f) }
- tmps = mvn_settings.map { |f| t=Tempfile.new('mvn');s=t.path;t.close(true);s }
+ tmps = mvn_settings.map { |f| capture("mktemp").chomp }
dsts = mvn_settings.map { |f| File.join(mvn_settings_path, f) }
begin
srcs.zip(tmps).each do |src, tmp|
put(template(src), tmp)
end
@@ -213,11 +212,11 @@
end
}
task(:update_settings_locally, :except => { :no_release => true }) {
srcs = mvn_settings_local.map { |f| File.join(mvn_template_path, f) }
- tmps = mvn_settings.map { |f| t=Tempfile.new('mvn');s=t.path;t.close(true);s }
+ tmps = mvn_settings.map { |f| `mktemp`.chomp }
dsts = mvn_settings_local.map { |f| File.join(mvn_settings_path_local, f) }
begin
srcs.zip(tmps).each do |src, tmp|
File.open(tmp, 'wb') { |fp| fp.write(template(src)) }
end
@@ -245,25 +244,54 @@
execute_locally
upload_locally
}
}
+ def _mvn(cmd, path, goals=[])
+ "cd #{path.dump} && #{cmd} #{goals.map { |s| s.dump }.join(' ')}"
+ end
+
+ def _mvn_parse_version(s)
+ # FIXME: is there any better way to get project version?
+ s.split(/(?:\r?\n)+/).reject { |line| /^\[[A-Z]+\]/ =~ line }.last
+ end
+
+ _cset(:mvn_release_build, false)
+ _cset(:mvn_snapshot_pattern, /-SNAPSHOT$/i)
+ _cset(:mvn_project_version) {
+ _mvn_parse_version(capture(_mvn(mvn_cmd, mvn_project_path, %w(-Dexpression=project.version help:evaluate))))
+ }
+ _cset(:mvn_project_version_local) {
+ _mvn_parse_version(run_locally(_mvn(mvn_cmd_local, mvn_project_path_local, %w(-Dexpression=project.version help:evaluate))))
+ }
+
+ def _validate_project_version(version_key)
+ if mvn_release_build
+ version = fetch(version_key)
+ if mvn_snapshot_pattern === version
+ abort("Skip to build project since \`#{version}' is a SNAPSHOT version.")
+ end
+ end
+ end
+
desc("Perform maven build.")
task(:execute, :roles => :app, :except => { :no_release => true }) {
on_rollback {
- run("cd #{mvn_project_path} && #{mvn_cmd} clean")
+ run(_mvn(mvn_cmd, mvn_project_path, %w(clean)))
}
- run("cd #{mvn_project_path} && #{mvn_cmd} #{mvn_goals.join(' ')}")
+ _validate_project_version(:mvn_project_version)
+ run(_mvn(mvn_cmd, mvn_project_path, mvn_goals))
}
desc("Perform maven build locally.")
task(:execute_locally, :roles => :app, :except => { :no_release => true }) {
on_rollback {
- run_locally("cd #{mvn_project_path_local} && #{mvn_cmd_local} clean")
+ run_locally(_mvn(mvn_cmd_local, mvn_project_path_local, %w(clean)))
}
- cmd = "cd #{mvn_project_path_local} && #{mvn_cmd_local} #{mvn_goals.join(' ')}"
- logger.info(cmd)
- abort("execution failure") unless system(cmd)
+ _validate_project_version(:mvn_project_version_local)
+ cmdline = _mvn(mvn_cmd_local, mvn_project_path_local, mvn_goals)
+ logger.info(cmdline)
+ abort("execution failure") unless system(cmdline)
}
_cset(:mvn_tar, 'tar')
_cset(:mvn_tar_local, 'tar')
_cset(:mvn_target_archive) {