capistrano-magento2 0.1.3 → 0.2.0

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: e07f9eb98c1eaba3b2aefcb1839d2a46b403a04b
4
- data.tar.gz: 69547dbde12c91453e71631c4ee25e04c51ec357
3
+ metadata.gz: 7c26fa9d5aee2efa6058343f4778e782cf3bd819
4
+ data.tar.gz: 9b0df9b6a112a8d1426bb6d952d5e88bde7720b0
5
5
  SHA512:
6
- metadata.gz: 31b44b23d3f662de96572ae8342b341c4ddd06c78db0d7840c912e541b0ad1ee575391fa3abc533c690663c4dc8ae043bc6da6541cbe320b07ea2ec2251e9f58
7
- data.tar.gz: 5b57a780ba0b2b0b4f206408dd320095e7b1d73efaccc4e03a243c1bb157f1708202b08deb4d4b7a4e65a1a6e70580be2ed2e6f1d107fb0b4658c5553da1b6da
6
+ metadata.gz: 3fbce42ba76649f409114fabe570d5c5403feb556e031d08a7d002c76f2d21e1e47a2b74e4d00f51b7d479312e67ca5d9aeabde739d5a1b8c6c0bc43b40821c6
7
+ data.tar.gz: ae50da8be58fc6e35c8b11a0b62615897c13bc2d6cd9af178da4ceffaaece366e076b06895f3d61f8dc38f9a93c65aa68a96be177c5262b88bb338cf82e82c3d
@@ -1,5 +1,25 @@
1
1
  # Capistrano::Magento2 Change Log
2
2
 
3
+ 0.2.0
4
+ ==========
5
+
6
+ * Added "smart" magento:setup:di:compile task which uses multi-tenant if available (for compatibility with 2.0 release)
7
+ * Added a command_map for the bin/magento tool to simplify rake files
8
+ * Added indexer:info, indexer:status, indexer:show-mode, indexer:set-mode
9
+ * Added maintenance:status and maintenance:allow-ips, exposes maintenance:disable
10
+ * Fixed broken error detection logic on setup:static-content:deploy
11
+ * Fixed bug where magento:setup:upgrade was not using the --keep-generated flag
12
+ * Fixed log bloat caused by chatty static-content:deploy
13
+ * Fixed missing dependency include in deploy.rb
14
+ * Fixed output of magento:cache:varnish:ban command
15
+ * Fixed potential issue where if a botched release was in production, one could not roll back
16
+ * Fixed technical dependency bug preventing projects from overriding the deploy.rake with a custom one
17
+ * Renamed capistrano/magento2/deploy/notify to capistrano/magento2/notifier
18
+ * Renamed magento:reset_permissions to magento:setup:permissions
19
+ * Renamed magento:setup:static_content:deploy to magento:setup:static-content:deploy
20
+ * Updated composer calls to explicitly set --prefer-dist and --no-interaction
21
+ * Updated README to reflect current setup instructions
22
+
3
23
  0.1.3
4
24
  ==========
