recap 1.2.1 → 1.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6606826af353db87e4cb782732a19207ce156869
4
- data.tar.gz: ccab176fe7120b06b759832ebc051dd209b7d280
3
+ metadata.gz: 1ce0fd67a3a5eca2575897507013976d255d2cdf
4
+ data.tar.gz: 84fe27ce735df0abeafe7728f56bcaf69f4e1086
5
5
  SHA512:
6
- metadata.gz: 22297c0c8dcdefccb845c8a3aedf4883b61dc6153e0fc7d192fad377f68971b9cba1bdd81bd73500c297ad26b916c72f44445357503de95424414b14f3ba8f5c
7
- data.tar.gz: 161eac0c9fbf088129e75a656becbe9106df4c8491a238b4ad3dbbc7218b32526e11274ed84758a437c2bcdcd00b9eafe043430eb8dda16f946daf4043a1ae0d
6
+ metadata.gz: df47ca9c62c0ac5160c64d48f659d7562302b1713e27bb571b06e06f46942a357868f1bba30254d5e481dfa340a28f4e1d60209b3ee25ffd66510aea8967356a
7
+ data.tar.gz: 00db9075c0fdc5c0591c52f77750ffacf5d0562b0cf65bca026bd1aa69403fa91fd90e10947858c116ffd1df5c5c58c577359fa4a20a9f7ad25126adce4f1005
@@ -1,7 +1,7 @@
1
1
  require 'tempfile'
2
2
 
3
3
  # These methods are used by recap tasks to run commands and detect when files have changed
4
- # as part of a deployments
4
+ # as part of a deployment.
5
5
 
6
6
  module Recap::Support::CapistranoExtensions
7
7
  # Run a command as the application user
@@ -113,5 +113,11 @@ and try again.
113
113
  end
114
114
  end
115
115
 
116
+ def _cset(name, *args, &block)
117
+ unless exists?(name)
118
+ set(name, *args, &block)
119
+ end
120
+ end
121
+
116
122
  Capistrano::Configuration.send :include, self
117
123
  end
@@ -10,5 +10,5 @@ module Recap::Support::Compatibility
10
10
 
11
11
  # As `git` to manages releases, all deployments are placed directly in the `deploy_to` folder. The
12
12
  # `current_path` is always this directory (no symlinking required).
13
- set(:current_path) { deploy_to }
14
- end
13
+ _cset(:current_path) { deploy_to }
14
+ end
@@ -15,10 +15,10 @@ module Recap::Tasks::Bootstrap
15
15
  extend Recap::Support::Namespace
16
16
 
17
17
  # The bootstrap namespace has a couple of task that help configure application and personal accounts
18
- # and personal accounts to meet these requirements.
18
+ # to meet these requirements.
19
19
  namespace :bootstrap do
20
- set(:remote_username) { capture('whoami').strip }
21
- set(:application_home) { "/home/#{application_user}"}
20
+ _cset(:remote_username) { capture('whoami').strip }
21
+ _cset(:application_home) { "/home/#{application_user}"}
22
22
 
23
23
  # The `bootstrap:application` task sets up the account on the server the application itself uses. This
24
24
  # account should be dedicated to running this application.
@@ -7,22 +7,22 @@ module Recap::Tasks::Bundler
7
7
 
8
8
  namespace :bundle do
9
9
  # Each bundle is declared in a `Gemfile`, by default in the root of the application directory.
10
- set(:bundle_gemfile) { "Gemfile" }
10
+ _cset(:bundle_gemfile) { "Gemfile" }
11
11
 
12
12
  # As well as a `Gemfile`, application repositories should also contain a `Gemfile.lock`.
13
- set(:bundle_gemfile_lock) { "#{bundle_gemfile}.lock" }
13
+ _cset(:bundle_gemfile_lock) { "#{bundle_gemfile}.lock" }
14
14
 
15
15
  # An application's gems are installed within the application directory. By default they are
16
16
  # placed under `vendor/gems`.
17
- set(:bundle_path) { "#{deploy_to}/vendor/gems" }
17
+ _cset(:bundle_path) { "#{deploy_to}/vendor/gems" }
18
18
 
19
19
  # Not all gems are needed for production environments, so by default the `development`, `test` and
20
20
  # `assets` groups are skipped.
21
- set(:bundle_without) { "development test" }
21
+ _cset(:bundle_without) { "development test" }
22
22
 
23
23
  # The main bundle install command uses all the settings above, together with the `--deployment`,
24
24
  # `--binstubs` and `--quiet` flags
25
- set(:bundle_install_command) { "bundle install --gemfile #{bundle_gemfile} --path #{bundle_path} --deployment --quiet --binstubs --without #{bundle_without}" }
25
+ _cset(:bundle_install_command) { "bundle install --gemfile #{bundle_gemfile} --path #{bundle_path} --deployment --quiet --binstubs --without #{bundle_without}" }
26
26
 
