bam 0.0.7 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c6133090fcc988d9ea1c9c3168aea68b8a05addc
4
+ data.tar.gz: f303d8b78d31fabbe5a9d317b66443ccc976259e
5
+ SHA512:
6
+ metadata.gz: 4e7ed579472c196bf94d58d9be094894f2000843664f1e875d971cb8fe97f5000f07c2e25c8b26d1c30eae3ed051fde2909539689ad503f5aa2840dc79b34117
7
+ data.tar.gz: 4fe3931c07e71081dfa42a28a04244b876e3dbed4bf75a6ee7985f923433fab2999c6d7991a3c716a3a66bccf9473349e49c57cc31d3f7aca3f34f96b894be47
data/.gitignore CHANGED
@@ -1,5 +1,5 @@
1
1
  pkg/*
2
2
  *.gem
3
3
  .bundle
4
- deploy.bam
4
+ deploy.bam.rb
5
5
  bam/*
data/Gemfile.lock ADDED
@@ -0,0 +1,17 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ bam (0.0.7)
5
+
6
+ GEM
7
+ remote: http://rubygems.org/
8
+ specs:
9
+
10
+ PLATFORMS
11
+ ruby
12
+
13
+ DEPENDENCIES
14
+ bam!
15
+
16
+ BUNDLED WITH
17
+ 1.10.6
data/README.mdown CHANGED
@@ -1,26 +1,23 @@
1
- Bam
2
- ===
1
+ ## Bam
3
2
 
4
3
  A super simple deployment utility, it's basically an opinionated abstraction of rsync served in a capistrano fashion. Capistrano is a super cool utility, I love it, I use it all the time. But for smaller projects (websites, sinatra apps, etc), I think it's simply overkill. The great thing about bam is that you don't need to learn another DSL, it's simply just ruby that you need to edit in the deploy file to configure your deployment recipe.
5
4
 
6
- Installation
7
- ============
5
+ ### Installation
8
6
 
9
7
  gem install bam
10
8
 
11
- Usage
12
- =====
9
+ ### Usage
10
+
13
11
 
14
12
  cd into/your/project/root
15
13
  bamify
16
- # update the @server and @to variables in deploy.bam file
14
+ # update the @server and @to variables in deploy.bam.rb file
17
15
  # work on your project
18
16
  bam
19
17
 
20
- How deploy.bam works
21
- ====================
18
+ ### How deploy.bam.rb works
22
19
 
23
- After you run <code>bamify</code>, it generates a <code>deploy.bam</code> file, which looks like:
20
+ After you run <code>bamify</code>, it generates a <code>deploy.bam.rb</code> file, which looks like:
24
21
 
25
22
  # Bam Deploy File
26
23
  # ---------------
@@ -30,31 +27,80 @@ After you run <code>bamify</code>, it generates a <code>deploy.bam</code> file,
30
27
  # - username@host
31
28
  @server = 'login@yourhost.com'
32
29
  # the location on the server don't forget to append the slash/
30
+ # make sure that it's the parent folder that you are uploading to,
31
+ # for example:
32
+ # instead of...
33
+ # @to = '~/public_html/your_site/'
34
+ # do...
35
+ # @to = '~/public_html/'
33
36
  @to = '~/location/to/your/web/site/or/app/'
34
37
 
38
+ # add list of file to always include in deployments
39
+ @always_include = %w()
40
+
41
+ # remote tasks : these are tasks that you want to run on the server
42
+ # @remote_tasks = { :restart_app => 'touch /my/cool/app/restart.txt' }
43
+ @remote_tasks = {}
44
+
35
45
  # pre_deploy_tasks : These are things that you can run locally before deployment
36
46
  # @pre_deploy_tasks = ['rm -rf cache/*']
37
- # @pre_deploy_tasks = []
47
+ @pre_deploy_tasks = []
38
48
 
39
49
  # post_deploy_tasks : These are things that you can run locally before deployment
40
50
  # @post_deploy_tasks = ['rm -rf cache/*']
41
- # @post_deploy_tasks = []
51
+ @post_deploy_tasks = []
42
52
 
43
53
  Simply set <code>@server</code> to your hostname or ip of your server and set <code>@to</code> to the location
44
54
  on the server where the your project is located, make sure that it's the parent folder (and don't forget to
45
55
  append the slash '/'), so instead of <code>~/public_html/project_name/</code> you would do <code>~/public_html/</code>
46
56
 
47
- Pre and Post Deployment Tasks
48
- =============================
57
+ ### Command line options
49
58
 
50
- You can run pre and post deployment tasks by assigning or setting the @pre_deploy_tasks or @post_deploy_tasks variables. For now, you can only run tasks locally, but remember since it's just a ruby file, you can require in Net::SSH and write your own methods to run remote tasks, if it comes down to it, I might just write in that ability myself... we'll see, otherwise feel free to fork it and add it yourself :)
51
-
52
- TODO
53
- ====
59
+ ```
60
+ # pass the --help flag for all options
61
+ bam --help
62
+ ```
63
+
64
+ * --dry : execute a dry run
65
+ * --deploy : runs the deployment, this is the default task
66
+ * --version : prints the current version
67
+ * --remote : execute a remote command, split multiple tasks with a ':'
68
+
69
+ ### Pre, Post and Remote Deployment Tasks
70
+
71
+ You can run pre, post and remote deployment tasks by assigning or setting the `@pre_deploy_tasks`, `@post_deploy_tasks` and `@remote_tasks` variables. Here's an example, note that `@remote_tasks` is a Hash:
72
+
73
+ ```
74
+ @pre_deploy_tasks = ['rm -rf cache/*']
75
+ @post_deploy_tasks = ['rm -rf log/*']
76
+ @remote_tasks = {
77
+ :restart_app => "touch /path/to/app/restart.txt"
78
+ }
79
+
80
+ # run remote tasks in your pre or post tasks array by adding a remote:[task_name] in your array like:
81
+ @post_deploy_tasks = ['rm-rf log/*', 'remote:restart_app']
82
+
83
+ # execute remote tasks like:
84
+ bam --remote restart_app
85
+ ```
86
+
87
+ ### Ignoring Files and Directories on Deployment
88
+
89
+ What if you don't want to push certain files or directories to your host? Say you have log or tmp files that would otherwise take up space. Well if you use git, you don't have to worry simply add them to .gitignore and bam is smart enough to ignore those files on deploy as well.
90
+
91
+ ### Add exceptions to ignore list
92
+
93
+ There could be some situations where you wouldn't want to exclude all the entries in `.gitignore`, if that's the case, simply add those entries to the `@always_include` variable. Here's an example:
94
+
95
+ ```
96
+ @always_include = %w(app.min.js dist.min.js)
97
+ ```
98
+
99
+ ### TODO
54
100
 
55
101
  - Add static revision history for integrated rollbacks
56
102
  - Maybe use choice or highline to prompt to fill in values?
57
- - Maybe add in remote tasks
103
+ - Maybe add in remote tasks : DONE!
58
104
 
59
105
 
60
106
  Copyright (c) 2010 Vann Ek., released under the MIT license
data/bin/bam CHANGED
@@ -1,24 +1,58 @@
1
1
  #!/usr/bin/env ruby -wKU
2
2
 
3
3
  begin
4
+ require "optparse"
4
5
  require "bam_helpers"
5
6
  require "bam"
7
+ require "bam/version"
6
8
  rescue LoadError
9
+ require "optparse"
7
10
  require "rubygems"
8
11
  require "bam_helpers"
9
12
  require "bam"
13
+ require "bam/version"
10
14
  end
11
15
 
16
+ include BamHelpers
17
+
18
+ options = {
19
+ :deploy => true
20
+ }
12
21
  pwd = Dir.pwd
13
- bampath = File.join(pwd, "deploy.bam")
22
+ bampath = File.join(pwd, "deploy.bam.rb")
23
+
24
+ OptionParser.new do |opts|
25
+ opts.banner = "Usage: bam [options]"
26
+
27
+ opts.on("-t", "--dry", "Do a dry run") { |v| options[:dry_run] = true }
28
+ opts.on("-d", "--deploy", "Deploy project (DEFAULT)") { |v| options[:deploy] = true }
29
+ opts.on("-v", "--version", "Display version") { |v| puts "Version: #{Bam::VERSION}"; exit }
30
+ opts.on('-r', '--remote TASKS', "Run a remote task, split multiple tasks with ':'") do |task|
31
+ options[:remote_tasks] = task.split(":")
32
+ end
33
+
34
+ end.parse!
35
+
14
36
  if File.exists?(bampath)
15
- @pre_deploy_tasks, @post_deploy_tasks = nil
16
- deployfile = File.read(File.join(pwd,"deploy.bam"))
37
+ deployfile = File.read(File.join(pwd,"deploy.bam.rb"))
38
+ # this will give use access to @pre_deploy_tasks, @post_deploy_tasks, @always_include, @remote_tasks
17
39
  eval deployfile
18
- ready_to = Bam::Deployment.new @server, @to, pwd
19
- ready_to.deploy_tasks(@pre_deploy_tasks) unless @pre_deploy_tasks.nil?
20
- ready_to.deploy
21
- ready_to.deploy_tasks(@post_deploy_tasks) unless @post_deploy_tasks.nil?
40
+ task_config = {
41
+ :pre => @pre_deploy_tasks,
42
+ :post => @post_deploy_tasks,
43
+ :always_include => @always_include,
44
+ :remote => @remote_tasks
45
+ }
46
+ ready_to = Bam::Deployment.new @server, @to, pwd, options[:dry_run], task_config
47
+
48
+ puts wrap_borders("Executing DRY RUN") if options[:dry_run]
49
+ if options[:remote_tasks]
50
+ options[:remote_tasks].each do |task|
51
+ ready_to.remote_exec task
52
+ end
53
+ else
54
+ ready_to.deploy
55
+ end
22
56
  else
23
- puts "No deploy.bam file found, run bamify to generate one."
57
+ puts "No deploy.bam.rb file found, run bamify to generate one."
24
58
  end
data/bin/bamify CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby -wKU
2
2
 
3
- # Bamify : generates the deploy.bam file for deploying using bam
3
+ # Bamify : generates the deploy.bam.rb file for deploying using bam
4
4
  # USAGE :
5
5
  # bamify [path_to_project]
6
6
  begin
@@ -30,31 +30,44 @@ def template
30
30
  # @to = '~/public_html/'
31
31
  @to = '~/location/to/your/web/site/or/app/'
32
32
 
33
+ # add list of file to always include in deployments
34
+ @always_include = %w()
35
+
36
+ # remote tasks : these are tasks that you want to run on the server
37
+ # @remote_tasks = { :restart_app => 'touch /my/cool/app/restart.txt' }
38
+ @remote_tasks = {}
39
+
33
40
  # pre_deploy_tasks : These are things that you can run locally before deployment
34
41
  # @pre_deploy_tasks = ['rm -rf cache/*']
35
- # @pre_deploy_tasks = []
42
+ @pre_deploy_tasks = []
36
43
 
37
44
  # post_deploy_tasks : These are things that you can run locally before deployment
38
45
  # @post_deploy_tasks = ['rm -rf cache/*']
39
- # @post_deploy_tasks = []
46
+ @post_deploy_tasks = []
40
47
  "
41
48
  end
42
49
 
43
50
  def add_ignore_bam
44
51
  `touch .gitignore` unless File.exists?(".gitignore")
45
- no_bam_found = (`cat .gitignore | grep deploy.bam` == "")
46
- `echo deploy.bam >> .gitignore` if no_bam_found
52
+ no_bam_found = (`cat .gitignore | grep deploy.bam.rb` == "")
53
+ `echo deploy.bam.rb >> .gitignore` if no_bam_found
54
+ end
55
+
56
+ def help_message
57
+ <<-help
58
+ bamify [path_to_project]
59
+ --ignore-bam: add bam.deploy file to .gitignore list
60
+ help
47
61
  end
48
62
 
49
63
  if ARGV[0] == "--help"
50
- puts "bamify [path_to_project]"
64
+ puts help_message
51
65
  else
52
66
  path = ARGV[0] == "" ? ARGV[0] : Dir.pwd
53
- bam_path = File.join(path, "deploy.bam")
67
+ bam_path = File.join(path, "deploy.bam.rb")
54
68
  File.open File.join(bam_path), "w+" do |file|
55
69
  file << template
56
70
  end
57
- add_ignore_bam
58
- puts wrap_borders("Bam! you're done! bam.deploy generated to : #{bam_path}")
59
- # TODO : add editor options
71
+ add_ignore_bam if ARGV[0] == "--ignore-bam"
72
+ puts wrap_borders("Bam! you're done! deploy.bam.rb generated to : #{bam_path}")
60
73
  end
data/lib/bam/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Bam
2
- VERSION = "0.0.7"
2
+ VERSION = "1.0.0"
3
3
  end
data/lib/bam.rb CHANGED
@@ -3,10 +3,12 @@ module Bam
3
3
  include BamHelpers
4
4
  PWD = Dir.pwd
5
5
 
6
- def initialize(server, to, from)
6
+ def initialize(server, to, from, dry_run, task_config)
7
7
  @from = from
8
8
  @server = server
9
9
  @to = to
10
+ @dry_run = dry_run || false
11
+ @task_config = task_config
10
12
  end
11
13
 
12
14
  def has_git?
@@ -17,30 +19,56 @@ module Bam
17
19
  File.exists?(File.join PWD, ".gitignore")
18
20
  end
19
21
 
20
- def exclusions
21
- return "" if !has_git_ignores? || !has_git?
22
+ # gets a list of exclusions - exceptions
23
+ def get_exclusions
24
+ return "" if !has_git_ignores? || !has_git?
22
25
  git_ignore = File.join PWD, ".gitignore"
23
- exclusions = `cat #{git_ignore}`.split("\n")
24
- exclude_list = exclusions.map { |e| "--exclude '#{e}' " }
26
+ exclusions = `cat #{git_ignore}`.split("\n")
27
+ exclusions - @task_config[:always_include]
28
+ end
29
+
30
+ def exclusions
31
+ exclude_list = get_exclusions.map { |e| "--exclude '#{e}' " }
25
32
  exclude_list = exclude_list.join
26
33
  end
27
34
 
35
+ def remote_exec(name)
36
+ remote_task = @task_config[:remote][name.to_sym]
37
+ if remote_task.nil?
38
+ puts "[REMOTE] TASK: #{name} does not exist"
39
+ else
40
+ exec_cmd = "ssh #{@server} '#{remote_task}'"
41
+ puts @dry_run ? "[REMOTE] #{name} : #{remote_task}" : "[REMOTE] #{name}"
42
+ system exec_cmd unless @dry_run
43
+ end
44
+ end
45
+
28
46
  def deploy
29
- puts("Starting deployment...")
47
+ puts "PRE-DEPLOYMENT TASKS: \n\n"
48
+ deploy_tasks @task_config[:pre]
49
+ puts(wrap_top("STARTING DEPLOYMENT:"))
30
50
  # use -avzC to exclude .git and .svn repositories
31
51
  cmd = "rsync -avzC #{@from} #{@server}:#{@to} #{exclusions}"
32
52
  output = "OUTPUT: #{cmd}"
33
53
  puts(wrap_borders(output))
34
- system(cmd)
54
+ puts "POST-DEPLOYMENT TASKS: \n\n"
55
+ deploy_tasks @task_config[:post]
56
+ system(cmd) unless @dry_run
35
57
  end
36
58
 
37
59
  def deploy_tasks(tasks)
38
60
  if tasks.length > 0
39
61
  tasks.each do |task|
40
- puts " - Executing deployment task: #{task}"
41
- `#{task}`
62
+ remote_task = task.split("remote:")
63
+ if remote_task.length > 1
64
+ remote_exec remote_task[1]
65
+ else
66
+ puts "[LOCAL] #{task}"
67
+ `#{task}` unless @dry_run
68
+ end
42
69
  end
43
70
  end
71
+ puts "\n"
44
72
  end
45
73
 
46
74
  end
data/lib/bam_helpers.rb CHANGED
@@ -8,6 +8,10 @@ module BamHelpers
8
8
  "="*col_width
9
9
  end
10
10
 
11
+ def wrap_top(content)
12
+ "#{border}\n#{content}"
13
+ end
14
+
11
15
  def wrap_borders(content)
12
16
  "#{border}\n#{content}\n#{border}"
13
17
  end
metadata CHANGED
@@ -1,37 +1,27 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: bam
3
- version: !ruby/object:Gem::Version
4
- hash: 17
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 0
9
- - 7
10
- version: 0.0.7
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Vann Ek
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2010-10-20 00:00:00 -05:00
19
- default_executable:
11
+ date: 2015-11-19 00:00:00.000000000 Z
20
12
  dependencies: []
21
-
22
13
  description: A super simple deployment utility using rsync and git
23
- email:
14
+ email:
24
15
  - vann@innerfusion.net
25
- executables:
16
+ executables:
26
17
  - bam
27
18
  - bamify
28
19
  extensions: []
29
-
30
20
  extra_rdoc_files: []
31
-
32
- files:
33
- - .gitignore
21
+ files:
22
+ - ".gitignore"
34
23
  - Gemfile
24
+ - Gemfile.lock
35
25
  - README.mdown
36
26
  - Rakefile
37
27
  - bam.gemspec
@@ -40,39 +30,27 @@ files:
40
30
  - lib/bam.rb
41
31
  - lib/bam/version.rb
42
32
  - lib/bam_helpers.rb
43
- has_rdoc: true
44
33
  homepage: http://github.com/vanntastic/bam
45
34
  licenses: []
46
-
35
+ metadata: {}
47
36
  post_install_message:
48
37
  rdoc_options: []
49
-
50
- require_paths:
38
+ require_paths:
51
39
  - lib
52
- required_ruby_version: !ruby/object:Gem::Requirement
53
- none: false
54
- requirements:
40
+ required_ruby_version: !ruby/object:Gem::Requirement
41
+ requirements:
55
42
  - - ">="
56
- - !ruby/object:Gem::Version
57
- hash: 3
58
- segments:
59
- - 0
60
- version: "0"
61
- required_rubygems_version: !ruby/object:Gem::Requirement
62
- none: false
63
- requirements:
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ required_rubygems_version: !ruby/object:Gem::Requirement
46
+ requirements:
64
47
  - - ">="
65
- - !ruby/object:Gem::Version
66
- hash: 3
67
- segments:
68
- - 0
69
- version: "0"
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
70
50
  requirements: []
71
-
72
51
  rubyforge_project: bam
73
- rubygems_version: 1.3.7
52
+ rubygems_version: 2.4.5.1
74
53
  signing_key:
75
- specification_version: 3
54
+ specification_version: 4
76
55
  summary: A super simple deployment utility
77
56
  test_files: []
78
-