rake-deploy 0.1 → 0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  A deploy system using rake. Maybe a light version of capistrano
4
4
 
5
+ You may prefer to see the [updated wiki](http://wiki.github.com/guillermo/rake-deploy/)
6
+
5
7
  ## Motivation
6
8
 
7
9
  Capistrano is a great project, maybe a little big in some cases, but with one big problem: it aims to cover all possible use cases.
@@ -22,7 +24,6 @@ In your Rakefile add:
22
24
 
23
25
  In any of your task files (for example, for rails: lib/tasks/deploy.rake)
24
26
 
25
- deploy.application = "app_name"
26
27
  deploy.deploy_to = "/apps/app_name"
27
28
  deploy.repository = "ssh://user@github.com/myrepo.git"
28
29
  deploy.host = "esther.cientifico.net"
@@ -45,9 +46,8 @@ Or you want to make a backup of your database in each deploy
45
46
  deploy.run("db.my_company.com", "mysqldump -u root my_app_db_production | gzip > /var/backups/#{deploy.release_name}.db.sql.bz2")
46
47
  end
47
48
 
48
- You can see more recipes, that you most copy and paste and edit in your files in the wiki:
49
+ You can see more [recipes](http://wiki.github.com/guillermo/rake-deploy/recipes), that you most copy and paste and edit in your files in the wiki:
49
50
 
50
- http://wiki.github.com/guillermo/rake-deploy/recipes
51
51
 
52
52
  ## Conventions
53
53
 
@@ -64,7 +64,7 @@ Guillermo Álvarez <guillermo@cientifico.net>
64
64
 
65
65
  ## Web
66
66
 
67
- http://github.com/guillermo/rake-deploy
67
+ [Github rake-deploy](http://github.com/guillermo/rake-deploy)
68
68
 
69
69
  ## Date of writing
70
70
 
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require 'rake/testtask'
2
+
3
+ Rake::TestTask.new do |t|
4
+ t.libs << "lib"
5
+ t.test_files = FileList['test/test*.rb']
6
+ t.verbose = true
7
+ end
8
+
9
+
10
+ task :default => :test
data/lib/rake/deploy.rb CHANGED
@@ -1,5 +1,3 @@
1
- require 'net/ssh'
2
- require 'ostruct'
3
1
  require 'rake/hooks'
4
2
  require 'rake/deploy/deploy'
5
3
  require 'rake/deploy/object'
@@ -7,55 +5,50 @@ require 'rake/deploy/object'
7
5
  desc 'Deploy the application'
8
6
  task :deploy => ["deploy:symlink"]
9
7
 
10
-
11
8
  namespace :deploy do
12
9
 
13
10
  desc 'Generate timestamp for revision name'
14
11
  task :generate_timestamp do
15
12
  deploy.release_name ||= Time.now.utc.strftime("%Y%m%d%H%M.%S")
16
13
  deploy.release_path ||= "#{deploy.deploy_to}/releases/#{deploy.release_name}"
14
+ deploy.current_path ||= "#{deploy.deploy_to}/current"
17
15
  end
18
16
 
19
17
  desc 'Update remote repo'
20
18
  task :update_repo do
21
19
  puts "=> update_repo"
22
- deploy.run(deploy.host, "cd #{deploy.deploy_to}/shared/repo && git fetch")
20
+ deploy.run("cd #{deploy.deploy_to}/shared/repo && git fetch")
23
21
  end
24
22
 
25
23
  desc 'Checkout newer version'
26
24
  task :checkout => [:generate_timestamp,:update_repo] do
27
25
  puts "=> checkout"
28
- deploy.run(deploy.host, "mkdir -p #{deploy.deploy_to}/releases/")
29
- deploy.run(deploy.host, "git clone -s #{deploy.deploy_to}/shared/repo #{deploy.release_path} && cd #{deploy.release_path} && git checkout #{deploy.branch}")
26
+ deploy.run("mkdir -p #{deploy.deploy_to}/releases/")
27
+ deploy.run("git clone -s #{deploy.deploy_to}/shared/repo #{deploy.release_path} && cd #{deploy.release_path} && git checkout #{deploy.branch}")
30
28
  deploy.shared.each do |shared_path|
31
- deploy.run(deploy.host, "rm -rf #{deploy.release_path}#{shared_path}")
32
- deploy.run(deploy.host, "ln -s #{deploy.deploy_to}/shared/scaffold#{shared_path} #{deploy.release_path}#{shared_path}")
29
+ deploy.run("rm -rf #{deploy.release_path}#{shared_path}")
30
+ deploy.run("ln -s #{deploy.deploy_to}/shared/scaffold#{shared_path} #{deploy.release_path}#{shared_path}")
33
31
  end
34
32
  end
35
33
 
36
34
  desc 'Symlink to new version'
37
35
  task :symlink => [:checkout] do
38
36
  puts "=> symlink"
39
- deploy.run(deploy.host, "unlink #{deploy.deploy_to}/current")
40
- deploy.run(deploy.host, "ln -s #{deploy.release_path} #{deploy.deploy_to}/current")
37
+ deploy.run("unlink #{deploy.deploy_to}/current")
38
+ deploy.run("ln -s #{deploy.release_path} #{deploy.deploy_to}/current")
41
39
  end
42
40
 
43
41
  desc 'Setup'
44
42
  task :setup do
45
43
  puts "=> setup"
46
44
  %w(/releases /shared/scaffold/tmp /shared/scaffold/log).each do |path|
47
- deploy.run(deploy.host, "mkdir -p #{deploy.deploy_to}#{path}")
45
+ deploy.run("mkdir -p #{deploy.deploy_to}#{path}")
48
46
  end
49
47
 
50
- deploy.run(deploy.host, "ln -s #{deploy.deploy_to}/shared/scaffold/tmp #{deploy.deploy_to}/shared/tmp ")
51
- deploy.run(deploy.host, "ln -s #{deploy.deploy_to}/shared/scaffold/log #{deploy.deploy_to}/shared/log ")
48
+ deploy.run("ln -s #{deploy.deploy_to}/shared/scaffold/tmp #{deploy.deploy_to}/shared/tmp ")
49
+ deploy.run("ln -s #{deploy.deploy_to}/shared/scaffold/log #{deploy.deploy_to}/shared/log ")
52
50
 
53
- deploy.run(deploy.host, "git clone --bare #{deploy.repository} #{deploy.deploy_to}/shared/repo")
51
+ deploy.run("git clone --bare #{deploy.repository} #{deploy.deploy_to}/shared/repo")
54
52
  end
55
53
 
56
54
  end
57
-
58
- after :deploy do
59
- puts "=> restart"
60
- deploy.run(deploy.host, "touch #{deploy.deploy_to}/current/tmp/restart.txt")
61
- end
@@ -1,3 +1,6 @@
1
+ require 'net/ssh'
2
+ require 'ostruct'
3
+
1
4
  class Deploy < OpenStruct
2
5
  def initialize
3
6
  super
@@ -8,11 +11,30 @@ class Deploy < OpenStruct
8
11
  self.user = `who am i`.split(" ").first
9
12
  end
10
13
 
11
- def run(host,command)
12
- puts " #{host}$ #{command}"
13
- @ssh_sessions["#{host}#{user}"] ||= Net::SSH.start(host, user)
14
- output = @ssh_sessions["#{host}#{user}"].exec!(command)
15
- puts output.split("\n").map{|l| " #{host}> #{l}"}.join("\n") if output
14
+ # Run a command in a remote server:
15
+ # run("ls") Run ls in current deploy.host
16
+ # run("my_host.com", "ls") run ls in "my_host.com"
17
+ # run("my_host.com", "guillermo", "ls") run ls in "my_shot.com" as user "guillermo"
18
+ def run(*args)
19
+ case args.size
20
+ when 3
21
+ ssh_host, ssh_user, ssh_command = args
22
+ when 2
23
+ ssh_host, ssh_command = args
24
+ ssh_user = self.user
25
+ when 1
26
+ ssh_host, ssh_user = self.host, self.user
27
+ ssh_command = args.first
28
+ else
29
+ raise ArgumentError
30
+ end
31
+ return ssh_host.map{|host| run(host, ssh_user, ssh_command)} if ssh_host.is_a? Array
32
+
33
+ key = "#{ssh_user}@#{ssh_host}"
34
+ puts " #{key}$ #{ssh_command}"
35
+ @ssh_sessions[key] ||= Net::SSH.start(ssh_host, ssh_user)
36
+ output = @ssh_sessions[key].exec!(ssh_command)
37
+ puts output.split("\n").map{|l| " #{key}> #{l}"}.join("\n") if output
16
38
  output
17
39
  end
18
40
 
Binary file
data/rake-deploy.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "rake-deploy"
3
- s.version = "0.1"
3
+ s.version = "0.2"
4
4
  s.date = Time.now.strftime("%Y-%m-%d")
5
5
  s.authors = ["Guillermo Álvarez"]
6
6
  s.email = "guillermo@cientifico.net"
@@ -0,0 +1,33 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'rake/deploy/deploy'
4
+
5
+ # As you see this is a integration test as Net::SSH is not mocked.
6
+ # It was easy for me test in real machines.
7
+ # If you make a mock for Net::SSH fot this tests cases, please send it to me.
8
+ class TestDeployClass < Test::Unit::TestCase
9
+ def setup
10
+ @deploy = Deploy.new
11
+ @deploy.host = 'esther'
12
+ @deploy.user = 'guillermo'
13
+ end
14
+
15
+ def test_run_one_argument
16
+ assert_equal "wadus", @deploy.run("echo wadus").strip
17
+ end
18
+
19
+ def test_with_host
20
+ assert_equal "superwadus", @deploy.run("yolanda","echo superwadus").strip
21
+ end
22
+
23
+ def test_with_host_and_user
24
+ assert_equal "argh", @deploy.run("esther", "sessiondeo","echo argh").strip
25
+ end
26
+
27
+ def test_with_more_than_one_host
28
+ assert_equal ["argh\n","argh\n"], @deploy.run(["esther","yolanda"], "guillermo","echo argh")
29
+ assert_equal ["toma\n","toma\n"], @deploy.run(["esther","yolanda"], "echo toma")
30
+ @deploy.host = ["esther","yolanda"]
31
+ assert_equal ["mola\n","mola\n"], @deploy.run("echo mola")
32
+ end
33
+ end
metadata CHANGED
@@ -1,12 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rake-deploy
3
3
  version: !ruby/object:Gem::Version
4
- hash: 9
4
+ hash: 15
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 1
9
- version: "0.1"
8
+ - 2
9
+ version: "0.2"
10
10
  platform: ruby
11
11
  authors:
12
12
  - "Guillermo \xC3\x81lvarez"
@@ -72,11 +72,13 @@ extra_rdoc_files: []
72
72
  files:
73
73
  - LICENSE
74
74
  - README.md
75
+ - Rakefile
75
76
  - lib/rake/deploy/deploy.rb
76
77
  - lib/rake/deploy/object.rb
77
78
  - lib/rake/deploy.rb
78
79
  - rake-deploy-0.1.gem
79
80
  - rake-deploy.gemspec
81
+ - test/test_deploy.rb
80
82
  has_rdoc: true
81
83
  homepage: http://github.com/guillermo/rake-deploy
82
84
  licenses: []