git-deploy 0.5.5 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -101,16 +101,34 @@ repository. This is how your code on the server is kept up to date. This script
101
101
  checks out the latest version of your project from the current branch and
102
102
  runs the following callback scripts:
103
103
 
104
+ * `deploy/setup` - on first push.
104
105
  * `deploy/after_push` - on subsequent pushes. It in turn executes:
105
106
  * `deploy/before_restart`
106
107
  * `deploy/restart`
107
108
  * `deploy/after_restart`
109
+ * `deploy/rollback` - executed for `git deploy rollback`.
108
110
 
109
111
  All of the callbacks are optional. These scripts are ordinary Unix executables.
110
112
  The ones which get generated for you by `git deploy init` are written in shell
111
113
  script and Ruby.
112
114
 
113
- It's worth remembering that "after_push" is done **asynchronously from your git push**. This is because migrating the database and updating submodules might take a long time and you don't want to wait for all that during a git push. But, this means that when the push is done, the server has *not yet restarted*. You might need to wait a few seconds or a minute.
115
+
116
+ Extra commands
117
+ --------------
118
+
119
+ * `git deploy hooks` - Updates git hooks on the remote repository
120
+
121
+ * `git deploy log [N=20]` - Shows last 20 lines of deploy log on the server
122
+
123
+ * `git deploy rerun` - Re-runs the `deploy/after_push` callback as if a git push happened
124
+
125
+ * `git deploy restart` - Runs the `deploy/restart` callback
126
+
127
+ * `git deploy rollback` - Undo a deploy by checking out the previous revision,
128
+ runs `deploy/callback` if exists instead of `deploy/after_push`
129
+
130
+ * `git deploy upload <files>` - Copy local files to the remote app
131
+
114
132
 
115
133
 
116
134
  [heroku]: http://heroku.com/
@@ -20,8 +20,8 @@ class GitDeploy < Thor
20
20
  end
21
21
 
22
22
  desc "setup", "Create the remote git repository and install push hooks for it"
23
- method_option :shared, :aliases => '-g', :type => :boolean, :default => true
24
- method_option :sudo, :aliases => '-s', :type => :boolean, :default => true
23
+ method_option :shared, :aliases => '-g', :type => :boolean, :default => false
24
+ method_option :sudo, :aliases => '-s', :type => :boolean, :default => false
25
25
  def setup
26
26
  sudo = options.sudo? ? "#{sudo_cmd} " : ''
27
27
 
@@ -58,10 +58,29 @@ class GitDeploy < Thor
58
58
  run "cd #{deploy_to} && deploy/restart 2>&1 | tee -a log/deploy.log"
59
59
  end
60
60
 
61
+ desc "rerun", "Runs the `deploy/after_push' callback as if a new revision was pushed via git"
62
+ def rerun
63
+ run <<-BASH, :echo => false
64
+ bash -e -c '
65
+ cd '#{deploy_to}'
66
+ declare -a revs=( $(git rev-parse HEAD@{1} HEAD) )
67
+ deploy/after_push ${revs[@]} 2>&1 | tee -a log/deploy.log
68
+ '
69
+ BASH
70
+ end
71
+
61
72
  desc "rollback", "Rolls back the checkout to before the last push"
62
73
  def rollback
63
- run "cd #{deploy_to} && git reset --hard ORIG_HEAD"
64
- invoke :restart
74
+ run <<-BASH, :echo => false
75
+ bash -e -c '
76
+ cd '#{deploy_to}'
77
+ declare -a revs=( $(git rev-parse HEAD HEAD@{1}) )
78
+ git reset --hard ${revs[1]}
79
+ callback=after_push
80
+ [ -x deploy/rollback ] && callback=rollback
81
+ deploy/$callback ${revs[@]} 2>&1 | tee -a log/deploy.log
82
+ '
83
+ BASH
65
84
  end
66
85
 
67
86
  desc "log", "Shows the last part of the deploy log on the server"
@@ -11,10 +11,13 @@ class GitDeploy
11
11
  super unless options.noop?
12
12
  end
13
13
 
14
- def run(cmd = nil)
14
+ def run(cmd = nil, opt = {})
15
15
  cmd = yield(cmd) if block_given?
16
16
  cmd = cmd.join(' && ') if Array === cmd
17
- puts "[#{options[:remote]}] $ " + cmd.gsub(' && ', " && \\\n ")
17
+
18
+ if opt.fetch(:echo, true)
19
+ puts "[#{options[:remote]}] $ " + cmd.gsub(' && ', " && \\\n ")
20
+ end
18
21
 
19
22
  unless options.noop?
20
23
  status, output = ssh_exec cmd do |ch, stream, data|
@@ -43,10 +43,13 @@ if [ -z "${oldrev//0}" ]; then
43
43
 
44
44
  # init submodules
45
45
  git submodule update --recursive --init 2>&1 | tee -a $logfile
46
+
47
+ # execute the one-time setup hook
48
+ [ -x deploy/setup ] && deploy/setup $oldrev $newrev 2>&1 | tee -a $logfile
46
49
  else
47
50
  # log timestamp
48
51
  echo ==== $(date) ==== >> $logfile
49
52
 
50
- # execute the deploy hook in background
51
- [ -x deploy/after_push ] && (nohup deploy/after_push $oldrev $newrev 1>>$logfile 2>>$logfile &)
53
+ # execute the main deploy hook
54
+ [ -x deploy/after_push ] && deploy/after_push $oldrev $newrev 2>&1 | tee -a $logfile
52
55
  fi
metadata CHANGED
@@ -2,14 +2,14 @@
2
2
  name: git-deploy
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.5.5
5
+ version: 0.6.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Mislav Marohnić
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-11 00:00:00.000000000 Z
12
+ date: 2013-07-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  prerelease: false