capistrano-didi 0.4.4 → 0.4.5

Sign up to get free protection for your applications and to get access to all the features.
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