recap 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,203 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="content-type" content="text/html;charset=utf-8">
5
+ <title>capistrano_extensions.rb</title>
6
+ <link rel="stylesheet" href="http://jashkenas.github.com/docco/resources/docco.css">
7
+ </head>
8
+ <body>
9
+ <div id='container'>
10
+ <div id="background"></div>
11
+ <div id="jump_to">
12
+ Jump To &hellip;
13
+ <div id="jump_wrapper">
14
+ <div id="jump_page">
15
+ <a class="source" href="../../index.html">index.rb</a>
16
+ <a class="source" href="bundler.html">bundler.rb</a>
17
+ <a class="source" href="capistrano_extensions.html">capistrano_extensions.rb</a>
18
+ <a class="source" href="cli.html">cli.rb</a>
19
+ <a class="source" href="compatibility.html">compatibility.rb</a>
20
+ <a class="source" href="deploy.html">deploy.rb</a>
21
+ <a class="source" href="env.html">env.rb</a>
22
+ <a class="source" href="foreman.html">foreman.rb</a>
23
+ <a class="source" href="preflight.html">preflight.rb</a>
24
+ <a class="source" href="rails.html">rails.rb</a>
25
+ <a class="source" href="version.html">version.rb</a>
26
+ </div>
27
+ </div>
28
+ </div>
29
+ <table cellspacing=0 cellpadding=0>
30
+ <thead>
31
+ <tr>
32
+ <th class=docs><h1>capistrano_extensions.rb</h1></th>
33
+ <th class=code></th>
34
+ </tr>
35
+ </thead>
36
+ <tbody>
37
+ <tr id='section-1'>
38
+ <td class=docs>
39
+ <div class="pilwrap">
40
+ <a class="pilcrow" href="#section-1">&#182;</a>
41
+ </div>
42
+
43
+ </td>
44
+ <td class=code>
45
+ <div class='highlight'><pre><span class="nb">require</span> <span class="s1">&#39;tempfile&#39;</span>
46
+
47
+ <span class="k">module</span> <span class="nn">Recap</span>
48
+ <span class="k">module</span> <span class="nn">CapistranoExtensions</span></pre></div>
49
+ </td>
50
+ </tr>
51
+ <tr id='section-2'>
52
+ <td class=docs>
53
+ <div class="pilwrap">
54
+ <a class="pilcrow" href="#section-2">&#182;</a>
55
+ </div>
56
+ <p>Run a command as the given user</p>
57
+ </td>
58
+ <td class=code>
59
+ <div class='highlight'><pre> <span class="k">def</span> <span class="nf">as_user</span><span class="p">(</span><span class="n">user</span><span class="p">,</span> <span class="n">command</span><span class="p">,</span> <span class="n">pwd</span> <span class="o">=</span> <span class="n">deploy_to</span><span class="p">)</span>
60
+ <span class="n">sudo</span> <span class="s2">&quot;su - </span><span class="si">#{</span><span class="n">user</span><span class="si">}</span><span class="s2"> -c &#39;cd </span><span class="si">#{</span><span class="n">pwd</span><span class="si">}</span><span class="s2"> &amp;&amp; </span><span class="si">#{</span><span class="n">command</span><span class="si">}</span><span class="s2">&#39;&quot;</span>
61
+ <span class="k">end</span></pre></div>
62
+ </td>
63
+ </tr>
64
+ <tr id='section-3'>
65
+ <td class=docs>
66
+ <div class="pilwrap">
67
+ <a class="pilcrow" href="#section-3">&#182;</a>
68
+ </div>
69
+ <p>Run a command as root</p>
70
+ </td>
71
+ <td class=code>
72
+ <div class='highlight'><pre> <span class="k">def</span> <span class="nf">as_root</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">pwd</span> <span class="o">=</span> <span class="n">deploy_to</span><span class="p">)</span>
73
+ <span class="n">as_user</span> <span class="s1">&#39;root&#39;</span><span class="p">,</span> <span class="n">command</span><span class="p">,</span> <span class="n">pwd</span>
74
+ <span class="k">end</span></pre></div>
75
+ </td>
76
+ </tr>
77
+ <tr id='section-4'>
78
+ <td class=docs>
79
+ <div class="pilwrap">
80
+ <a class="pilcrow" href="#section-4">&#182;</a>
81
+ </div>
82
+ <p>Run a command as the application user</p>
83
+ </td>
84
+ <td class=code>
85
+ <div class='highlight'><pre> <span class="k">def</span> <span class="nf">as_app</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">pwd</span> <span class="o">=</span> <span class="n">deploy_to</span><span class="p">)</span>
86
+ <span class="n">as_user</span> <span class="n">application_user</span><span class="p">,</span> <span class="n">command</span><span class="p">,</span> <span class="n">pwd</span>
87
+ <span class="k">end</span></pre></div>
88
+ </td>
89
+ </tr>
90
+ <tr id='section-5'>
91
+ <td class=docs>
92
+ <div class="pilwrap">
93
+ <a class="pilcrow" href="#section-5">&#182;</a>
94
+ </div>
95
+ <p>Put a string into a file as the application user</p>
96
+ </td>
97
+ <td class=code>
98
+ <div class='highlight'><pre> <span class="k">def</span> <span class="nf">put_as_app</span><span class="p">(</span><span class="n">string</span><span class="p">,</span> <span class="n">path</span><span class="p">)</span>
99
+ <span class="n">as_app</span> <span class="s2">&quot;touch </span><span class="si">#{</span><span class="n">path</span><span class="si">}</span><span class="s2"> &amp;&amp; chmod g+rw </span><span class="si">#{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span>
100
+ <span class="n">put</span> <span class="n">string</span><span class="p">,</span> <span class="n">path</span>
101
+ <span class="k">end</span>
102
+
103
+ <span class="k">def</span> <span class="nf">edit_file</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
104
+ <span class="k">if</span> <span class="n">editor</span> <span class="o">=</span> <span class="no">ENV</span><span class="o">[</span><span class="s1">&#39;DEPLOY_EDITOR&#39;</span><span class="o">]</span> <span class="o">||</span> <span class="no">ENV</span><span class="o">[</span><span class="s1">&#39;EDITOR&#39;</span><span class="o">]</span>
105
+ <span class="n">as_app</span> <span class="s2">&quot;touch </span><span class="si">#{</span><span class="n">path</span><span class="si">}</span><span class="s2"> &amp;&amp; chmod g+rw </span><span class="si">#{</span><span class="n">path</span><span class="si">}</span><span class="s2">&quot;</span>
106
+ <span class="n">local_path</span> <span class="o">=</span> <span class="no">Tempfile</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="s1">&#39;deploy-edit&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">path</span>
107
+ <span class="n">get</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">local_path</span><span class="p">)</span>
108
+ <span class="sb">`</span><span class="si">#{</span><span class="n">editor</span><span class="si">}</span><span class="sb"> </span><span class="si">#{</span><span class="n">local_path</span><span class="si">}</span><span class="sb">`</span>
109
+ <span class="n">upload</span><span class="p">(</span><span class="n">local_path</span><span class="p">,</span> <span class="n">path</span><span class="p">)</span>
110
+ <span class="k">else</span>
111
+ <span class="nb">abort</span> <span class="s2">&quot;To edit a remote file, either the EDITOR or DEPLOY_EDITOR environment variables must be set&quot;</span>
112
+ <span class="k">end</span>
113
+ <span class="k">end</span></pre></div>
114
+ </td>
115
+ </tr>
116
+ <tr id='section-6'>
117
+ <td class=docs>
118
+ <div class="pilwrap">
119
+ <a class="pilcrow" href="#section-6">&#182;</a>
120
+ </div>
121
+ <p>Run a git command in the <code>deploy_to</code> directory</p>
122
+ </td>
123
+ <td class=code>
124
+ <div class='highlight'><pre> <span class="k">def</span> <span class="nf">git</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
125
+ <span class="n">run</span> <span class="s2">&quot;cd </span><span class="si">#{</span><span class="n">deploy_to</span><span class="si">}</span><span class="s2"> &amp;&amp; git </span><span class="si">#{</span><span class="n">command</span><span class="si">}</span><span class="s2">&quot;</span>
126
+ <span class="k">end</span></pre></div>
127
+ </td>
128
+ </tr>
129
+ <tr id='section-7'>
130
+ <td class=docs>
131
+ <div class="pilwrap">
132
+ <a class="pilcrow" href="#section-7">&#182;</a>
133
+ </div>
134
+ <p>Capture the result of a git command run within the <code>deploy_to</code> directory</p>
135
+ </td>
136
+ <td class=code>
137
+ <div class='highlight'><pre> <span class="k">def</span> <span class="nf">capture_git</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
138
+ <span class="n">capture</span> <span class="s2">&quot;cd </span><span class="si">#{</span><span class="n">deploy_to</span><span class="si">}</span><span class="s2"> &amp;&amp; git </span><span class="si">#{</span><span class="n">command</span><span class="si">}</span><span class="s2">&quot;</span>
139
+ <span class="k">end</span></pre></div>
140
+ </td>
141
+ </tr>
142
+ <tr id='section-8'>
143
+ <td class=docs>
144
+ <div class="pilwrap">
145
+ <a class="pilcrow" href="#section-8">&#182;</a>
146
+ </div>
147
+ <p>Run a bundle command in the <code>deploy_to</code> directory</p>
148
+ </td>
149
+ <td class=code>
150
+ <div class='highlight'><pre> <span class="k">def</span> <span class="nf">bundler</span><span class="p">(</span><span class="n">command</span><span class="p">)</span>
151
+ <span class="n">as_app</span> <span class="s2">&quot;bundle </span><span class="si">#{</span><span class="n">command</span><span class="si">}</span><span class="s2">&quot;</span>
152
+ <span class="k">end</span></pre></div>
153
+ </td>
154
+ </tr>
155
+ <tr id='section-9'>
156
+ <td class=docs>
157
+ <div class="pilwrap">
158
+ <a class="pilcrow" href="#section-9">&#182;</a>
159
+ </div>
160
+ <p>Find the latest tag from the repository. As <code>git tag</code> returns tags in order, and our release
161
+ tags are timestamps, the latest tag will always be the last in the list.</p>
162
+ </td>
163
+ <td class=code>
164
+ <div class='highlight'><pre> <span class="k">def</span> <span class="nf">latest_tag_from_repository</span>
165
+ <span class="n">result</span> <span class="o">=</span> <span class="n">capture_git</span><span class="p">(</span><span class="s2">&quot;tag | tail -n1&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span>
166
+ <span class="n">result</span><span class="o">.</span><span class="n">empty?</span> <span class="p">?</span> <span class="kp">nil</span> <span class="p">:</span> <span class="n">result</span>
167
+ <span class="k">end</span></pre></div>
168
+ </td>
169
+ </tr>
170
+ <tr id='section-10'>
171
+ <td class=docs>
172
+ <div class="pilwrap">
173
+ <a class="pilcrow" href="#section-10">&#182;</a>
174
+ </div>
175
+ <p>Does the given file exist within the deployment directory?</p>
176
+ </td>
177
+ <td class=code>
178
+ <div class='highlight'><pre> <span class="k">def</span> <span class="nf">deployed_file_exists?</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
179
+ <span class="n">capture</span><span class="p">(</span><span class="s2">&quot;cd </span><span class="si">#{</span><span class="n">deploy_to</span><span class="si">}</span><span class="s2"> &amp;&amp; [ -f </span><span class="si">#{</span><span class="n">path</span><span class="si">}</span><span class="s2"> ]; echo $?&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span> <span class="o">==</span> <span class="s2">&quot;0&quot;</span>
180
+ <span class="k">end</span></pre></div>
181
+ </td>
182
+ </tr>
183
+ <tr id='section-11'>
184
+ <td class=docs>
185
+ <div class="pilwrap">
186
+ <a class="pilcrow" href="#section-11">&#182;</a>
187
+ </div>
188
+ <p>Has the given path been created or changed since the previous deployment? During the first
189
+ successful deployment this will always return true.</p>
190
+
191
+ </td>
192
+ <td class=code>
193
+ <div class='highlight'><pre> <span class="k">def</span> <span class="nf">deployed_file_changed?</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
194
+ <span class="k">return</span> <span class="kp">true</span> <span class="k">unless</span> <span class="n">latest_tag</span>
195
+ <span class="n">capture_git</span><span class="p">(</span><span class="s2">&quot;diff --exit-code </span><span class="si">#{</span><span class="n">latest_tag</span><span class="si">}</span><span class="s2"> origin/</span><span class="si">#{</span><span class="n">branch</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="n">path</span><span class="si">}</span><span class="s2"> &gt; /dev/null; echo $?&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span> <span class="o">==</span> <span class="s2">&quot;1&quot;</span>
196
+ <span class="k">end</span>
197
+ <span class="k">end</span>
198
+ <span class="k">end</span></pre></div>
199
+ </td>
200
+ </tr>
201
+ </table>
202
+ </div>
203
+ </body>
@@ -0,0 +1,39 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="content-type" content="text/html;charset=utf-8">
5
+ <title>cli.rb</title>
6
+ <link rel="stylesheet" href="http://jashkenas.github.com/docco/resources/docco.css">
7
+ </head>
8
+ <body>
9
+ <div id='container'>
10
+ <div id="background"></div>
11
+ <div id="jump_to">
12
+ Jump To &hellip;
13
+ <div id="jump_wrapper">
14
+ <div id="jump_page">
15
+ <a class="source" href="../../index.html">index.rb</a>
16
+ <a class="source" href="bundler.html">bundler.rb</a>
17
+ <a class="source" href="capistrano_extensions.html">capistrano_extensions.rb</a>
18
+ <a class="source" href="cli.html">cli.rb</a>
19
+ <a class="source" href="compatibility.html">compatibility.rb</a>
20
+ <a class="source" href="deploy.html">deploy.rb</a>
21
+ <a class="source" href="env.html">env.rb</a>
22
+ <a class="source" href="foreman.html">foreman.rb</a>
23
+ <a class="source" href="preflight.html">preflight.rb</a>
24
+ <a class="source" href="rails.html">rails.rb</a>
25
+ <a class="source" href="version.html">version.rb</a>
26
+ </div>
27
+ </div>
28
+ </div>
29
+ <table cellspacing=0 cellpadding=0>
30
+ <thead>
31
+ <tr>
32
+ <th class=docs><h1>cli.rb</h1></th>
33
+ <th class=code></th>
34
+ </tr>
35
+ </thead>
36
+ <tbody>
37
+ </table>
38
+ </div>
39
+ </body>
@@ -0,0 +1,70 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="content-type" content="text/html;charset=utf-8">
5
+ <title>compatibility.rb</title>
6
+ <link rel="stylesheet" href="http://jashkenas.github.com/docco/resources/docco.css">
7
+ </head>
8
+ <body>
9
+ <div id='container'>
10
+ <div id="background"></div>
11
+ <div id="jump_to">
12
+ Jump To &hellip;
13
+ <div id="jump_wrapper">
14
+ <div id="jump_page">
15
+ <a class="source" href="../../index.html">index.rb</a>
16
+ <a class="source" href="bundler.html">bundler.rb</a>
17
+ <a class="source" href="capistrano_extensions.html">capistrano_extensions.rb</a>
18
+ <a class="source" href="cli.html">cli.rb</a>
19
+ <a class="source" href="compatibility.html">compatibility.rb</a>
20
+ <a class="source" href="deploy.html">deploy.rb</a>
21
+ <a class="source" href="env.html">env.rb</a>
22
+ <a class="source" href="foreman.html">foreman.rb</a>
23
+ <a class="source" href="preflight.html">preflight.rb</a>
24
+ <a class="source" href="rails.html">rails.rb</a>
25
+ <a class="source" href="version.html">version.rb</a>
26
+ </div>
27
+ </div>
28
+ </div>
29
+ <table cellspacing=0 cellpadding=0>
30
+ <thead>
31
+ <tr>
32
+ <th class=docs><h1>compatibility.rb</h1></th>
33
+ <th class=code></th>
34
+ </tr>
35
+ </thead>
36
+ <tbody>
37
+ <tr id='section-1'>
38
+ <td class=docs>
39
+ <div class="pilwrap">
40
+ <a class="pilcrow" href="#section-1">&#182;</a>
41
+ </div>
42
+ <p><code>recap</code> isn&rsquo;t intended to be compatible with tasks (such as those within the <code>bundler</code>
43
+ or <code>whenever</code> projects) that are built on the original capistrano deployment recipes. At times
44
+ though there are tasks that would work, but for some missing (and redundant) settings. </p>
45
+
46
+ <p>Including this recipe adds these legacy settings, but provides no guarantee that original tasks
47
+ will work. Many are based on assumptions about the deployment layout that no longer hold true.</p>
48
+ </td>
49
+ <td class=code>
50
+ <div class='highlight'><pre><span class="no">Capistrano</span><span class="o">::</span><span class="no">Configuration</span><span class="o">.</span><span class="n">instance</span><span class="p">(</span><span class="ss">:must_exist</span><span class="p">)</span><span class="o">.</span><span class="n">load</span> <span class="k">do</span>
51
+ <span class="kp">extend</span> <span class="no">Recap</span><span class="o">::</span><span class="no">CapistranoExtensions</span></pre></div>
52
+ </td>
53
+ </tr>
54
+ <tr id='section-2'>
55
+ <td class=docs>
56
+ <div class="pilwrap">
57
+ <a class="pilcrow" href="#section-2">&#182;</a>
58
+ </div>
59
+ <p>As <code>git</code> to manages releases, all deployments are placed directly in the <code>deploy_to</code> folder. The
60
+ <code>current_path</code> is always this directory (no symlinking required).</p>
61
+
62
+ </td>
63
+ <td class=code>
64
+ <div class='highlight'><pre> <span class="n">set</span><span class="p">(</span><span class="ss">:current_path</span><span class="p">)</span> <span class="p">{</span> <span class="n">deploy_to</span> <span class="p">}</span>
65
+ <span class="k">end</span></pre></div>
66
+ </td>
67
+ </tr>
68
+ </table>
69
+ </div>
70
+ </body>