capistrano-magento2 0.1.3 → 0.2.0

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