27
27
  namespace :install do
28
28
  # After cloning or updating the code, we only install the bundle if the `Gemfile` or `Gemfile.lock` have changed.
@@ -61,4 +61,4 @@ module Recap::Tasks::Bundler
61
61
  after 'deploy:clone_code', 'bundle:install:if_changed'
62
62
  after 'deploy:update_code', 'bundle:install:if_changed'
63
63
  end
64
- end
64
+ end
@@ -17,47 +17,47 @@ module Recap::Tasks::Deploy
17
17
 
18
18
  namespace :deploy do
19
19
  # To use this recipe, both the application's name and its git repository are required.
20
- set(:application) { abort "You must set the name of your application in your Capfile, e.g.: set :application, 'tomafro.net'" }
21
- set(:repository) { abort "You must set the git respository location in your Capfile, e.g.: set :respository, 'git@github.com/tomafro/tomafro.net'" }
20
+ _cset(:application) { abort "You must set the name of your application in your Capfile, e.g.: set :application, 'tomafro.net'" }
21
+ _cset(:repository) { abort "You must set the git respository location in your Capfile, e.g.: set :respository, 'git@github.com/tomafro/tomafro.net'" }
22
22
 
23
23
  # The recipe assumes that the application code will be run as a dedicated user. Any user who
24
24
  # can deploy the application should be added as a member of the application's group. By default,
25
25
  # both the application user and group take the same name as the application.
26
- set(:application_user) { application }
27
- set(:application_group) { application_user }
26
+ _cset(:application_user) { application }
27
+ _cset(:application_group) { application_user }
28
28
 
29
29
  # Deployments can be made from any branch. `master` is used by default.
30
- set(:branch, 'master')
30
+ _cset(:branch, 'master')
31
31
 
32
32
  # Unlike a standard capistrano deployment, all releases are stored directly in the `deploy_to`
33
33
  # directory. The default is `/home/#{application_user}/app`.
34
- set(:deploy_to) { "/home/#{application_user}/app" }
34
+ _cset(:deploy_to) { "/home/#{application_user}/app" }
35
35
 
36
36
  # Each release is marked by a unique tag, generated with the current timestamp. This should
37
37
  # not be changed, as the format is matched in the list of tags to find deploy tags.
38
- set(:release_tag) { Time.now.utc.strftime("%Y%m%d%H%M%S") }
38
+ _cset(:release_tag) { Time.now.utc.strftime("%Y%m%d%H%M%S") }
39
39
 
40
40
  # If `release_tag` is changed, then `release_matcher` must be too, to a regular expression
41
41
  # that will match all generated release tags. In general it's best to leave both unchanged.
42
- set(:release_matcher) { /\A[0-9]{14}\Z/ }
42
+ _cset(:release_matcher) { /\A[0-9]{14}\Z/ }
43
43
 
44
44
  # On tagging a release, a message is also recorded alongside the tag. This message can contain
45
45
  # anything useful - its contents are not important for the recipe.
46
- set(:release_message, "Deployed at #{Time.now}")
46
+ _cset(:release_message, "Deployed at #{Time.now}")
47
47
 
48
48
  # Some tasks need to know the `latest_tag` - the most recent successful deployment. If no
49
49
  # deployments have been made, this will be `nil`.
50
- set(:latest_tag) { latest_tag_from_repository }
50
+ _cset(:latest_tag) { latest_tag_from_repository }
51
51
 
52
52
  # Force a complete deploy, even if no trigger files have changed
53
- set(:force_full_deploy, false)
53
+ _cset(:force_full_deploy, false)
54
54
 
55
55
  # A lock file is used to ensure deployments don't overlap
56
- set(:deploy_lock_file) { "#{deploy_to}/.recap-lock"}
56
+ _cset(:deploy_lock_file) { "#{deploy_to}/.recap-lock"}
57
57
 
58
58
  # The lock file is set to include a message that can be displayed
59
59
  # if claiming the lock fails
60
- set(:deploy_lock_message) { "Deployment in progress (started #{Time.now.to_s})" }
60
+ _cset(:deploy_lock_message) { "Deployment in progress (started #{Time.now.to_s})" }
61
61
 
62
62
  # To authenticate with github or other git servers, it is easier (and cleaner) to forward the
63
63
  # deploying user's ssh key than manage keys on deployment servers.
@@ -24,7 +24,7 @@ module Recap::Tasks::Env
24
24
  extend Recap::Support::Namespace
25
25
 
26
26
  namespace :env do
27
- set(:environment_file) { "/home/#{application_user}/.env" }
27
+ _cset(:environment_file) { "/home/#{application_user}/.env" }
28
28
 
29
29
  # The `env` task displays the current configuration environment. Note that this doesn't
30
30
  # include all environment variables, only those stored in the `.env` file.
@@ -108,4 +108,4 @@ module Recap::Tasks::Env
108
108
  def env_argv
