capistrano-magento2 0.8.7 → 0.8.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +5 -1
- data/CHANGELOG.md +5 -0
- data/README.md +1 -1
- data/lib/capistrano/magento2/version.rb +1 -1
- data/lib/capistrano/tasks/deploy.rake +34 -1
- data/lib/capistrano/tasks/magento.rake +59 -53
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f1ecc432d10021f836a35005807a6dc5127499d561a2081bd31168c2d1fc76a3
|
4
|
+
data.tar.gz: ba295633cb33ae700bb1b9ddf5c99d418469079b91ef2c87173c5425e72bd20f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 45e6e75fc726d56da63cbb53c46c17852e37472e5d6d34c53b8652417d4d3c35dac4fd6cb7ce5c5556f2cda7907b890415497cd6b57f0a5b9efa94cff02c9879
|
7
|
+
data.tar.gz: 6db56c44607d0e4258fcb5dd84a3ee0e2d148dd010765b64fca5db056f3a89610f27ce1e1d507499eeeb6d931ef13457dfd6b152b93b8b2d68e9da712f56c37b
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
[![Gem Version](https://badge.fury.io/rb/capistrano-magento2.svg)](https://badge.fury.io/rb/capistrano-magento2)
|
4
4
|
|
5
|
-
A Capistrano extension for Magento 2 deployments. Takes care of specific Magento 2 requirements and adds tasks specific to the Magento 2 application.
|
5
|
+
A Capistrano extension for Magento 2 deployments. Takes care of specific Magento 2 requirements and adds tasks specific to the Magento 2 application. Supports zero-down deployments based on differences in deployed `config.php` and db status as reported by Magento's `setup:db:status` CLI command. When themes and scopes have been dumped to `config.php` via `bin/magento app:config:dump scopes themes i18n` then zero-side-effect pipeline will be utilized such that no database nor cache backend configuration are available during the build process.
|
6
6
|
|
7
7
|
## Supported Magento Versions
|
8
8
|
|
@@ -13,6 +13,23 @@ namespace :deploy do
|
|
13
13
|
before 'deploy:check:linked_files', 'magento:deploy:check'
|
14
14
|
before 'deploy:symlink:linked_files', 'magento:deploy:local_config'
|
15
15
|
|
16
|
+
# If both 'scopes' and 'themes' are available in app/etc/config.php then the build should not require database or
|
17
|
+
# cache backend configuration to deploy. Removing the link to app/etc/env.php in this case prevents any possible
|
18
|
+
# side effects that may arise from the build running in parallel to the live production release (such as the cache
|
19
|
+
# being randomly disabled during the composer install step of the build, something which has been observed). This
|
20
|
+
# requires "bin/magento scopes themes i18n" be run to dump theme/store config and the result comitted to repository
|
21
|
+
before 'deploy:symlink:linked_files', :detect_scd_config do
|
22
|
+
on primary fetch(:magento_deploy_setup_role) do
|
23
|
+
unless test %Q[#{SSHKit.config.command_map[:php]} -r '
|
24
|
+
$cfg = include "#{release_path}/app/etc/config.php";
|
25
|
+
exit((int)(isset($cfg["scopes"]) && isset($cfg["themes"])));
|
26
|
+
']
|
27
|
+
info "Removing app/etc/env.php from :linked_dirs for zero-side-effect pipeline deployment."
|
28
|
+
remove :linked_files, 'app/etc/env.php'
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
16
33
|
before :starting, :confirm_action do
|
17
34
|
if fetch(:magento_deploy_confirm).include? fetch(:stage).to_s
|
18
35
|
print "\e[0;31m Are you sure you want to deploy to #{fetch(:stage).to_s}? [y/n] \e[0m"
|
@@ -21,17 +38,33 @@ namespace :deploy do
|
|
21
38
|
end
|
22
39
|
end
|
23
40
|
|
41
|
+
# Links app/etc/env.php if previously dropped from :linked_dirs in :detect_scd_config
|
42
|
+
task 'symlink:link_env_php' do
|
43
|
+
on release_roles :all do
|
44
|
+
# Normally this would be wrapped in a conditional, but during SCD and/or DI compile Magento frequently writes
|
45
|
+
# to cache_types -> compiled_config resulting in an env.php file being present (albeit the wrong one)
|
46
|
+
execute :ln, "-fsn #{shared_path}/app/etc/env.php #{release_path}/app/etc/env.php"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
24
50
|
task :updated do
|
25
51
|
invoke 'magento:deploy:verify'
|
26
52
|
invoke 'magento:composer:install' if fetch(:magento_deploy_composer)
|
27
53
|
invoke 'magento:deploy:version_check'
|
28
54
|
invoke 'magento:setup:permissions'
|
55
|
+
|
29
56
|
if fetch(:magento_deploy_production)
|
30
|
-
invoke 'magento:deploy:mode:production'
|
31
57
|
invoke 'magento:setup:static-content:deploy'
|
32
58
|
invoke 'magento:setup:di:compile'
|
33
59
|
invoke 'magento:composer:dump-autoload' if fetch(:magento_deploy_composer)
|
34
60
|
end
|
61
|
+
|
62
|
+
invoke 'deploy:symlink:link_env_php'
|
63
|
+
|
64
|
+
if fetch(:magento_deploy_production)
|
65
|
+
invoke 'magento:deploy:mode:production'
|
66
|
+
end
|
67
|
+
|
35
68
|
invoke 'magento:setup:permissions'
|
36
69
|
invoke 'magento:maintenance:check'
|
37
70
|
invoke 'magento:maintenance:enable' if fetch(:magento_deploy_maintenance)
|
@@ -218,8 +218,10 @@ namespace :magento do
|
|
218
218
|
exit 1 # only need to check the repo once, so we immediately exit
|
219
219
|
end
|
220
220
|
|
221
|
+
# Checking app/etc/env.php in shared_path vs release_path to support the zero-side-effect
|
222
|
+
# builds as implemented in the :detect_scd_config hook of deploy.rake
|
221
223
|
unless test %Q[#{SSHKit.config.command_map[:php]} -r '
|
222
|
-
$cfg = include "#{
|
224
|
+
$cfg = include "#{shared_path}/app/etc/env.php";
|
223
225
|
exit((int)!isset($cfg["install"]["date"]));
|
224
226
|
']
|
225
227
|
error "\e[0;31mError on #{host}:\e[0m No environment configuration could be found." +
|
@@ -317,11 +319,13 @@ namespace :magento do
|
|
317
319
|
task :compile do
|
318
320
|
on release_roles :all do
|
319
321
|
within release_path do
|
320
|
-
|
322
|
+
with mage_mode: :production do
|
323
|
+
output = capture :magento, 'setup:di:compile --no-ansi', verbosity: Logger::INFO
|
321
324
|
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
+
# 2.1.x doesn't return a non-zero exit code for certain errors (see davidalger/capistrano-magento2#41)
|
326
|
+
if output.to_s.include? 'Errors during compilation'
|
327
|
+
raise Exception, 'DI compilation command execution failed'
|
328
|
+
end
|
325
329
|
end
|
326
330
|
end
|
327
331
|
end
|
@@ -332,66 +336,68 @@ namespace :magento do
|
|
332
336
|
desc 'Deploys static view files'
|
333
337
|
task :deploy do
|
334
338
|
on release_roles :all do
|
335
|
-
|
339
|
+
with mage_mode: :production do
|
340
|
+
_magento_version = magento_version
|
336
341
|
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
if deploy_themes.count() > 0
|
341
|
-
deploy_themes = deploy_themes.join(' -t ').prepend(' -t ')
|
342
|
-
else
|
343
|
-
deploy_themes = nil
|
344
|
-
end
|
345
|
-
|
346
|
-
if deploy_jobs
|
347
|
-
deploy_jobs = "--jobs #{deploy_jobs} "
|
348
|
-
else
|
349
|
-
deploy_jobs = nil
|
350
|
-
end
|
342
|
+
deploy_themes = fetch(:magento_deploy_themes)
|
343
|
+
deploy_jobs = fetch(:magento_deploy_jobs)
|
351
344
|
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
deploy_languages = [fetch(:magento_deploy_languages).join(' ')]
|
358
|
-
end
|
345
|
+
if deploy_themes.count() > 0
|
346
|
+
deploy_themes = deploy_themes.join(' -t ').prepend(' -t ')
|
347
|
+
else
|
348
|
+
deploy_themes = nil
|
349
|
+
end
|
359
350
|
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
else
|
366
|
-
compilation_strategy = nil
|
367
|
-
end
|
351
|
+
if deploy_jobs
|
352
|
+
deploy_jobs = "--jobs #{deploy_jobs} "
|
353
|
+
else
|
354
|
+
deploy_jobs = nil
|
355
|
+
end
|
368
356
|
|
369
|
-
|
370
|
-
#
|
371
|
-
|
357
|
+
# Workaround core-bug with multi-lingual deployments on Magento 2.1.3 and greater. In these versions each
|
358
|
+
# language must be iterated individually. See issue #72 for details.
|
359
|
+
if _magento_version >= Gem::Version.new('2.1.3')
|
360
|
+
deploy_languages = fetch(:magento_deploy_languages)
|
361
|
+
else
|
362
|
+
deploy_languages = [fetch(:magento_deploy_languages).join(' ')]
|
363
|
+
end
|
372
364
|
|
373
|
-
#
|
374
|
-
|
375
|
-
|
365
|
+
# Magento 2.2 introduced static content compilation strategies that can be one of the following:
|
366
|
+
# quick (default), standard (like previous versions) or compact
|
367
|
+
compilation_strategy = fetch(:magento_deploy_strategy)
|
368
|
+
if compilation_strategy and _magento_version >= Gem::Version.new('2.2.0')
|
369
|
+
compilation_strategy = "-s #{compilation_strategy} "
|
370
|
+
else
|
371
|
+
compilation_strategy = nil
|
376
372
|
end
|
377
|
-
end
|
378
373
|
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
deploy_flags = ['css', 'less', 'images', 'fonts', 'html', 'misc', 'html-minify']
|
383
|
-
.join(' --no-').prepend(' --no-');
|
374
|
+
within release_path do
|
375
|
+
# Magento 2.1 will fail to deploy if this file does not exist and static asset signing is enabled
|
376
|
+
execute :touch, "#{release_path}/pub/static/deployed_version.txt"
|
384
377
|
|
385
|
-
within release_path do with(https: 'on') {
|
386
378
|
# This loop exists to support deploy on versions where each language must be deployed seperately
|
387
379
|
deploy_languages.each do |lang|
|
388
|
-
static_content_deploy "#{compilation_strategy}#{deploy_jobs}#{lang}#{deploy_themes}
|
380
|
+
static_content_deploy "#{compilation_strategy}#{deploy_jobs}#{lang}#{deploy_themes}"
|
389
381
|
end
|
390
|
-
|
391
|
-
end
|
382
|
+
end
|
392
383
|
|
393
|
-
|
394
|
-
|
384
|
+
# Run again with HTTPS env var set to 'on' to pre-generate secure versions of RequireJS configs. A
|
385
|
+
# single run on these Magento versions will fail to generate the secure requirejs-config.js file.
|
386
|
+
if _magento_version < Gem::Version.new('2.1.8')
|
387
|
+
deploy_flags = ['css', 'less', 'images', 'fonts', 'html', 'misc', 'html-minify']
|
388
|
+
.join(' --no-').prepend(' --no-');
|
389
|
+
|
390
|
+
within release_path do with(https: 'on') {
|
391
|
+
# This loop exists to support deploy on versions where each language must be deployed seperately
|
392
|
+
deploy_languages.each do |lang|
|
393
|
+
static_content_deploy "#{compilation_strategy}#{deploy_jobs}#{lang}#{deploy_themes}#{deploy_flags}"
|
394
|
+
end
|
395
|
+
} end
|
396
|
+
end
|
397
|
+
|
398
|
+
# Set the deployed_version of static content to ensure it matches across all hosts
|
399
|
+
upload!(StringIO.new(deployed_version), "#{release_path}/pub/static/deployed_version.txt")
|
400
|
+
end
|
395
401
|
end
|
396
402
|
end
|
397
403
|
end
|
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.8.
|
4
|
+
version: 0.8.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Alger
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-05-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: capistrano
|
@@ -100,7 +100,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
100
100
|
- !ruby/object:Gem::Version
|
101
101
|
version: '0'
|
102
102
|
requirements: []
|
103
|
-
rubygems_version: 3.0.
|
103
|
+
rubygems_version: 3.0.3
|
104
104
|
signing_key:
|
105
105
|
specification_version: 4
|
106
106
|
summary: A Capistrano extension for Magento 2 deployments.
|