summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorelijah <elijah@riseup.net>2013-02-28 22:41:25 -0800
committerelijah <elijah@riseup.net>2013-02-28 22:41:25 -0800
commitdb6be7e8c1fc966d31fc7cba9dd728cf6d65739f (patch)
tree0447f3e9045dfcc1b4467669bda06db1f240b88a
parentd78643049e18749994ca39e18f02be3f3d23bd88 (diff)
added @allow_production_deploy and @platform_branch to Leapfile
-rw-r--r--lib/leap_cli/commands/deploy.rb14
-rw-r--r--lib/leap_cli/commands/pre.rb7
-rw-r--r--lib/leap_cli/commands/vagrant.rb2
-rw-r--r--lib/leap_cli/config/manager.rb2
-rw-r--r--lib/leap_cli/leapfile.rb11
-rw-r--r--lib/leap_cli/util.rb24
6 files changed, 54 insertions, 6 deletions
diff --git a/lib/leap_cli/commands/deploy.rb b/lib/leap_cli/commands/deploy.rb
index 4cfefd7..065a111 100644
--- a/lib/leap_cli/commands/deploy.rb
+++ b/lib/leap_cli/commands/deploy.rb
@@ -20,7 +20,7 @@ module LeapCli
c.action do |global,options,args|
init_submodules
- nodes = manager.filter!(args)
+ nodes = filter_deploy_nodes(args)
if nodes.size > 1
say "Deploying to these nodes: #{nodes.keys.join(', ')}"
if !global[:yes] && !agree("Continue? ")
@@ -141,5 +141,17 @@ module LeapCli
return includes
end
+ #
+ # for safety, we allow production deploys to be turned off in the Leapfile.
+ #
+ def filter_deploy_nodes(filter)
+ nodes = manager.filter!(filter)
+ if !leapfile.allow_production_deploy
+ nodes = nodes[:production => false]
+ assert! nodes.any?, "Skipping deploy because @allow_production_deploy is disabled."
+ end
+ nodes
+ end
+
end
end
diff --git a/lib/leap_cli/commands/pre.rb b/lib/leap_cli/commands/pre.rb
index 03355bb..cb92fe2 100644
--- a/lib/leap_cli/commands/pre.rb
+++ b/lib/leap_cli/commands/pre.rb
@@ -47,6 +47,13 @@ module LeapCli
bail! { log :missing, "platform directory '#{Path.platform}'" }
end
+ if LeapCli.leapfile.platform_branch && LeapCli::Util.is_git_directory?(Path.platform)
+ branch = LeapCli::Util.current_git_branch(Path.platform)
+ if branch != LeapCli.leapfile.platform_branch
+ bail! "Wrong branch for #{Path.platform}. Was '#{branch}', should be '#{LeapCli.leapfile.platform_branch}'. Edit Leapfile to disable this check."
+ end
+ end
+
#
# set log file
#
diff --git a/lib/leap_cli/commands/vagrant.rb b/lib/leap_cli/commands/vagrant.rb
index 56e887a..3526d23 100644
--- a/lib/leap_cli/commands/vagrant.rb
+++ b/lib/leap_cli/commands/vagrant.rb
@@ -105,7 +105,7 @@ module LeapCli; module Commands
def vagrant_setup
assert_bin! 'vagrant', 'Vagrant is required for running local virtual machines. Run "sudo apt-get install vagrant".'
- unless `vagrant gem which sahara`.chars.any?
+ unless assert_run!('vagrant gem which sahara').chars.any?
log :installing, "vagrant plugin 'sahara'"
assert_run! 'vagrant gem install sahara'
end
diff --git a/lib/leap_cli/config/manager.rb b/lib/leap_cli/config/manager.rb
index b5ce092..cf4d127 100644
--- a/lib/leap_cli/config/manager.rb
+++ b/lib/leap_cli/config/manager.rb
@@ -140,7 +140,7 @@ module LeapCli
#
def filter!(filters)
node_list = filter(filters)
- Util::assert! node_list.any?, "Could not match any nodes from '#{filters}'"
+ Util::assert! node_list.any?, "Could not match any nodes from '#{filters.join ' '}'"
return node_list
end
diff --git a/lib/leap_cli/leapfile.rb b/lib/leap_cli/leapfile.rb
index c24f939..06db3b4 100644
--- a/lib/leap_cli/leapfile.rb
+++ b/lib/leap_cli/leapfile.rb
@@ -16,6 +16,8 @@ module LeapCli
attr_accessor :leap_version
attr_accessor :log
attr_accessor :vagrant_network
+ attr_accessor :platform_branch
+ attr_accessor :allow_production_deploy
def initialize
@vagrant_network = '10.5.5.0/24'
@@ -26,10 +28,15 @@ module LeapCli
if directory == '/'
return nil
else
- self.provider_directory_path = directory
+ @provider_directory_path = directory
read_settings(directory + '/Leapfile')
read_settings(ENV['HOME'] + '/.leaprc')
- self.platform_directory_path = File.expand_path(self.platform_directory_path || '../leap_platform', self.provider_directory_path)
+ @platform_directory_path = File.expand_path(@platform_directory_path || '../leap_platform', @provider_directory_path)
+ if @allow_production_deploy.nil?
+ # by default, only allow production deploys from 'master' or if not a git repo
+ @allow_production_deploy = !LeapCli::Util.is_git_directory?(@provider_directory_path) ||
+ LeapCli::Util.current_git_branch(@provider_directory_path) == 'master'
+ end
return true
end
end
diff --git a/lib/leap_cli/util.rb b/lib/leap_cli/util.rb
index 5bab424..155796f 100644
--- a/lib/leap_cli/util.rb
+++ b/lib/leap_cli/util.rb
@@ -74,7 +74,7 @@ module LeapCli
#
def assert_run!(cmd, message=nil)
cmd = cmd + " 2>&1"
- output = `#{cmd}`
+ output = `#{cmd}`.strip
unless $?.success?
exit_status($?.exitstatus)
bail! do
@@ -363,6 +363,28 @@ module LeapCli
ERB.new(string, nil, '%<>-').result(binding)
end
+ ##
+ ## GIT
+ ##
+
+ def is_git_directory?(dir)
+ Dir.chdir(dir) do
+ `which git && git rev-parse 2>/dev/null`
+ return $? == 0
+ end
+ end
+
+ def current_git_branch(dir)
+ Dir.chdir(dir) do
+ branch = `git symbolic-ref HEAD 2>/dev/null`.strip
+ if branch.chars.any?
+ branch.sub /^refs\/heads\//, ''
+ else
+ nil
+ end
+ end
+ end
+
end
end