109
109
  ARGV[1..-1]
110
110
  end
111
- end
111
+ end
@@ -7,24 +7,24 @@ module Recap::Tasks::Foreman
7
7
 
8
8
  namespace :foreman do
9
9
  # Processes are declared in a `Procfile`, by default in the root of the application directory.
10
- set(:procfile) { "Procfile" }
10
+ _cset(:procfile) { "Procfile" }
11
11
 
12
12
  # Foreman startup scripts are exported in `upstart` format by default.
13
- set(:foreman_export_format, "upstart")
13
+ _cset(:foreman_export_format, "upstart")
14
14
 
15
15
  # Foreman startup scripts are generated based on the standard templates by default
16
- set(:foreman_template, nil)
16
+ _cset(:foreman_template, nil)
17
17
 
18
- set(:foreman_template_option) { foreman_template ? "--template #{foreman_template}" : nil}
18
+ _cset(:foreman_template_option) { foreman_template ? "--template #{foreman_template}" : nil}
19
19
 
20
20
  # Scripts are exported (as the the application user) to a temporary location first.
21
- set(:foreman_tmp_location) { "#{deploy_to}/tmp/foreman" }
21
+ _cset(:foreman_tmp_location) { "#{deploy_to}/tmp/foreman" }
22
22
 
23
23
  # After exports, the scripts are moved to their final location, usually `/etc/init`.
24
- set(:foreman_export_location, "/etc/init")
24
+ _cset(:foreman_export_location, "/etc/init")
25
25
 
26
26
  # The standard foreman export.
27
- set(:foreman_export_command) { "./bin/foreman export #{foreman_export_format} #{foreman_tmp_location} --procfile #{procfile} --app #{application} --user #{application_user} --log #{deploy_to}/log #{foreman_template_option}" }
27
+ _cset(:foreman_export_command) { "./bin/foreman export #{foreman_export_format} #{foreman_tmp_location} --procfile #{procfile} --app #{application} --user #{application_user} --log #{deploy_to}/log #{foreman_template_option}" }
28
28
 
29
29
  namespace :export do
30
30
  # After each deployment, the startup scripts are exported if either the `Procfile` or any custom Foreman templates have changed.
@@ -27,7 +27,7 @@ module Recap::Tasks::Preflight
27
27
  before 'deploy:setup', 'preflight:check'
28
28
  before 'deploy', 'preflight:check'
29
29
 
30
- set(:remote_username) { capture('whoami').strip }
30
+ _cset(:remote_username) { capture('whoami').strip }
31
31
 
32
32
  task :check do
33
33
  # First check the `application_user` exists.
@@ -20,7 +20,7 @@ module Recap::Tasks::Rails
20
20
  # assets to be compiled, and which don't. By default, recap will watch
21
21
  # the following files and directories and compile assets if they change
22
22
  # between deploys.
23
- set(:asset_precompilation_triggers, %w(app/assets vendor/assets Gemfile.lock config))
23
+ _cset(:asset_precompilation_triggers, %w(app/assets vendor/assets Gemfile.lock config))
24
24
 
25
25
  namespace :db do
26
26
  task :load_schema do
@@ -2,7 +2,7 @@ module Recap::Tasks::Ruby
2
2
  extend Recap::Support::Namespace
3
3
 
4
4
  namespace :ruby do
5
- set(:skip_rails_recipe_not_used_warning, false)
5
+ _cset(:skip_rails_recipe_not_used_warning, false)
6
6
 
7
7
  task :preflight do
8
8
  if exit_code("grep rails #{deploy_to}/Gemfile") == "0"
@@ -20,4 +20,4 @@ suppress this warning, set :skip_rails_recipe_not_used_warning to true.
20
20
 
21
21
  after "preflight:check", "ruby:preflight"
22
22
  end
23
- end
23
+ end
@@ -1,3 +1,3 @@
1
1
  module Recap
2
- VERSION = '1.2.1'
2
+ VERSION = '1.2.2'
3
3
  end
@@ -59,6 +59,12 @@ describe Recap::Tasks::Deploy do
59
59
  it 'defaults to master' do
60
60
  config.branch.should eql('master')
61
61
  end
62
+
63
+ it 'honours value in pre-set variable' do
64
+ config.set(:branch, 'branch-from-command-line')
65
+ Recap::Tasks::Deploy.load_into(config)
66
+ config.branch.should eql('branch-from-command-line')
67
+ end
62
68
  end
63
69
 
64
70
  describe '#deploy_to' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: recap
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Ward
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-01 00:00:00.000000000 Z
11
+ date: 2013-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capistrano
@@ -223,7 +223,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
223
223
  version: '0'
224
224
  requirements: []
225
225
  rubyforge_project:
226
- rubygems_version: 2.0.3
226
+ rubygems_version: 2.1.5
227
227
  signing_key:
228
228
  specification_version: 4
229
229
  summary: GIT based deployment recipes for Capistrano