capistrano-didi 0.4.4 → 0.4.5

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA512:
3
+ data.tar.gz: f6c724b62e44dba0b97f1bb999638f291ef84c971dda7363d9934e93f7089305d24f3ccdde8dd8159b2fdd31ef46fabc462a010d4bf05a077051a6ca9374327c
4
+ metadata.gz: 6a0013ad8ea262cf9abae39b4ce059089df2dcc3edabd9e8db253c1a99462c9fb33f87504ca3193eeb082676e4efd214728016fce71e41fbe7778ca390737bc1
5
+ SHA1:
6
+ data.tar.gz: 349f43606d84dd6bbf717557d9d4fac959dd8dcf
7
+ metadata.gz: 341d92e5320779d85725ae66d0a10de7164c7143
data/CHANGELOG.txt CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.4.5 / 3 July 2013
2
+
3
+ * added support for private files directory, using the user_private_files flag.
4
+
1
5
  ## 0.4.4 / 19 Oct 2012
2
6
 
3
7
  * fixed issue where wrong previous releases folder was used during cleanup_shared_symlinks
@@ -33,8 +37,8 @@
33
37
 
34
38
  ## 0.3.2 / 23 Mar 2012
35
39
 
36
- * added config option: enable_robots, default to false
37
- * added config option: drush_path, on remote server
40
+ * added config option: enable_robots, default to false
41
+ * added config option: drush_path, on remote server
38
42
  * added default php settings in settings.php file
39
43
  * put site in maintenance mode during deploy
40
44
 
@@ -45,4 +49,4 @@
45
49
  ## 0.3.0 / 24 Nov 2011
46
50
 
47
51
  * fix symlinks on rollback
