unfold 1.1 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/bin/uf +1 -1
  3. data/lib/unfold.rb +43 -39
  4. metadata +6 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: acfd463411021cc886e7183e6e7eddb009715b42
4
- data.tar.gz: 3e04e322affa8f3404a01fe576154427f452a0e6
3
+ metadata.gz: 2c128e5e9a0ffba8a2c01e9ee8485690584ddc87
4
+ data.tar.gz: d563032c64610b5348b09a11b37614b9cceb7ce3
5
5
  SHA512:
6
- metadata.gz: 2c54f52a934eb52e4c24a561c76309c6eaf9606b408991cb6730c7480cd6114c9361a45016450d450c7d093f7856820ce8ac47705bab549a2598eae4f0bbab70
7
- data.tar.gz: 1dd4ffde2821b8df669fd3db9b9f5f96d4e882b199f4bc832c7df1e2334ab6ff972c66c923753b770d66f4ed179c4f304b7cc1c3d9c49d91f4da9574d8af30da
6
+ metadata.gz: 7e0a0c8534183bfa86f3d199fa115325fba6e27a89ae7dec1c41764c4f11108439a2eb4464c9d0c002e229dd13921a6021ca5e3edc620fa992c1d0e368ec93db
7
+ data.tar.gz: 1152007a66d85110722e763fed3015f158ab3614014bdf11965193db7b3fdea3c37385496ce286fcfb1678cf68b01954bdeb5d16bb86c02fda93d21732c2720f
data/bin/uf CHANGED
@@ -18,7 +18,7 @@ when "teardown"
18
18
  case ARGV[1]
19
19
  when "local"
20
20
  Unfold.teardown(true, false)
21
- when "server"
21
+ when "remote"
22
22
  Unfold.teardown(false, true)
23
23
  when "both"
24
24
  Unfold.teardown(true, true)
data/lib/unfold.rb CHANGED
@@ -3,10 +3,22 @@ require "net/ssh"
3
3
  require "net/scp"
4
4
  require "stringio"
5
5
 
6
+ CONFIG_RELATIVE = "/config/unfold.rb"
7
+
8
+ class File
9
+ def self.git_root
10
+ `git rev-parse --show-toplevel`.strip
11
+ end
12
+ end
13
+
6
14
  module Unfold
15
+ class Config
16
+ attr_accessor :remote_host, :remote_user, :remote_destination, :appname, :env
17
+ end
18
+
7
19
  # the method used in the config file
8
20
  def self.config(env_arrays)
9
- return nil if block_given? == false
21
+ return [] if block_given? == false
10
22
  configs = []
11
23
  env_arrays.each do |env|
12
24
  config = Config.new
@@ -17,56 +29,49 @@ module Unfold
17
29
  return configs
18
30
  end
19
31
 
20
- class Config
21
- attr_accessor :remote_host, :remote_user, :remote_destination, :appname, :env
22
- end
23
-
24
32
  # creates a post-receive hook script from an Unfold::Config object
25
33
  def self.post_receive_script(c)