5
25
 
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Capistrano::Magento2
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/capistrano-magento2.svg)](https://badge.fury.io/rb/capistrano-magento2)
4
+
3
5
  A Capistrano extension for Magento 2 deployments. Takes care of specific Magento 2 requirements and adds tasks specific to the Magento 2 application.
4
6
 
5
7
  ## Installation
@@ -22,10 +24,12 @@ Or install it yourself as:
22
24
 
23
25
  Install Capistrano in your Magento project:
24
26
 
25
- $ cd <project_root>
26
- $ mkdir -p tools/cap
27
- $ cd ./tools/cap
28
- $ cap install
27
+ ```shell
28
+ $ cd <project_root>
29
+ $ mkdir -p tools/cap
30
+ $ cd ./tools/cap
31
+ $ cap install
32
+ ```
29
33
 
30
34
  Update your project `Capfile` to look like the following:
31
35
 
@@ -34,20 +38,86 @@ Update your project `Capfile` to look like the following:
34
38
  require 'capistrano/setup'
35
39
 
36
40
  # Load Magento deployment tasks
37
- require 'capistrano/magento'
41
+ require 'capistrano/magento2/deploy'
38
42
  ```
39
43
 
40
- This gem requires [terminal-notifier](https://rubygems.org/gems/terminal-notifier) and adds notifications to the deployment process via an optional include. To use terminal-notifier, add the following line to your `Capfile`:
44
+ ## Default Configuration
45
+
46
+ ### Capistrano Built-Ins
47
+
48
+ For the sake of simplicity in new project setups `:linked_dirs` and `:linked_files` are pre-configured per the following.
41
49
 
42
50
  ```ruby
43
- require 'capistrano/magento2/deploy/notify'
51
+ set :linked_files, [
52
+ 'app/etc/env.php',
53
+ 'var/.setup_cronjob_status',
54
+ 'var/.update_cronjob_status',
55
+ 'sitemap.xml'
56
+ ]
57
+
58
+ set :linked_dirs, [
59
+ 'pub/media',
60
+ 'var/backups',
61
+ 'var/composer_home',
62
+ 'var/importexport',
63
+ 'var/import_history',
64
+ 'var/log',
65
+ 'var/session',
66
+ 'var/tmp'
67
+ ]
68
+ ```
69
+
70
+ ### Magento 2 Deploy Routine
71
+
72
+ A pre-built deploy routine is available out-of-the-box. This can be overriden on a per-project basis by including only the Magento 2 specific tasks and defining your own `deploy.rake` file under `lib/capistrano/tasks` in your projects capistrano install location.
73
+
74
+ To see what process the built-in routine runs, take a look at the included rake file here: https://github.com/davidalger/capistrano-magento2/blob/master/lib/capistrano/tasks/deploy.rake
75
+
76
+ ## Magento Specific Tasks
77
+
78
+ All Magento 2 tasks used by the built-in `deploy.rake` file as well as some additional commands are implimented and exposed to the end-user for use directly via the cap tool. You can also see this list by running `cap -T` from your shell.
79
+
80
+ | cap command | what it does |
81
+ | ------------------------------------- | -------------------------------------------------- |
82
+ | magento:cache:clean | Clean Magento cache by types |
83
+ | magento:cache:disable | Disable Magento cache |
84
+ | magento:cache:enable | Enable Magento cache |
85
+ | magento:cache:flush | Flush Magento cache storage |
86
+ | magento:cache:status | Check Magento cache enabled status |
87
+ | magento:cache:varnish:ban | Add ban to Varnish for url(s) |
88
+ | magento:composer:install | Run composer install |
89
+ | magento:indexer:info | Shows allowed indexers |
90
+ | magento:indexer:reindex | Reindex data by all indexers |
91
+ | magento:indexer:set-mode[mode,index] | Sets mode of all indexers |
92
+ | magento:indexer:show-mode[index] | Shows mode of all indexers |
93
+ | magento:indexer:status | Shows status of all indexers |
94
+ | magento:maintenance:allow-ips[ip] | Sets maintenance mode exempt IPs |
95
+ | magento:maintenance:disable | Disable maintenance mode |
96
+ | magento:maintenance:enable | Enable maintenance mode |
97
+ | magento:maintenance:status | Displays maintenance mode status |
98
+ | magento:setup:di:compile | Runs dependency injection compilation routine |
99
+ | magento:setup:permissions | Sets proper permissions on application |
100
+ | magento:setup:static-content:deploy | Deploys static view files |
101
+ | magento:setup:upgrade | Run the Magento upgrade process |
102
+
103
+ ## Using Capistrano
104
+
105
+ For inrformation on how to use Capistrano and setup deployment take a look at the [Capistrano documentation](http://capistranorb.com) and [README](https://github.com/capistrano/capistrano/blob/master/README.md) file.
106
+
107
+ ## Terminal Notifier on OS X
108
+ This gem specifies [terminal-notifier](https://rubygems.org/gems/terminal-notifier) as a dependency in order to support notifications on OS X via an optional include. To use the built-in notifications, add the following line to your `Capfile`:
109
+
110
+ ```ruby
111
+ require 'capistrano/magento2/notifier'
44
112
  ```
45
113
 
46
114
  ## Development
47
115
 
48
- After checking out the repo, run `bundle install` to install dependencies.
116
+ After checking out the repo, run `bundle install` to install dependencies. Make the neccesary changes, then run `bundle exec rake install` to install a modified version of the gem on your local system.
117
+
118
+ To release a new version, update the version number in `capistrano/magento2/version.rb`, merge all changes to master, and then run `bundle exec rake release`. This will create a git tag for the version (the tag will apply to the current HEAD), push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
49
119
 
50
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `capistrano/magento2/version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
120
+ _Note: Releasing a new version of the gem is only possible for those with maintainer access to the gem on rubygems.org._
51
121
 
52
122
  ## Contributing
53
123
 
@@ -7,6 +7,4 @@
7
7
  # http://davidalger.com/contact/
8
8
  ##
9
9
 
10
- require 'capistrano/magento2/deploy'
11
-
12
10
  load File.expand_path('../tasks/magento.rake', __FILE__)
@@ -8,5 +8,6 @@
8
8
  ##
9
9
 
10
10
  require 'capistrano/deploy'
11
+ require 'capistrano/magento2'
11
12
 
12
13
  load File.expand_path('../../tasks/deploy.rake', __FILE__)
@@ -7,6 +7,6 @@
7
7
  # http://davidalger.com/contact/
8
8
  ##
9
9
 
10
- require 'capistrano/magento2/deploy'
10
+ require 'capistrano/deploy'
11
11
 
12
- load File.expand_path('../../../tasks/deploy/notify.rake', __FILE__)
12
+ load File.expand_path('../../tasks/notifier.rake', __FILE__)
@@ -9,6 +9,6 @@
9
9
 
10
10
  module Capistrano
11
11
  module Magento2
12
- VERSION = '0.1.3'
12
+ VERSION = '0.2.0'
13
13
  end
14
14
  end
@@ -11,10 +11,13 @@ namespace :deploy do
11
11
  task :updated do
12
12
  on release_roles :all do
13
13
  invoke 'magento:composer:install'
14
- invoke 'magento:reset_permissions'
15
- invoke 'magento:setup:static_content:deploy'
16
- invoke 'magento:setup:di:compile_multi_tenant'
17
- invoke 'magento:reset_permissions'
14
+ invoke 'magento:setup:permissions'
15
+ invoke 'magento:setup:static-content:deploy'
16
+ invoke 'magento:setup:di:compile'
17
+ invoke 'magento:setup:permissions'
18
+ within current_path do
19
+ execute :magento, 'maintenance:enable'
20
+ end
18
21
  invoke 'magento:maintenance:enable'
19
22
  invoke 'magento:setup:upgrade'
20
23
  end
@@ -14,7 +14,7 @@ namespace :magento do
14
14
  task :flush do
15
15
  on release_roles :all do
16
16
  within release_path do
17
- execute :php, '-f bin/magento -- cache:flush'
17
+ execute :magento, 'cache:flush'
18
18
  end
19
19
  end
20
20
  end
@@ -23,7 +23,7 @@ namespace :magento do
23
23
  task :clean do
24
24
  on release_roles :all do
25
25
  within release_path do
26
- execute :php, '-f bin/magento -- cache:clean'
26
+ execute :magento, 'cache:clean'
27
27
  end
28
28
  end
29
29
  end
@@ -32,7 +32,7 @@ namespace :magento do
32
32
  task :enable do
33
33
  on release_roles :all do
34
34
  within release_path do
35
- execute :php, '-f bin/magento -- cache:enable'
35
+ execute :magento, 'cache:enable'
36
36
  end
37
37
  end
38
38
  end
@@ -41,7 +41,7 @@ namespace :magento do
41
41
  task :disable do
42
42
  on release_roles :all do
43
43
  within release_path do
44
- execute :php, '-f bin/magento -- cache:disable'
44
+ execute :magento, 'cache:disable'
45
45
  end
46
46
  end
47
47
  end
@@ -50,7 +50,7 @@ namespace :magento do
50
50
  task :status do
51
51
  on release_roles :all do
52
52
  within release_path do
53
- execute :php, '-f bin/magento -- cache:status'
53
+ execute :magento, 'cache:status'
54
54
  end
55
55
  end
56
56
  end
@@ -59,19 +59,14 @@ namespace :magento do
59
59
  desc 'Add ban to Varnish for url(s)'
60
60
  task :ban do
61
61
  on release_roles :all do
62
+ # TODO: Document use of :ban_pools and :varnish_cache_hosts in project config file
62
63
  next unless any? :ban_pools
63
64
  next unless any? :varnish_cache_hosts
64
65
 
65
66
  within release_path do
66
67
  for pool in fetch(:ban_pools) do
67
68
  for cache_host in fetch(:varnish_cache_hosts) do
68
- response = capture :curl, %W{-svk -H 'X-Pool: #{pool}' -X PURGE #{cache_host}}
69
- if response.include? '<title>200 Purged</title>'
70
- puts " 200 Purged: #{pool}"
71
- elsif
72
- puts "\e[0;31m Warning: Failed to ban '#{pool}' pool on cache host '#{cache_host}'!\n"
73
- puts "#{response}\n\e[0m\n"
74
- end
69
+ execute :curl, %W{-s -H 'X-Pool: #{pool}' -X PURGE #{cache_host}}
75
70
  end
76
71
  end
77
72
  end
@@ -85,11 +80,11 @@ namespace :magento do
85
80
  task :install do
86
81
  on release_roles :all do
87
82
  within release_path do
88
- execute :composer, 'install --no-interaction 2>&1'
83
+ execute :composer, 'install --prefer-dist --no-interaction 2>&1'
89
84
 
90
85
  # Dir should be here if properly setup, but check for it anyways just in case
91
86
  if test "[ -d #{release_path}/update ]"
92
- execute :composer, 'install -d ./update 2>&1'
87
+ execute :composer, 'install --prefer-dist --no-interaction -d ./update 2>&1'
93
88
  else
94
89
  puts "\e[0;31m Warning: ./update dir does not exist in repository!\n\e[0m\n"
95
90
  end
@@ -103,45 +98,51 @@ namespace :magento do
103
98
  task :upgrade do
104
99
  on release_roles :all do
105
100
  within release_path do
106
- execute :php, '-f bin/magento -- setup:upgrade'
101
+ execute :magento, 'setup:upgrade --keep-generated'
102
+ end
103
+ end
104
+ end
105
+
106
+ desc 'Sets proper permissions on application'
107
+ task :permissions do
108
+ on release_roles :all do
109
+ within release_path do
110
+ execute :find, release_path, '-type d -exec chmod 770 {} +'
111
+ execute :find, release_path, '-type f -exec chmod 660 {} +'
112
+ execute :chmod, '-R g+s', release_path
113
+ execute :chmod, '+x ./bin/magento'
107
114
  end
108
115
  end
109
116
  end
110
117
 
111
- # TODO: Change this once the bug with single tenant compiler is fixed http://devdocs.magento.com/guides/v2.0/config-guide/cli/config-cli-subcommands-compiler.html#config-cli-subcommands-single
112
118
  namespace :di do
113
- task :compile_multi_tenant do
119
+ desc 'Runs dependency injection compilation routine'
120
+ task :compile do
114
121
  on release_roles :all do
115
122
  within release_path do
116
- execute :php, '-f bin/magento -- setup:di:compile-multi-tenant -q'
117
- execute :rm, '-f var/di/relations.ser' # TODO: Workaround for broken DI compilation in 2.0.4 (GH #4070)
123
+ # Due to a bug in the single-tenant compiler released in 2.0 (see here for details: http://bit.ly/21eMPtt)
124
+ # we have to use multi-tenant currently. However, the multi-tenant is being dropped in 2.1 and is no longer
125
+ # present in the develop mainline, so we are testing for multi-tenant presence for long-term portability.
126
+ if test :magento, 'setup:di:compile-multi-tenant --help'
127
+ execute :magento, 'setup:di:compile-multi-tenant'
128
+ execute :rm, '-f var/di/relations.ser' # TODO: Workaround broken DI compilation on PHP 7.0.5 (GH #4070)
129
+ else
130
+ execute :magento, 'setup:di:compile'
131
+ end
118
132
  end
119
133
  end
120
134
  end
121
135
  end
122
136
 
123
- namespace :static_content do
137
+ namespace 'static-content' do
138
+ desc 'Deploys static view files'
124
139
  task :deploy do
125
140
  on release_roles :all do
126
141
  within release_path do
127
-
128
- # Due to a bug (https://github.com/magento/magento2/issues/3060) in bin/magento, errors in the
129
- # compilation will not result in a non-zero exit code, so Capistrano is not aware an error has occurred.
130
- # As a result, we must capture the output and manually search for an error string to determine whether
131
- # compilation is successful. Once the aforementioned bug is fixed, pass a "-q" flag to
132
- # 'setup:static-content:deploy' to silence verbose output, as right now the log is being filled with
133
- # thousands of extraneous lines, per this issue: https://github.com/magento/magento2/issues/3692
134
- output = capture :php, '-f bin/magento -- setup:static-content:deploy', verbosity: Logger::INFO
135
-
136
- # TODO: add method to output heading messages such as this
137
- if output.to_s.include? 'Compilation from source'
138
- puts "\n\e[0;31m" \
139
- " ######################################################################\n" \
140
- " # #\n" \
141
- " # Failed to compile static assets #\n" \
142
- " # #\n" \
143
- " ######################################################################\n\n"
144
- puts output + "\e[0m\n"
142
+ # TODO: Remove custom error detection logic once magento/magento2#3060 is resolved
143
+ # Currently the cli tool is not reporting failures via the exit code, so manual detection is neccesary
144
+ output = capture :magento, 'setup:static-content:deploy | stdbuf -o0 tr -d .', verbosity: Logger::INFO
145
+ if not output.to_s.include? 'New version of deployed files'
145
146
  raise Exception, 'Failed to compile static assets'
146
147
  end
147
148
  end
@@ -154,33 +155,36 @@ namespace :magento do
154
155
  desc 'Enable maintenance mode'
155
156
  task :enable do
156
157
  on release_roles :all do
157
- for path in [current_path, release_path].uniq
158
- within path do
159
- execute :php, '-f bin/magento -- maintenance:enable'
160
- end
158
+ within release_path do
159
+ execute :magento, 'maintenance:enable'
161
160
  end
162
161
  end
163
162
  end
164
163
 
164
+ desc 'Disable maintenance mode'
165
165
  task :disable do
166
166
  on release_roles :all do
167
- for path in [current_path, release_path].uniq
168
- within path do
169
- execute :php, '-f bin/magento -- maintenance:disable'
170
- end
167
+ within release_path do
168
+ execute :magento, 'maintenance:disable'
171
169
  end
172
170
  end
173
171
  end
174
- end
175
-
176
- desc 'Reset permissions'
177
- task :reset_permissions do
178
- on release_roles :all do
179
- within release_path do
180
- execute :find, release_path, '-type d -exec chmod 770 {} +'
181
- execute :find, release_path, '-type f -exec chmod 660 {} +'
182
- execute :chmod, '-R g+s', release_path
183
- execute :chmod, '+x ./bin/magento'
172
+
173
+ desc 'Displays maintenance mode status'
174
+ task :status do
175
+ on release_roles :all do
176
+ within release_path do
177
+ execute :magento, 'maintenance:status'
178
+ end
179
+ end
180
+ end
181
+
182
+ desc 'Sets maintenance mode exempt IPs'
183
+ task 'allow-ips', :ip do |t, args|
184
+ on release_roles :all do
185
+ within release_path do
186
+ execute :magento, 'maintenance:allow-ips', args[:ip]
187
+ end
184
188
  end
185
189
  end
186
190
  end
@@ -190,7 +194,43 @@ namespace :magento do
190
194
  task :reindex do
191
195
  on release_roles :all do
192
196
  within release_path do
193
- execute :php, '-f bin/magento -- indexer:reindex'
197
+ execute :magento, 'indexer:reindex'
198
+ end
199
+ end
200
+ end
201
+
202
+ desc 'Shows allowed indexers'
203
+ task :info do
204
+ on release_roles :all do
205
+ within release_path do
206
+ execute :magento, 'indexer:info'
207
+ end
208
+ end
209
+ end
210
+
211
+ desc 'Shows status of all indexers'
212
+ task :status do
213
+ on release_roles :all do
214
+ within release_path do
215
+ execute :magento, 'indexer:status'
216
+ end
217
+ end
218
+ end
219
+
220
+ desc 'Shows mode of all indexers'
221
+ task 'show-mode', :index do |t, args|
222
+ on release_roles :all do
223
+ within release_path do
224
+ execute :magento, 'indexer:show-mode', args[:index]
225
+ end
226
+ end
227
+ end
228
+
229
+ desc 'Sets mode of all indexers'
230
+ task 'set-mode', :mode, :index do |t, args|
231
+ on release_roles :all do
232
+ within release_path do
233
+ execute :magento, 'indexer:set-mode', args[:mode], args[:index]
194
234
  end
195
235
  end
196
236
  end
@@ -200,6 +240,9 @@ end
200
240
 
201
241
  namespace :load do
202
242
  task :defaults do
243
+
244
+ SSHKit.config.command_map[:magento] = "/usr/bin/env php -f bin/magento --"
245
+
203
246
  set :linked_files, fetch(:linked_files, []).push(
204
247
  'app/etc/env.php',
205
248
  'var/.setup_cronjob_status',
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano-magento2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Alger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-20 00:00:00.000000000 Z
11
+ date: 2016-04-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capistrano
@@ -84,11 +84,11 @@ files:
84
84
  - lib/capistrano-magento2.rb
85
85
  - lib/capistrano/magento2.rb
86
86
  - lib/capistrano/magento2/deploy.rb
87
- - lib/capistrano/magento2/deploy/notify.rb
87
+ - lib/capistrano/magento2/notifier.rb
88
88
  - lib/capistrano/magento2/version.rb
89
89
  - lib/capistrano/tasks/deploy.rake
90
- - lib/capistrano/tasks/deploy/notify.rake
91
90
  - lib/capistrano/tasks/magento.rake
91
+ - lib/capistrano/tasks/notifier.rake
92
92
  homepage: https://github.com/davidalger/capistrano-magento2
93
93
  licenses:
94
94
  - OSL-3.0