48
- * added manage:dbdump_previous task
52
+ * added manage:dbdump_previous task
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.4
1
+ 0.4.5
data/bin/didify CHANGED
@@ -38,7 +38,7 @@ end
38
38
  files = {
39
39
  "Capfile" => unindent(<<-FILE),
40
40
  require 'railsless-deploy' # gem install railsless-deploy
41
- require 'didi/recipes/didi.rb' # gem install capistrano-didi
41
+ require 'didi/recipes/didi.rb' # gem install capistrano-didi
42
42
  load 'config/deploy'
43
43
  require 'capistrano/ext/multistage' # gem install capistrano
44
44
  FILE
@@ -59,6 +59,7 @@ set :db_type, "mysql"
59
59
  set :db_name, "database_name"
60
60
  set :db_username, "database_user_name"
61
61
  set :db_password, "database_password"
62
+ set :db_prefix, "database_prefix"
62
63
 
63
64
  set :profile, "minimal"
64
65
  set :domain, "default"
@@ -69,9 +70,9 @@ set :adminpass, "drupal_admin_pass"
69
70
  set :baseline, "drupal_feature_to_activate_after_fresh_install"
70
71
  ',
71
72
  "config/sql/staging.sql" => <<scrub
72
- --
73
+ --
73
74
  -- Scrub important information from a Drupal database.
74
- --
75
+ --
75
76
 
76
77
  -- Remove all email addresses.
77
78
  UPDATE users SET mail=CONCAT('user', uid, '@example.com'), init=CONCAT('user', uid, '@example.com') WHERE uid != 0;
@@ -102,7 +103,7 @@ UPDATE users SET mail=CONCAT('user', uid, '@example.com'), init=CONCAT('user', u
102
103
  -- TRUNCATE custom_customer_lead_data;
103
104
 
104
105
  -- USER PASSWORDS
105
- -- These statements assume you want to preserve real passwords for developers. Change 'rid=3' to the
106
+ -- These statements assume you want to preserve real passwords for developers. Change 'rid=3' to the
106
107
  -- developer or test role you want to preserve.
107
108
 
108
109
  -- DRUPAL 6
@@ -113,9 +114,9 @@ UPDATE users SET mail=CONCAT('user', uid, '@example.com'), init=CONCAT('user', u
113
114
  -- UPDATE users SET pass = MD5('supersecret!') WHERE uid = 1;
114
115
 
115
116
  -- DRUPAL 7
116
- -- Drupal 7 requires sites to generate a hashed password specific to their site. A script in the
117
+ -- Drupal 7 requires sites to generate a hashed password specific to their site. A script in the
117
118
  -- docroot/scripts directory is provided for doing this. From your docroot run the following:
118
- --
119
+ --
119
120
  -- scripts/password-hash.sh password
120
121
  --
121
122
  -- this will generate a hash for the password "password". In the following statements replace
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "capistrano-didi"
8
- s.version = "0.4.4"
8
+ s.version = "0.4.5"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Koen Van Winckel"]
12
- s.date = "2012-10-19"
12
+ s.date = "2013-07-03"
13
13
  s.description = "didi is a collection of recipes for capistrano that allow drupal to be deployed, tested and used in a CI environment"
14
14
  s.email = "koenvw@gmail.com"
15
15
  s.executables = ["didify", "didi"]
@@ -10,6 +10,7 @@ _cset(:db_type) { abort "Please specify the Drupal database type (:db_ty
10
10
  _cset(:db_name) { abort "Please specify the Drupal database name (:db_name)." }
11
11
  _cset(:db_username) { abort "Please specify the Drupal database username (:db_username)." }
12
12
  _cset(:db_password) { abort "Please specify the Drupal database password (:db_password)." }
13
+ _cset(:db_prefix) { abort "Please specify the Drupal database prefix (:db_prefix)." }
13
14
 
14
15
  _cset(:profile) { abort "Please specify the Drupal install profile (:profile)." }
15
16
  _cset(:site) { abort "Please specify the Drupal site (:site)." }
@@ -37,6 +38,9 @@ set :no_disable, true
37
38
  set :local_database, nil
38
39
  set :backup_database, true
39
40
  set :push_dump_enabled, false
41
+ set :make_install_profile, false
42
+ set :make_file, ''
43
+ set :use_private_files, false
40
44
 
41
45
  ssh_options[:forward_agent] = true
42
46
  #ssh_options[:verbose] = :debug #FIXME
@@ -48,13 +52,15 @@ ssh_options[:forward_agent] = true
48
52
  # =========================================================================
49
53
  _cset :settings, 'settings.php'
50
54
  _cset :files, 'files'
55
+ _cset :private_files, 'private'
51
56
  _cset :dbbackups, 'db_backups'
52
57
  _cset :drush_path, ''
53
58
 
54
- _cset(:shared_settings) { domain.to_a.map { |d| File.join(shared_path, d, settings) } }
55
- _cset(:shared_files) { domain.to_a.map { |d| File.join(shared_path, d, files) } }
56
- _cset(:dbbackups_path) { domain.to_a.map { |d| File.join(deploy_to, dbbackups, d) } }
57
- _cset(:drush) { "drush -r #{current_path}" + (domain == 'default' ? '' : " -l #{domain}") } # FIXME: not in use?
59
+ _cset(:shared_settings) { domain.to_a.map { |d| File.join(shared_path, d, settings) } }
60
+ _cset(:shared_files) { domain.to_a.map { |d| File.join(shared_path, d, files) } }
61
+ _cset(:shared_private_files) { domain.to_a.map { |d| File.join(shared_path, d, private_files) } }
62
+ _cset(:dbbackups_path) { domain.to_a.map { |d| File.join(deploy_to, dbbackups, d) } }
63
+ _cset(:drush) { "drush -r #{current_path}" + (domain == 'default' ? '' : " -l #{domain}") } # FIXME: not in use?
58
64
 
59
65
  # these variables are still in rails-less deploy gem
60
66
  # but have been updated in the latest capistrano gem
@@ -71,11 +77,13 @@ set(:previous_revision) { capture("cat #{previous_release}/REVISION", :except =>
71
77
 
72
78
  _cset(:release_settings) { domain.to_a.map { |d| File.join(release_path, drupal_path, 'sites', d, settings) } }
73
79
  _cset(:release_files) { domain.to_a.map { |d| File.join(release_path, drupal_path, 'sites', d, files) } }
80
+ _cset(:release_private_files) { domain.to_a.map { |d| File.join(release_path, drupal_path, 'sites', d, private_files) } }
74
81
  _cset(:release_domain) { domain.to_a.map { |d| File.join(release_path, drupal_path, 'sites', d) } }
75
82
 
76
- _cset(:previous_release_settings) { releases.length > 1 ? domain.to_a.map { |d| File.join(previous_release, drupal_path, 'sites', d, settings) } : nil }
77
- _cset(:previous_release_files) { releases.length > 1 ? domain.to_a.map { |d| File.join(previous_release, drupal_path, 'sites', d, files) } : nil }
78
- _cset(:previous_release_domain) { releases.length > 1 ? domain.to_a.map { |d| File.join(previous_release, drupal_path, 'sites', d) } : nil }
83
+ _cset(:previous_release_settings) { releases.length > 1 ? domain.to_a.map { |d| File.join(previous_release, drupal_path, 'sites', d, settings) } : nil }
84
+ _cset(:previous_release_files) { releases.length > 1 ? domain.to_a.map { |d| File.join(previous_release, drupal_path, 'sites', d, files) } : nil }
85
+ _cset(:previous_release_private_files) { releases.length > 1 ? domain.to_a.map { |d| File.join(previous_release, drupal_path, 'sites', d, private_files) } : nil }
86
+ _cset(:previous_release_domain) { releases.length > 1 ? domain.to_a.map { |d| File.join(previous_release, drupal_path, 'sites', d) } : nil }
79
87
 
80
88
  _cset(:is_multisite) { domain.to_a.size > 1 }
81
89
 
@@ -135,6 +143,13 @@ namespace :deploy do
135
143
  mkdir -p #{dirs.join(' ')} && #{try_sudo} chown #{user}:#{srv_usr} #{shared_files.join(' ')} && #{try_sudo} chmod g+w #{shared_files.join(' ')}
136
144
  CMD
137
145
 
146
+ # Generate private files when enabled.
147
+ if use_private_files
148
+ run <<-CMD
149
+ mkdir -p #{shared_private_files} && #{try_sudo} chown #{user}:#{srv_usr} #{shared_private_files.join(' ')} && #{try_sudo} chmod g+w #{shared_private_files.join(' ')}
150
+ CMD
151
+ end
152
+
138
153
  #create drupal config file
139
154
  domain.each_with_index do |d, i|
140
155
  configuration = drupal_settings(drupal_version, d)
@@ -145,6 +160,9 @@ namespace :deploy do
145
160
 
146
161
  desc "[internal] Rebuild files and settings symlinks"
147
162
  task :finalize_update, :except => { :no_release => true } do
163
+ if make_install_profile
164
+ run "cd #{current_release} && drush make #{make_file} #{drupal_path}"
165
+ end
148
166
  # Specifies an on_rollback hook for the currently executing task. If this
149
167
  # or any subsequent task then fails, and a transaction is active, this
150
168
  # hook will be executed.
@@ -152,6 +170,9 @@ namespace :deploy do
152
170
  if previous_release
153
171
  #FIXME: won't work on mulitsite config
154
172
  run "ln -nfs #{shared_files} #{previous_release_files} && ln -nfs #{shared_settings} #{previous_release_settings}"
173
+ if use_private_files
174
+ run "ln -nfs #{shared_private_files} #{previous_release_private_files}"
175
+ end
155
176
  else
156
177
  logger.important "no previous release to rollback to, rollback of drupal shared data skipped."
157
178
  end
@@ -167,6 +188,14 @@ namespace :deploy do
167
188
  ln -nfs #{shared_settings[i]} #{release_settings[i]}
168
189
  CMD
169
190
  end
191
+
192
+ if use_private_files
193
+ shared_private_files.each_with_index do |sf, i|
194
+ run <<-CMD
195
+ ln -nfs #{sf} #{release_private_files[i]}
196
+ CMD
197
+ end
198
+ end
170
199
  end
171
200
 
172
201
  desc "[internal] cleanup old symlinks, must run after deploy:symlink"
@@ -178,6 +207,11 @@ namespace :deploy do
178
207
  rm -f #{previous_release_settings[i]} &&
179
208
  rm -f #{previous_release_files[i]}
180
209
  CMD
210
+ if use_private_files
211
+ run <<-CMD
212
+ rm -f #{previous_release_private_files[i]}
213
+ CMD
214
+ end
181
215
  end
182
216
  end
183
217
  end
@@ -235,6 +269,14 @@ namespace :deploy do
235
269
  ln -nfs #{shared_settings[i]} #{previous_release_settings[i]}
236
270
  CMD
237
271
  end
272
+
273
+ if use_private_files
274
+ shared_private_files.each_with_index do |sf, i|
275
+ run <<-CMD
276
+ ln -nfs #{sf} #{previous_release_private_files[i]}
277
+ CMD
278
+ end
279
+ end
238
280
  else
239
281
  abort "could not rollback the code because there is no prior release"
240
282
  end
@@ -258,7 +300,7 @@ namespace :deploy do
258
300
  end
259
301
 
260
302
  end
261
-
303
+
262
304
  namespace :web do
263
305
  desc "Makes the application web-accessible again."
264
306
  task :enable do
@@ -497,8 +539,31 @@ namespace :manage do
497
539
  run "rm #{File.join(dbbackups_path, "#{sql_file}")}"
498
540
  end
499
541
  end
500
- end
501
542
 
543
+ desc 'Download files and extract locally'
544
+ task :pull_files do
545
+ abort("ERROR: multisite not supported") if is_multisite
546
+
547
+ set(:runit, Capistrano::CLI.ui.ask("Do you want to download the files? type 'yes' to continue: "))
548
+ if runit == 'yes'
549
+ run "if [ ! -d #{deploy_to}/tmp ]; then mkdir #{deploy_to}/tmp; fi" # create tmp folder if needed
550
+ # pack and remote file
551
+ file = "#{deploy_to}/tmp/#{releases.last}.tar.gz"
552
+ run "cd #{current_path}/#{drupal_path}/sites/default && tar -zcvf #{file} files/*"
553
+ # copy to local
554
+ system "if [ ! -d build ]; then mkdir build; fi" # create build folder locally if needed
555
+ download "#{file}", "build/", :once => true, :via => :scp
556
+ run "rm #{file}"
557
+ set(:extract, Capistrano::CLI.ui.ask("Do you want to extract #{File.basename(file)}? type 'yes' to continue: "))
558
+ if extract == 'yes'
559
+ # extract the files
560
+ set(:where, Capistrano::CLI.ui.ask("Where? (default: build): "))
561
+ dest = where == '' ? "build" : "#{where}"
562
+ system "tar -zxvf build/#{File.basename(file)} -C #{dest}"
563
+ end
564
+ end
565
+ end
566
+ end
502
567
 
503
568
  # =========================
504
569
  # Helper methods
@@ -535,7 +600,7 @@ $databases = array ('default' => array ('default' => array (
535
600
  'host' => '#{db_host}',
536
601
  'port' => '',
537
602
  'driver' => '#{db_type}',
538
- 'prefix' => '',
603
+ 'prefix' => '#{db_prefix}',
539
604
  )));
540
605
  ini_set('session.gc_probability', 1);
541
606
  ini_set('session.gc_divisor', 100);
@@ -555,4 +620,4 @@ if (file_exists($path)) {
555
620
  end
556
621
  end
557
622
 
558
- end # Capistrano::Configuration.instance.load
623
+ end # Capistrano::Configuration.instance.load
metadata CHANGED
@@ -1,13 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano-didi
3
3
  version: !ruby/object:Gem::Version
4
- hash: 7
5
- prerelease:
6
- segments:
7
- - 0
8
- - 4
9
- - 4
10
- version: 0.4.4
4
+ version: 0.4.5
11
5
  platform: ruby
12
6
  authors:
13
7
  - Koen Van Winckel
@@ -15,132 +9,87 @@ autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
11
 
18
- date: 2012-10-19 00:00:00 Z
12
+ date: 2013-07-03 00:00:00 Z
19
13
  dependencies:
20
14
  - !ruby/object:Gem::Dependency
15
+ name: railsless-deploy
16
+ prerelease: false
21
17
  requirement: &id001 !ruby/object:Gem::Requirement
22
- none: false
23
18
  requirements:
24
19
  - - ">="
25
20
  - !ruby/object:Gem::Version
26
- hash: 19
27
- segments:
28
- - 1
29
- - 0
30
- - 2
31
21
  version: 1.0.2
32
- version_requirements: *id001
33
- name: railsless-deploy
34
- prerelease: false
35
22
  type: :development
23
+ version_requirements: *id001
36
24
  - !ruby/object:Gem::Dependency
25
+ name: capistrano
26
+ prerelease: false
37
27
  requirement: &id002 !ruby/object:Gem::Requirement
38
- none: false
39
28
  requirements:
40
29
  - - ">="
41
30
  - !ruby/object:Gem::Version
42
- hash: 63
43
- segments:
44
- - 2
45
- - 12
46
- - 0
47
31
  version: 2.12.0
48
- version_requirements: *id002
49
- name: capistrano
50
- prerelease: false
51
32
  type: :development
33
+ version_requirements: *id002
52
34
  - !ruby/object:Gem::Dependency
35
+ name: shoulda
36
+ prerelease: false
53
37
  requirement: &id003 !ruby/object:Gem::Requirement
54
- none: false
55
38
  requirements:
56
- - - ">="
39
+ - &id006
40
+ - ">="
57
41
  - !ruby/object:Gem::Version
58
- hash: 3
59
- segments:
60
- - 0
61
42
  version: "0"
62
- version_requirements: *id003
63
- name: shoulda
64
- prerelease: false
65
43
  type: :development
44
+ version_requirements: *id003
66
45
  - !ruby/object:Gem::Dependency
46
+ name: bundler
47
+ prerelease: false
67
48
  requirement: &id004 !ruby/object:Gem::Requirement
68
- none: false
69
49
  requirements:
70
50
  - - ~>
71
51
  - !ruby/object:Gem::Version
72
- hash: 21
73
- segments:
74
- - 1
75
- - 1
76
- - 3
77
52
  version: 1.1.3
78
- version_requirements: *id004
79
- name: bundler
80
- prerelease: false
81
53
  type: :development
54
+ version_requirements: *id004
82
55
  - !ruby/object:Gem::Dependency
56
+ name: jeweler
57
+ prerelease: false
83
58
  requirement: &id005 !ruby/object:Gem::Requirement
84
- none: false
85
59
  requirements:
86
60
  - - ~>
87
61
  - !ruby/object:Gem::Version
88
- hash: 7
89
- segments:
90
- - 1
91
- - 6
92
- - 4
93
62
  version: 1.6.4
94
- version_requirements: *id005
95
- name: jeweler
96
- prerelease: false
97
63
  type: :development
64
+ version_requirements: *id005
98
65
  - !ruby/object:Gem::Dependency
99
- requirement: &id006 !ruby/object:Gem::Requirement
100
- none: false
101
- requirements:
102
- - - ">="
103
- - !ruby/object:Gem::Version
104
- hash: 3
105
- segments:
106
- - 0
107
- version: "0"
108
- version_requirements: *id006
109
66
  name: rcov
110
67
  prerelease: false
111
- type: :development
112
- - !ruby/object:Gem::Dependency
113
68
  requirement: &id007 !ruby/object:Gem::Requirement
114
- none: false
115
69
  requirements:
116
- - - ">="
117
- - !ruby/object:Gem::Version
118
- hash: 63
119
- segments:
120
- - 2
121
- - 12
122
- - 0
123
- version: 2.12.0
70
+ - *id006
71
+ type: :development
124
72
  version_requirements: *id007
73
+ - !ruby/object:Gem::Dependency
125
74
  name: capistrano
126
75
  prerelease: false
127
- type: :runtime
128
- - !ruby/object:Gem::Dependency
129
76
  requirement: &id008 !ruby/object:Gem::Requirement
130
- none: false
131
77
  requirements:
132
78
  - - ">="
133
79
  - !ruby/object:Gem::Version
134
- hash: 19
135
- segments:
136
- - 1
137
- - 0
138
- - 2
139
- version: 1.0.2
80
+ version: 2.12.0
81
+ type: :runtime
140
82
  version_requirements: *id008
83
+ - !ruby/object:Gem::Dependency
141
84
  name: railsless-deploy
142
85
  prerelease: false
86
+ requirement: &id009 !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: 1.0.2
143
91
  type: :runtime
92
+ version_requirements: *id009
144
93
  description: didi is a collection of recipes for capistrano that allow drupal to be deployed, tested and used in a CI environment
145
94
  email: koenvw@gmail.com
146
95
  executables:
@@ -169,33 +118,23 @@ files:
169
118
  homepage: http://github.com/koenvw/didi
170
119
  licenses:
171
120
  - MIT
121
+ metadata: {}
122
+
172
123
  post_install_message: => "didify" and "didi" commands installed. Try them out!
173
124
  rdoc_options: []
174
125
 
175
126
  require_paths:
176
127
  - lib
177
128
  required_ruby_version: !ruby/object:Gem::Requirement
178
- none: false
179
129
  requirements:
180
- - - ">="
181
- - !ruby/object:Gem::Version
182
- hash: 3
183
- segments:
184
- - 0
185
- version: "0"
130
+ - *id006
186
131
  required_rubygems_version: !ruby/object:Gem::Requirement
187
- none: false
188
132
  requirements:
189
- - - ">="
190
- - !ruby/object:Gem::Version
191
- hash: 3
192
- segments:
193
- - 0
194
- version: "0"
133
+ - *id006
195
134
  requirements: []
196
135
 
197
136
  rubyforge_project:
198
- rubygems_version: 1.8.11
137
+ rubygems_version: 2.0.14
199
138
  signing_key:
200
139
  specification_version: 3
201
140
  summary: didi - drupal deployment script based on capistrano