26
- log_location = "~/.unfold/logs/#{c.appname}-#{c.env}/deploy.log"
27
- postdep = "#{c.remote_destination}/config/unfold_postdeploy.rb"
28
- return %{
29
- #!/bin/bash
30
- read oldrev newrev refname
34
+ return %{#!/bin/bash
35
+ read oldrev newrev refname
31
36
 
32
- deploy() {
33
- if [ "$refname" = "refs/heads/master" ]; then
34
- unset GIT_DIR
35
- echo "Unfold: Deploying $newrev" >> #{log_location}
36
- cd #{c.remote_destination}
37
- pwd >> #{log_location}
38
- git pull origin master > /dev/null 2> /dev/null
39
- echo "Unfold: SUCCESS! Deployed $newrev" >> #{log_location}
40
- if [ -f #{postdep} ]; then
41
- bash -lc "ruby #{postdep}"
42
- fi
43
- fi
44
- }
45
- deploy
46
- }
37
+ deploy() {
38
+ if [ "$refname" = "refs/heads/master" ]; then
39
+ unset GIT_DIR
40
+ cd #{c.remote_destination}
41
+ git pull origin master > /dev/null 2> /dev/null
42
+ echo "\rUNFOLD: Deployed $newrev"
43
+ if [ -f config/unfold_postdeploy.rb ]; then
44
+ bash -lc "ruby config/unfold_postdeploy.rb"
45
+ fi
46
+ fi
47
+ }
48
+ deploy}
47
49
  end
48
50
 
51
+ # loads config from config ruby script
49
52
  def self.read_config
50
- eval(File.read("#{`git rev-parse --show-toplevel`.strip}/config/unfold.rb"))
53
+ eval(File.read(File.git_root + CONFIG_RELATIVE))
51
54
  end
52
55
 
56
+ # DRYs up the setup and teardown code
53
57
  def self.ssh(c)
54
58
  return nil if block_given? == false
55
59
  Net::SSH.start(c.remote_host, c.remote_user) do |ssh|
56
- # get the home directory
57
- path = ssh.exec!("cd; pwd").strip
58
-
59
- # setup paths
60
- repo_path = "#{path}/.unfold/repos/#{c.appname}-#{c.env}.git" # doesn't include ~/ so that it can be used in the remote url
61
- logs_path = "#{path}/.unfold/logs/#{c.appname}-#{c.env}/"
62
- yield(ssh,{ :repo => repo_path, :logs => logs_path })
60
+ home_path = ssh.exec!("cd; pwd").strip # home directory
61
+ repo_path = "#{home_path}/.unfold/repos/#{c.appname}-#{c.env}.git"
62
+ yield(ssh,{ :repo => repo_path })
63
63
  end
64
64
  end
65
65
 
66
66
  def self.teardown(local, remote)
67
67
  Unfold.read_config.each do |c|
68
- `git remote remote #{c.env}` if local == true
69
- Unfold.ssh c { |ssh, paths| ssh.exec!("rm -rf #{paths[:repo]}; rm -rf #{paths[:logs]}") } if remote == true
68
+ `git remote remove #{c.env}` if local == true
69
+
70
+ if remote == true
71
+ Unfold.ssh c do |ssh, paths|
72
+ ssh.exec!("rm -rf #{paths[:repo]}")
73
+ end
74
+ end
70
75
  end
71
76
  end
72
77
 
@@ -74,7 +79,7 @@ module Unfold
74
79
  Unfold.read_config.each do |c|
75
80
  if c.env == envi
76
81
  Unfold.ssh c do |ssh, paths|
77
- print ssh.exec!("cd #{c.remote_destination}; pwd; git reset --hard #{revision}")
82
+ print ssh.exec!("cd #{c.remote_destination}; git reset --hard #{revision}")
78
83
  end
79
84
  end
80
85
  end
@@ -88,12 +93,11 @@ module Unfold
88
93
  end
89
94
  end
90
95
 
91
- def self.setup_remote()
96
+ def self.setup_remote
92
97
  Unfold.read_config.each do |c|
93
98
  Unfold.ssh c do |ssh, paths|
94
99
  # create the remote repo
95
- ssh.exec!("mkdir -p #{paths[:repo]}; mkdir -p #{paths[:logs]}")
96
- ssh.exec!("cd #{paths[:repo]}; git --bare init")
100
+ ssh.exec!("mkdir -p #{c.remote_destination}; mkdir -p #{paths[:repo]}; cd #{paths[:repo]}; git --bare init")
97
101
 
98
102
  # upload the post-receive hook
99
103
  script = StringIO.new(Unfold.post_receive_script(c))
metadata CHANGED
@@ -1,41 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unfold
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.1'
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathaniel Symer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-04 00:00:00.000000000 Z
11
+ date: 2014-03-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: net-ssh
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: net-scp
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  description: Dead simple git deployment with minimal config.