diff --git a/.github/linters/.markdownlint.json b/.github/linters/.markdownlint.json new file mode 100644 index 00000000000..922a907842c --- /dev/null +++ b/.github/linters/.markdownlint.json @@ -0,0 +1,25 @@ +{ + "default": false, + "MD001": true, + "MD003": { "style": "atx" }, + "MD004": true, + "MD005": true, + "MD006": true, + "MD007": { "indent": 3 }, + "MD009": true, + "MD010": true, + "MD012": true, + "MD018": true, + "MD019": true, + "MD023": true, + "MD025": true, + "MD029": true, + "MD030": { "ol_single": 1, "ol_multi": 1, "ul_single": 2, "ul_multi": 2 }, + "MD032": true, + "MD035": true, + "MD036": true, + "MD037": true, + "MD038": true, + "MD040": true, + "MD046": { "style": "fenced"} +} diff --git a/.github/linters/.ruby-lint.yml b/.github/linters/.ruby-lint.yml new file mode 100644 index 00000000000..29b77e8d6b5 --- /dev/null +++ b/.github/linters/.ruby-lint.yml @@ -0,0 +1,11 @@ +--- +####################### +# Rubocop Config file # +####################### + +inherit_gem: + rubocop-github: + - config/default.yml + +Style/StringLiterals: + EnforcedStyle: single_quotes diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml new file mode 100644 index 00000000000..57b8e74eac5 --- /dev/null +++ b/.github/workflows/linter.yml @@ -0,0 +1,57 @@ +--- +########################### +########################### +## Linter GitHub Actions ## +########################### +########################### +name: Lint Code Base + +# +# Documentation: +# https://help.github.com/en/articles/workflow-syntax-for-github-actions +# + +############################# +# Start the job on all push # +############################# +on: + pull_request: + branches: + - master + - 2.*-develop + paths-ignore: + - '**.md' + - '**.html' + - '**.xml' + +############### +# Set the Job # +############### +jobs: + + build: + # Name the Job + name: Lint Code Base + # Set the agent to run on + runs-on: ubuntu-latest + + ################## + # Load all steps # + ################## + steps: + ########################## + # Checkout the code base # + ########################## + - name: Checkout Code + uses: actions/checkout@v2 + + ################################ + # Run Linter against code base # + ################################ + - name: Lint Code Base + uses: github/super-linter@v3 + env: + VALIDATE_ALL_CODEBASE: false + DEFAULT_BRANCH: master + VALIDATE_HTML: false + VALIDATE_MD: false diff --git a/.markdownlint.json b/.markdownlint.json new file mode 120000 index 00000000000..600dde1bbb1 --- /dev/null +++ b/.markdownlint.json @@ -0,0 +1 @@ +.github/linters/.markdownlint.json \ No newline at end of file diff --git a/Gemfile b/Gemfile index ab888caeec8..55d297c215e 100644 --- a/Gemfile +++ b/Gemfile @@ -4,15 +4,15 @@ source 'https://rubygems.org' gem 'devdocs', git: 'https://github.com/magento-devdocs/devdocs-theme.git' gem 'jekyll' -gem 'whatsup_github' gem 'rake' +gem 'whatsup_github' gem 'wdm', platform: :mswin group :test do gem 'html-proofer' - gem 'mdl' gem 'launchy' + gem 'mdl' end group :optimization do @@ -22,9 +22,9 @@ end group :jekyll_plugins do gem 'jekyll-algolia', '~> 1.0' + gem 'jekyll-optional-front-matter' gem 'jekyll-redirect-from' + gem 'jekyll-relative-links' gem 'jekyll-sitemap' gem 'jekyll-titles-from-headings' - gem 'jekyll-relative-links' - gem 'jekyll-optional-front-matter' end diff --git a/Rakefile b/Rakefile index dc74e4cbde6..5a78b4c913c 100644 --- a/Rakefile +++ b/Rakefile @@ -71,7 +71,7 @@ desc 'Generate data for a news digest. Default timeframe is a week since today. task :whatsnew do date = ENV['since'] print 'Generating data for the weekly digest: $ '.magenta - if date.nil? or date.empty? + if date.nil? || date.empty? sh 'bin/whatsup_github' elsif date.is_a? String sh 'bin/whatsup_github', 'since', ENV['since'].to_s @@ -84,8 +84,8 @@ desc 'Generate index for Algolia' task index: %w[init] do puts 'Generating index for Algolia ...' sh 'bin/jekyll', - 'algolia', - '--config=_config.yml,_config.index.yml' + 'algolia', + '--config=_config.yml,_config.index.yml' end desc 'Convert HTML text to kramdown in your terminal' @@ -94,4 +94,4 @@ task :convert do result = `bin/kramdown --input=html --output=kramdown` puts 'Converted text:'.magenta puts result.bold -end \ No newline at end of file +end diff --git a/_plugins/algolia.rb b/_plugins/algolia.rb index 0d8e2bb4c18..d33d86583ba 100644 --- a/_plugins/algolia.rb +++ b/_plugins/algolia.rb @@ -1,13 +1,15 @@ +# frozen_string_literal: true + # Copyright © Magento, Inc. All rights reserved. # See COPYING.txt for license details. module Jekyll module Algolia module Hooks - def self.before_indexing_each(record, node, context) + def self.before_indexing_each(record, _node, _context) # Do not index records larger than 20000 bytes - return nil if record.to_s.bytesize > 20000 - + return nil if record.to_s.bytesize > 20_000 + record end end diff --git a/_plugins/liquid-tags/collapsible.rb b/_plugins/liquid-tags/collapsible.rb index bb2399b13bf..beb4b415ae3 100644 --- a/_plugins/liquid-tags/collapsible.rb +++ b/_plugins/liquid-tags/collapsible.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # Copyright © Magento, Inc. All rights reserved. # See COPYING.txt for license details. @@ -30,7 +32,7 @@ def render(context) #{@title}
#{content}
- HTML + HTML end end @@ -58,7 +60,7 @@ def render(context)

#{@title}

#{content}
- HTML + HTML end end @@ -85,7 +87,7 @@ def render(context)

#{@title}

#{content}
- HTML + HTML end end end diff --git a/_plugins/page-params/github-path.rb b/_plugins/page-params/github_path.rb similarity index 94% rename from _plugins/page-params/github-path.rb rename to _plugins/page-params/github_path.rb index 5a7f33b7c9d..368d0274f50 100644 --- a/_plugins/page-params/github-path.rb +++ b/_plugins/page-params/github_path.rb @@ -10,9 +10,8 @@ # The parameter contains a file path relative to its repository. # Jekyll::Hooks.register :pages, :post_init do |page| - # Skip virtual pages like MRG topics - next if page.kind_of? Jekyll::PageWithoutAFile + next if page.is_a? Jekyll::PageWithoutAFile # Process only files with 'md' and 'html' extensions next unless File.extname(page.path).match?(/md|html/) # Skip redirects @@ -22,7 +21,7 @@ page.site.source, File.dirname(page.path) ) - + filename = File.basename page.path # Change to the parent directory of the page and read full file path diff --git a/_plugins/page-params/last-modified-at.rb b/_plugins/page-params/last_modified_at.rb similarity index 96% rename from _plugins/page-params/last-modified-at.rb rename to _plugins/page-params/last_modified_at.rb index 3882a0d3ebd..ac35554760c 100644 --- a/_plugins/page-params/last-modified-at.rb +++ b/_plugins/page-params/last_modified_at.rb @@ -25,11 +25,11 @@ next if page.data['last_modified_at'] # Skip pages created by custom generators like 'mrg_pages' - next if page.kind_of? Jekyll::PageWithoutAFile + next if page.is_a? Jekyll::PageWithoutAFile # Add site.source to the page path file_path = File.join(page.site.source, page.path) - + # Get real path of the page. If this is a symlink read it to get path of the real file with content. real_filepath = File.realpath(file_path) diff --git a/_plugins/page-params/page-baseurl-generator.rb b/_plugins/page-params/page_baseurl_generator.rb similarity index 97% rename from _plugins/page-params/page-baseurl-generator.rb rename to _plugins/page-params/page_baseurl_generator.rb index f284c300d7b..5c7766d4778 100644 --- a/_plugins/page-params/page-baseurl-generator.rb +++ b/_plugins/page-params/page_baseurl_generator.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # Copyright © Magento, Inc. All rights reserved. # See COPYING.txt for license details. diff --git a/_plugins/page-params/page-canonical-url.rb b/_plugins/page-params/page_canonical_url.rb similarity index 98% rename from _plugins/page-params/page-canonical-url.rb rename to _plugins/page-params/page_canonical_url.rb index 13d7f95313f..41244ea9a03 100644 --- a/_plugins/page-params/page-canonical-url.rb +++ b/_plugins/page-params/page_canonical_url.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # Copyright © Magento, Inc. All rights reserved. # See COPYING.txt for license details. diff --git a/_plugins/page-params/page-versionless.rb b/_plugins/page-params/page_versionless.rb similarity index 99% rename from _plugins/page-params/page-versionless.rb rename to _plugins/page-params/page_versionless.rb index c5cbdfcc384..289e526c172 100644 --- a/_plugins/page-params/page-versionless.rb +++ b/_plugins/page-params/page_versionless.rb @@ -17,6 +17,6 @@ filtering_pattern = '/guides/v' next if page.url.start_with? filtering_pattern - + page.data['versionless'] = true -end \ No newline at end of file +end diff --git a/_plugins/page-params/page-versions.rb b/_plugins/page-params/page_versions.rb similarity index 99% rename from _plugins/page-params/page-versions.rb rename to _plugins/page-params/page_versions.rb index 0dff8e6b9c0..f26958103ac 100644 --- a/_plugins/page-params/page-versions.rb +++ b/_plugins/page-params/page_versions.rb @@ -29,6 +29,7 @@ urls_filtered_by_pattern = pages.select do |site_page| next if site_page.name == 'redirect.html' + site_page.url.start_with? filtering_pattern end.map(&:url) diff --git a/bin/htmlproofer b/bin/htmlproofer index e668c8385ff..b7e0c6b17ed 100755 --- a/bin/htmlproofer +++ b/bin/htmlproofer @@ -8,11 +8,11 @@ # this file is here to facilitate running it. # -require "pathname" -ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", - Pathname.new(__FILE__).realpath) +require 'pathname' +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', + Pathname.new(__FILE__).realpath) -bundle_binstub = File.expand_path("../bundle", __FILE__) +bundle_binstub = File.expand_path('bundle', __dir__) if File.file?(bundle_binstub) if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/ @@ -23,7 +23,7 @@ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this end end -require "rubygems" -require "bundler/setup" +require 'rubygems' +require 'bundler/setup' -load Gem.bin_path("html-proofer", "htmlproofer") +load Gem.bin_path('html-proofer', 'htmlproofer') diff --git a/bin/image_optim b/bin/image_optim index a2624d763ac..10eeb949276 100755 --- a/bin/image_optim +++ b/bin/image_optim @@ -8,11 +8,11 @@ # this file is here to facilitate running it. # -require "pathname" -ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", - Pathname.new(__FILE__).realpath) +require 'pathname' +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', + Pathname.new(__FILE__).realpath) -bundle_binstub = File.expand_path("../bundle", __FILE__) +bundle_binstub = File.expand_path('bundle', __dir__) if File.file?(bundle_binstub) if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/ @@ -23,7 +23,7 @@ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this end end -require "rubygems" -require "bundler/setup" +require 'rubygems' +require 'bundler/setup' -load Gem.bin_path("image_optim", "image_optim") +load Gem.bin_path('image_optim', 'image_optim') diff --git a/bin/jekyll b/bin/jekyll index 1bb103b459e..86ee6e5fccc 100755 --- a/bin/jekyll +++ b/bin/jekyll @@ -1,4 +1,6 @@ #!/usr/bin/env ruby +# frozen_string_literal: true + # # This file was generated by Bundler. # @@ -7,8 +9,8 @@ # require 'pathname' -ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile", - Pathname.new(__FILE__).realpath) +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', + Pathname.new(__FILE__).realpath) require 'rubygems' require 'bundler/setup' diff --git a/bin/kramdown b/bin/kramdown index 73320ecb804..79836a090b6 100755 --- a/bin/kramdown +++ b/bin/kramdown @@ -8,11 +8,11 @@ # this file is here to facilitate running it. # -require "pathname" -ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", - Pathname.new(__FILE__).realpath) +require 'pathname' +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', + Pathname.new(__FILE__).realpath) -bundle_binstub = File.expand_path("../bundle", __FILE__) +bundle_binstub = File.expand_path('bundle', __dir__) if File.file?(bundle_binstub) if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/ @@ -23,7 +23,7 @@ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this end end -require "rubygems" -require "bundler/setup" +require 'rubygems' +require 'bundler/setup' -load Gem.bin_path("kramdown", "kramdown") +load Gem.bin_path('kramdown', 'kramdown') diff --git a/bin/mdl b/bin/mdl index ec5a264e868..eedf2b4756f 100755 --- a/bin/mdl +++ b/bin/mdl @@ -8,11 +8,11 @@ # this file is here to facilitate running it. # -require "pathname" -ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", - Pathname.new(__FILE__).realpath) +require 'pathname' +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', + Pathname.new(__FILE__).realpath) -bundle_binstub = File.expand_path("../bundle", __FILE__) +bundle_binstub = File.expand_path('bundle', __dir__) if File.file?(bundle_binstub) if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/ @@ -23,7 +23,7 @@ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this end end -require "rubygems" -require "bundler/setup" +require 'rubygems' +require 'bundler/setup' -load Gem.bin_path("mdl", "mdl") +load Gem.bin_path('mdl', 'mdl') diff --git a/bin/whatsup_github b/bin/whatsup_github index 498f93617a7..de9ee9e1e22 100755 --- a/bin/whatsup_github +++ b/bin/whatsup_github @@ -8,11 +8,11 @@ # this file is here to facilitate running it. # -require "pathname" -ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", - Pathname.new(__FILE__).realpath) +require 'pathname' +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', + Pathname.new(__FILE__).realpath) -bundle_binstub = File.expand_path("../bundle", __FILE__) +bundle_binstub = File.expand_path('bundle', __dir__) if File.file?(bundle_binstub) if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/ @@ -23,7 +23,7 @@ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this end end -require "rubygems" -require "bundler/setup" +require 'rubygems' +require 'bundler/setup' -load Gem.bin_path("whatsup_github", "whatsup_github") +load Gem.bin_path('whatsup_github', 'whatsup_github') diff --git a/lib/double_slash_check.rb b/lib/double_slash_check.rb index 587c757eb10..a9a41ff434a 100644 --- a/lib/double_slash_check.rb +++ b/lib/double_slash_check.rb @@ -17,9 +17,7 @@ def run @link = create_element(node) line = node.line - if slash? - return add_issue('Remove double forward slashes from URLs', line: line) - end + return add_issue('Remove double forward slashes from URLs', line: line) if slash? end end end diff --git a/rakelib/build.rake b/rakelib/build.rake index ca5b222b71a..b64a4f99280 100644 --- a/rakelib/build.rake +++ b/rakelib/build.rake @@ -1,28 +1,29 @@ +# frozen_string_literal: true + # Copyright © Magento, Inc. All rights reserved. # See COPYING.txt for license details. namespace :build do - desc 'Build the site for production' task prod: %w[init] do print 'Building the site for production: $ '.magenta sh 'bin/jekyll', - 'build', - '--config=_config.yml,_config.prod.yml', - '--verbose', - '--profile', - '--trace' + 'build', + '--config=_config.yml,_config.prod.yml', + '--verbose', + '--profile', + '--trace' end desc 'Build the site for staging' task :stage do print 'Building the site for staging: $ '.magenta sh 'bin/jekyll', - 'build', - "--baseurl=/#{ENV['BUILD_NUMBER']}", - '--config=_config.yml,_config.stage.yml', - '--verbose', - '--trace', - '--profile' + 'build', + "--baseurl=/#{ENV['BUILD_NUMBER']}", + '--config=_config.yml,_config.stage.yml', + '--verbose', + '--trace', + '--profile' end end diff --git a/rakelib/check.rake b/rakelib/check.rake index 293d1397e21..c84bf3d23b0 100644 --- a/rakelib/check.rake +++ b/rakelib/check.rake @@ -4,7 +4,6 @@ # frozen_string_literal: true namespace :check do - desc 'Optimize images in modified files, or by path (rake check:img path=path/to/dir/or/file).' task :image_optim do puts @@ -16,7 +15,7 @@ namespace :check do modified_files = `git ls-files --modified --others --exclude-standard`.split("\n") deleted_files = `git ls-files --deleted`.split("\n") image_files_to_check = (modified_files - deleted_files).select { |file| File.extname(file) =~ /\.(png|jpg|jpeg|gif)/i } - + next puts 'No images to check.'.magenta if image_files_to_check.empty? path = image_files_to_check.join(' ') @@ -40,7 +39,7 @@ namespace :check do modified_files = `git ls-files --modified --others --exclude-standard`.split("\n") deleted_files = `git ls-files --deleted`.split("\n") md_files_to_check = (modified_files - deleted_files).select { |file| File.extname(file) == '.md' } - + next puts 'No Markdown files to check.'.magenta if md_files_to_check.empty? path = md_files_to_check.join(' ') diff --git a/rakelib/multirepo.rake b/rakelib/multirepo.rake index 1b47eb0eee1..02d096e4955 100644 --- a/rakelib/multirepo.rake +++ b/rakelib/multirepo.rake @@ -9,7 +9,7 @@ namespace :multirepo do protocol = ENV['token'] ? "https://#{ENV['token']}@github.com/" : 'git@github.com:' @content_map.each do |subrepo| repo_url = protocol + subrepo['repository'] + '.git' - add_subrepo(subrepo['directory'], repo_url , subrepo['branch'], subrepo['filter']) + add_subrepo(subrepo['directory'], repo_url, subrepo['branch'], subrepo['filter']) end end @@ -33,7 +33,9 @@ namespace :multirepo do abort 'Provide a directory name for the multirepo docs. Example: dir=src/mftf' unless dir abort "'#{dir}' directory already exists" if Dir.exist? dir - abort 'Provide a repository cloning URL (SSH).Example: repo=git@github.com:magento-devdocs/magento2-functional-testing-framework.git' unless repo + unless repo + abort 'Provide a repository cloning URL (SSH).Example: repo=git@github.com:magento-devdocs/magento2-functional-testing-framework.git' + end abort 'Provide a branch name for the multirepo docs. Example: branch=master' unless branch add_subrepo(dir, repo, branch, filter) @@ -43,9 +45,7 @@ end def add_subrepo(dir, repo, branch, filter) filter_text = filter ? 'some' : 'all' puts "Checking out #{filter_text} files from #{repo} (#{branch} branch) to the #{dir} directory ...".magenta - sh('./scripts/docs-from-code.sh', dir, repo, branch, filter.to_s) do |ok,res| - if !ok - abort "Couldn't checkout files for the #{repo} project".red - end + sh('./scripts/docs-from-code.sh', dir, repo, branch, filter.to_s) do |ok, _res| + abort "Couldn't checkout files for the #{repo} project".red unless ok end end diff --git a/rakelib/symlink.rake b/rakelib/symlink.rake index b224ece6102..1c28b7b2210 100644 --- a/rakelib/symlink.rake +++ b/rakelib/symlink.rake @@ -1,17 +1,24 @@ +# frozen_string_literal: true + namespace :symlink do - desc 'Create a 2.4 symlink from the corresponding 2.3 file. Example: rake symlink:create_from path=src/guides/v2.3/release-notes/packages-cloud.md' task :create_from do path = Pathname.new ENV['path'] - abort "Failed: Provide the path that starts with 'src/guides/v2.3'".red unless path.to_path.start_with? 'src/guides/v2.3' - abort "Failed: Couldn't find the file at the provided path: #{path}\nTip: Use auto-completion to enter the path.".red unless path.exist? + unless path.to_path.start_with? 'src/guides/v2.3' + abort "Failed: Provide the path that starts with 'src/guides/v2.3'".red + end + unless path.exist? + abort "Failed: Couldn't find the file at the provided path: #{path}\nTip: Use auto-completion to enter the path.".red + end new_path = path.sub('/v2.3/', '/v2.4/') puts "Creating the #{new_path} symlink from the #{path} file".magenta - abort "Failed: Couldn't create a symlink, because '#{new_path}' is already there.".red if new_path.exist? || new_path.symlink? + if new_path.exist? || new_path.symlink? + abort "Failed: Couldn't create a symlink, because '#{new_path}' is already there.".red + end new_path.dirname.mkpath relative_path = path.relative_path_from new_path.dirname @@ -24,19 +31,21 @@ namespace :symlink do task :replace_at do path = Pathname.new ENV['path'] - abort "Failed: Provide the path that starts with 'src/guides/v2.4'".red unless path.to_path.start_with? 'src/guides/v2.4' + unless path.to_path.start_with? 'src/guides/v2.4' + abort "Failed: Provide the path that starts with 'src/guides/v2.4'".red + end new_path = path.sub('/v2.4/', '/v2.3/') puts "Replacing the #{new_path} symlink with a copy of the #{path} file".magenta - abort "Failed: The file '#{path}' is not a symlink or missing".red unless path.exist? and path.symlink? + abort "Failed: The file '#{path}' is not a symlink or missing".red unless path.exist? && path.symlink? abort "Failed: Couldn't find the '#{new_path}' file to copy from".red unless path.exist? sh "git rm #{path}" sh "cp #{new_path} #{path}" - + puts "Finished: replaced symlink with file at '#{path}'".green end -end \ No newline at end of file +end diff --git a/rakelib/test.rake b/rakelib/test.rake index 10016ea8f22..dec7365a221 100644 --- a/rakelib/test.rake +++ b/rakelib/test.rake @@ -23,23 +23,21 @@ namespace :test do desc 'Check the existing _site for broken links and report to a separate file' task :links_no_build do - begin - # Write console output (stderr only) to a file. - # Use this if you need to also capture stdout: https://stackoverflow.com/a/2480439 - report = LinkChecker.md_report_path - $stderr.reopen(report, 'w+') + # Write console output (stderr only) to a file. + # Use this if you need to also capture stdout: https://stackoverflow.com/a/2480439 + report = LinkChecker.md_report_path + $stderr.reopen(report, 'w+') - Rake::Task['test:html'].invoke + Rake::Task['test:html'].invoke - # We're expecting link validation errors, but unless we rescue from - # StandardError, rake will abort and won't run the convert task (https://stackoverflow.com/a/10048406). - # Wrapping task in a begin-rescue block prevent rake from aborting. - # Seems to prevent printing an error count though. - rescue StandardError => e - # Show how many lines contains the Markdown report - puts e.to_s.red - puts "To see the report, open the #{report} file.".red - end + # We're expecting link validation errors, but unless we rescue from + # StandardError, rake will abort and won't run the convert task (https://stackoverflow.com/a/10048406). + # Wrapping task in a begin-rescue block prevent rake from aborting. + # Seems to prevent printing an error count though. + rescue StandardError => e + # Show how many lines contains the Markdown report + puts e.to_s.red + puts "To see the report, open the #{report} file.".red end desc 'Report about broken links in HTML' @@ -61,7 +59,7 @@ namespace :test do --git-recurse \ -- .` puts output.yellow - abort "Fix the reported issues".red unless output.empty? + abort 'Fix the reported issues'.red unless output.empty? puts 'No issues found'.green end end diff --git a/rakelib/update.rake b/rakelib/update.rake index 49cadbe57e4..10503bc8889 100644 --- a/rakelib/update.rake +++ b/rakelib/update.rake @@ -57,11 +57,14 @@ namespace :update do end def update_dir(dir) - abort "Cannot find the #{dir} directory. You can run 'rake init' to create it and rerun 'rake update:all' again.".red unless Dir.exist? dir + unless Dir.exist? dir + abort "Cannot find the #{dir} directory. You can run 'rake init' to create it and rerun 'rake update:all' again.".red + end Dir.chdir dir do puts "Updating #{dir}:".magenta - next warn "No branch to update" if `git status -sb`.include? 'no branch' + next warn 'No branch to update' if `git status -sb`.include? 'no branch' + sh 'git remote -v' sh 'git pull --no-recurse-submodules' sh 'git status -sb' diff --git a/src/_data/toc/cloud-guide.yml b/src/_data/toc/cloud-guide.yml index 9e45de91bc7..5301ccbc623 100644 --- a/src/_data/toc/cloud-guide.yml +++ b/src/_data/toc/cloud-guide.yml @@ -314,10 +314,13 @@ pages: url: /cloud/cdn/configure-fastly.html versionless: true children: + - label: Customize cache configuration + url: /cloud/cdn/configure-fastly-customize-cache.html + versionless: true - label: Customize error and maintenance pages url: /cloud/cdn/cloud-fastly-custom-response.html versionless: true - + - label: Web Application Firewall url: /cloud/cdn/fastly-waf-service.html versionless: true diff --git a/src/_data/toc/release.yml b/src/_data/toc/release.yml index 7d1764e432f..dfc560758d7 100644 --- a/src/_data/toc/release.yml +++ b/src/_data/toc/release.yml @@ -9,6 +9,10 @@ pages: url: /release/policy versionless: true + - label: Lifecycle policy + url: /release/lifecycle-policy.html + versionless: true + - label: Availability url: /release/availability.html versionless: true diff --git a/src/_data/whats-new.yml b/src/_data/whats-new.yml index 6c4ab94d399..d3e02567b49 100644 --- a/src/_data/whats-new.yml +++ b/src/_data/whats-new.yml @@ -4,10 +4,78 @@ description: We exclude from this list proofreading, spelling checks, and all minor updates. link: /whats-new.html thread: /whatsnew-feed.xml -updated: Mon Aug 31 15:26:14 2020 +updated: Mon Sep 14 12:24:21 2020 entries: -- description: Updated the Elasticsearch version compatibility and software version - compatibility matrices to show Elasticsearch 7.7.x as the supported and recommended +- description: Added the [Simple product data types](https://devdocs.magento.com/guides/v2.4/graphql/interfaces/simple-product.html) + topic to the _GraphQL Developer Guide_. + versions: 2.3.x, 2.4.x + type: New Topic + date: September 11, 2020 + link: https://github.com/magento/devdocs/pull/7805 + contributor: andrewbess + profile: https://github.com/andrewbess +- description: Added the [Virtual product data types](https://devdocs.magento.com/guides/v2.4/graphql/interfaces/virtual-product.html) + topic to the _GraphQL Developer Guide_. + versions: 2.3.x, 2.4.x + type: New Topic + date: September 11, 2020 + link: https://github.com/magento/devdocs/pull/7806 + contributor: andrewbess + profile: https://github.com/andrewbess +- description: Published [release notes](https://devdocs.magento.com/quality-patches/release-notes.html) + for the 1.0.4 Magento Quality Patch (MQP) package release. + versions: '' + type: Major Update + date: September 10, 2020 + link: https://github.com/magento/devdocs/pull/7850 + contributor: ilima-ebay + profile: https://github.com/ilima-ebay +- description: Updated release notes for Magento Commerce on Cloud September package + release:
- [Magento Cloud Components](https://devdocs.magento.com/cloud/release-notes/mcc-release-notes.html) + version 1.0.7
- [Magento Cloud Docker](https://devdocs.magento.com/cloud/release-notes/mcd-release-notes.html) + version 1.1.2 + versions: '' + type: Technical + date: September 9, 2020 + link: https://github.com/magento/devdocs/pull/7840 + contributor: meker12 + profile: https://github.com/meker12 +- description: Added a Pull request risk assessment section to the [Contributing](https://devdocs.magento.com/contributor-guide/contributing.html) + topic. + versions: '' + type: Major Update + date: September 9, 2020 + link: https://github.com/magento/devdocs/pull/7831 + contributor: gabrieldagama + profile: https://github.com/gabrieldagama +- description: Updated the examples in [Create an integration](https://devdocs.magento.com/guides/v2.4/get-started/create-integration.html) + to include the correct directory and to use proper casing in the examples. + versions: 2.3.x, 2.4.x + type: Major Update + date: September 3, 2020 + link: https://github.com/magento/devdocs/pull/7707 + contributor: chandru-199 + profile: https://github.com/chandru-199 +- description: Added a [workaround](https://devdocs.magento.com/guides/v2.4/performance-best-practices/configuration.html) + for a known performance issue when using MariaDB 10.4 on Magento 2.4. + versions: 2.4.x + type: Major Update + date: September 2, 2020 + link: https://github.com/magento/devdocs/pull/7808 + contributor: jeff-matthews + profile: https://github.com/jeff-matthews +- description: Replaced Adobe-generated alert policies information with the new _Managed + alerts for Magento Commerce_ alert policy. Updated screen captures and instructions + for reviewing alert policies and adding notification channels. See [Monitor performance + with alert policies](https://devdocs.magento.com/cloud/project/new-relic.html#new-relic-apm). + versions: 2.x + type: Technical + date: September 2, 2020 + link: https://github.com/magento/devdocs/pull/7789 + contributor: meker12 + profile: https://github.com/meker12 +- description: Updated the ElasticSearch version compatibility and software version + compatibility matrices to show ElasticSearch 7.7.x as the supported and recommended version for Magento Commerce on the Cloud platform. versions: 2.x type: Technical @@ -157,7 +225,7 @@ entries: contributor: jfrontain profile: https://github.com/jfrontain - description: Added documentation for aggregated logs and the New Relic Logs service - for Pro Production and Staging environments. See [New Relic services](https://devdocs.magento.comcloud/project/new-relic.html). + for Pro Production and Staging environments. See [New Relic services](https://devdocs.magento.com/cloud/project/new-relic.html). versions: 2.x type: Major Update date: July 28, 2020 diff --git a/src/_includes/backward-incompatible-changes/commerce/2.2.10-2.2.11.md b/src/_includes/backward-incompatible-changes/commerce/2.2.10-2.2.11.md index 8b137891791..e69de29bb2d 100644 --- a/src/_includes/backward-incompatible-changes/commerce/2.2.10-2.2.11.md +++ b/src/_includes/backward-incompatible-changes/commerce/2.2.10-2.2.11.md @@ -1 +0,0 @@ - diff --git a/src/_includes/backward-incompatible-changes/open-source/2.1.0-2.3.0.md b/src/_includes/backward-incompatible-changes/open-source/2.1.0-2.3.0.md index ced73c4bc9b..96c97b1b27a 100644 --- a/src/_includes/backward-incompatible-changes/open-source/2.1.0-2.3.0.md +++ b/src/_includes/backward-incompatible-changes/open-source/2.1.0-2.3.0.md @@ -3058,4 +3058,3 @@ | Magento\AdvancedSearch\Model\Client\ClientInterface | Interface was added. | | Magento\AdvancedSearch\Model\Client\ClientOptionsInterface | Interface was added. | | Magento\AdvancedSearch\Model\Adapter\DataMapper\AdditionalFieldsProviderInterface | Interface was added. | - diff --git a/src/_includes/backward-incompatible-changes/open-source/2.3.2-2.3.3.md b/src/_includes/backward-incompatible-changes/open-source/2.3.2-2.3.3.md index f32c5be5e01..df3412a99eb 100644 --- a/src/_includes/backward-incompatible-changes/open-source/2.3.2-2.3.3.md +++ b/src/_includes/backward-incompatible-changes/open-source/2.3.2-2.3.3.md @@ -50,4 +50,3 @@ | What changed | How it changed | | --- | --- | | Magento\Vault\Api\PaymentTokenManagementInterface::getListByCustomerId | [public] Method return typing changed. | - diff --git a/src/_includes/cloud/note-cloud-services-compatibility.md b/src/_includes/cloud/note-cloud-services-compatibility.md new file mode 100644 index 00000000000..7e8e2fc807e --- /dev/null +++ b/src/_includes/cloud/note-cloud-services-compatibility.md @@ -0,0 +1,2 @@ +{:.bs-callout-info} +Version support and compatibility for Magento Commerce on Cloud is determined by service versions deployed on the Cloud infrastructure. In some cases, the supported or recommended versions differ from the versions supported by Magento Commerce on-premises deployments. diff --git a/src/_includes/config/message-queue-consumers.md b/src/_includes/config/message-queue-consumers.md index 2b55140b3eb..a0d8891abfb 100644 --- a/src/_includes/config/message-queue-consumers.md +++ b/src/_includes/config/message-queue-consumers.md @@ -21,4 +21,3 @@ bin/magento queue:consumers:start & ``` See [queue:consumers:start]({{ page.baseurl }}/reference/cli/magento-commerce.html#queueconsumersstart) in the _Magento command-line reference_ for details about the command options, parameters, and values. - diff --git a/src/_includes/config/split-deploy/split-deploy-overview.md b/src/_includes/config/split-deploy/split-deploy-overview.md index ae050368bb6..db5458a9f5e 100644 --- a/src/_includes/config/split-deploy/split-deploy-overview.md +++ b/src/_includes/config/split-deploy/split-deploy-overview.md @@ -22,15 +22,5 @@ Staging system : _Optional_. You can optionally set up a staging system to use for final testing of all integrated code, including User Acceptance Testing (UAT). Set up a staging system the same way you set up a production system. Except for the fact that staging is not your live store and doesn't process orders from customers, it's identical to production. Production system -: Your live store. You should make minimal configuration changes here and no changes to: - - - websites - - stores - - store views - - products - - product view settings - - catalog - - categories - - category view settings. - - You should make all those types of changes in your development system. + +: Your live store. You should make minimal direct configuration changes here, and certainly nothing that has not been tested on a Staging instance. If possible, make configuration changes with [Data Patches]({{page.baseurl}}/extension-dev-guide/declarative-schema/data-patches.html) that have been tested on a Staging/Development instance. diff --git a/src/_includes/install/get-help.md b/src/_includes/install/get-help.md index 5cce8d88b94..f11d9ef5c86 100644 --- a/src/_includes/install/get-help.md +++ b/src/_includes/install/get-help.md @@ -7,4 +7,3 @@ In the event you need additional help, consult the following resources. |{{site.data.var.ce}} and {{site.data.var.ee}}|- [Magento support forums](http://community.magento.com/)
- [stack Exchange](http://magento.stackexchange.com)
- [Twitter](https://twitter.com/magento)| |{{site.data.var.ce}}|[Submit bug reports](http://www.magentocommerce.com/bug-tracking)| |{{site.data.var.ee}} only|[Submit bug reports](http://support.magentocommerce.com)| - diff --git a/src/_includes/install/php-extensions-template.md b/src/_includes/install/php-extensions-template.md index f40ac005df7..8236a5be1e1 100644 --- a/src/_includes/install/php-extensions-template.md +++ b/src/_includes/install/php-extensions-template.md @@ -2,6 +2,7 @@ {% for item in product.require %} {% if item[0] contains 'ext-' %} -* {{ item[0] }} + +* {{ item[0] }} {% endif %} {% endfor %} diff --git a/src/_includes/install/sampledata/sample-data-composer.md b/src/_includes/install/sampledata/sample-data-composer.md index 4d640d12ee4..4cbab0efa59 100644 --- a/src/_includes/install/sampledata/sample-data-composer.md +++ b/src/_includes/install/sampledata/sample-data-composer.md @@ -4,6 +4,7 @@ This section discusses how to install sample data if you got the Magento softwar * Downloaded a compressed archive from [Magento](https://magento.com/tech-resources/download). If you downloaded an archive from GitHub, this method won't work because the `composer.json` file doesn't contain the `repo.magento.com` URL. + * Used `composer create-project` You can use this method of getting sample data for both {{site.data.var.ce}} or {{site.data.var.ee}}, but you must use the same [authentication keys]({{ page.baseurl }}/install-gde/prereq/connect-auth.html) you used to install Magento. diff --git a/src/_includes/reference/cli-template.md b/src/_includes/reference/cli-template.md index 9556b22b420..f69d07262a0 100644 --- a/src/_includes/reference/cli-template.md +++ b/src/_includes/reference/cli-template.md @@ -57,6 +57,7 @@ This reference is generated from the Magento codebase. To change the content, yo {% unless item.default == nil %} {% if item.default == false or (item.default == empty and item.default != '') %} + - Default: `{{ item.default | inspect }}` {% else %} - Default: `{{ item.default }}` @@ -94,6 +95,7 @@ This reference is generated from the Magento codebase. To change the content, yo {% unless opt.default == nil %} {% if opt.default == false or opt.default == empty and opt.default != '' %} + - Default: `{{ opt.default | inspect }}` {% else %} - Default: `{{ opt.default }}` diff --git a/src/_includes/release-notes/engcomm-2-2-10-issues.md b/src/_includes/release-notes/engcomm-2-2-10-issues.md index 1f467d82901..85db0057720 100644 --- a/src/_includes/release-notes/engcomm-2-2-10-issues.md +++ b/src/_includes/release-notes/engcomm-2-2-10-issues.md @@ -56,4 +56,3 @@ | LouNik1984 | [16446](https://github.com/magento/magento2/issues/16446) | [22510](https://github.com/magento/magento2/pull/22510) | | ffauvel | [23643](https://github.com/magento/magento2/issues/23643) | [23650](https://github.com/magento/magento2/pull/23650) | | hostep | [11615](https://github.com/magento/magento2/issues/11615) | [14344](https://github.com/magento/magento2/pull/14344) | - diff --git a/src/_includes/release-notes/engcomm-2-3-0-partner.md b/src/_includes/release-notes/engcomm-2-3-0-partner.md index 14d77bec715..155e833d3cb 100644 --- a/src/_includes/release-notes/engcomm-2-3-0-partner.md +++ b/src/_includes/release-notes/engcomm-2-3-0-partner.md @@ -48,4 +48,3 @@ | Perficient | [15607](https://github.com/magento/magento2/pull/15607) | [15469](https://github.com/magento/magento2/issues/15469) | | CoolBlueWeb | [10627](https://github.com/magento/magento2/pull/10627) | [9533](https://github.com/magento/magento2/issues/9533) | | Limesharp | [94](https://github.com/magento/graphql-ce/pull/94) | [80](https://github.com/magento/graphql-ce/issues/80) | - diff --git a/src/cloud/cdn/cloud-fastly.md b/src/cloud/cdn/cloud-fastly.md index eba40120f4b..d4a1a9b1777 100644 --- a/src/cloud/cdn/cloud-fastly.md +++ b/src/cloud/cdn/cloud-fastly.md @@ -7,63 +7,74 @@ functional_areas: - Security --- +{:.bs-callout-warning} +To maintain PCI compliance for Magento sites deployed on the Cloud platform, you must [set up Fastly] on your Starter master, Pro Production, and Pro Staging environments. If you are using {{ site.data.var.ee }} in a headless deployment, we highly recommend that you use Fastly to cache GraphQL responses. See [Caching with Fastly] in the *GraphQL Developer Guide*. + Fastly provides the following services to optimize and secure content delivery operations for your {{ site.data.var.ece }} projects. These services are included with your {{ site.data.var.ece }} subscription at no additional cost. - **Content delivery network (CDN)**—Varnish-based service that caches your site pages, assets, CSS, and more in backend data centers you set up. As customers access your site and stores, the requests hit Fastly to load cached pages faster. The CDN service provides the following features: - - Cache your site pages, assets, CSS, and more in backend data centers that you set up to reduce bandwith load and costs + - Cache your site pages, assets, CSS, and more in back-end data centers that you set up to reduce bandwidth load and costs - - Use [Fastly custom VCL snippets]({{ site.baseurl}}/cloud/cdn/cloud-vcl-custom-snippets.html) (Varnish 2.1 compliant) to modify how caching responds to requests + - Use [Fastly custom VCL snippets] (Varnish 2.1 compliant) to modify how caching responds to requests - - Configure [purge options]({{ site.baseurl }}/cloud/cdn/configure-fastly.html#purge) to clear generated content + - Configure [purge options] to clear generated content - - Set up [GeoIP service support]({{ site.baseurl }}/cloud/cdn/configure-fastly.html#geoip) + - Set up [GeoIP service support] - - [Force unencrypted requests over to TLS](#tls) + - [Force unencrypted requests over to TLS] - - [Customize Fastly timeout](#timeouts) settings to prevent 503 responses on bulk operation requests + - [Customize Fastly timeout] settings to prevent 503 responses on bulk operation requests - - Create [custom error response pages]({{ site.baseurl }}/cloud/cdn/cloud-fastly-custom-response.html) + - Create [custom error response pages] - **Security**—After you set up your {{ site.data.var.ece }} project to use the Fastly CDN, additional security features are available to protect your sites and network. - [**DDoS protection**](#ddos-protection)—Built-in protection against common attacks like Ping of Death, Smurf attacks, as well as other ICMP-based floods. - - **[Web Application Firewall]({{ site.baseurl }}/cloud/cdn/fastly-waf-service.html)**—Managed web application firewall service that provides PCI-compliant protection to block malicious traffic before it can damage your production {{ site.data.var.ece }} sites and network. The WAF service is available on Pro and Starter Production environments only. -- **Image optimization**—Offloads image processing and resizing load to the Fastly service freeing servers to process orders and conversions efficiently. See [Fastly image optimization]({{ site.baseurl }}/cloud/cdn/fastly-image-optimization.html). -- **Fastly CDN and WAF logs**–For {{ site.data.var.ece }} Pro projects, you can use the New Relic Logs service to review and analyze Fastly CDN and WAF log data. See [New Relic]({{site.baseurl}}/cloud/project/new-relic.html). + - **[Web Application Firewall]**—Managed web application firewall service that provides PCI-compliant protection to block malicious traffic before it can damage your production {{ site.data.var.ece }} sites and network. The WAF service is available on Pro and Starter Production environments only. -{:.bs-callout-warning} -To maintain PCI compliance for Magento sites deployed on the Cloud platform, you must set up Fastly on your Starter master, Pro Production, and Pro Staging environments. If you are using {{site.data.var.ee}} in a headless deployment, we highly recommend that you use Fastly to cache GraphQL responses. See [Caching with Fastly]({{site.baseurl}}/guides/v2.3/graphql/caching.html#caching-with-fastly) in the *GraphQL Developer Guide*. + - **SSL/TLS certificates**–The Fastly service requires an SSL/TLS certificate to serve secure traffic over HTTPS. Magento provides a Domain-validated Let's Encrypt SSL/TLS certificate for each Staging and Production environment. Magento completes domain validation and certificate provisioning during the Fastly set up process. See [TLS and Fastly]. + + - **Origin cloaking**–Magento can enable Origin Cloaking for all Magento Commerce projects hosted on the Cloud platform. This option hides the IP addresses of your origin servers to protect them from direct attack. When this feature is enabled, all traffic to your Cloud infrastructure must route through the Fastly CDN or another secure channel. Any traffic sent directly to the Origin servers is blocked. If you have traffic that does not require caching, you can customize the Fastly service configuration to allow requests to [bypass the Fastly cache]. + +- **Image optimization**—Offloads image processing and resizing load to the Fastly service freeing servers to process orders and conversions efficiently. See [Fastly image optimization]. + +- **Fastly CDN and WAF logs**–For {{ site.data.var.ece }} Pro projects, you can use the New Relic Logs service to review and analyze Fastly CDN and WAF log data. See [New Relic]. ## Fastly CDN module for Magento 2 -Fastly services for {{ site.data.var.ece }} use the [Fastly CDN module for Magento 2](https://github.com/fastly/fastly-magento2) installed in the following environments: Pro Staging and Production, Starter Production (`master` branch). +Fastly services for {{ site.data.var.ece }} use the [Fastly CDN module for Magento 2] installed in the following environments: Pro Staging and Production, Starter Production (`master` branch). -On initial provisioning or upgrade of your {{ site. data.var.ece }} project, we install the latest version of the Fastly CDN module in your Staging and Production environments. When Fastly releases module updates, you receive notifications in the Magento Admin UI for your environments. We recommend that you update your environments to use the latest release. See [Upgrade Fastly]({{ site.baseurl}}/cloud/cdn/configure-fastly.html#upgrade). +On initial provisioning or upgrade of your {{ site. data.var.ece }} project, we install the latest version of the Fastly CDN module in your Staging and Production environments. When Fastly releases module updates, you receive notifications in the Magento Admin UI for your environments. We recommend that you update your environments to use the latest release. See [Upgrade Fastly]. ## Fastly service account and credentials {{ site.data.var.ece }} projects do not require a dedicated Fastly account or account owner. Instead, each Staging and Production environment has unique Fastly credentials (API token and service ID) to configure and manage Fastly services from the Magento Admin UI. You also need the credentials to submit Fastly API requests. -During project provisioning, Magento adds your project to the Fastly service account for {{ site.data.var.ece }} and adds the Fastly credentials to the configuration for the Staging and Production environments. See [Get Fastly credentials]({{ site.baseurl }}/cloud/cdn/configure-fastly.html#cloud-fastly-creds). +During project provisioning, Magento adds your project to the Fastly service account for {{ site.data.var.ece }} and adds the Fastly credentials to the configuration for the Staging and Production environments. See [Get Fastly credentials]. -### Change your Fastly API token +### Change Fastly API token -If you need to change the Fastly API token credential, you must submit a Magento support ticket to request a new token, and then update your Staging or Production environment with the new value. +If you need to change the Fastly API token credential, you must submit a [Magento support ticket] to request a new token, and then update your Staging or Production environment with the new value. {:.procedure} To change the Fastly API token credential: -1. [Submit a support ticket](https://support.magento.com/hc/en-us/articles/360019088251-Submit-a-support-ticket) requesting the new token. Include your {{ site.data.var.ece }} project ID and the environments that require a new credential. -1. After you receive the new API token, update the API token value from the [Magento Admin UI]({{ site.baseurl}}/cloud/cdn/configure-fastly.html#test-the-fastly-credentials), or from the [Project Web UI environment configuration variables]({{ site.baseurl}}/cloud/project/projects.html#environment-configuration-variables) section. -1. [Test the new credential]({{ site.baseurl}}/cloud/cdn/configure-fastly.html#test-the-fastly-credentials). +1. Submit a [Magento support ticket] requesting the new token. + + Include your {{ site.data.var.ece }} project ID and the environments that require a new credential. + +1. After you receive the new API token, update the API token value in the [Fastly credentials configuration] in the Magento Admin UI or from the [Project Web UI environment configuration variables]. + +1. [Test the new credential]. + 1. After you have updated the credentials, submit a support ticket to delete the old API token. ### Multiple Fastly accounts and assigned domains {#domain} Fastly only allows you to assign an apex domain and associated subdomains to one Fastly service and account. If you have an existing Fastly account that links the same apex and subdomains used for your {{ site.data.var.ece }}, you have the following options: -- Remove the apex and subdomains from the existing account before requesting Fastly service credentials for your {{ site.data.var.ece}} project environments. See [Working with Domains](https://docs.fastly.com/guides/basic-configuration/working-with-domains) in the Fastly documentation. +- Remove the apex and subdomains from the existing account before requesting Fastly service credentials for your {{ site.data.var.ece}} project environments. See [Working with Domains] in the Fastly documentation. Use this option to link the apex domain and all subdomains to the Fastly service account for {{ site.data.var.ece }}. @@ -77,15 +88,15 @@ Fastly only allows you to assign an apex domain and associated subdomains to one The apex domain (`testweb.com` and `www.testweb.com`) is linked to an existing Fastly account. You have a {{ site.data.var.ece }} project configured with the following subdomains: `mcstaging.testweb.com` and `mcprod.testweb.com`. You do not want to move the apex domain to the Fastly service account for {{ site.data.var.ece }} Magento. -Submit a [Fastly support ticket](https://docs.fastly.com/guides/detailed-product-descriptions/support-description-and-sla#support-requests) requesting that the subdomains be delegated from the existing Fastly account to the Fastly account for {{ site.data.var.ece }}. Include your Magento project ID in the ticket. +Submit a [Fastly support ticket] requesting that the subdomains be delegated from the existing Fastly account to the Fastly account for {{ site.data.var.ece }}. Include your Magento project ID in the ticket. -After the delegation is complete, your project subdomains can be added to the Fastly service account for {{ site.data.var.ece }}. See [Get Fastly credentials]({{ site.baseurl }}/cloud/cdn/configure-fastly.html#cloud-fastly-creds). +After the delegation is complete, your project subdomains can be added to the Fastly service account for {{ site.data.var.ece }}. See [Get Fastly credentials]. *Scenario 2:* The apex domain (`testweb.com` and `www.testweb.com`) is linked to the {{ site.data.var.ece }} Fastly service account. You want to manage Fastly services for the `service.testweb.com` and `product-updates.testweb.com` subdomains from a different Fastly account. -Submit a [Magento support ticket](https://support.magento.com/hc/en-us/articles/360000913794#submit-ticket) requesting that the subdomains be delegated from the {{ site.data.var.ece }} Fastly service account to the Fastly account. Include the service ID for the Fastly account in the ticket. +Submit a [Magento support ticket] requesting that the subdomains be delegated from the {{ site.data.var.ece }} Fastly service account to the Fastly account. Include the service ID for the Fastly account in the ticket. ## DDoS protection @@ -93,68 +104,31 @@ DDOS protection is built-in to the Fastly CDN service. After you enable and conf - For attacks targeting layer 3 or 4, the Fastly service filters out traffic based on port and protocol, inspecting only HTTP or HTTPS requests. ICMP, UDP, and other network born attacks are dropped at our network edge. This includes reflection and amplification attacks, which use UDP services like SSDP or NTP. By providing this level of protection, we effectively block multiple common attacks like Ping of Death, Smurf attacks, as well as other ICMP-based floods. Fastly manages the TCP level attacks at the cache layer, addressing the necessary scale and context per client to deal with SYN flood and its many variants, including TCP stack, resource attacks, and TLS attacks within the Fastly systems. -- Fastly also provides protection against Layer 7 attacks. If your Magento store is experiencing performance issues and you suspect a Layer 7 DDoS attack, submit a Magento support ticket. Magento can create and apply custom rules to the Fastly service to inspect for and filter out malicious requests based on header, payload, or a combination of attributes that identify the attack traffic. See [Checking for DDoS attacks](https://support.magento.com/hc/en-us/articles/360030941932) in the *Magento Help Center*. - -## Fastly and 503 timeouts {#timeouts} - -Fastly has a default 60 second time out. For Fastly module 1.2.22 and later, -the timeout for the Magento Admin is three minutes. - -Any request processing that exceeds the timeout period, returns a 503 error. -As a result, you might get 503 errors when attempting operations that require -lengthy processing, or when trying to perform bulk operations. - -If you receive a 503 error, try to submit the request directly to the origin -shield URL and review logs to identify the source of the issue. For details, -see [Fastly troubleshooting]({{ site.baseurl }}/cloud/cdn/trouble-fastly.html#errors). - -Fastly can be bypassed for the Magento Admin to perform long running or bulk actions and API access to avoid 503s. For Fastly module 1.2.22 and later, the timeout for the Magento Admin was extended to three minutes. You can also update the Fastly configuration for your store to [extend the Fastly timeout for the Magento Admin]({{ site.baseurl }}/cloud/cdn/configure-fastly.html#bulkaction). - -## Backends and Origin shields {#backend} - -Backend settings provide fine tuning for Fastly performance with Origin shielding -and timeouts. A _backend_ is a specific location (IP or domain) with configured -Origin shield and timeout settings for checking and providing cached content. - -_Origin shielding_ routes all requests for your store to a specific Point of -Presence (POP). When a request is received, the POP checks for cached content -and provides it. If it is not cached, it continues to the Shield POP, then to -the Origin server which caches the content. The shields reduces traffic directly -to the origin. - -We provide detailed instructions for configuring backends when you -[configure Fastly]({{ site.baseurl }}/cloud/cdn/configure-fastly.html). - -## Basic authentication {#basic-auth} - -Basic authentication is a feature to protect every page and asset on your site -with a username and password. We **do not recommend** activating basic -authentication on your Production environment. You can configure it on Staging -to protect your site when completing development. - -If you add user access and enable basic authentication on Staging, you can still -access the Magento Admin without requiring additional credentials to enter. - -## Custom VCLs and actions {#custom-vcl} - -Fastly provides an extremely custom code friendly method for creating lists of -items like IPs and domains to complete actions via Fastly and Varnish code -blocks. For example, you can allow, block, or redirect access for specific users or IPs -using edge and ACL dictionaries and VCL code. - -After you have [set up Fastly]({{ site.baseurl }}/cloud/cdn/configure-fastly.html), -you can create [custom VCL snippets]({{ site.baseurl }}/cloud/cdn/cloud-vcl-custom-snippets.html) -using these edge dictionaries and ACLs. - -## Force TLS {#tls} - -Fastly supports forcing unencrypted requests to TLS through the Force TLS -feature. Set up a secure base URL in Magento and turn on the Force TLS option -in the Fastly CDN module. For details and instructions, see the Fastly [Force TLS guide](https://github.com/fastly/fastly-magento2/blob/master/Documentation/Guides/FORCE-TLS.md). - -## GeoIP service support {#geoip} - -Fastly provides a GeoIP service and supports some GeoIP functionality. GeoIP -handling manages visitor redirection (automatically) and store matching -(select from list) based on their obtained country code. For more information, -see the Fastly [GeoIP documentation](https://github.com/fastly/fastly-magento2/blob/21b61c8189971275589219d418332798efc7db41/Documentation/CONFIGURATION.md#geoip-handling). +- Fastly also provides protection against Layer 7 attacks. If your Magento store is experiencing performance issues and you suspect a Layer 7 DDoS attack, submit a [Magento support ticket]. Magento can create and apply custom rules to the Fastly service to inspect for and filter out malicious requests based on header, payload, or a combination of attributes that identify the attack traffic. See [Checking for DDoS attacks][] and [How to block malicious traffic] in the *Magento Help Center*. + + +[bypass the Fastly cache]: {{site.baseurl}}/cloud/cdn/fastly-vcl-bypass-to-origin.html +[Caching with Fastly]: {{site.baseurl}}/guides/v2.4/graphql/caching.html#caching-with-fastly +[Checking for DDoS attacks]: https://support.magento.com/hc/en-us/articles/360030941932 +[custom error response pages]: {{site.baseurl}}/cloud/cdn/cloud-fastly-custom-response.html +[Customize Fastly timeout]: {{site.baseurl}}/cloud/cdn/configure-fastly-customize-cache.html#extend-fastly-timeout +[Fastly CDN module for Magento 2]: https://github.com/fastly/fastly-magento2 +[Fastly credentials configuration]: {{site.baseurl}}/cloud/cdn/configure-fastly.html#test-the-fastly-credentials +[Fastly custom VCL snippets]: {{site.baseurl}}/cloud/cdn/cloud-vcl-custom-snippets.html +[Fastly image]: {{site.baseurl}}/cloud/cdn/fastly-image-optimization.html +[Fastly support ticket]: https://docs.fastly.com/products/support-description-and-sla#support-requests +[Force unencrypted requests over to TLS]: {{site.baseurl}}/cloud/cdn/configure-fastly-customize-cache.html#force-tls +[GeoIP service support]: {{site.baseurl}}/cloud/cdn/configure-fastly-customize-cache.html#configure-geoip-handling +[Get Fastly credentials]: {{site.baseurl}}/cloud/cdn/configure-fastly.html#cloud-fastly-creds +[How to block malicious traffic]: https://support.magento.com/hc/en-us/articles/360039447892-How-to-block-malicious-traffic-for-Magento-Commerce-Cloud-on-Fastly-level +[Magento support ticket]: https://support.magento.com/hc/en-us/articles/360019088251 +[New Relic]: {{site.baseurl}}/cloud/project/new-relic.html +[Project Web UI environment configuration variables]: {{site.baseurl}}/cloud/project/projects.html#environment-configuration-variables +[purge options]: {{site.baseurl}}/cloud/cdn/configure-fastly-customize-cache.html#configure-purge-options +[set up Fastly]: {{site.baseurl}}/cloud/cdn/configure-fastly.html +[Test the new credential]: {{site.baseurl}}/cloud/cdn/configure-fastly.html#test-the-fastly-credentials +[TLS and Fastly]: {{site.baseurl}}/cloud/cdn/configure-fastly.html#provision-ssltls-certificates +[Upgrade Fastly]: {{site.baseurl}}/cloud/cdn/configure-fastly.html#upgrade +[Web Application Firewall]: {{site.baseurl}}/cloud/cdn/fastly-waf-service.html +[Working with Domains]: https://docs.fastly.com/en/guides/working-with-domains +[test the Fastly credentials]: {{site.baseurl}}/cloud/cdn/configure-fastly.html#test-the-fastly-credentials diff --git a/src/cloud/cdn/cloud-vcl-custom-snippets.md b/src/cloud/cdn/cloud-vcl-custom-snippets.md index d234fffa231..975f99ea4fc 100644 --- a/src/cloud/cdn/cloud-vcl-custom-snippets.md +++ b/src/cloud/cdn/cloud-vcl-custom-snippets.md @@ -8,10 +8,15 @@ functional_areas: - Setup --- +Fastly supports a customized version of the Varnish Configuration Language (VCL) to customize the Fastly service configuration. For example, you can allow, block, or redirect access for specific users or IPs using VCL code blocks in combination with edge and ACL dictionaries. + Custom VCL snippets are blocks of VCL logic added to the active VCL version. A custom VCL snippet modifies how Fastly caching services respond to request traffic. For example, you can add a custom VCL snippet to allow request traffic only from specified client IP addresses, or to block traffic from websites known for sending referral spam to your {{ site.data.var.ece }} sites. Custom VCL snippets—generated, compiled, and transmitted to all Fastly caches—load and activate without server downtime. +{:.bs-callout-info} +Before adding custom VCL code, edge dictionaries, and ACLs to your Fastly module configuration, verify that the Fastly caching service works with the default configuration. See [Set up Fastly]({{ site.baseurl }}/cloud/cdn/configure-fastly.html). + Fastly supports two types of custom VCL snippets: - [Regular snippets](https://docs.fastly.com/en/guides/about-vcl-snippets)—Custom regular VCL snippets are dependent on a specific VCL version. You can create, modify, and deploy regular VCL snippets from the Magento Admin UI or the Fastly API. diff --git a/src/cloud/cdn/configure-fastly-customize-cache.md b/src/cloud/cdn/configure-fastly-customize-cache.md new file mode 100644 index 00000000000..46fb253b65e --- /dev/null +++ b/src/cloud/cdn/configure-fastly-customize-cache.md @@ -0,0 +1,228 @@ +--- +group: cloud-guide +title: Customize cache configuration +functional_areas: + - Cloud + - Setup + - Configuration +--- + +After you enable and verify the Fastly service in your Staging and Production environments, you can review and customize cache configuration settings like enabling force TLS to redirect HTTP requests to Fastly, updating purge settings, enabling basic authentication to password-protect your site during development, and setting up GeoIP support. + +The following sections provide an overview and instructions for configuring some cache settings. You can find additional information about the available configuration options in the [Fastly CDN Module for Magento 2](https://github.com/fastly/fastly-magento2/tree/master/Documentation) documentation. + +## Force TLS + +Fastly provides the _Force TLS_ option to redirect unencrypted requests (HTTP) to Fastly. After your Staging or Production environment has been provisioned with a [valid SSL/TLS certificate]({{ site.baseurl }}/cloud/cdn/configure-fastly.html#provision-ssltls-certificates), you can update the Fastly configuration for your store to enable the Force TLS option. See the Fastly [Force TLS guide](https://github.com/fastly/fastly-magento2/blob/master/Documentation/Guides/FORCE-TLS.md) in the Fastly CDN Module for Magento 2 documentation. + +{:.bs-callout-info} +Enabling the Force TLS option is a recommended best practice for Magento Commerce stores. + +## Extend Fastly timeout + +The Fastly service configuration specifies a default timeout period of 180 seconds for HTTPS requests to the Magento Admin. Any request processing that exceeds the timeout period returns a 503 error. +As a result, you could receive 503 errors when attempting operations that require lengthy processing, or when trying to perform bulk operations. + +If you need to complete bulk actions that take longer than 3 minutes, you can prevent 503 errors by changing the _Admin path timeout_ value. + +{:.procedure} +To extend the Fastly timeout for the Magento Admin: + +{% include cloud/admin-ui-login-step.md %} + +1. Click **Stores** > Settings > **Configuration** > **Advanced** > **System** and expand **Full Page Cache**. + +1. In the *Fastly Configuration* section, expand **Advanced**. + +1. Set the **Admin path timeout** value in seconds. This value cannot be more than 10 minutes (600 seconds). + +1. Click **Save Config** at the top of the page. + +1. After the page reloads, click **Upload VCL to Fastly** in the *Fastly Configuration* section. + +Fastly retrieves the Magento Admin path for generating the VCL file from the `app/etc/env.php` configuration file. + +## Configure purge options + +Fastly provides multiple types of purge options on your Magento Cache Management page, including purging product category, product assets, and content. When enabled, Fastly watches for events to automatically purge those caches. If you disable a purge option, you can manually purge Fastly caches after finishing updates through the Cache Management page. + +The options include: + +- **Purge category**–Purges product category content (not product content) when you add and update a single product. You may want to keep this disabled and enable purge product, which purges products and product categories. +- **Purge product**–Purges all product and product category content when saving a single modification to a product. Enabling purge product can be helpful to immediately get updates to customers when changing a price, adding a product option, and when product inventory is out-of-stock. +- **Purge CMS page**–Purges page content when updating and adding pages to the Magento CMS. For example, you may want to purge when updating your Terms and Conditions or Return policy. If you rarely make these changes, you could disable automatic purging. +- **Soft purge**–Sets changed content to stale and purges according to the stale timing. In combination with the stale timings your customers will be served stale content very fast while Fastly is updating the content in the background. + +![Configure purge options]({{ site.baseurl }}/common/images/cloud/cloud_fastly-purgeoptions.png){:width="650px"} + +{:.procedure} +To configure Fastly purge options: + +1. In the *Fastly Configuration* section, expand **Advanced** to display the purge options. + +1. For each purge option, select **Yes** to enable automatic purging, or **No** to disable automatic purging. + + When you disable a purge option, you must manually purge the cache for that category from the _Cache Management_ page. + +1. Click **Save Config** at the top of the page. + +1. After the page reloads, click **Upload VCL to Fastly** in the *Fastly Configuration* section. + +For more information, see [the Fastly configuration options](https://github.com/fastly/fastly-magento2/blob/21b61c8189971275589219d418332798efc7db41/Documentation/CONFIGURATION.md#further-configuration-options). + +## Configure GeoIP handling + +The Fastly module includes GeoIP handling to automatically redirect visitors or provide a list of stores matching their obtained country code. If you already use a Magento extension for GeoIP handling, you may need to verify the features with Fastly options. + +{:.procedure} +To set up GeoIp handling: + +{% include cloud/admin-ui-login-step.md %} + +1. Click **Stores** > Settings > **Configuration** > **Advanced** > **System** and expand **Full Page Cache**. + +1. In the *Fastly Configuration* section, expand **Advanced**. + +1. Scroll down and select **Yes** to **Enable GeoIP**. Additional configuration options display. + +1. For GeoIP Action, select if the visitor is automatically redirected with **Redirect** or provided a list of stores to select from with **Dialog**. + +1. For **Country Mapping**, click **Add** to enter a two-letter country code to map with a specific Magento store from a list. For a list of country codes, see [this site](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2). + + ![Add GeoIP country maps]({{ site.baseurl }}/common/images/cloud/cloud_fastly-geo-code.png) + +1. Click **Save Config** at the top of the page. + +1. After page reload, click **Upload VCL to Fastly** in the *Fastly Configuration* section. + +Fastly also provides a series of [geolocation-related VCL features](https://docs.fastly.com/guides/vcl/geolocation-related-vcl-features) for customized geolocation coding. + +## Enable Fastly Edge modules + +Fastly Edge Modules is a flexible framework that allows definition of UI components and associated VCL code through a template. These modules make it easy to customize and extend the Fastly service configuration through the user interface instead of using custom VCL snippets. + +Edge modules allow you to enable specific functionality like CORS headers, Magento Cloud Sitemap rewrites, and to configure integration between your Magento store and other CMSs or back ends. + +You must turn on the _Enable Fastly Edge modules_ option to access the Edge Modules menu to view, configure, and manage the available Edge modules. See [Fastly Edge Modules](https://github.com/fastly/fastly-magento2/blob/master/Documentation/Guides/Edge-Modules/EDGE-MODULES.md) in the Fastly CDN module documentation. + +## Configure back ends and Origin shielding + +Back-end settings provide fine tuning for Fastly performance with Origin shielding and timeouts. A _back end_ is a specific location (IP or domain) with configured Origin shield and timeout settings for checking and providing cached content. + +_Origin shielding_ routes all requests for your store to a specific Point of Presence (POP). When a request is received, the POP checks for cached content and provides it. If it is not cached, it continues to the Shield POP, then to the Origin server which caches the content. The shields reduce traffic directly to the origin. + +The default Fastly VCL code specifies default values for Origin shielding and timeouts for your {{ site.data.var.ece }} sites. We recommend using the default values. In some case, you might need to modify the default values. For example, if you are getting a lot of time to first byte (TTFB) errors, you might need to adjust the _first byte timeout_ value. + + {:.bs-callout-info} +If you need to integrate additional back ends into your site, such as a back end to serve blog content from a [Wordpress]({{ site.baseurl }}/cloud/cdn/fastly-vcl-wordpress.html) site, you must customize your Fastly service configuration to add the back end and handle the redirects from your {{ site.data.var.ee }} store to the Wordpress back end. For details, see [Fastly Edge Modules - Other CMS/Backend integration](https://github.com/fastly/fastly-magento2/blob/master/Documentation/Guides/Edge-Modules/EDGE-MODULE-OTHER-CMS-INTEGRATION.md) in the Fastly module documentation. + +{:.procedure} +To review the back end setting configuration: + +{% include cloud/admin-ui-login-step.md %} + +1. Click **Stores** > Settings > **Configuration** > **Advanced** > **System** and expand **Full Page Cache**. + +1. Expand the **Fastly Configuration** section. + +1. Expand **Backend settings** and click the gear to check the default back end. A modal opens that shows current settings with options to change them. + + ![Modify the back end]({{ site.baseurl }}/common/images/cloud/cloud_fastly-backend.png){:width="600px"} + +1. Select the **Shield** location (or datacenter) closest to your Cloud service region. + + For example, if your project is hosted on AWS, then the Staging is on the west coast of the United States (`us-west-1`); therefore, you would select the `sjc-ca-us` Fastly shield location. This is the POP that provides caching services. + + The following list shows which Fastly shield locations to use based on AWS regions: + + - ap-east-1 => hongkong-hk + - ap-northeast-1 => tyo-tokyo-jp, hnd-tokyo-jp + - ap-northeast-2 => tyo-tokyo-jp, hnd-tokyo-jp + - ap-southeast-1 => singapore-sg + - ap-southeast-2 => sydney-au + - ap-south-1 => singapore-sg + - ca-central-1 => yul-montreal-ca, iad-va-us, dca-dc-us, bwi-va-us + - eu-central-1 => frankfurt-de, hhn-frankfurt-de + - eu-north-1 => stockholm-bma + - eu-west-1 => london-uk, london_city-uk + - eu-west-2 => london-uk, london_city-uk + - eu-west-3 => cdg-par-fr + - sa-east-1 => gru-br-sa + - us-east-1 => iad-va-us, dca-dc-us, bwi-va-us + - us-east-2 => iad-va-us, dca-dc-us, bwi-va-us + - us-west-1 => sjc-ca-us, pao-ca-us + - us-west-2 => sea-wa-us + +1. Modify the timeout values (in microseconds) for the connection to the shield, time between bytes, and time for the first byte. We recommend keeping the default timeout settings. + +1. Optionally, select to **Activate the backend and Shield after editing or saving**. + +1. Click **Upload** to save your changes and upload them to the Fastly servers. + +1. In the Magento Admin, click **Save Config**. + +For more information, see the [Backend settings guide](https://github.com/fastly/fastly-magento2/blob/21b61c8189971275589219d418332798efc7db41/Documentation/Guides/BACKEND-SETTINGS.md) in the Fastly module documentation. + +## Basic authentication {#basic-auth} + +Basic authentication is a feature to protect every page and asset on your site +with a username and password. We **do not recommend** activating basic +authentication on your Production environment. You can configure it on Staging +to protect your site during the development process. See the [Basic Authentication Guide](https://github.com/fastly/fastly-magento2/blob/master/Documentation/Guides/BASIC-AUTH.md) in the Fastly CDN module documentation. + +If you add user access and enable basic authentication on Staging, you can still +access the Magento Admin without requiring additional credentials. + +## Create custom VCL snippets + +Fastly supports a customized version of the Varnish Configuration Language (VCL) to customize the Fastly service configuration. For example, you can allow, block, or redirect access for specific users or IPs using VCL code blocks in combination with edge and ACL dictionaries. + +For instructions to create custom VCL snippets, edge dictionaries, and ACLs, see [Custom Fastly VCL snippets]({{ site.baseurl }}/cloud/cdn/cloud-vcl-custom-snippets.html). + +{:.bs-callout-info} +Before adding custom VCL code, edge dictionaries, and ACLs to your Fastly module configuration, verify that the Fastly caching service works with the default configuration. See [Set up Fastly]({{ site.baseurl }}/cloud/cdn/configure-fastly.html). + +## Manage domains + +For Starter projects, use the _Domains_ option to add and manage the Fastly domain configuration for your store. Before adding a domain to your project, you must submit a [Magento Support ticket](https://support.magento.com/hc/en-us/articles/360019088251) to add the domain to your Cloud configuration. You can add the domain to Fastly after Magento confirms your request. + +{:.bs-callout-info} +For Pro plan projects, you must submit a [Magento support ticket](https://support.magento.com/hc/en-us/articles/360019088251) to update the Fastly domain configuration for your project. + +{:.procedure} +To manage Fastly domain configuration from the Magento Admin: + +{% include cloud/admin-ui-login-step.md %} + +1. Click **Stores** > Settings > **Configuration** > **Advanced** > **System** and expand **Full Page Cache**. + +1. In the Magento Admin _Fastly Configuration_ section, click **Domains**. + +1. Click **Manage Domains** to open the Domains page. + +1. Add the top-level and subdomain names for the stores in the Cloud environment. + + You can only specify domains that have already been added to your Cloud infrastructure configuration. + + ![Add Fastly domain configuration for Starter]({{ site.baseurl }}/common/images/cloud/cloud-fastly-starter-activate-domain.png){:width="650px"} + +1. Click **Activate** to update the Fastly domain configuration. + +## Enable Maintenance Mode + +Use the _Maintenance Mode_ option to allow administrative access to your site from specified IP addresses while returning an error page for all other requests. + +{:.procedure} +To enable Maintenance mode with Administrative access: + +1. Open the _Fastly configuration_ section in the Magento Admin UI. + +1. In the _Edge ACL_ section, update the `maint_allow` access control list (ACL) with the administrative IP addresses that can access your store while it is in Maintenance mode. + + ![Update IP maintenance mode allow list]({{ site.baseurl }}/common/images/cloud/cloud_fastly-maint-allowlist.png){:width="650px"} + +1. In the _Maintenance Mode_ section, click **Enable Maintenance Mode**. + + After you enable maintenance mode, all traffic is blocked except requests from the IP addresses in the `maint_allowlist` ACL. You can update the `maint_allowlist` to change the IP addresses in the ACL. + + For detailed configuration instructions, see the [Maintenance Mode guide](https://github.com/fastly/fastly-magento2/blob/master/Documentation/Guides/MAINTENANCE-MODE.md) in the Fastly CDN for Magento 2 module documentation. diff --git a/src/cloud/cdn/configure-fastly.md b/src/cloud/cdn/configure-fastly.md index cc4f67be22b..274092fea68 100644 --- a/src/cloud/cdn/configure-fastly.md +++ b/src/cloud/cdn/configure-fastly.md @@ -9,18 +9,23 @@ functional_areas: - Configuration --- -[Fastly]({{ site.baseurl }}/cloud/cdn/cloud-fastly.html) is required for {{site.data.var.ece}}, and is used in Staging and Production environments. It works with Varnish to provide fast caching capabilities and a [Content Delivery Network](https://glossary.magento.com/content-delivery-network) (CDN) for static assets. Fastly is not available in Integration environments. +[Fastly]({{ site.baseurl }}/cloud/cdn/cloud-fastly.html) is required for {{site.data.var.ece}}, and is used in Staging and Production environments. It works with Varnish to provide fast caching capabilities and a [Content Delivery Network](https://glossary.magento.com/content-delivery-network) (CDN) for static assets. Fastly also provides a Web Application Firewall (WAF) to secure your site and Cloud infrastructure. You must route all incoming site traffic through Fastly to protect your site and Cloud infrastructure from malicious traffic and attacks. -This information gets you started with enabling and configuring Fastly caching services in your Staging and Production environments. We provide additional information for configuring backends and Origin shields, customizing error pages, and adding custom VCL snippets. +{:.bs-callout-info} +Fastly is not available in Integration environments. -For VCL snippets, experience developing that code is required for advanced configurations. - -The process for configuring Fastly includes: +Complete the following steps to enable, configure, and test Fastly early in your site development process to enable secure access to your site. - Get Fastly credentials for Staging and Production environments -- Enable Fastly CDN caching in your environment +- Enable Fastly CDN caching - Upload Fastly VCL snippets -- Advanced configurations including VCL snippets, as needed for your {{ site.data.var.ee }} sites +- Update DNS configuration to route traffic to the Fastly service +- Test Fastly caching + +When you are ready to launch your Production site, you must update your DNS configuration to point your production domains to the Fastly service and complete additional configuration tasks. See [Launch checklist]({{ site.baseurl }}/cloud/live/site-launch-checklist.html). + +{:.bs-callout-info} +After you enable and verify that Fastly works with the default settings, you can customize cache configuration settings and enable additional options such as image optimization, edge modules, and custom VCL code. See [Customize cache configuration]({{ site.baseurl }}/cloud/cdn/configure-fastly-customize-cache.html). ## Get Fastly credentials {#cloud-fastly-creds} @@ -28,6 +33,9 @@ During project provisioning, Magento adds your project to the [Fastly service ac You need the Fastly credentials to configure Fastly CDN services from the Magento Admin UI and to submit Fastly API requests. +{:.bs-callout-info} +With {{ site.data.var.ece }}, you cannot access the Fastly Admin UI directly. You must use the Magento Admin UI to review and update the Fastly configuration for your environments. If you cannot resolve an issue using the Fastly capabilities in the Magento Admin UI, submit a [Magento Support](https://support.magento.com/hc/en-us/articles/360000913794#submit-ticket) ticket. + Use the following methods to find and save the Fastly service ID and API token for your environment: {:.procedure} @@ -50,7 +58,7 @@ To view your Fastly credentials: {:.bs-callout-info} If you cannot find the Fastly credentials for the Staging or Production environments, contact your Magento Customer Technical Advisor (CTA). -## Enable Fastly caching for your Cloud environments {#cloud-fastly-config} +## Enable Fastly caching {#cloud-fastly-config} **Prerequisites:** @@ -99,7 +107,7 @@ To enable Fastly CDN caching in Staging and Production: If the test fails again, submit a support ticket or contact your Customer Technical Advisor (CTA). For Pro projects, include the URLs for your Production and Staging sites. For Starter projects, include the URLs for your `Master` and Staging site. {:.bs-callout-info} -If you need to change the Fastly API token credential for a Staging or Production environment, see [Change Fastly credentials]({{ site.baseurl}}/cloud/cdn/cloud-fastly.html#change-your-fastly-api-token). +If you need to change the Fastly API token credential for a Staging or Production environment, see [Change Fastly credentials]({{ site.baseurl}}/cloud/cdn/cloud-fastly.html#change-fastly-api-token). ### Upload VCL to Fastly {#upload-vcl-snippets} @@ -117,161 +125,126 @@ To upload the Fastly VCL: 1. After the upload completes, refresh the cache according to the notification at the top of the page. -## Custom configuration +## Provision SSL/TLS certificates - {:.bs-callout-info} -Before adding [custom](#custom-configuration) or advanced configuration settings like [updating purge settings](#purge) and configuring [Fastly image optimization]({{ site.baseurl }}/cloud/cdn/fastly-image-optimization.html)(Fastly IO), [verify]({{ site.baseurl }}/cloud/cdn/trouble-fastly.html) that the Fastly caching service works with the default configuration. +Magento provides a Domain-Validated Let's Encrypt SSL/TLS certificate to serve secure HTTPS traffic from Fastly. Magento provides one certificate for each Pro Production, Staging, and Starter Production environment to secure all domains in that environment. -Configure the following features as needed: +{:.bs-callout-info} +You can provide your own TLS/SSL certificate instead of using the Let's Encrypt certificate provided by Magento. However, this process requires additional work to set up and maintain. To choose this option, submit a [Magento Support ticket](https://support.magento.com/hc/en-us/articles/360019088251) or work with your CTA to add custom hosted certificates to your Cloud environments. -- [Configure backends and Origin shielding](#backend) -- [Customize response pages]({{ site.baseurl }}/cloud/cdn/cloud-fastly-custom-response.html) -- [Enable additional Fastly configuration options](https://github.com/fastly/fastly-magento2/blob/master/Documentation/CONFIGURATION.md#further-configuration-options) +To enable the SSL/TLS certificates for your environments, Magento automation completes the following steps: -### Configure backends and Origin shielding {#backend} +- Validates domain ownership +- Provisions a Let's Encrypt SSL/TLS certificate that covers specified top-level and subdomains for your Magento stores +- Uploads the certificate to the Cloud environment when the site is live -Backend settings provide fine tuning for Fastly performance with Origin shielding and timeouts. A _backend_ is a specific location (IP or domain) with configured Origin shield and timeout settings for checking and providing cached content. +This automation requires you to update the DNS configuration for your site to supply domain validation information. Use **one** of the following methods: -_Origin shielding_ routes all requests for your store to a specific Point of Presence (POP). When a request is received, the POP checks for cached content and provides it. If it is not cached, it continues to the Shield POP, then to the Origin server which caches the content. The shields reduce traffic directly to the origin. +- **DNS validation**–For live sites, update your DNS configuration with CNAME records that point to the Fastly service +- **ACME challenge CNAME records**–Update your DNS configuration with ACME challenge CNAME records provided by Magento for each domain in your environment -The default Fastly VCL code specifies default values for Origin shielding and timeouts for your {{ site.data.var.ece }} sites. We recommend using the default values. In some case, you might need to modify the default values. For example, if you are getting a lot of time to first byte (TTFB) errors, you might need to adjust the _first byte timeout_ value. - - {:.bs-callout-info} -If you need to integrate additional backends into your site such as a backend to serve blog content from a [Wordpress]({{ site.baseurl }}/cloud/cdn/fastly-vcl-wordpress.html) site, you must customize your Fastly service configuration to add the backend and handle the redirects from your {{ site.data.var.ee }} store to the Wordpress backend. For details, see [Fastly Edge Modules - Other CMS/Backend integration](https://github.com/fastly/fastly-magento2/blob/master/Documentation/Guides/Edge-Modules/EDGE-MODULE-OTHER-CMS-INTEGRATION.md) in the Fastly module documentation. - -{:.procedure} -To review the backend settings configuration: + {:.bs-callout-tip} + If you have a Production domain that is not active yet, use the ACME challenge CNAME records for domain validation. Adding the records to your DNS configuration early allows Magento to provision the SSL/TLS certificate with the correct domains before site launch. -1. Access and expand **Fastly Configuration**. +When domain validation completes, Magento provisions the Let's Encrypt TLS/SSL certificate, and uploads it to live Staging or Production environments. This process can take up to 12 hours. We recommend that you complete the DNS configuration updates several days in advance to prevent delays in site development and site launch. -1. Expand **Backend settings** and click the gear to check the default backend. A modal opens that shows current settings with options to change them. +## Update DNS configuration with development settings - ![Modify the backend]({{ site.baseurl }}/common/images/cloud/cloud_fastly-backend.png){:width="600px"} +During the initial Fastly setup process, you can use the following URLs to configure and test Fastly caching in Staging and Production environments: -1. Select the **Shield** location (or datacenter) closest to your Cloud service region. - For example, if your project is hosted on AWS, Staging is on the west coast of the United States (us-west-1), select the `sjc-ca-us` Fastly shield location. This is the POP that provides caching services. +- Pro projects: + - `mcprod..com` + - `mcstaging..com` - The following list shows which Fastly shield locations to use based on AWS regions: +- Starter projects: + - `mcprod..com` - - ap-east-1 => hongkong-hk - - ap-northeast-1 => tyo-tokyo-jp, hnd-tokyo-jp - - ap-northeast-2 => tyo-tokyo-jp, hnd-tokyo-jp - - ap-southeast-1 => singapore-sg - - ap-southeast-2 => sydney-au - - ap-south-1 => singapore-sg - - ca-central-1 => yul-montreal-ca, iad-va-us, dca-dc-us, bwi-va-us - - eu-central-1 => frankfurt-de, hhn-frankfurt-de - - eu-north-1 => stockholm-bma - - eu-west-1 => london-uk, london_city-uk - - eu-west-2 => london-uk, london_city-uk - - eu-west-3 => cdg-par-fr - - sa-east-1 => gru-br-sa - - us-east-1 => iad-va-us, dca-dc-us, bwi-va-us - - us-east-2 => iad-va-us, dca-dc-us, bwi-va-us - - us-west-1 => sjc-ca-us, pao-ca-us - - us-west-2 => sea-wa-us +These are the default pre-production URLs available as soon as your project is provisioned. The value for `"your-domain"` is the domain name you specified during the onboarding process. -1. Modify the timeout values (in microseconds) for the connection to the shield, time between bytes, and time for the first byte. We recommend keeping the default timeout settings. +You must update your DNS configuration to route traffic from your store URLs to the Fastly service. When you update the configuration, Magento automatically provisions the required SSL/TLS certificates and uploads them to your Cloud environments. This provisioning can take up to 12 hours. -1. Optionally, select to **Activate the backend and Shield after editing or saving**. +{:.bs-callout-tip} +Check with your [DNS registrar](https://lookup.icann.org/) for information about updating the DNS configuration. -1. Click **Upload** to save your changes and upload them to the Fastly servers. - -1. In the Magento Admin, click **Save Config**. - -For more information, see the Magento 2 [Backend settings guide](https://github.com/fastly/fastly-magento2/blob/21b61c8189971275589219d418332798efc7db41/Documentation/Guides/BACKEND-SETTINGS.md) in the Fastly module documentation. - -### Configure purge options {#purge} - -Fastly provides multiple types of purge options on your Magento Cache Management page including purging product category, product assets, and content. When enabled, Fastly watches for events to automatically purge those caches. If you disable a purge option, you can manually purge Fastly caches after finishing updates through the Cache Management page. - -The options include: - -- **Purge category**: Purges product category content (not product content) when you add and update a single product. You may want to keep this disabled and enable purge product, which purges products and product categories. -- **Purge product**: Purges all product and product category content when saving a single modification to a product. Enabling purge product can be helpful to immediately get updates to customers when changing a price, adding a product option, and when product inventory is out-of-stock. -- **Purge CMS page**: Purges page content when updating and adding pages to the Magento CMS. For example, you may want to purge when updating your Terms and Conditions or Return policy. If you rarely make these changes, you could disable automatic purging. -- **Soft purge**: Sets changed content to stale and purges according to the stale timing. In combination with the stale timings your customers will be served stale content very fast while Fastly is updating the content in the background. +**Prerequisites:** -![Configure purge options]({{ site.baseurl }}/common/images/cloud/cloud_fastly-purgeoptions.png){:width="650px"} +- Enable the Fastly module. +- Upload the default Fastly VCL code. +- Provide a list of top-level and subdomains for each environment to your Customer Technical Advisor (CTA) or submit them in a Magento Support ticket. +- Wait for confirmation that the specified domains have been added to your Cloud environments. +- On Starter projects, add the domains to your Fastly service configuration. See [Manage domains]({{ site.baseurl }}/cloud/cdn/configure-fastly-customize-cache.html#manage-domains). {:.procedure} -To configure Fastly purge options: - -1. In the *Fastly Configuration* section, expand **Advanced**. +To update your DNS configuration for development: -1. All purge options display. Select "Yes" per purge option to enable automatic purging. Select "No" to disable automatic purging, allowing you to manually purge caches through the Cache Management page. +1. Add CNAME records to point pre-production URLs to the Fastly service: `prod.magentocloud.map.fastly.net`, for example: -1. Click **Save Config** at the top of the page. + | Domain or Subdomain | CNAME + |---------------------|------ + | mcprod.your-domain.com | prod.magentocloud.map.fastly.net + | mcstaging.your-domain.com | prod.magentocloud.map.fastly.net -1. After the page reloads, click **Upload VCL to Fastly** in the *Fastly Configuration* section. + When the CNAME records are live, Magento provisions certificates and uploads the SSL/TLS certificates. -For more information, see [the Fastly configuration options](https://github.com/fastly/fastly-magento2/blob/21b61c8189971275589219d418332798efc7db41/Documentation/CONFIGURATION.md#further-configuration-options). +1. Add ACME challenge CNAME records for domain validation and pre-provisioning of Production SSL/TLS certificates, for example: -### Create custom VCL snippets {#custom-vcl} + | Domain or Subdomain | CNAME + |----------------------|--------- + | _acme-challenge.your-domain.com
| 0123456789abcdef.validation.magento.cloud + | _acme-challenge.www.your-domain.com
| 9573186429stuvwx.validation.magento.com + | _acme-challenge.mystore.your-domain.com
| 1234567898zxywvu.validation.magento.cloud + | _acme-challenge.subdomain.your-domain.com
| 1098765743lmnopq.validation.magento.cloud -For extensive instructions to create custom VCL snippets and needed edge dictionaries or ACLs, see [Custom Fastly VCL snippets]({{ site.baseurl }}/cloud/cdn/cloud-vcl-custom-snippets.html). + After adding the CNAME records, Magento validates the domains and provisions the SSL/TLS certificate for the environment. When you update the DNS configuration to route traffic from these domains to the Fastly service, Magento uploads the certificate to the environment. -### Extend Fastly timeout for the Magento Admin {#bulkaction} +1. Update the Magento Base URL. -Fastly sets a 180 second-timeout for HTTPS requests to the Magento Admin, so you may encounter timeouts if you need to complete bulk actions that take longer than 3 minutes. In these cases, update the Fastly service configuration to change the _Admin path timeout_. + - Use SSH to log in to the Production environment. -1. In the *Fastly Configuration* section, expand **Advanced**. + ```bash + magento-cloud ssh + ``` -1. Set the **Admin path timeout** value in seconds. This value cannot be more than 10 minutes (600 seconds). + - Use the Magento CLI to change the base URL for your store. -1. Click **Save Config** at the top of the page. + ``` + php bin/magento setup:store-config:set --base-url="https://mcstaging.your-domain.com/" + ``` -1. After the page reloads, click **Upload VCL to Fastly** in the *Fastly Configuration* section. + {:.bs-callout-info} + As an alternative to using the Magento CLI, you can update the Base URL from the [Magento Admin](https://docs.magento.com/user-guide/stores/store-urls.html#configure-the-base-url). -Fastly gets the Magento Admin path for generating the VCL file from the `app/etc/env.php` configuration file. +1. Restart web browser. -### Configure GeoIP handling {#geoip} +1. Test your website. -The Fastly module includes GeoIP handling to automatically redirect visitors or provide a list of stores matching their obtained country code. If you already use a Magento extension for GeoIP handling, you may need to verify the features with Fastly options. +## Test Fastly caching -1. In the *Fastly Configuration* section, expand **Advanced**. +After you complete the DNS configuration changes, use the [cURL](https://curl.haxx.se/) command-line tool to verify that Fastly cache is working. -1. Scroll down and select **Yes** to **Enable GeoIP**. Additional configuration options display. - -1. For GeoIP Action, select if the visitor is automatically redirected with **Redirect** or provided a list of stores to select from with **Dialog**. - -1. For **Country Mapping**, click **Add** to enter a two-letter country code to map with a specific Magento store from a list. For a list of country codes, see [this site](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2). - - ![Add GeoIP country maps]({{ site.baseurl }}/common/images/cloud/cloud_fastly-geo-code.png) - -1. Click **Save Config** at the top of the page. - -1. After page reload, click **Upload VCL to Fastly** in the *Fastly Configuration* section. - -Fastly also provides a series of [geolocation-related VCL features](https://docs.fastly.com/guides/vcl/geolocation-related-vcl-features) for customized geolocation coding. - -## DNS configuration {#dns} - -To enable Fastly caching on your Staging and Production sites, you need make the following changes to the DNS configuration for your site: - -- Set all necessary redirects, especially if you are migrating from an existing site -- Set the zone’s root resource record to address the hostname -- Lower the value for the Time-to-Live (TTL) to refresh DNS information to point customers to the correct Production store - -We recommend a significantly lower TTL value when switching the DNS record. This value tells the DNS how long to cache the DNS record. When shortened, it refreshes the DNS faster. For example, you can change the TTL value from 3 days to 10 minutes when you are testing your site. Be advised that shortening the TTL value adds load to the web server. +{:.procedure} +To check the response headers: -After checking with your registrar about where to change your DNS settings, add a CNAME record for your website that points to the Fastly service: `prod.magentocloud.map.fastly.net`. If you use multiple hostnames for your site, you must add a CNAME record for each one. +1. In a terminal, use the following `curl` command to test your live site URL: -CNAME records cannot be set for apex domains, also referred to as a naked or base domains. You must use `A` records for this. -`A` records map a domain name to the following Fastly IP addresses: + ```bash + curl -vo /dev/null -H Fastly-Debug:1 https:// + ``` -- `151.101.1.124` -- `151.101.65.124` -- `151.101.129.124` -- `151.101.193.124` + If you have not set a static route or completed the DNS configuration for the domains on your live site, use the `--resolve` flag, which bypasses DNS name resolution. -Refer to [Go live checklist]({{ site.baseurl }}/cloud/live/site-launch-checklist.html) for more information. + ```bash + curl -vo /dev/null -H Fastly-Debug:1 --resolve :443: + ``` -### TLS and Fastly {#fastly-tls} +1. In the response, verify the [headers]({{ site.baseurl }}/cloud/cdn/trouble-fastly.html#response-headers) to ensure that Fastly is working. You should see following unique headers in the response: -If you use TLS with Fastly enabled in your environment, you must provide your DNS provider with a TXT record from Fastly. We provide a Domain Validated SSL certificate with Subject Alternative Name enabled, issued by GlobalSign. When entering your [Support ticket]({{ site.baseurl }}/cloud/trouble/trouble.html) for DNS information and going live, let us know you are using TLS, provide your domain names, and request the TXT record. You can then send this record to your DNS provider. The domain validation process is executed by Fastly. + ```http + < Fastly-Magento-VCL-Uploaded: yes + < X-Cache: HIT, MISS + ``` -For details on this TXT record, see the Fastly [DNS TXT record validation](https://docs.fastly.com/guides/securing-communications/domain-validation-for-tls-certificates#dns-text-record-verification). +If the headers do not have the correct values, see [Resolve errors found in the response headers]({{ site.baseurl }}/cloud/cdn/trouble-fastly.html#curl) for troubleshooting help. ## Upgrade the Fastly module {#upgrade} diff --git a/src/cloud/cdn/fastly-image-optimization.md b/src/cloud/cdn/fastly-image-optimization.md index 975931aac39..c176b4cb1c7 100644 --- a/src/cloud/cdn/fastly-image-optimization.md +++ b/src/cloud/cdn/fastly-image-optimization.md @@ -14,7 +14,7 @@ Fastly image optimization (Fastly IO) provides real-time image manipulation and - Adaptive pixel ratios - Support for common image formats: PNG, JPEG, and GIF -You must set up your Fastly service and configure Origin shielding before you can enable and configure the Fastly IO option. +You must set up your Fastly service and configure Origin shielding before you enable and configure the Fastly IO option. Based on your configuration settings, the Fastly Image Optimization (Fastly IO) snippet inserts the VCL code to perform image optimization to speed up delivery of the product images included in your store. There are three steps to configure the Fastly IO: Enable, Configure, and Verify. @@ -25,7 +25,7 @@ You can enable Fastly image optimization (Fastly IO) from the Admin panel by upl **Prerequisites:** - Install or upgrade to Fastly module version 1.2.62 or later -- [Configure Fastly Origin shield and backend]({{ site.baseurl }}/cloud/cdn/configure-fastly.html#backend) +- [Configure Fastly Origin shield and back end]({{site.baseurl}}/cloud/cdn/configure-fastly-customize-cache.html#configure-back-ends-and-origin-shielding) {:.procedure} To enable Fastly IO: diff --git a/src/cloud/cdn/fastly-vcl-allowlist.md b/src/cloud/cdn/fastly-vcl-allowlist.md index e635dfb34fe..a88aa908e84 100644 --- a/src/cloud/cdn/fastly-vcl-allowlist.md +++ b/src/cloud/cdn/fastly-vcl-allowlist.md @@ -85,7 +85,7 @@ Before creating your own snippet from this example, review the values to determi If the URL for your Magento Admin UI was changed, replace the sample value `/admin` with the URL for your environment. For example, `/company-admin`. -In the code sample, the condition `!req.http.Fastly-FF` is important when using [Origin Shielding]({{site.baseurl}}/cloud/cdn/configure-fastly.html#backend). Do not remove or edit this code. +In the code sample, the condition `!req.http.Fastly-FF` is important when using [Origin Shielding]({{site.baseurl}}/cloud/cdn/configure-fastly-customize-cache.html#configure-back-ends-and-origin-shielding). Do not remove or edit this code. After reviewing and updating the code for your environment, use either of the following methods to add the custom VCL snippet to your Fastly service configuration: @@ -114,7 +114,7 @@ After reviewing and updating the code for your environment, use either of the fo - Add the **VCL** snippet content: ```conf - if ((req.url ~ "^/admin") && !(client.ip ~ allowlist) && !req.http.Fastly-FF) { error 403 "Forbidden"; } + if ((req.url ~ "^/admin") && !(client.ip ~ allowlist) && !req.http.Fastly-FF) { error 403 "Forbidden"} ``` 1. Click **Create** to generate the VCL snippet file with the name pattern `type_priority_name.vcl`, for example `recv_5_allowlist.vcl` diff --git a/src/cloud/cdn/trouble-fastly.md b/src/cloud/cdn/trouble-fastly.md index 7e36307b552..ee33f8310ec 100644 --- a/src/cloud/cdn/trouble-fastly.md +++ b/src/cloud/cdn/trouble-fastly.md @@ -59,7 +59,7 @@ Use the following list to identify and troubleshoot issues related to the Fastly If Fastly returns 503 timeout errors, check the error logs and the 503 error page to identify the root cause. {:.bs-callout-info} -If the timeout occurs when running bulk operations, you can [extend the Fastly timeout for the Magento Admin UI]({{ site.baseurl }}/cloud/cdn/configure-fastly.html#bulkaction). +If the timeout occurs when running bulk operations, you can [extend the Fastly timeout for the Magento Admin UI]({{site.baseurl}}/cloud/cdn/configure-fastly-customize-cache.html#extend-fastly-timeout). If you receive a 503 error, check the Production or Staging environment error log and php access log to troubleshoot the issue. diff --git a/src/cloud/deploy/continuous-deployment.md b/src/cloud/deploy/continuous-deployment.md index 3616e8e9e27..43b61b78322 100644 --- a/src/cloud/deploy/continuous-deployment.md +++ b/src/cloud/deploy/continuous-deployment.md @@ -48,4 +48,3 @@ We recommend the following best practices for {{site.data.var.ece}} environments * Create a backup of your database and snapshot on a schedule or before pushing major updates. We provide snapshots of the Pro Production environment according to a [progressive schedule]({{ site.baseurl }}/cloud/architecture/pro-architecture.html#backup-and-disaster-recovery), but you may need to backup your Staging environment for constant iterations. * Pull a data dump of your Production data into the Staging environment for extensive testing * Consider running scripts or pulling only specific tables to sanitize customer data from non-Production environments Staging - diff --git a/src/cloud/docker/docker-config.md b/src/cloud/docker/docker-config.md index 7ad8d503347..5048f2b256c 100644 --- a/src/cloud/docker/docker-config.md +++ b/src/cloud/docker/docker-config.md @@ -46,6 +46,33 @@ To skip the interactive mode, use the `-n, --no-interaction` option. {:.bs-callout-info} The mode option for the `ece-docker build:compose` command does not affect the Magento mode. It determines the {{site.data.var.ece}} file system installation and read-only or read-write behavior. +## Set the environment variables + +You can launch a Cloud Docker environment with predefined environment variables by adding the `--env-vars` option to the `ece-docker build:compose` command. + +For example, the following command sets values for the `LOCK_PROVIDER` and `CRON_CONSUMERS_RUNNER` environment variables. + +```bash +bin/ece-docker build:compose --env-vars="{\"MAGENTO_CLOUD_VARIABLES\":{\"LOCK_PROVIDER\":\"db\",\"CRON_CONSUMERS_RUNNER\":{\"cron_run\":\"true\",\"max_messages\":5000,\"consumers\":[\"test\"]}}}" +``` + +You must escape special characters when specifying the value for the `--env-vars` option. Use the following PHP script to generate the escaped value. Update the example with the values required for your Cloud Docker environment configuration. + +```php + [ + 'LOCK_PROVIDER' => 'db', + 'CRON_CONSUMERS_RUNNER' => [ + 'cron_run' => 'true', + 'max_messages' => 5000, + 'consumers' => ['test'], + ], + ] +])); +``` + ## Stop and start containers You can stop containers and restore them afterwards using the following methods. diff --git a/src/cloud/docker/docker-manage-database.md b/src/cloud/docker/docker-manage-database.md index 7f56833f592..5624dc53ae2 100644 --- a/src/cloud/docker/docker-manage-database.md +++ b/src/cloud/docker/docker-manage-database.md @@ -196,4 +196,3 @@ See [Docker service containers][Docker database container] for details about the [Docker database container]: https://devdocs.magento.com/cloud/docker/docker-containers-service.html#database-container [mysqldump]: https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html [Service configuration options]: {{ site.baseurl }}/cloud/docker/docker-containers.html#service-configuration-options - diff --git a/src/cloud/live/live.md b/src/cloud/live/live.md index ea58ee9d792..40433e9edb0 100644 --- a/src/cloud/live/live.md +++ b/src/cloud/live/live.md @@ -5,34 +5,36 @@ functional_areas: - Cloud --- -When you have completed deployment and testing in Integration and Staging environments, you can start going live. First, you should complete all development and testing prior to touching Production. Feel ready to launch? Review our checklists, best practices, and final steps to launch your site. +When you have completed deployment and testing in Integration and Staging environments, you can begin site launch preparation. First, you should complete all development and testing before working in the Production environment. Feel ready to launch? Review our checklists, best practices, and final steps to launch your site. -If you checked this information prior to deploying and testing in Staging, consider reviewing the benefits of testing in Staging first in the next section. Staging is a near-production environment running on similar hardware, configurations, architecture, and services. It can reduce your downtime and make your extension, service, custom configurations, and merchant User Acceptance Testing vital components to releasing your sites and stores. +If you checked this information before deploying and testing in Staging, consider reviewing the benefits of testing in Staging first in the next section. Staging is a near-production environment running on similar hardware, configurations, architecture, and services. It can reduce your downtime and make your extension, service, custom configurations, and merchant User Acceptance Testing vital components to releasing your sites and stores. -## Info you need to launch your site {#goliveinfo} +## Why test fully in Integration, Staging, and Production? {#whytest} -**Prerequisites for site launch:** +We strongly recommend testing in the Integration, Staging, and Production environments due to the complexity of ensuring that your custom code, themes, Magento extensions, and third-party integrations all work together to operate your Magento stores. The following are common issues you can discover and resolve when you complete testing in the Integration and Staging environments before updating your Production environment: -* CNAME record information for configuring the DNS -* List of all storefront domains to add to the certificate -* SSL certificate if not using the shared-SSL (requires option purchase) +- Staging supports all Production services, features, database data, technology stack, architecture, and more. It mirrors Production, which means if errors occur in Staging, you have a warning before they occur in Production. -As part of {{site.data.var.ece}} subscription, Magento provides a Domain-Validated SSL/TLS certificate issued by Let's Encrypt. Each Pro Production, Staging and Starter Production (`master`) environment has a unique certificate that covers all domains and subdomains in that environment. +- Code that works in your local integration environment might not work in Staging and Production environments. -{:.bs-callout-info} -If you want to deploy your own Extended Validation SSL certificate for your company instead of using the Let's Encrypt certificate, contact your CTA or submit a Magento Support ticket to learn how to use a custom SSL/TLS certificate. +- Integration environments do not support some services that are available in Staging and Production, like Fastly and New Relic. + +- [Fully test]({{ site.baseurl }}/cloud/live/stage-prod-test.html#loadtest) your site with a variety of tools in Staging for load, stress, performance, and site assets. + +- Because Integration environments may only have databases populated with test data, not matching a production-like environment, you might find additional errors or unexpected behavior when testing in Staging or Production environments. -## Why test fully in Integration and Staging? {#whytest} +## Prerequisites for site launch -We strongly recommend testing in these environments due to the complexity of your custom code, themes, Magento extensions, 3rd party integrations all working together to provide a single or multiple stores. Every deployment can differ between merchants. The following are common issues you can find early and solve before touching Production: +You need the following information and resources to prepare for site launch: -* Staging supports all Production services, features, database data, technology stack, architecture, and more. It mirrors Production, which means if errors occur in Staging, you have a **warning before it occurs in Production**. -* Extensions may need to be installed and configured in a specific order. Some extensions touch similar pieces of code in the back and frontend, sometimes clashing and causing errors. -* Extensions typically are heavily tested in [Developer mode]({{ site.baseurl }}/guides/v2.3/config-guide/bootstrap/magento-modes.html), not Production mode. When you move to Staging and use Production mode, you may find error and surprises between extensions, your custom code, and Magento. -* Configurations and code may work great in your developer Integration environments and run into issues in Staging and Production. Working in your local does not confirm it works perfectly in production. -* Integration environments do not support some services that are available in Staging and Production, like Fastly and New Relic. -* [Fully test]({{ site.baseurl }}/cloud/live/stage-prod-test.html#loadtest) your site with a variety of tools in Staging for load, stress, performance, and site assets -* Integration environments may only have databases populated with test data, not matching a production-like environment +- CNAME record information for configuring the DNS +- List of all storefront domains to add to the certificate +- SSL/TLS certificate + +As part of {{site.data.var.ece}} subscription, Magento provides a Domain-Validated SSL/TLS certificate issued by Let's Encrypt. Each Pro Production, Staging, and Starter Production (`master`) environment has a unique certificate that covers all domains and subdomains in that environment. These certificates are provisioned and uploaded to your site automatically after you update your DNS configuration for development and production. See [Provision SSL/TLS certificates]({{ site.baseurl }}/cloud/cdn/configure-fastly.html#provision-ssltls-certificates). + +{:.bs-callout-info} +If you want to deploy your own Extended Validation SSL certificate for your company instead of using the Let's Encrypt certificate, contact your CTA or submit a [Magento Support ticket](https://support.magento.com/hc/en-us/articles/360019088251). ## Set up Magento Security Scan Tool {#security-scan} @@ -52,8 +54,8 @@ You must whitelist these IP addresses in your network firewall rules to allow th The Magento Security Scan Tool enables you to regularly monitor your store websites and receive updates for known security risks, malware, and out-of-date software. This is a free service available for all implementations and versions of {{site.data.var.ece}}. You access the tool through your [Magento Marketplace account](https://account.magento.com/customer/account/login). -* Monitor your sites security status and applied security updates -* Receive security updates and site-specific notifications +- Monitor your sites security status and applied security updates +- Receive security updates and site-specific notifications See the [Magento User Guide](http://docs.magento.com/m2/ee/user_guide/magento/security-scan.html) for information about setting up and using the security scan tool. Typically, you start using this tool when you begin user acceptance testing (UAT). @@ -87,8 +89,8 @@ The report lists issues including Failed Scans, Unidentified Results, and Succes Scan results include a label that describes scan pass or fail status with detailed information about the checks performed: -* "Failed" indicates that the website contains a serious vulnerability. -* "Unidentified" suggests that a deeper review is required by your team or hosting provider to determine if further action is required. +- "Failed" indicates that the website contains a serious vulnerability. +- "Unidentified" suggests that a deeper review is required by your team or hosting provider to determine if further action is required. The scan results also provide suggested remediation steps for each failed security test. Security scan results are protected and viewable only by the registered user. Only users designated in the site registration process receive scan completion notifications. @@ -96,5 +98,5 @@ The scan results also provide suggested remediation steps for each failed securi When you are ready to begin the site launch process, see the following: -* [Launch checklist]({{ site.baseurl }}/cloud/live/site-launch-checklist.html) -* [Launch steps]({{ site.baseurl }}/cloud/live/launch-steps.html) +- [Launch checklist]({{ site.baseurl }}/cloud/live/site-launch-checklist.html) +- [Launch steps]({{ site.baseurl }}/cloud/live/launch-steps.html) diff --git a/src/cloud/live/site-launch-checklist.md b/src/cloud/live/site-launch-checklist.md index 99a349bf0e7..8985cc15861 100644 --- a/src/cloud/live/site-launch-checklist.md +++ b/src/cloud/live/site-launch-checklist.md @@ -16,47 +16,81 @@ Before you deploy to the Production environment, download the [Launch checklist] See [Test deployment]({{ site.baseurl }}/cloud/live/stage-prod-test.html) for testing all aspects of your sites, stores, and environments. These tests include verifying Fastly, User Acceptance Tests (UAT), and performance testing. -## DNS configurations {#dns} +## TLS and Fastly -You need to complete configurations for your DNS including: +Magento provides a Let's Encrypt SSL/TLS certificate for each environment. This certificate is required for Fastly to serve secure traffic over HTTPS. -- Set all necessary redirects, especially if you are migrating from an existing site -- Set the zone root resource record to the hostname address -- Lower the value for the Time-to-Live (TTL) setting to refresh DNS information so customers are directed to the correct Production store more quickly +To use this certificate, you must update your DNS configuration so that Magento can complete domain validation and apply the certificate to your environment. Each environment has a unique certificate that covers the domains for the Magento Commerce sites deployed in that environment. We recommend completing and the configuration updates during the [Fastly set up process]({{ site.baseurl }}/cloud/cdn/configure-fastly.html). -We recommend a significantly lower TTL value when switching the DNS record. This value tells the DNS how long to cache the DNS record. When shortened, it refreshes the DNS faster. For example, changing this value from 3 days to 10 minutes. Be advised, this adds load to the web server. +## Update DNS configuration with production settings {#dns} -After checking with your registrar about where to change your DNS settings, add a CNAME record for your website that points to the Fastly service: `prod.magentocloud.map.fastly.net`. If you use multiple hostnames for your site, you must add a CNAME record for each one. +When you are ready to launch your site, you must update the DNS configuration to route traffic from your Production environment through the Fastly service. - {:.bs-callout-info} -This does not work for an [apex domain](https://blog.cloudflare.com/zone-apex-naked-domain-root-domain-cname-supp) (also referred to as a _naked_ domain). You must use a DNS provider that supports forwarding DNS queries to use an apex domain. +**Prerequisites:** -The following list contains examples of DNS providers for informational purposes. Use your preferred DNS provider. +- [Set up and test Fastly in your development environment]({{ site.baseurl }}/cloud/cdn/configure-fastly.html) -- CNAME with ALIAS record from [Dyn](http://dyn.com) -- ANAME record on [DNS Made Easy](http://www.dnsmadeeasy.com) -- ANAME at [easyDNS](https://www.easydns.com) -- ACNAME at [CloudFlare](https://www.cloudflare.com) -- ALIAS at [PointDNS](https://pointhq.com) +- Production environment configuration has been updated with all required domains -Many other DNS providers also offer workarounds to accomplish this goal. The most common is to add a CNAME record for the `www` host on the domain and then use the DNS provider's redirect service to redirect the apex over to the `www` version of the domain. Consult your DNS provider for more information. + Typically, you work with your Customer Technical Advisor to add all top-level domains and sub-domains required for your Magento stores. To add or change the domains for your Production environment, submit a [Magento Support ticket](https://support.magento.com/hc/en-us/articles/360019088251). Wait for confirmation that your project configuration has been updated. -Another option for apex domain is to add A records, which maps a domain name to the Fastly IP addresses: + On Starter projects, you must add the domains to your project. See [Manage domains]({{ site.baseurl }}/cloud/cdn/configure-fastly-customize-cache.html#manage-domains). -- `151.101.1.124` -- `151.101.65.124` -- `151.101.129.124` -- `151.101.193.124` +- SSL/TLS certificate provisioned for your production environments. -### TLS and Fastly {#fastly-tls} + If you added the ACME challenge records for your Production domains during the Fastly setup process, Magento uploads the SSL/TLS certificate to your Production environment automatically when you update the DNS configuration to route traffic to the Fastly service. If you did not pre-provision the certificate, or if you updated your domains, Magento must complete domain validation and provision the certificate, which can take up to 12 hours. -If you use TLS with Fastly enabled in your environment, you must provide your DNS provider with a TXT record from Fastly. We provide a Domain Validated SSL certificate with Subject Alternative Name enabled, issued by GlobalSign. When entering your [Support ticket](#dns) for DNS information and going live, let us know you are using TLS, provide your domain names and request the TXT record. You can then send this record to your DNS provider. The domain validation process is executed by Fastly. +{:.procedure} +To update DNS configuration for site launch: -For details on this TXT record, see Fastly [DNS TXT record validation](https://docs.fastly.com/guides/securing-communications/domain-validation-for-tls-certificates#dns-text-record-verification). +1. Update the following DNS configuration for your Production site: -## Verify Production configurations + - Set all necessary redirects, especially if you are migrating from an existing site + - Set the zone’s root resource record to address the hostname + - Lower the value for the Time-to-Live (TTL) to refresh DNS information to point customers to the correct Production store -Make a final pass for any Production configurations in the store(s). If you need to make changes to configurations, you can modify in Production. If settings are read-only, you may need to SSH and CLI commands to modify, or make configuration changes in your local and deploy across. + We recommend a significantly lower TTL value when switching the DNS record. This value tells the DNS how long to cache the DNS record. When shortened, it refreshes the DNS faster. For example, you can change the TTL value from 3 days to 10 minutes when you are updating your site. Be advised that shortening the TTL value adds load to the DNS infrastructure. You should restore the previous higher value after site launch. + +1. Add CNAME records to point the top-level domains and subdomains for your Production environment to the Fastly service `prod.magentocloud.map.fastly.net`, for example: + + | Domain or Subdomain | CNAME + |----------------------|------ + | www.your-domain.com | prod.magentocloud.map.fastly.net + | mystore.your-domain.com | prod.magentocloud.map.fastly.net + +1. If needed, add A records to map the apex domain (`your-domain.com`) to the following Fastly IP addresses: + + | Apex domain | ANAME + |-----------------|-------- + | your-domain.com | `151.101.1.124` + | your-domain.com | `151.101.65.124` + | your-domain.com | `151.101.129.124` + | your-domain.com | `151.101.193.124` + +1. Update the Magento Base URL. + + - Use SSH to log in to the Production environment. + + ```bash + magento-cloud ssh + ``` + + - Use the Magento CLI to change the base URL for your store. + + ``` + php bin/magento setup:store-config:set --base-url="https://www.your-domain.com/" + ``` + + {:.bs-callout-info} + You can also update the Base URL from the [Magento Admin](https://docs.magento.com/user-guide/stores/store-urls.html#configure-the-base-url). + +1. Wait a few minutes for the site to update. + +1. Test your site. + +## Verify Production configuration + +Make a final pass to validate the Production configuration for the store(s).You can make changes to the configuration in the Production environment. If settings are read-only, you may need to open an SSH connection and use CLI commands to change the configuration, or make configuration changes in your local environment. After you complete the updates, you can deploy the changes to Staging and Production environments. The following are recommended changes and checks: @@ -86,7 +120,7 @@ You can also test using the following 3rd party options: - [Set up your Magento Security Scan]({{ site.baseurl }}/cloud/live/live.html#security-scan) - [Secure configuration for Admin user](http://docs.magento.com/m2/ee/user_guide/stores/security-admin.html) -- [Secure configuration for Base Admin URL](https://docs.magento.com/m2/ee/user_guide/stores/store-urls-custom-admin.html) +- [Secure configuration for Admin URL](https://docs.magento.com/m2/ee/user_guide/stores/store-urls-custom-admin.html) - [Remove any users no longer on the {{ site.data.var.ece}} project]({{ site.baseurl}}/cloud/project/user-admin.html) - [Configure two-factor authentication]({{ site.baseurl }}/guides/v2.3/security/two-factor-authentication.html) diff --git a/src/cloud/live/stage-prod-migrate-prereq.md b/src/cloud/live/stage-prod-migrate-prereq.md index 24bccbd2d22..0f5247d0ea9 100644 --- a/src/cloud/live/stage-prod-migrate-prereq.md +++ b/src/cloud/live/stage-prod-migrate-prereq.md @@ -87,6 +87,8 @@ You can locate your URLs through the Project Web Interface. There is an _Access - Staging: `http[s]://.c.staging-.ent.magento.cloud` - Production: `http[s]://.c..ent.magento.cloud` +{%include cloud/cloud-fastly-prereqs-custom-vcl.md%} + ### Add SSH key to project environments {#add-public-ssh-key} Add your SSH public key to {{ site.data.var.ece }} environments: diff --git a/src/cloud/project/project-upgrade.md b/src/cloud/project/project-upgrade.md index bcee9b0a49c..5db4ea2266f 100644 --- a/src/cloud/project/project-upgrade.md +++ b/src/cloud/project/project-upgrade.md @@ -102,10 +102,10 @@ To update the `.magento.app.yaml` file: ### Verify Zend Framework composer dependencies -When upgrading to 2.3.x or later from 2.2.x, verify that the Zend Framework dependencies in the `autoload` property of the `composer.json` file have been updated with the Laminas plugin. This plugin supports new requirements for the Zend Framework, which has migrated to the Laminas project. See [Migration of Zend Framework to the Laminas Project](https://community.magento.com/t5/Magento-DevBlog/Migration-of-Zend-Framework-to-the-Laminas-Project/ba-p/443251) on the _Magento DevBlog_. +When upgrading to **2.3.x or later from 2.2.x**, verify that the Zend Framework dependencies have been added to the `autoload` property of the `composer.json` file to support Laminas. This plugin supports new requirements for the Zend Framework, which has migrated to the Laminas project. See [Migration of Zend Framework to the Laminas Project](https://community.magento.com/t5/Magento-DevBlog/Migration-of-Zend-Framework-to-the-Laminas-Project/ba-p/443251) on the _Magento DevBlog_. {:.procedure} -To check and update Zend Framework dependencies: +To check the `auto-load:psr-4` configuration: 1. On your local workstation, change to the Cloud project root directory. @@ -113,25 +113,25 @@ To check and update Zend Framework dependencies: 1. Open the `composer.json` file in a text editor. -1. Check the `autoload:psr-4` section for the Laminas plugin: +1. Check the `autoload:psr-4` section for the Zend plugin manager implementation for controllers dependency:: ```diff "autoload": { - "psr-4": { - "Magento\\Framework\\": "lib/internal/Magento/Framework/", - "Magento\\Setup\\": "setup/src/Magento/Setup/", - "Magento\\": "app/code/Magento/", - + "Laminas\\Mvc\\Controller\\": "setup/src/Zend/Mvc/Controller/" - }, + "psr-4": { + "Magento\\Framework\\": "lib/internal/Magento/Framework/", + "Magento\\Setup\\": "setup/src/Magento/Setup/", + "Magento\\": "app/code/Magento/", + "Zend\\Mvc\\Controller\\": "setup/src/Zend/Mvc/Controller/", + }, ``` {:.no-copy} -1. If the Laminas plugin is missing, update `composer.json`: +1. If the Zend dependency is missing, update `composer.json`: - Add the following line to the `autoload:psr-4` section. ```json - "Laminas\\Mvc\\Controller\\": "setup/src/Zend/Mvc/Controller/" + "Zend\\Mvc\\Controller\\": "setup/src/Zend/Mvc/Controller/" ``` - Update the project dependencies. @@ -147,7 +147,7 @@ To check and update Zend Framework dependencies: ``` ```bash - git commit -m "Add Laminas plugin to Zend Framework composer dependencies" + git commit -m "Add Zend plugin manager implementation for controllers dependency for Laminas support" ``` ```bash diff --git a/src/cloud/project/project-webint-snap.md b/src/cloud/project/project-webint-snap.md index cc7ff9bde5b..32fefc6efe7 100644 --- a/src/cloud/project/project-webint-snap.md +++ b/src/cloud/project/project-webint-snap.md @@ -116,7 +116,7 @@ To restore a snapshot using the Magento CLI: ## Dump your database {#db-dump} -You can create a copy of your database using the [`magento/ece-tools`]({{ site.baseurl }}/cloud/reference/cloud-composer.html#ece-tools) `db-dump` command. +You can create a copy of your database using the [`magento/ece-tools`]({{ site.baseurl }}/cloud/reference/cloud-composer.html#cloud-composer-cloudmeta) `db-dump` command. By default, this command creates backups for all database connections that are specified in the environment configuration. For example, if you configured your project to use split databases, the `db-dump` operation creates backups for each of the configured databases. You can also backup only selected databases by appending the database names to the command, for example: diff --git a/src/cloud/project/services-elastic.md b/src/cloud/project/services-elastic.md index c7d00eabe1b..1441c525e95 100644 --- a/src/cloud/project/services-elastic.md +++ b/src/cloud/project/services-elastic.md @@ -24,7 +24,7 @@ Magento recommends that you always set up Elasticsearch for your {{ site.data.va {:.procedure} To enable Elasticsearch: -1. Add the `elasticsearch` service to the `.magento/services.yaml` file with the Elasticsearch version and allocated disk space in MB. +1. For Starter projects, add the `elasticsearch` service to the `.magento/services.yaml` file with the Elasticsearch version and allocated disk space in MB. ```yaml elasticsearch: @@ -32,7 +32,8 @@ To enable Elasticsearch: disk: 1024 ``` - {:.bs-callout-info} + For Pro projects, you must submit a Magento Support ticket to change the Elasticsearch version. + For details on determining the correct version to install, see [Elasticsearch software compatibility](#elasticsearch-software-compatibility). 1. Set the `relationships` property in the `.magento.app.yaml` file. @@ -48,7 +49,7 @@ To enable Elasticsearch: git add -A && git commit -m "Enable Elasticsearch" && git push origin ``` - For information on how these changes affect your environments, see [Services]({{ site.baseurl }}/cloud/project/services.html). + For information on how these changes affect your environments, see [Services]({{ site.baseurl }}/cloud/project/services.html). 1. [Verify the service relationships]({{ site.baseurl }}/cloud/project/services.html#service-relationships) and configure Elasticsearch in the Admin UI. @@ -76,6 +77,8 @@ When you install or upgrade your {{ site.data.var.ece }} project, always check f {% include cloud/cloud-elasticsearch-client-compatibility.md %} +{%include cloud/note-cloud-services-compatibility.md%} + {:.procedure} To check Elasticsearch software compatibility: diff --git a/src/cloud/project/services.md b/src/cloud/project/services.md index 6d4e8800c45..dc5ce1731c4 100644 --- a/src/cloud/project/services.md +++ b/src/cloud/project/services.md @@ -163,12 +163,14 @@ To verify relationships in remote environments: ## Service versions +{%include cloud/note-cloud-services-compatibility.md%} + The following table lists the services used in {{site.data.var.ece}} and their version compatibility with the [Magento Cloud template](https://github.com/magento/magento-cloud). {:.error-table} Service | Magento 2.4 |Magento 2.3 | Magento 2.2 --------- | ------------- |-------------| ------------ -`elasticsearch` | 7.7 | **Magento version 2.3.5 and later**— 5.2, 6.5, 6.8, 7.5, 7.6, 7.7
**Magento version 2.3.1 to 2.3.4**— 5.2, 6.5
**Magento version 2.3.0**— 5.2 | **Magento version 2.2.8 and later**— 5.2, 6.5
**Magento version 2.2.0 to 2.2.7**— 5.2 +`elasticsearch` | 7.7 | **Magento version 2.3.5 and later**— 5.2, 6.5, 6.8, 7.5, 7.7
**Magento version 2.3.1 to 2.3.4**— 5.2, 6.5
**Magento version 2.3.0**— 5.2 | **Magento version 2.2.8 and later**— 5.2, 6.5
**Magento version 2.2.0 to 2.2.7**— 5.2 `mariadb` | 10.2, 10.3, 10.4 | **Magento version 2.3.0 to 2.3.5**–10.1 to 10.2
| 10.1 to 10.2 `nginx` | | 1.9 | 1.9 `node` | | 6, 8, 10, 11 | 6, 8, 10, 11 @@ -187,7 +189,7 @@ During the deployment process, {{site.data.var.ct}} checks installed service ver - If a service version is within three months of the EOL date, a notification displays in the deploy log. - If the EOL date is in the past, a warning notification displays. -To maintain Magento store security, update installed software versions before they reach EOL. +To maintain Magento store security, update installed software versions before they reach EOL. You can review the EOL dates in the [{{ site.data.var.ct }} `eol.yaml` file](https://github.com/magento/ece-tools/blob/develop/config/eol.yaml). ## Change service version @@ -197,12 +199,6 @@ You cannot downgrade the service version for an installed service directly. Howe Use the [Service versions](#service-versions) table to check service version compatibility by Magento version. Note that some service versions supported by {{ site.data.var.ee }} are not supported on {{ site.data.var.ece }}. -{:.bs-callout-warning} -You must submit a support ticket to change the service configuration on Pro Production and Staging environments. - -{:.bs-callout-info} -If you change the Elasticsearch service version, check the Elasticsearch composer package for compatibility with the new version. See [Elasticsearch software compatibility]({{ site.baseurl}}/cloud/project/services-elastic.html#elasticsearch-software-compatibility). - ### Upgrade installed service version You can upgrade the installed service version by updating the service configuration in the `services.yaml` file. diff --git a/src/cloud/reference/cloud-composer.md b/src/cloud/reference/cloud-composer.md index c9489ed094f..2d55bb848f7 100644 --- a/src/cloud/reference/cloud-composer.md +++ b/src/cloud/reference/cloud-composer.md @@ -40,17 +40,16 @@ During the [build phase]({{ site.baseurl }}/cloud/reference/discover-deploy.html The `vendor/magento/magento-cloud-metapackage` should be the only package in the `require` section of your `composer.json`. This is a [_metapackage_](https://getcomposer.org/doc/04-schema.md#type) and does not contain any code. -The metapackage depends on the appropriate versions of `vendor/magento/ece-patches`, [`vendor/magento/ece-tools`](#ece-tools), and [`vendor/magento/product-enterprise-edition`](#cloud-composer-prodee). At any given version, this package requires the same version of `magento/product-enterprise-edition`. For example, to use {{site.data.var.ee}} version 2.2.0, for example, `composer.json` must specify a requirement for `magento/magento-cloud-metapackage` version 2.2.0. +The metapackage depends on the appropriate versions of `vendor/magento/ece-patches`, `vendor/magento/ece-tools` and `vendor/magento/product-enterprise-edition`. At any given version, this package requires the same version of `magento/product-enterprise-edition`. For example, to use {{site.data.var.ee}} version 2.2.0, for example, `composer.json` must specify a requirement for `magento/magento-cloud-metapackage` version 2.2.0. This package depends on a floating version of `vendor/magento/magento-cloud-configuration` (abbreviated _MCC_). It depends on the major and minor version of MCC that correspond to the specified {{site.data.var.ee}} version, and floats on the patch version so that compatible updates to this packages can be automatically pulled by running `composer update`. -## vendor/magento/ece-tools {#ece-tools} +The main packages of this metapackage are the following: -The `{{site.data.var.ct}}` package is compatible with {{site.data.var.ee}} version 2.1.4 and later to provide a rich set of features you can use to manage your {{site.data.var.ece}} project. It contains scripts and {{site.data.var.ece}} commands designed to help manage your code and automatically build and deploy your projects. - -## vendor/magento/product-enterprise-edition {#cloud-composer-prodee} - -This [metapackage](https://glossary.magento.com/metapackage) requires Magento application components, including modules, frameworks, themes, and so on. +- **vendor/magento/ece-tools**—The `{{site.data.var.ct}}` package is compatible with {{site.data.var.ee}} version 2.1.4 and later to provide a rich set of features you can use to manage your {{site.data.var.ece}} project. It contains scripts and {{site.data.var.ece}} commands designed to help manage your code and automatically build and deploy your projects. +- **vendor/magento/product-enterprise-edition**—This [metapackage](https://glossary.magento.com/metapackage) requires Magento application components, including modules, frameworks, themes, and so on. +- **vendor/fastly2/magento2**—This module manages the Fastly CDN & services for the Pro Staging and Production and Starter Production environments. See [Fastly Documentation]({{ site.baseurl }}/cloud/cdn/cloud-fastly.html). +- **vendor/magento/module-paypal-on-boarding**—This module provides PayPal payment gateway checkout by connecting to your PayPal merchant account. See [PayPal On-Boarding tool]({{ site.baseurl }}/cloud/live/paypal-onboarding.html). ## Base packages and file marshalling diff --git a/src/cloud/release-notes/cloud-release-archive.md b/src/cloud/release-notes/cloud-release-archive.md index cbaf6ae2107..2162ac24316 100644 --- a/src/cloud/release-notes/cloud-release-archive.md +++ b/src/cloud/release-notes/cloud-release-archive.md @@ -416,7 +416,7 @@ The `{{site.data.var.ct}}` version 2002.0.17 includes an important security patc - Added the [DATABASE_CONFIGURATION]({{ site.baseurl }}/cloud/env/variables-deploy.html#database_configuration) environment variable to customize your database connections for deployment. - The new [MIN_LOGGING_LEVEL]({{ site.baseurl }}/cloud/env/variables-global.html#min_logging_level) variable overrides the minimum logging level for all output streams without making changes to the code. -- {:.fix}Fixed an issue that caused downtime between the deploy and post-deploy phase. Now, the post_deploy phase begins _immediately_ after the deploy phase ends. +- {:.fix}Fixed an issue that caused downtime between the deploy and post-deploy phase. Now, the post-deploy phase begins _immediately_ after the deploy phase ends. - {:.fix}Fixed an issue that did not clean the successful cron jobs, those with `status = success`, from the schedule. @@ -459,10 +459,10 @@ The ece-tools version 2002.0.11 is required for 2.2.4 compatibility. - {:.fix}**SCD-specific improvements**— - - You can use the `VERBOSE_COMMANDS` and the `SCD_COMPRESSION_LEVEL` environment variables during both _build_ and _deploy_ phases. + - You can use the `VERBOSE_COMMANDS` and the `SCD_COMPRESSION_LEVEL` environment variables during both *build* and *deploy* phases. - Fixed an issue that caused deployment to fail with a random error when encountering an unexpected value for the `SCD_COMPRESSION_LEVEL` environment variable. Improved the configuration validation to provide meaningful notifications. See [`SCD_COMPRESSION_LEVEL`]({{ site.baseurl }}/cloud/env/variables-build.html#scd_compression_level) for acceptable values. - Fixed the behavior of the `SCD_COMPRESSION_LEVEL` environment variable configuration flow so the overrides work as expected. - - Fixed an issue that prevented the configuration of the `SCD_THREADS` environment variable in the `.magento.env.yaml` file _deploy_ stage. + - Fixed an issue that prevented the configuration of the `SCD_THREADS` environment variable in the `.magento.env.yaml` file *deploy* stage. ## v2002.0.10 @@ -470,7 +470,7 @@ The ece-tools version 2002.0.11 is required for 2.2.4 compatibility. - **New environment variable**—Added the `SCD_ON_DEMAND` global environment variable to generate static content when requested. - - **Post-deploy hook**—Added a `post_deploy` hook for the `.magento.app.yaml` file that clears the cache and pre-loads (warms) the cache _after_ the container begins accepting connections. It is available only for Pro projects that contain Staging and Production environments in the Project Web Interface and for Starter projects. Although not required, this works in tandem with the `SCD_ON_DEMAND` environment variable. + - **Post-deploy hook**—Added a `post_deploy` hook for the `.magento.app.yaml` file that clears the cache and pre-loads (warms) the cache *after* the container begins accepting connections. It is available only for Pro projects that contain Staging and Production environments in the Project Web Interface and for Starter projects. Although not required, this works in tandem with the `SCD_ON_DEMAND` environment variable. - {:.new}**Optimization**—Optimized moving or copying files during deployment to improve deployment speed and decrease loads on the file system. diff --git a/src/cloud/requirements/cloud-requirements.md b/src/cloud/requirements/cloud-requirements.md index 451610e218a..b73f6dd8dca 100644 --- a/src/cloud/requirements/cloud-requirements.md +++ b/src/cloud/requirements/cloud-requirements.md @@ -119,8 +119,8 @@ For development and testing, we recommend the following: * Fully [test your site]({{ site.baseurl }}/cloud/live/stage-prod-test.html) in Staging as a merchant and customer prior to Production deployment * [Set up Fastly]({{ site.baseurl }}/cloud/cdn/configure-fastly.html) and verify that the Fastly VCL is uploaded -* Send a ticket with all storefront domains when going live (to be added to the shared SSL (HTTPS) certificate) -* For custom deploy hooks in Integration, open a Support ticket to have them added to the Staging and Production deployment process +* Before you begin the site launch process, submit a Magento Support ticket to provide all storefront domains and subdomains for Staging and Production environments. This information is required to provision SSL/TLS certificates for each environment. See [Information you need to launch your site]({{ site.baseurl }}/cloud/live/live.html#prerequisites-for-site-launch). +* For custom deploy hooks in Integration, submit a Support ticket to add the hooks to the Staging and Production deployment process ## License and authentication requirements diff --git a/src/common/images/cloud/cloud-fastly-starter-activate-domain.png b/src/common/images/cloud/cloud-fastly-starter-activate-domain.png new file mode 100644 index 00000000000..39f6ef071c9 Binary files /dev/null and b/src/common/images/cloud/cloud-fastly-starter-activate-domain.png differ diff --git a/src/common/images/cloud/cloud_fastly-maint-allowlist.png b/src/common/images/cloud/cloud_fastly-maint-allowlist.png new file mode 100644 index 00000000000..3b4cbb02efe Binary files /dev/null and b/src/common/images/cloud/cloud_fastly-maint-allowlist.png differ diff --git a/src/guides/v2.3/architecture/security_intro.md b/src/guides/v2.3/architecture/security_intro.md index 90325b3bb89..9218457bc50 100644 --- a/src/guides/v2.3/architecture/security_intro.md +++ b/src/guides/v2.3/architecture/security_intro.md @@ -28,7 +28,7 @@ To provide you with a simple way to restrict access to the file system in produc For an overview, see [Overview of ownership and permissions]({{page.baseurl}}/install-gde/prereq/file-sys-perms-over.html). -For details about ownership and permissions in development and production, see [Magento ownership and permissions in development and production]({{page.baseurl}}). +For details about ownership and permissions in development and production, see [Magento ownership and permissions in development and production]({{page.baseurl}}/config-guide/prod/prod_file-sys-perms.html). ### Improved prevention of clickjacking exploits diff --git a/src/guides/v2.3/b2b/credit-manage.md b/src/guides/v2.3/b2b/credit-manage.md index 33913989803..8af2bbc11c2 100644 --- a/src/guides/v2.3/b2b/credit-manage.md +++ b/src/guides/v2.3/b2b/credit-manage.md @@ -295,7 +295,8 @@ A Reimburse transaction can be updated to include a purchase order and comment. `companyCreditCreditHistoryManagementV1` **REST Endpoints:** -``` + +```text GET /V1/companyCredits/history PUT /V1/companyCredits/history/:historyId ``` diff --git a/src/guides/v2.3/coding-standards/docblock-standard-javascript.md b/src/guides/v2.3/coding-standards/docblock-standard-javascript.md index 8a710dc8056..904da3a16f1 100644 --- a/src/guides/v2.3/coding-standards/docblock-standard-javascript.md +++ b/src/guides/v2.3/coding-standards/docblock-standard-javascript.md @@ -414,14 +414,14 @@ So the key will always be a string in for...in loops. But the compiler will veri Function
function(x, y) {
-   return x * y;
+   return x * y;
 }
Function object function(number, number): number
function(x, y) {
-   return x * y;
+   return x * y;
 }
function value diff --git a/src/guides/v2.3/comp-mgr/prereq/prereq_cron.md b/src/guides/v2.3/comp-mgr/prereq/prereq_cron.md index 38b3d470db2..fd6a58f9b35 100644 --- a/src/guides/v2.3/comp-mgr/prereq/prereq_cron.md +++ b/src/guides/v2.3/comp-mgr/prereq/prereq_cron.md @@ -18,4 +18,3 @@ The cron jobs schedule tasks for the Setup Wizard and for the updater applicatio {% include config/setup-cron_2.2_how-to.md %} For more information about cron, including how to remove a crontab and run cron from the command line, see [Configure and run cron]({{ page.baseurl }}/config-guide/cli/config-cli-subcommands-cron.html). - diff --git a/src/guides/v2.3/comp-mgr/upgrader/upgrade-backup.md b/src/guides/v2.3/comp-mgr/upgrader/upgrade-backup.md index 245f8468235..ac316b1caea 100644 --- a/src/guides/v2.3/comp-mgr/upgrader/upgrade-backup.md +++ b/src/guides/v2.3/comp-mgr/upgrader/upgrade-backup.md @@ -15,4 +15,3 @@ functional_areas: Related topics After your backup is complete, continue with [Step 4. Upgrade]({{ page.baseurl }}/comp-mgr/upgrader/upgrade.html). - diff --git a/src/guides/v2.3/comp-mgr/upgrader/upgrade-checklist.md b/src/guides/v2.3/comp-mgr/upgrader/upgrade-checklist.md index 701074af867..b7dbf4d4f68 100644 --- a/src/guides/v2.3/comp-mgr/upgrader/upgrade-checklist.md +++ b/src/guides/v2.3/comp-mgr/upgrader/upgrade-checklist.md @@ -29,9 +29,10 @@ _System upgrade_ refers to updating the Magento 2.x core components and other in {:.bs-callout-warning} * Authorization keys from a [shared account](http://docs.magento.com/m2/ce/user_guide/magento/magento-account-share.html) _cannot_ be used for upgrade. You must get your authorization keys from `magento.com` account owner. -* If you installed the Magento application by [cloning the GitHub repository]({{ page.baseurl }}/install-gde/prereq/dev_install.html), you _cannot_ use the System Upgrade utility to upgrade the software. Instead, you must [update it manually]({{ page.baseurl }}/install-gde/install/cli/dev_options.html). +* If you installed the Magento application by [cloning the GitHub repository]({{ page.baseurl }}/install-gde/prereq/dev_install.html), you *cannot* use the System Upgrade utility to upgrade the software. Instead, you must [update it manually]({{ page.baseurl }}/install-gde/install/cli/dev_options.html). ## System Upgrade checklist + {% include comp-man/checklist_2.2.md %} {:.ref-header} diff --git a/src/guides/v2.3/comp-mgr/upgrader/upgrade-readiness.md b/src/guides/v2.3/comp-mgr/upgrader/upgrade-readiness.md index 9c491b516c9..b4bf5e01930 100644 --- a/src/guides/v2.3/comp-mgr/upgrader/upgrade-readiness.md +++ b/src/guides/v2.3/comp-mgr/upgrader/upgrade-readiness.md @@ -18,4 +18,3 @@ To start, click either **Start Readiness Check** or **Next** on the System Upgra ![The readiness check enables you to find out if your server and environment are ready to proceed]({{ site.baseurl }}/common/images/upgr_readiness.png) {% include comp-man/readiness-check.md %} - diff --git a/src/guides/v2.3/config-guide/cli/config-cli-subcommands-config-mgmt-export.md b/src/guides/v2.3/config-guide/cli/config-cli-subcommands-config-mgmt-export.md index 6bd07773667..b1c98da50c6 100644 --- a/src/guides/v2.3/config-guide/cli/config-cli-subcommands-config-mgmt-export.md +++ b/src/guides/v2.3/config-guide/cli/config-cli-subcommands-config-mgmt-export.md @@ -13,7 +13,7 @@ In Magento 2.2 and later [pipeline deployment model]({{ page.baseurl }}/config-g bin/magento app:config:dump {config-types} ``` -_config_types_ is a space-separated list of config types to dump. Available types include `themes` and `scopes`. If no config types are specified, the command dumps all system configuration information. +_config_types_ is a space-separated list of config types to dump. Available types include `scopes`, `system`, `themes`, and `i18n`. If no config types are specified, the command dumps all system configuration information. The following example dumps scopes and themes only: diff --git a/src/guides/v2.3/config-guide/cli/config-cli-subcommands-perf-data.md b/src/guides/v2.3/config-guide/cli/config-cli-subcommands-perf-data.md index 2ece9b4d4ef..fe34c505674 100644 --- a/src/guides/v2.3/config-guide/cli/config-cli-subcommands-perf-data.md +++ b/src/guides/v2.3/config-guide/cli/config-cli-subcommands-perf-data.md @@ -29,139 +29,23 @@ Profiles are located in `/setup/performance-toolkit/profiles/ - - - Parameter - Small profile - Medium profile - Medium multi-site profile - Large profile - Extra large profile - - - -

websites

-

1

-

3

-

25

-

5

-

5

- - -

store_groups

-

1

-

3

-

25

-

5

-

5

- - -

store_views

-

1

-

3

-

50

-

5

-

5

- - -

simple_products

-

800

-

24,000

-

4,000

-

300,000

-

600,000

- - -

configurable_products

-

16 with 24 options

-

640 with 24 options

-

800 with 24 options & 79 with 200 options

-

8,000 with 24 options

-

16,000 with 24 options

- - -

product_images

-

100 images / 3 images per product

-

1000 images / 3 images per product

-

1000 images / 3 images per product

-

2000 images / 3 images per product

-

2000 images / 3 images per product

- - -

categories

-

30

-

300

-

100

-

3,000

-

6,000

- - -

categories_nesting_level

-

3

-

3

-

3

-

5

-

5

- - -

catalog_price_rules

-

20

-

20

-

20

-

20

-

20

- - -

catalog_target_rules

-

5

-

5

-

5

-

5

-

5

- - -

cart_price_rules

-

20

-

20

-

20

-

20

-

20

- - -

cart_price_rules_floor

-

2

-

2

-

2

-

2

-

2

- - -

customers

-

200

-

2,000

-

2,000

-

5,000

-

10,000

- - -

tax rates

-

130

-

40,000

-

40,000

-

40,000

-

40,000

- - -

orders

-

80

-

50,000

-

50,000

-

100,000

-

150,000

- - - +| Parameter | Small profile | Medium profile | Medium multi-site profile | Large profile | Extra large profile | +| --- | --- | --- | --- | --- | --- | +| `websites` | 1 | 3 | 25 | 5 | 5 | +| `store_groups` | 1 | 3 | 25 | 5 | 5 | +| `store_views` | 1 | 3 | 50 | 5 | 5 | +| `simple_products` | 800 | 24,000 | 4,000 | 300,000 | 600,000 | +| `configurable_products` | 16 with 24 options | 640 with 24 options | 800 with 24 options & 79 with 200 options | 8,000 with 24 options | 16,000 with 24 options | +| `product_images` | 100 images / 3 images per product | 1000 images / 3 images per product | 1000 images / 3 images per product | 2000 images / 3 images per product | 2000 images / 3 images per product | +| `categories` | 30 | 300 | 100 | 3,000 | 6,000 | +| `categories_nesting_level` | 3 | 3 | 3 | 5 | 5 | +| `catalog_price_rules` | 20 | 20 | 20 | 20 | 20 | +| `catalog_target_rules` | 5 | 5 | 5 | 5 | 5 | +| `cart_price_rules` | 20 | 20 | 20 | 20 | 20 | +| `cart_price_rules_floor` | 2 | 2 | 2 | 2 | 2 | +| `customers` | 200 | 2,000 | 2,000 | 5,000 | 10,000 | +| `tax rates` | 130 | 40,000 | 40,000 | 40,000 | 40,000 | +| `orders` | 80 | 50,000 | 50,000 | 100,000 | 150,000 | ### Run the data generator {#config-cli-perf-run} @@ -241,21 +125,25 @@ The following sections discuss additional details about the performance fixtures Generates [admin](https://glossary.magento.com/admin) users. [XML](https://glossary.magento.com/xml) profile node: -
<!-- Number of admin users -->
-<admin_users>{int}
+```xml + +{int} +``` ### Attribute sets {#config-cli-gen-attrib} Generates attribute sets with specified configuration. XML profile node: -
<!-- Number of product attribute sets -->
-<product_attribute_sets>{int}</product_attribute_sets>
+```xml
+
+{int}
 
-<!-- Number of attributes per set -->
-<product_attribute_sets_attributes>{int}</product_attribute_sets_attributes>
+
+{int}
 
- <!-- Number of values per attribute -->
-<product_attribute_sets_attributes_values>{int}</product_attribute_sets_attributes_values>
+ +{int} +``` ### Bundle products {#config-cli-gen-bundle} @@ -263,31 +151,37 @@ Generates bundle products. Generated bundle selections are not displayed individ XML profile node: -
<!-- Number of products -->
-<bundle_products>{int}</bundle_products>
+```xml
+
+{int}
 
-<!-- Number of options per each product -->
-<bundle_products_options>{int}</bundle_products_options>
+
+{int}
 
-<!-- Number of simple products per each option -->
-<bundle_products_variation>{int}</bundle_products_variation>
+ +{int} +``` ### Cart price rules {#config-cli-gen-cartrules} Generates cart price rules. XML profile node: -
<!-- Number of cart price rules -->
-<cart_price_rules>{int}</cart_price_rules>
+```xml
+
+{int}
 
-<!-- Number of conditions per rule -->
-<cart_price_rules_floor>{int}</cart_price_rules_floor>
+ +{int} +``` ### Catalog price rules {#config-cli-gen-pricerules} Generates catalog price rules. XML profile node: -
<!-- Number of catalog price rules -->
-<catalog_price_rules>{int}</catalog_price_rules>
+```xml + +{int} +``` ### Categories {#config-cli-gen-cat} @@ -295,27 +189,31 @@ Generates categories. If `assign_entities_to_all_websites` is set to `0`, all ca XML profile node: -
<!-- Number of categories to generate -->
-<categories>{int}</categories>
+```xml
+
+{int}
 
-<!-- Nesting level of categories -->
-<categories_nesting_level>{int}</categories_nesting_level>
+ +{int} +``` ### Configs {#config-cli-gen-config} Sets values for config fields. XML profile node: -
<!-- Config variables and values for change -->
-    <configs>
-        <config>
-            <path>{string}</path> <!-- e.g. admin/security/use_form_key -->
-            <scope>{string}</scope> <!-- e.g. default -->
-            <scopeId>{int}</scopeId>
-            <value>{int|string}</value>
-        </config>
-
-        <!-- ... more entries ... -->
-    </configs>
+```xml + + + + {string} + {string} + {int} + {int|string} + + + + +``` ### Configurable products {#config-cli-gen-configprod} @@ -325,94 +223,102 @@ We support the following XML node formats: * Distribution per Default and pre-defined attribute sets: -
<!-- Number of configurable products -->
-    <configurable_products>{int}</configurable_products>
+```xml + +{int} +``` * Generate products based on an existing attribute set: -
<configurable_products>
-        
-        <config>
-             <!-- Existing attribute set name -->
-             <attributeSet>{string}</attributeSet>
+```xml
+
+
+    
+            
+            {string}
 
-             <!-- Configurable sku pattern with %s -->
-             <sku>{string}</sku>
+            
+            {string}
 
-             <!-- Number of configurable products -->
-             <products>{int}</products>
+            
+            {int}
 
-             <!-- Category Name. Optional. By default category name from Categories fixture will be used -->
-             <category>[{string}]</category>
+            
+            [{string}]
 
-             <!-- Type of Swatch attribute e.g. color|image -->
-             <swatches>{string}</swatches>
-        </config>
+            
+            {string}
+    
 
-        <!-- ... more entries ... -->
-    </configurable_products>
+ + +``` * Generate products based on a dynamically created [attribute set](https://glossary.magento.com/attribute-set) with a specified amount of attributes and options: -
<configurable_products>
-        
-        <config>
-            <!-- Number of attributes in configurable product -->
-            <attributes>{int}</attributes>
+```xml
+
+
+    
+        
+        {int}
 
-            <!-- Number of options per attribute -->
-            <options>{int}</options>
+        
+        {int}
 
-            <!-- Configurable sku pattern with %s -->
-            <sku>{string}</sku>
+        
+        {string}
 
-            <!-- Number of configurable products -->
-            <products>{int}</products>
+        
+        {int}
 
-            <!-- Category Name. Optional. By default category name from Categories fixture will be used -->
-            <category>[{string}]</category>
+        
+        [{string}]
 
-            <!-- Type of Swatch attribute e.g. color|image -->
-            <swatches>{string}</swatches>
-        </config>
+        
+        {string}
+    
 
-        <!-- ... more entries ... -->
-    </configurable_products>
+ + +``` * Generate products based on a dynamically created attribute set with a specified configuration per each attribute: -
<configurable_products>
-        
-        <config>
-            <attributes>
-                <!-- Configuration for a first attribute -->
-                <attribute>
-                    <!-- Amount of options per attribute -->
-                    <options>{int}</options>
+```xml
+
 
-                    <!-- Type of Swatch attribute -->
-                    <swatches>{string}</swatches>
-                </attribute>
+    
+        
+            
+            
+                
+                {int}
 
-                <!-- Configuration for a second attribute -->
-                <attribute>
-                    <!-- Amount of options per attribute -->
-                    <options>{int}</options>
-                </attribute>
-            </attributes>
+                
+                {string}
+            
 
-            <!-- Configurable sku pattern with %s -->
-            <sku>{string}</sku>
+            
+            
+                
+                {int}
+            
+        
 
-            <!-- Number of configurable products -->
-            <products>{int}</products>
+        
+        {string}
 
-            <!-- Category Name. Optional. By default, the category name from Categories fixture will be used -->
-            <category>[{string}]</category>
-        </config>
+        
+        {int}
 
-        <!-- ... more entries ... -->
-    </configurable_products>
+ + [{string}] + + + + +``` ### Customers {#config-cli-gen-cust} @@ -420,15 +326,19 @@ Generates customers. Customers have a normal distribution on all available websi XML profile node: -
<!-- Number of customers to generate -->
-<customers>{int}</customers>
+```xml + +{int} +``` You can also use the following XML to change the customer configuration: -
<customer-config>
-    <!-- Number of addresses per each customer -->
-    <addresses-count>{int}</addresses-count>
-</customer-config>
+```xml + + + {int} + +``` ### Product images {#config-cli-gen-prodimg} @@ -436,23 +346,27 @@ Generates product images. Generation does not include resizing. XML profile node: -
<product-images>
-    <!-- Number of images to generate -->
-    <images-count>{int}</images-count>
+```xml
+
+    
+    {int}
 
-    <!-- Number of images to be assigned per each product -->
-    <images-per-product>{int}</images-per-product>
-</product-images>
+ + {int} + +``` ### Indexers state {#config-cli-gen-index} Updates indexers' state. XML profile node: -
<indexer>
-    <!-- Name of indexer (e.g. catalogrule_product) -->
-    <id>{string}</id>
-    <set_scheduled>{bool}</set_scheduled>
-</indexer>
+```xml + + + {string} + {bool} + +``` ### Orders {#config-cli-gen-orders} @@ -460,29 +374,31 @@ Generates orders with configurable number of different types of order items. Opt XML profile node: -
<!-- It is necessary to enable quotes for orders -->
-<order_quotes_enable>{bool}</order_quotes_enable>
+```xml
+
+{bool}
 
-<!-- Min number of simple products per each order -->
-<order_simple_product_count_from>{int}</order_simple_product_count_from>
+
+{int}
 
-<!-- Max number of simple products per each order -->
-<order_simple_product_count_to>{int}</order_simple_product_count_to>
+
+{int}
 
-<!-- Min number of configurable products per each order -->
-<order_configurable_product_count_from>{int}</order_configurable_product_count_from>
+
+{int}
 
-<!-- Max number of configurable products per each order -->
-<order_configurable_product_count_to>{int}</order_configurable_product_count_to>
+
+{int}
 
-<!-- Min number of big configurable products (with big amount of options) per each order -->
-<order_big_configurable_product_count_from>{int}</order_big_configurable_product_count_from>
+
+{int}
 
-<!-- Max number of big configurable products (with big amount of options) per each order -->
-<order_big_configurable_product_count_to>{int}</order_big_configurable_product_count_to>
+
+{int}
 
-<!-- Number of orders to generate -->
-<orders>{int}</orders>
+ +{int} +``` ### Simple products {#config-cli-gen-simp} @@ -492,15 +408,19 @@ Products are uniformly distributed per categories and websites. If `assign_entit XML profile node: -
<!-- Number of simple products to generate -->
-<simple_products>{int}</simple_products>
+```xml + +{int} +``` ### Websites {#config-cli-gen-websites} Generates websites. XML profile node: -
<!-- Number of websites to be generated -->
-<websites>{int}</websites>
+```xml + +{int} +``` ### Store groups {#config-cli-gen-stores} @@ -508,25 +428,31 @@ Generates store groups (referred to in the [Magento Admin](https://glossary.mage XML profile node: -
<!-- Number of store groups to be generated -->
-<store_groups>{int}</store_groups>
+```xml + +{int} +``` ### Store views {#config-cli-gen-storeview} Generates store views. Store views are distributed normally among store groups. XML profile node: -
<!-- Number of store views to be generated -->
-<store_views>{int}</store_views>
+```xml
+
+{int}
 
-<!-- 1 means that all stores will have the same root category, 0 means that all stores will have unique root category -->
-<assign_entities_to_all_websites>{0|1}<assign_entities_to_all_websites/>
+ +{0|1} +``` ### Tax rates {#config-cli-gen-taxrate} Generates tax rates. XML profile node: -
<!-- Accepts name of [csv](https://glossary.magento.com/csv) file with tax rates (<path to magento folder>/setup/src/Magento/Setup/Fixtures/_files) -->
-<tax_rates_file>{csv file name}</tax_rates_file>
+```xml + +{csv file name} +``` ## Additional information diff --git a/src/guides/v2.3/config-guide/prod/prod_file-sys-perms.md b/src/guides/v2.3/config-guide/prod/prod_file-sys-perms.md index db736de357f..e2aba789592 100644 --- a/src/guides/v2.3/config-guide/prod/prod_file-sys-perms.md +++ b/src/guides/v2.3/config-guide/prod/prod_file-sys-perms.md @@ -75,7 +75,13 @@ To remove write permissions to files and directories from the web server user's 1. Remove write permissions to the following directories. ```bash - find app/code var/view_preprocessed vendor pub/static app/etc generated/code generated/metadata \( -type f -or -type d \) -exec chmod u-w {} + && chmod o-rwx app/etc/env.php && chmod u+x bin/magento + find app/code var/view_preprocessed vendor pub/static app/etc generated/code generated/metadata \( -type f -or -type d \) -exec chmod u-w {} + && chmod o-rwx app/etc/env.php + ``` + +1. Make the Magento command line tool executable. + + ```bash + chmod u+x bin/magento ``` #### Make code files and directories writable {#make-files-writable-one-owner} diff --git a/src/guides/v2.3/design-styleguide/color/color.md b/src/guides/v2.3/design-styleguide/color/color.md index a08bfec4afc..a272ccd31cf 100644 --- a/src/guides/v2.3/design-styleguide/color/color.md +++ b/src/guides/v2.3/design-styleguide/color/color.md @@ -10,4 +10,3 @@ menu_node: Our color palette reflects our brand personality. It meets accessibility standards and provides clear legibility, hierarchy, navigation, and messaging. ![](img/ColorPalette.jpg) - diff --git a/src/guides/v2.3/design-styleguide/typography/typography.md b/src/guides/v2.3/design-styleguide/typography/typography.md index ce4200a52d9..f75abbd4a75 100644 --- a/src/guides/v2.3/design-styleguide/typography/typography.md +++ b/src/guides/v2.3/design-styleguide/typography/typography.md @@ -11,13 +11,11 @@ Typography is used to establish page hierarchy. ## Heading Types -
- -# H1 - Page title +### H1 - Page title Page titles use Open Sans font, regular weight, 28px font size, and 34px line height. -## H2 - Section heading +### H2 - Section heading Section headings use Open Sans font, regular weight, 20px font size, and 25px line height. diff --git a/src/guides/v2.3/extension-dev-guide/attributes.md b/src/guides/v2.3/extension-dev-guide/attributes.md index 4977045e0a7..63c33c5a3ef 100644 --- a/src/guides/v2.3/extension-dev-guide/attributes.md +++ b/src/guides/v2.3/extension-dev-guide/attributes.md @@ -242,24 +242,24 @@ The following table is a reference for the `Magento\Eav\Setup\EavSetup::addAttri {:.fixed} |Key|Description|Default Value| |--- |--- |--- | -|apply_to|Catalog EAV Attribute apply_to|| +|apply_to|Catalog EAV Attribute - defines which product types the attribute can be applied to|| |attribute_model|EAV Attribute attribute_model|| |attribute_set|Name of the attribute set the new attribute will be assigned to. Works in combination with **group** or empty **user_defined**|| |backend|EAV Attribute backend_model|| -|comparable|Catalog EAV Attribute is_comparable|0| +|comparable|Catalog EAV Attribute - defines if attribute can be used when comparing products|0| |default|EAV Attribute default_value|| -|filterable_in_search|Catalog EAV Attribute is_filterable_in_search|0| -|filterable|Catalog EAV Attribute is_filterable|0| +|filterable_in_search|Catalog EAV Attribute is_filterable_in_search - defines if attribute can be used to filter search results|0| +|filterable|Catalog EAV Attribute is_filterable - defines if attribute can be used to filter on navigation|0| |frontend_class|EAV Attribute frontend_class|| |frontend|EAV Attribute frontend_model|| |global|Catalog EAV Attribute is_global field|1| |group|Attribute group name or ID|| |input_renderer|Catalog EAV Attribute frontend_input_renderer|| |input|EAV Attribute frontend_input|text| -|is_filterable_in_grid|Catalog EAV Attribute is_filterable_in_grid|0| -|is_html_allowed_on_front|Catalog EAV Attribute is_html_allowed_on_front|0| -|is_used_in_grid|Catalog EAV Attribute is_used_in_grid field|0| -|is_visible_in_grid|Catalog EAV Attribute is_visible_in_grid field|0| +|is_filterable_in_grid|Catalog EAV Attribute - defines if attribute can be used to filter on product grid in Admin|0| +|is_html_allowed_on_front|Catalog EAV Attribute - defines if HTML needs to be escaped on the frontend|0| +|is_used_in_grid|Catalog EAV Attribute - defines if attribute can be used on the product grid in Admin|0| +|is_visible_in_grid|Catalog EAV Attribute is_visible_in_grid - defines if attribute will be visible on the product grid in Admin|0| |label|EAV Attribute frontend_label|| |note|EAV Attribute note|| |option|EAV Attribute Option values|| @@ -276,7 +276,7 @@ The following table is a reference for the `Magento\Eav\Setup\EavSetup::addAttri |used_for_sort_by|Catalog EAV Attribute used_for_sort_by|0| |used_in_product_listing|Catalog EAV Attribute used_in_product_listing|0| |user_defined|EAV Attribute is_user_defined|0| -|visible_in_advanced_search|Catalog EAV Attribute is_visible_in_advanced_search|0| -|visible_on_front|Catalog EAV Attribute is_visible_on_front|0| -|visible|Catalog EAV Attribute is_visible|1| -|wysiwyg_enabled|Catalog EAV Attribute is_wysiwyg_enabled|0| +|visible_in_advanced_search|Catalog EAV Attribute is_visible_in_advanced_search - defines if attribute will appear on the Advanced Search form|0| +|visible_on_front|Catalog EAV Attribute is_visible_on_front - defines attribute visibility on frontend|0| +|visible|Catalog EAV Attribute is_visible - defines visibility in Admin, won't be available for changing a value in the admin interface if set to 0|1| +|wysiwyg_enabled|Catalog EAV Attribute is_wysiwyg_enabled - used for enabling wysiwyg editor for an attribute. Works for textarea only|0| diff --git a/src/guides/v2.3/extension-dev-guide/cache/partial-caching/database-caching.md b/src/guides/v2.3/extension-dev-guide/cache/partial-caching/database-caching.md index 3b3f5759bf8..381b5288a8d 100644 --- a/src/guides/v2.3/extension-dev-guide/cache/partial-caching/database-caching.md +++ b/src/guides/v2.3/extension-dev-guide/cache/partial-caching/database-caching.md @@ -162,6 +162,7 @@ Use the following steps: 1. In a web browser, go to any cacheable page (such as the [storefront](https://glossary.magento.com/storefront) front door page). If exceptions display, verify `di.xml` syntax and try again. (To see exceptions in the browser, you must [enable developer mode].) + 1. Enter the following commands: ```bash diff --git a/src/guides/v2.3/extension-dev-guide/cli-cmds/cli-add.md b/src/guides/v2.3/extension-dev-guide/cli-cmds/cli-add.md index 1410e967d37..a02a30f7ec1 100644 --- a/src/guides/v2.3/extension-dev-guide/cli-cmds/cli-add.md +++ b/src/guides/v2.3/extension-dev-guide/cli-cmds/cli-add.md @@ -12,4 +12,3 @@ Your [module](https://glossary.magento.com/module) can optionally use Magento 2' * [Command naming guidelines]({{ page.baseurl }}/extension-dev-guide/cli-cmds/cli-naming-guidelines.html) * [How to add CLI commands]({{ page.baseurl }}/extension-dev-guide/cli-cmds/cli-howto.html) * [List of Magento CLI commands]({{ page.baseurl }}/reference/cli/magento.html) - diff --git a/src/guides/v2.3/extension-dev-guide/service-contracts/service-to-web-service.md b/src/guides/v2.3/extension-dev-guide/service-contracts/service-to-web-service.md index 8d63f4b04fa..300f4a92297 100644 --- a/src/guides/v2.3/extension-dev-guide/service-contracts/service-to-web-service.md +++ b/src/guides/v2.3/extension-dev-guide/service-contracts/service-to-web-service.md @@ -175,7 +175,6 @@ To define web API components, set these attributes on these XML elements in the Note:The Magento web API framework enables guest users to access resources that are configured with `anonymous` permission. Any user that the framework cannot authenticate through existing authentication mechanisms is considered a guest user. - diff --git a/src/guides/v2.3/extension-dev-guide/xss-protection.md b/src/guides/v2.3/extension-dev-guide/xss-protection.md index cfbbf6f1830..416ed727e8f 100644 --- a/src/guides/v2.3/extension-dev-guide/xss-protection.md +++ b/src/guides/v2.3/extension-dev-guide/xss-protection.md @@ -190,9 +190,9 @@ This sniff finds all _echo_ calls in PHTML-templates and determines if the outpu It covers the following cases: -- /_ @noEscape _/ before output. Output does not require escaping. Test is green. +- `/_ @noEscape _/` before output. Output does not require escaping. Test is green. -- /_ @escapeNotVerified _/ before output. Output escaping is not checked and should be verified. Test is green. +- `/_ @escapeNotVerified _/` before output. Output escaping is not checked and should be verified. Test is green. - Methods which contain "html" in their names (for example echo $object->{suffix}Html{postfix}()). Data is ready for the HTML output. Test is green. diff --git a/src/guides/v2.3/frontend-dev-guide/bk-frontend-dev-guide.md b/src/guides/v2.3/frontend-dev-guide/bk-frontend-dev-guide.md index 3d036c12dae..9f6844e7ce7 100644 --- a/src/guides/v2.3/frontend-dev-guide/bk-frontend-dev-guide.md +++ b/src/guides/v2.3/frontend-dev-guide/bk-frontend-dev-guide.md @@ -68,4 +68,3 @@ Related topics * [JavaScript coding standard]({{ page.baseurl }}/coding-standards/code-standard-javascript.html) * [Responsive web design]({{ page.baseurl }}/frontend-dev-guide/responsive-web-design/rwd_overview.html) * [Translations]({{ page.baseurl }}/frontend-dev-guide/translations/xlate.html) - diff --git a/src/guides/v2.3/frontend-dev-guide/css-topics/css-jquery.md b/src/guides/v2.3/frontend-dev-guide/css-topics/css-jquery.md index 142d3499726..de2d5dae2bd 100644 --- a/src/guides/v2.3/frontend-dev-guide/css-topics/css-jquery.md +++ b/src/guides/v2.3/frontend-dev-guide/css-topics/css-jquery.md @@ -21,4 +21,3 @@ To use the jQuery styles, you need to define those which you need in your custom - [Define what styles you need to change]({{ page.baseurl }}/frontend-dev-guide/themes/debug-theme.html#debug-theme-style) - [Quick start guide to working with styles for a new theme]({{ page.baseurl }}/frontend-dev-guide/css-guide/css_quick_guide_overview.html) - diff --git a/src/guides/v2.3/frontend-dev-guide/css-topics/css_debug.md b/src/guides/v2.3/frontend-dev-guide/css-topics/css_debug.md index 74330f48c7d..cad4ce6ae60 100644 --- a/src/guides/v2.3/frontend-dev-guide/css-topics/css_debug.md +++ b/src/guides/v2.3/frontend-dev-guide/css-topics/css_debug.md @@ -67,6 +67,8 @@ To compile `.less` files, add your theme to `module.exports` in the Grunt config - ``: area code, can be either `frontend` or `adminhtml`. - ``: path to the root source file, relative to the `app/design/frontend///web` directory. You need to specify all [root source files of the theme]({{ page.baseurl }}/frontend-dev-guide/css-topics/css-preprocess.html#css_preprocess_terms). If your theme [inherits] from a certain theme, and does not contain its own root source files, specify the root source files of the parent theme. + **IMPORTANT NOTE** : If grunt gives the error "Error: Cannot find module ....", check the path in your `grunt-config.json` file and correct as necessary. + 1. (Optional) If you want to use Grunt for "watching" changes automatically, without reloading pages in a browser each time, install the [LiveReload extension] in your browser. ## Grunt commands {#grunt_commands} diff --git a/src/guides/v2.3/frontend-dev-guide/css-topics/theme-ui-lib.md b/src/guides/v2.3/frontend-dev-guide/css-topics/theme-ui-lib.md index 5c867f942ff..8b34aee29cf 100644 --- a/src/guides/v2.3/frontend-dev-guide/css-topics/theme-ui-lib.md +++ b/src/guides/v2.3/frontend-dev-guide/css-topics/theme-ui-lib.md @@ -250,4 +250,3 @@ The generated Magento UI library documentation is provided in a convenient [HTML [ui_lib1.png]: {{ site.baseurl }}/common/images/ui_lib1.png [ui_lib2.png]: {{ site.baseurl }}/common/images/ui_lib2.png - diff --git a/src/guides/v2.3/frontend-dev-guide/layouts/layout-types.md b/src/guides/v2.3/frontend-dev-guide/layouts/layout-types.md index f3e7a1c3797..2b5d301eb86 100644 --- a/src/guides/v2.3/frontend-dev-guide/layouts/layout-types.md +++ b/src/guides/v2.3/frontend-dev-guide/layouts/layout-types.md @@ -431,7 +431,6 @@ The following table describes the instructions specific for generic layout files
  • <container>
  • <update>
  • -
Mandatory root element. @@ -466,7 +465,6 @@ none
  • <container>
  • <referenceBlock>
  • <referenceContainer>
  • - Mandatory element diff --git a/src/guides/v2.3/frontend-dev-guide/themes/product-video.md b/src/guides/v2.3/frontend-dev-guide/themes/product-video.md index 360df9cc34c..efbe5046a91 100644 --- a/src/guides/v2.3/frontend-dev-guide/themes/product-video.md +++ b/src/guides/v2.3/frontend-dev-guide/themes/product-video.md @@ -43,7 +43,6 @@ You can set the following product video options: Display related videos. Boolean - 0
    @@ -57,7 +56,6 @@ Boolean Auto re-play video. Boolean - 0
    diff --git a/src/guides/v2.3/frontend-dev-guide/themes/theme-images.md b/src/guides/v2.3/frontend-dev-guide/themes/theme-images.md index 18a81d28bdc..514f1a03d70 100644 --- a/src/guides/v2.3/frontend-dev-guide/themes/theme-images.md +++ b/src/guides/v2.3/frontend-dev-guide/themes/theme-images.md @@ -82,7 +82,6 @@ Can have any value, but in out-of-the- box Magento themes id's are
  • swatch_thumb - corresponds to the Swatch Image role in the Magento Admin
  • thumbnail - corresponds to the Thumbnail Image role in the Magento Admin
  • - diff --git a/src/guides/v2.3/frontend-dev-guide/themes/theme-overview.md b/src/guides/v2.3/frontend-dev-guide/themes/theme-overview.md index 22a40700d16..97327d56504 100644 --- a/src/guides/v2.3/frontend-dev-guide/themes/theme-overview.md +++ b/src/guides/v2.3/frontend-dev-guide/themes/theme-overview.md @@ -25,4 +25,3 @@ Your new theme can be a standalone new theme, or it can inherit from the default ![Themes flow]({{ site.baseurl }}/common/images/fdg/create_install_theme.png) [inherit other required files from a parent theme]: {{page.baseurl}}/frontend-dev-guide/themes/theme-inherit.html - diff --git a/src/guides/v2.3/graphql/develop/extend-existing-schema.md b/src/guides/v2.3/graphql/develop/extend-existing-schema.md index 5a523f5f773..b0316f7c80e 100644 --- a/src/guides/v2.3/graphql/develop/extend-existing-schema.md +++ b/src/guides/v2.3/graphql/develop/extend-existing-schema.md @@ -15,7 +15,7 @@ In the following example, we will change the description of an existing field (` The simplified structure of the query schema to get products is: -```text +```graphql schema { query: Query ... @@ -42,7 +42,8 @@ interface ProductInterface { We need to extend the `ProductInterface`, since that is the schema object for a product. We can do this by creating a `schema.graphqls` file in our custom module's (`OrangeCo/CustomGQL`) `etc` directory. `OrangeCo_CustomGQL/etc/schema.graphqls` -``` + +```graphql interface ProductInterface { attribute_set_id: Int @doc(description: "ID of the attribute set assigned to the product") diff --git a/src/guides/v2.3/graphql/interfaces/grouped-product.md b/src/guides/v2.3/graphql/interfaces/grouped-product.md index cc32a8cc82d..ed331b79397 100644 --- a/src/guides/v2.3/graphql/interfaces/grouped-product.md +++ b/src/guides/v2.3/graphql/interfaces/grouped-product.md @@ -31,4 +31,3 @@ Attribute | Type | Description The following query returns information about downloadable product `24-WG085_Group`, which is defined in the sample data. {% include graphql/grouped-product-sample.md %} - diff --git a/src/guides/v2.3/graphql/queries/index.md b/src/guides/v2.3/graphql/queries/index.md index 8bbb3d142c2..2f885e57a0e 100644 --- a/src/guides/v2.3/graphql/queries/index.md +++ b/src/guides/v2.3/graphql/queries/index.md @@ -432,6 +432,16 @@ Introspection queries allow you to return information about the schema. For exam A Magento introspection query returns the same result whether or not you assign it an operation name, such as `IntrospectionQuery`. +### Disable introspection querying + +Introspection querying is enabled by default. To disable it in production mode to improve security, add the following to your `app/etc/env.php` file. + +```php +'graphql' => [ + 'disable_introspection' => true, +] +``` + ### Example introspection queries #### Return a list of Magento queries @@ -564,4 +574,4 @@ query IntrospectionQuery { } } } -``` +``` \ No newline at end of file diff --git a/src/guides/v2.3/howdoi/checkout/checkout_form.md b/src/guides/v2.3/howdoi/checkout/checkout_form.md index 29cb0f4c3cc..30aa9d99460 100644 --- a/src/guides/v2.3/howdoi/checkout/checkout_form.md +++ b/src/guides/v2.3/howdoi/checkout/checkout_form.md @@ -123,13 +123,16 @@ It should be similar to the following: - + VendorName_ModuleName/js/view/custom-checkout-form VendorName_ModuleName/custom-checkout-form + + + @@ -162,101 +165,97 @@ The term static refers to the forms where all the fields are already known/prede The fields of static forms are not generated dynamically, so they can be defined in a layout. -The following code sample shows configuration of the form that contains four fields: text input, select, checkbox, and date. This form uses checkout data provider (`checkoutProvider`) that is introduced in the `Magento_Checkout` module: +The following code sample shows the configuration of the `custom-checkout-form-container` form, defined in the previous step. It contains four fields: a text input, a select, a checkbox, and a date field. This form uses the checkout data provider (`checkoutProvider`) that was introduced in the `Magento_Checkout` module: ```xml - - - %your_module_dir%/js/view/custom-checkout-form - checkoutProvider - - - %your_module_dir%/custom-checkout-form - - - - - uiComponent - - custom-checkout-form-fields - - - Magento_Ui/js/form/element/abstract - - - customCheckoutForm - ui/form/field - ui/form/element/input - - checkoutProvider - customCheckoutForm.text_field - Text Field - 1 - - true - - - - Magento_Ui/js/form/element/boolean - - - customCheckoutForm - ui/form/field - ui/form/element/checkbox - - checkoutProvider - customCheckoutForm.checkbox_field - Checkbox Field - 3 - - - Magento_Ui/js/form/element/select - - - customCheckoutForm - ui/form/field - ui/form/element/select - - - - Please select value - +... + + ... + + + + uiComponent + + custom-checkout-form-fields + + + Magento_Ui/js/form/element/abstract + + + customCheckoutForm + ui/form/field + ui/form/element/input - - Value 1 - value_1 + checkoutProvider + customCheckoutForm.text_field + Text Field + 1 + + true - - Value 2 - value_2 + + + Magento_Ui/js/form/element/boolean + + + customCheckoutForm + ui/form/field + ui/form/element/checkbox + checkoutProvider + customCheckoutForm.checkbox_field + Checkbox Field + 3 - - value_2 - checkoutProvider - customCheckoutForm.select_field - Select Field - 2 - - - Magento_Ui/js/form/element/date - - - customCheckoutForm - ui/form/field - ui/form/element/date + + Magento_Ui/js/form/element/select + + + customCheckoutForm + ui/form/field + ui/form/element/select + + + + Please select value + + + + Value 1 + value_1 + + + Value 2 + value_2 + + + + value_2 + checkoutProvider + customCheckoutForm.select_field + Select Field + 2 - checkoutProvider - customCheckoutForm.date_field - Date Field - - true + + Magento_Ui/js/form/element/date + + + customCheckoutForm + ui/form/field + ui/form/element/date + + checkoutProvider + customCheckoutForm.date_field + Date Field + + true + - +... ``` ### Dynamically defined forms {#dynamic_form} diff --git a/src/guides/v2.3/howdoi/checkout/checkout_payment.md b/src/guides/v2.3/howdoi/checkout/checkout_payment.md index c3a178909ec..7fae086a135 100644 --- a/src/guides/v2.3/howdoi/checkout/checkout_payment.md +++ b/src/guides/v2.3/howdoi/checkout/checkout_payment.md @@ -76,7 +76,6 @@ Usually, your component will extend the default payment method component (defaul getBillingAddressFormName():string Gets the unique billing address name. - disposeSubscriptions() Terminates the object's subscription. diff --git a/src/guides/v2.3/install-gde/continue-to-install.md b/src/guides/v2.3/install-gde/continue-to-install.md index 4b8bebd94bb..403da931892 100644 --- a/src/guides/v2.3/install-gde/continue-to-install.md +++ b/src/guides/v2.3/install-gde/continue-to-install.md @@ -1,7 +1,7 @@ --- group: installation-guide subgroup: Z_continue -title: +title: Installation Options menu_title: Next—Installation part 2, installing menu_node: parent menu_order: 1 diff --git a/src/guides/v2.3/install-gde/install-resource-diagram.md b/src/guides/v2.3/install-gde/install-resource-diagram.md index ffe762cd2f9..d13c23e5942 100644 --- a/src/guides/v2.3/install-gde/install-resource-diagram.md +++ b/src/guides/v2.3/install-gde/install-resource-diagram.md @@ -14,4 +14,3 @@ functional_areas: The following diagram provides a high-level overview of installing the Magento software: {% include install/flow-diagram.md %} - diff --git a/src/guides/v2.3/install-gde/install/cli/install-cli-subcommands-store.md b/src/guides/v2.3/install-gde/install/cli/install-cli-subcommands-store.md index 51088a1eb81..227a6e69cf4 100644 --- a/src/guides/v2.3/install-gde/install/cli/install-cli-subcommands-store.md +++ b/src/guides/v2.3/install-gde/install/cli/install-cli-subcommands-store.md @@ -42,4 +42,3 @@ where the following table defines parameters and values. |`--use-secure-admin`|`1` means you use SSL to access the Magento Admin. Make sure your web server supports SSL before you select this option.

    `0` means you do not use SSL with the Admin. This is the default.|No| |`--admin-use-security-key`|`1` causes the Magento software to use a randomly generated key value to access pages in the Magento Admin and in forms. These key values help prevent cross-site script forgery attacks. This is the default.

    `0` disables the use of the key.|No| |`--magento-init-params`|Add to any command to customize Magento initialization parameters

    For example: `MAGE_MODE=developer&MAGE_DIRS[base][path]=/var/www/example.com&MAGE_DIRS[cache][path]=/var/tmp/cache`|No| - diff --git a/src/guides/v2.3/install-gde/install/get-help.md b/src/guides/v2.3/install-gde/install/get-help.md index 18f4fc3a2ea..f89b185277e 100644 --- a/src/guides/v2.3/install-gde/install/get-help.md +++ b/src/guides/v2.3/install-gde/install/get-help.md @@ -12,4 +12,3 @@ functional_areas: --- {% include install/get-help.md %} - diff --git a/src/guides/v2.3/install-gde/install/hosted/hosted_install.md b/src/guides/v2.3/install-gde/install/hosted/hosted_install.md index 39eb44f20bc..0664fc29e09 100644 --- a/src/guides/v2.3/install-gde/install/hosted/hosted_install.md +++ b/src/guides/v2.3/install-gde/install/hosted/hosted_install.md @@ -12,4 +12,3 @@ functional_areas: --- {% include install/web/install-web.md %} - diff --git a/src/guides/v2.3/install-gde/install/hosted/hosted_install_1_readiness.md b/src/guides/v2.3/install-gde/install/hosted/hosted_install_1_readiness.md index 2d184654a6a..8df63128211 100644 --- a/src/guides/v2.3/install-gde/install/hosted/hosted_install_1_readiness.md +++ b/src/guides/v2.3/install-gde/install/hosted/hosted_install_1_readiness.md @@ -17,4 +17,3 @@ functional_areas: Related topics [Step 2. Add a database]({{ page.baseurl }}/install-gde/install/hosted/hosted_install_2_db.html) - diff --git a/src/guides/v2.3/install-gde/install/hosted/hosted_install_6_install.md b/src/guides/v2.3/install-gde/install/hosted/hosted_install_6_install.md index a90860031e2..69f25453e60 100644 --- a/src/guides/v2.3/install-gde/install/hosted/hosted_install_6_install.md +++ b/src/guides/v2.3/install-gde/install/hosted/hosted_install_6_install.md @@ -12,4 +12,3 @@ functional_areas: --- {% include install/web/install-web_6-install.md %} - diff --git a/src/guides/v2.3/install-gde/install/sample-data-before-clone.md b/src/guides/v2.3/install-gde/install/sample-data-before-clone.md index 267421f41cb..b4303b6c582 100644 --- a/src/guides/v2.3/install-gde/install/sample-data-before-clone.md +++ b/src/guides/v2.3/install-gde/install/sample-data-before-clone.md @@ -12,4 +12,3 @@ functional_areas: --- {% include install/sampledata/sample-data-clone.md %} - diff --git a/src/guides/v2.3/install-gde/install/sample-data-before-composer.md b/src/guides/v2.3/install-gde/install/sample-data-before-composer.md index 3f448aa2675..af166122e49 100644 --- a/src/guides/v2.3/install-gde/install/sample-data-before-composer.md +++ b/src/guides/v2.3/install-gde/install/sample-data-before-composer.md @@ -12,4 +12,3 @@ functional_areas: --- {% include install/sampledata/sample-data-composer.md %} - diff --git a/src/guides/v2.3/install-gde/install/sample-data-other-cmds.md b/src/guides/v2.3/install-gde/install/sample-data-other-cmds.md index 258613f6583..12d50b32193 100644 --- a/src/guides/v2.3/install-gde/install/sample-data-other-cmds.md +++ b/src/guides/v2.3/install-gde/install/sample-data-other-cmds.md @@ -12,4 +12,3 @@ functional_areas: --- {% include install/sampledata/sample-data-other-cmds.md %} - diff --git a/src/guides/v2.3/install-gde/install/web/install-web_1-readiness.md b/src/guides/v2.3/install-gde/install/web/install-web_1-readiness.md index bb2f75b0d15..991ae5294ec 100644 --- a/src/guides/v2.3/install-gde/install/web/install-web_1-readiness.md +++ b/src/guides/v2.3/install-gde/install/web/install-web_1-readiness.md @@ -20,4 +20,3 @@ functional_areas: Related topics [Step 2. Add a database]({{ page.baseurl }}/install-gde/install/web/install-web_2-db.html) - diff --git a/src/guides/v2.3/install-gde/install/web/install-web_6-install.md b/src/guides/v2.3/install-gde/install/web/install-web_6-install.md index ebebcd1a4d4..88e9f0c94ba 100644 --- a/src/guides/v2.3/install-gde/install/web/install-web_6-install.md +++ b/src/guides/v2.3/install-gde/install/web/install-web_6-install.md @@ -12,4 +12,3 @@ functional_areas: --- {% include install/web/install-web_6-install.md %} - diff --git a/src/guides/v2.3/install-gde/prereq/apache.md b/src/guides/v2.3/install-gde/prereq/apache.md index 2a599e54868..66723d76049 100644 --- a/src/guides/v2.3/install-gde/prereq/apache.md +++ b/src/guides/v2.3/install-gde/prereq/apache.md @@ -22,14 +22,12 @@ If you are new to all this and need some help getting started, we suggest the fo ## Important: Apache required directives {#apache-required-directives} -1. Set `AllowEncodedSlashes` in the server config (globally) or in the virtual host configurations to avoid decoding the encoded slashes that may cause issues for URLs. For instance, when retrieving products with a slash in the SKU via the API, you will not want that converted. +1. Set `AllowEncodedSlashes` in the server config (globally) or in the virtual host configurations to avoid decoding the encoded slashes that may cause issues for URLs. For instance, when retrieving products with a slash in the SKU via the API, you will not want that converted. The sample block is not complete and other directives will be required. ```conf - ... # Allow encoded slashes AllowEncodedSlashes NoDecode - ... ``` diff --git a/src/guides/v2.3/install-gde/prereq/merch_install.md b/src/guides/v2.3/install-gde/prereq/merch_install.md index daf30dea768..9435358e696 100644 --- a/src/guides/v2.3/install-gde/prereq/merch_install.md +++ b/src/guides/v2.3/install-gde/prereq/merch_install.md @@ -39,4 +39,3 @@ To start configuring your hosted system: 1. If necessary, log in to cPanel. ## Step 3: Configure a database and a database user {#newbie-db} - diff --git a/src/guides/v2.3/install-gde/system-requirements_tls1-2.md b/src/guides/v2.3/install-gde/system-requirements_tls1-2.md index 0721429f606..bcf73752344 100644 --- a/src/guides/v2.3/install-gde/system-requirements_tls1-2.md +++ b/src/guides/v2.3/install-gde/system-requirements_tls1-2.md @@ -14,4 +14,3 @@ functional_areas: --- {% include install/paypal-tls1-2.md %} - diff --git a/src/guides/v2.3/install-gde/trouble/tshoot_access-browser.md b/src/guides/v2.3/install-gde/trouble/tshoot_access-browser.md index 25c58598a10..5d6b30f9c82 100644 --- a/src/guides/v2.3/install-gde/trouble/tshoot_access-browser.md +++ b/src/guides/v2.3/install-gde/trouble/tshoot_access-browser.md @@ -38,4 +38,3 @@ Try the following: * Ubuntu: `service apache2 restart` * CentOS: `service httpd restart` - diff --git a/src/guides/v2.3/javascript-dev-guide/back_to_guide.md b/src/guides/v2.3/javascript-dev-guide/back_to_guide.md deleted file mode 100644 index 5e63d19af01..00000000000 --- a/src/guides/v2.3/javascript-dev-guide/back_to_guide.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -group: javascript -subgroup: Back to JavaScript section -title: Modal widget ---- - -Go back to [JavaScript section of the Frontend Developer Guide]({{page.baseurl}}/javascript-dev-guide/javascript/js_overview.html). diff --git a/src/guides/v2.3/javascript-dev-guide/bk-javascript-dev-guide.md b/src/guides/v2.3/javascript-dev-guide/bk-javascript-dev-guide.md index 79d4c571aad..b0c10891cfe 100644 --- a/src/guides/v2.3/javascript-dev-guide/bk-javascript-dev-guide.md +++ b/src/guides/v2.3/javascript-dev-guide/bk-javascript-dev-guide.md @@ -46,4 +46,3 @@ JavaScript automatic testing is described in a separate [JavaScript unit testing [Magento jQuery widgets]: {{page.baseurl}}/javascript-dev-guide/widgets/jquery-widgets-about.html [Customizing JavaScript illustration]: {{page.baseurl}}/javascript-dev-guide/javascript/js_practice.html [JavaScript unit testing]: {{page.baseurl}}/test/js/jasmine.html - diff --git a/src/guides/v2.3/payments-integrations/payment-gateway/payment-gateway-structure.md b/src/guides/v2.3/payments-integrations/payment-gateway/payment-gateway-structure.md index b75e59a84ec..64b60b1d059 100644 --- a/src/guides/v2.3/payments-integrations/payment-gateway/payment-gateway-structure.md +++ b/src/guides/v2.3/payments-integrations/payment-gateway/payment-gateway-structure.md @@ -22,4 +22,3 @@ Each component from this scheme is described in the corresponding topic: * [Gateway Client]({{ page.baseurl }}/payments-integrations/payment-gateway/gateway-client.html) * [Response Validator]({{ page.baseurl }}/payments-integrations/payment-gateway/response-validator.html) * [Response Handler]({{ page.baseurl }}/payments-integrations/payment-gateway/response-handler.html) - diff --git a/src/guides/v2.3/performance-best-practices/advanced-js-bundling.md b/src/guides/v2.3/performance-best-practices/advanced-js-bundling.md index 2e61a4c8732..3aca0e4cf4e 100644 --- a/src/guides/v2.3/performance-best-practices/advanced-js-bundling.md +++ b/src/guides/v2.3/performance-best-practices/advanced-js-bundling.md @@ -7,13 +7,6 @@ functional_areas: - Setup --- - {:.bs-callout-info} -Magento's **[`baler`][]** module is now open for _Alpha testing_. -This is a custom AMD module bundler and preloader for Magento 2. -It is designed to provide optimal bundles and be less error-prone than the built-in Magento bundler. - -[`baler`]: https://github.com/magento/baler - ## Introduction Bundling JavaScript modules for better performance is about reducing two things: diff --git a/src/guides/v2.3/release-notes/ReleaseNotes2.3.0Commerce.md b/src/guides/v2.3/release-notes/ReleaseNotes2.3.0Commerce.md index c3cea1f177b..4e07b4a2c50 100644 --- a/src/guides/v2.3/release-notes/ReleaseNotes2.3.0Commerce.md +++ b/src/guides/v2.3/release-notes/ReleaseNotes2.3.0Commerce.md @@ -33,8 +33,8 @@ Magento Commerce 2.3.0 includes a wealth of new features as well as hundreds of * **Inventory Management (provided by [Magento Inventory (was MSI)](https://github.com/magento/inventory))** is now available with Magento 2.3.0. It lets merchants manage inventory for all product types in a single warehouse and across complex shipping networks. Merchants can manage these locations as sources, tracking on-hand inventory quantities per product. Stocks map these sources and sales channels (websites) to provide an accurate, salable quantity as inventory pools for concurrent checkout and product reservations. Inventory Management also updates order and shipment options, giving you full control over your stock. Magento Inventory is a Magento Community Engineering special project open to contributors. To take part and contribute, see the [Magento Inventory GitHub](https://github.com/magento/inventory) repository and [wiki](https://github.com/magento/inventory/wiki) to get started. Join us in our [Slack](https://magentocommeng.slack.com/messages/C5FU5E2HY) channel (or [self signup](https://tinyurl.com/engcom-slack)) to discuss the project. - * [Inventory Management overview]({{ page.baseurl }}/inventory/index.html) for developer documentation - * [Managing Inventory](https://docs.magento.com/m2/ce/user_guide/catalog/inventory-management.html) for merchant information and instructions + * [Inventory Management overview]({{ page.baseurl }}/inventory/index.html) for developer documentation + * [Managing Inventory](https://docs.magento.com/m2/ce/user_guide/catalog/inventory-management.html) for merchant information and instructions * **CMS enhancements** include banner enhancements. You can now create banner content in native Magento WYSIWYG (or Page Builder. See the `Page Builder` discussion below. (Within the product interface, we now use the term *dynamic block* instead of *banner*.) We've also updated the WYSIWYG editor to use TinyMCE 4.6. (TinyMCE is now integrated into Magento through an adapter that allows it to be replaced with any other WYSIWYG editor.) @@ -3268,7 +3268,7 @@ We've fixed hundreds of issues in the Magento 2.3.0 core code. -* We've replaced `.size()` with `.length` to be compatible with jQuery 3.*. *Fix submitted by Kirill Morozov in pull request [13686](https://github.com/magento/magento2/pull/13686)*. +* We've replaced `.size()` with `.length` to be compatible with jQuery 3. *Fix submitted by Kirill Morozov in pull request [13686](https://github.com/magento/magento2/pull/13686)*. @@ -3705,4 +3705,3 @@ You can install Magento Commerce 2.3.0 using Composer. The Data Migration Tool helps transfer existing Magento 1.x store data to Magento 2.x. This command-line interface includes verification, progress tracking, logging, and testing functions. For installation instructions, see [Install the Data Migration Tool]({{page.baseurl}}/migration/migration-tool-install.html). Consider exploring or contributing to the [Magento Data Migration repository](https://github.com/magento/data-migration-tool). The [Code Migration Toolkit](https://github.com/magento/code-migration) helps transfer existing Magento 1.x store extensions and customizations to Magento 2.0.x. The command-line interface includes scripts for converting Magento 1.x modules and layouts. - diff --git a/src/guides/v2.3/release-notes/ReleaseNotes2.3.0OpenSource.md b/src/guides/v2.3/release-notes/ReleaseNotes2.3.0OpenSource.md index 47fcf7cfba5..8bbe4ee9fec 100644 --- a/src/guides/v2.3/release-notes/ReleaseNotes2.3.0OpenSource.md +++ b/src/guides/v2.3/release-notes/ReleaseNotes2.3.0OpenSource.md @@ -3119,7 +3119,7 @@ See [Magento Security Center](https://magento.com/security/patches/magento-2.2.7 -* We've replaced `.size()` with `.length` to be compatible with jQuery 3.*. *Fix submitted by Kirill Morozov in pull request [13686](https://github.com/magento/magento2/pull/13686)*. +* We've replaced `.size()` with `.length` to be compatible with jQuery 3. *Fix submitted by Kirill Morozov in pull request [13686](https://github.com/magento/magento2/pull/13686)*. @@ -3554,4 +3554,3 @@ You can install {{site.data.var.ce}} 2.3 Beta using Composer. The Data Migration Tool helps transfer existing Magento 1.x store data to Magento 2.x. This command-line interface includes verification, progress tracking, logging, and testing functions. For installation instructions, see [Install the Data Migration Tool]({{page.baseurl}}/migration/migration-tool-install.html). Consider exploring or contributing to the [Magento Data Migration repository](https://github.com/magento/data-migration-tool). The [Code Migration Toolkit](https://github.com/magento/code-migration) helps transfer existing Magento 1.x store extensions and customizations to Magento 2.0.x. The command-line interface includes scripts for converting Magento 1.x modules and layouts. - diff --git a/src/guides/v2.3/release-notes/ReleaseNotes2.3.1Commerce.md b/src/guides/v2.3/release-notes/ReleaseNotes2.3.1Commerce.md index 118cf87dc09..9a7502ca63b 100644 --- a/src/guides/v2.3/release-notes/ReleaseNotes2.3.1Commerce.md +++ b/src/guides/v2.3/release-notes/ReleaseNotes2.3.1Commerce.md @@ -2402,4 +2402,3 @@ You can install {{site.data.var.ee}} 2.3.1 using Composer. The Data Migration Tool helps transfer existing Magento 1.x store data to Magento 2.x. This command-line interface includes verification, progress tracking, logging, and testing functions. For installation instructions, see [Install the Data Migration Tool]({{page.baseurl}}/migration/migration-tool-install.html). Consider exploring or contributing to the [Magento Data Migration repository](https://github.com/magento/data-migration-tool). The [Code Migration Toolkit](https://github.com/magento/code-migration) helps transfer existing Magento 1.x store extensions and customizations to Magento 2.0.x. The command-line interface includes scripts for converting Magento 1.x modules and layouts. - diff --git a/src/guides/v2.3/release-notes/ReleaseNotes2.3.1OpenSource.md b/src/guides/v2.3/release-notes/ReleaseNotes2.3.1OpenSource.md index 43870a9caa5..820e1559803 100644 --- a/src/guides/v2.3/release-notes/ReleaseNotes2.3.1OpenSource.md +++ b/src/guides/v2.3/release-notes/ReleaseNotes2.3.1OpenSource.md @@ -2232,4 +2232,3 @@ You can install {{site.data.var.ce}} 2.3.1 using Composer. The Data Migration Tool helps transfer existing Magento 1.x store data to Magento 2.x. This command-line interface includes verification, progress tracking, logging, and testing functions. For installation instructions, see [Install the Data Migration Tool]({{page.baseurl}}/migration/migration-tool-install.html). Consider exploring or contributing to the [Magento Data Migration repository](https://github.com/magento/data-migration-tool). The [Code Migration Toolkit](https://github.com/magento/code-migration) helps transfer existing Magento 1.x store extensions and customizations to Magento 2.0.x. The command-line interface includes scripts for converting Magento 1.x modules and layouts. - diff --git a/src/guides/v2.3/release-notes/ReleaseNotes2.3.2OpenSource.md b/src/guides/v2.3/release-notes/ReleaseNotes2.3.2OpenSource.md index 82de8c353d6..9939720d754 100644 --- a/src/guides/v2.3/release-notes/ReleaseNotes2.3.2OpenSource.md +++ b/src/guides/v2.3/release-notes/ReleaseNotes2.3.2OpenSource.md @@ -1286,4 +1286,3 @@ You can install {{site.data.var.ee}} 2.3.2 using Composer. The Data Migration Tool helps transfer existing Magento 1.x store data to Magento 2.x. This command-line interface includes verification, progress tracking, logging, and testing functions. For installation instructions, see [Install the Data Migration Tool]({{page.baseurl}}/migration/migration-tool-install.html). Consider exploring or contributing to the [Magento Data Migration repository](https://github.com/magento/data-migration-tool). The [Code Migration Toolkit](https://github.com/magento/code-migration) helps transfer existing Magento 1.x store extensions and customizations to Magento 2.0.x. The command-line interface includes scripts for converting Magento 1.x modules and layouts. - diff --git a/src/guides/v2.3/release-notes/component-status.md b/src/guides/v2.3/release-notes/component-status.md index 7234dbf2e88..6af23fa4e19 100644 --- a/src/guides/v2.3/release-notes/component-status.md +++ b/src/guides/v2.3/release-notes/component-status.md @@ -209,4 +209,3 @@ Issues that are not related to the 2.3.0 beta release are not part of this repor | Module/ Sales | Yellow | | None | Green | | Tools/ Utilities | Green | - diff --git a/src/guides/v2.3/rest/anonymous-api-security.md b/src/guides/v2.3/rest/anonymous-api-security.md index cb98b0bf3e1..8e4c2f2df2b 100644 --- a/src/guides/v2.3/rest/anonymous-api-security.md +++ b/src/guides/v2.3/rest/anonymous-api-security.md @@ -104,4 +104,3 @@ The following APIs remain accessible to anonymous users. Most of these must rema | Commerce | GiftCardAccount | /V1/carts/guest-carts/:cartId/checkGiftCard/:giftCardCode | GET | | Commerce | GiftRegistry | /V1/guest-giftregistry/:cartId/estimate-shipping-methods | POST | | Commerce | WorldPay | /V1/worldpay-guest-carts/:cartId/payment-information | POST - diff --git a/src/guides/v2.3/rest/operation-status-endpoints.md b/src/guides/v2.3/rest/operation-status-endpoints.md index dce40b4f284..b9f7a54de90 100644 --- a/src/guides/v2.3/rest/operation-status-endpoints.md +++ b/src/guides/v2.3/rest/operation-status-endpoints.md @@ -21,10 +21,10 @@ Field name | Data type | Description --- | --- | --- `operations_list` | Object | An array containing information about each operation in a bulk or asynchronous request. `id` | Integer | Identifies the bulk or asynchronous request. -`status` | Integer | The operation status
    * `1` = Complete
    * `2` = The operation failed, but you can try to perform it again
    * `3` = The operation failed. You must change something to retry it.
    * `4` = Open
    * `5` = Rejected +`status` | Integer | The operation status
    \* `1` = Complete
    \* `2` = The operation failed, but you can try to perform it again
    \* `3` = The operation failed. You must change something to retry it.
    \* `4` = Open
    \* `5` = Rejected `result_message` | String | Describes the result of the operation. If successful, the value contains the string `Service execution success` as well as the method that executed the operation. `error_code` | Integer | If applicable, an error code associated with the operation. -`user_type` | Integer | Type of user who made this request. Possible values are:
    * `1` = Integration
    * `2` = Administrator
    * `3` = Customer
    * `4` = Guest User +`user_type` | Integer | Type of user who made this request. Possible values are:
    \* `1` = Integration
    \* `2` = Administrator
    \* `3` = Customer
    \* `4` = Guest User `bulk_id` | String | UUID generated by an [asynchronous API request]({{ page.baseurl }}/rest/asynchronous-web-endpoints.html) or [Bulk API request]({{ page.baseurl }}/rest/bulk-endpoints.html). `description` | String | Contains the message queue topic. `start_time` | String | The time that a bulk or asynchronous operation started. @@ -86,10 +86,10 @@ Field name | Data type | Description `topic_name` | String | The name of the message queue topic, in the format `async..`. The service contract path is lowercase, and the method is either `post`, `put`, or `delete`. `serialized_data` | String | An array of serialized input data. It contains serialized JSON with the following keys: `entity_id` - `null`, `entity_link` - an empty string, `meta_info` - the body of the API request that was executed. `result_serialized_data` | String | Contains serialized output of the corresponding synchronous API call. For example, if you call `POST /async/V1/products`, this field contains serialized response from `POST /V1/products`. -`status` | Integer | The operation status
    * `1` = Complete
    * `2` = The operation failed, but you can try to perform it again
    * `3` = The operation failed. You must change something to retry it.
    * `4` = Open
    * `5` = Rejected +`status` | Integer | The operation status
    \* `1` = Complete
    \* `2` = The operation failed, but you can try to perform it again
    \* `3` = The operation failed. You must change something to retry it.
    \* `4` = Open
    \* `5` = Rejected `result_message` | String | Describes the result of the operation. If successful, the value contains the string `Service execution success` as well as the method that executed the operation. `error_code` | Integer | If applicable, an error code associated with the operation. -`user_type` | Integer | Type of user who made this request. Possible values are:
    * `1` = Integration
    * `2` = Administrator
    * `3` = Customer
    * `4` = Guest User +`user_type` | Integer | Type of user who made this request. Possible values are:
    \* `1` = Integration
    \* `2` = Administrator
    \* `3` = Customer
    \* `4` = Guest User `bulk_id` | String | UUID generated by an [asynchronous API request]({{ page.baseurl }}/rest/asynchronous-web-endpoints.html) or [Bulk API request]({{ page.baseurl }}/rest/bulk-endpoints.html). `description` | String | Contains the message queue topic name. `start_time` | String | The time that a bulk or asynchronous operation started. diff --git a/src/guides/v2.3/rest/retrieve-filtered-responses.md b/src/guides/v2.3/rest/retrieve-filtered-responses.md index db920f52238..87325dfbd4b 100644 --- a/src/guides/v2.3/rest/retrieve-filtered-responses.md +++ b/src/guides/v2.3/rest/retrieve-filtered-responses.md @@ -19,7 +19,7 @@ Separate each field or object with a comma. On POST and PUT requests, Magento ignores the `fields` parameter as input, but the response includes only the requested fields and objects. -# Examples +## Examples {:.no_toc} All examples use {{site.data.var.ce}} sample data. diff --git a/src/guides/v2.3/ui_comp_guide/components/basic-attributes.md b/src/guides/v2.3/ui_comp_guide/components/basic-attributes.md index 07125c3e7f6..a22ab8af865 100644 --- a/src/guides/v2.3/ui_comp_guide/components/basic-attributes.md +++ b/src/guides/v2.3/ui_comp_guide/components/basic-attributes.md @@ -65,4 +65,3 @@ The following options are available for all basic components: String - diff --git a/src/guides/v2.3/ui_comp_guide/components/ui-button.md b/src/guides/v2.3/ui_comp_guide/components/ui-button.md index 181961d736a..e94879e7549 100644 --- a/src/guides/v2.3/ui_comp_guide/components/ui-button.md +++ b/src/guides/v2.3/ui_comp_guide/components/ui-button.md @@ -126,4 +126,3 @@ Here is an example of how the Button component integrates with the [Form]({{ pag #### Result ![Form Buttons example]({{ site.baseurl }}/common/images/ui_comps/ui-form-buttons-example.png) - diff --git a/src/guides/v2.3/ui_comp_guide/components/ui-columns-editing-bulk.md b/src/guides/v2.3/ui_comp_guide/components/ui-columns-editing-bulk.md index 868ce9c8a67..93633750f8b 100644 --- a/src/guides/v2.3/ui_comp_guide/components/ui-columns-editing-bulk.md +++ b/src/guides/v2.3/ui_comp_guide/components/ui-columns-editing-bulk.md @@ -69,4 +69,3 @@ This is an example of how the ColumnsEditingBulk component disables the [Columns ``` - diff --git a/src/guides/v2.3/ui_comp_guide/components/ui-columns-editing-client.md b/src/guides/v2.3/ui_comp_guide/components/ui-columns-editing-client.md index 76af7f7c7c7..1008d3ef2ab 100644 --- a/src/guides/v2.3/ui_comp_guide/components/ui-columns-editing-client.md +++ b/src/guides/v2.3/ui_comp_guide/components/ui-columns-editing-client.md @@ -69,5 +69,3 @@ This is an example of how to disable validation before saving data: ``` - - diff --git a/src/guides/v2.3/ui_comp_guide/components/ui-columns-editor-view.md b/src/guides/v2.3/ui_comp_guide/components/ui-columns-editor-view.md index 65a35a5d201..3396279bb0e 100644 --- a/src/guides/v2.3/ui_comp_guide/components/ui-columns-editor-view.md +++ b/src/guides/v2.3/ui_comp_guide/components/ui-columns-editor-view.md @@ -88,4 +88,3 @@ This is an example of how the ColumnsEditorView component integrates with the [C #### Result ![ColumnsEditorView Component example]({{ site.baseurl }}/common/images/ui_comps/ui-columns-editor-view-result.png) - diff --git a/src/guides/v2.3/ui_comp_guide/components/ui-columns-editor.md b/src/guides/v2.3/ui_comp_guide/components/ui-columns-editor.md index fda183afbc4..85e60f13c41 100644 --- a/src/guides/v2.3/ui_comp_guide/components/ui-columns-editor.md +++ b/src/guides/v2.3/ui_comp_guide/components/ui-columns-editor.md @@ -84,4 +84,3 @@ This is an example of how the ColumnsEditor component integrates with the [Colum #### Result ![DynamicRowsDragAndDrop Component example]({{ site.baseurl }}/common/images/ui_comps/ui-columns-editor-result.png) - diff --git a/src/guides/v2.3/ui_comp_guide/components/ui-columnscontrols.md b/src/guides/v2.3/ui_comp_guide/components/ui-columnscontrols.md index 69b380cd893..6eb99214216 100644 --- a/src/guides/v2.3/ui_comp_guide/components/ui-columnscontrols.md +++ b/src/guides/v2.3/ui_comp_guide/components/ui-columnscontrols.md @@ -46,4 +46,3 @@ Extends [`uiCollection`]({{ page.baseurl }}/ui_comp_guide/concepts/ui_comp_uicol #### Result ![ColumnsControls component example]({{ site.baseurl }}/common/images/ui_comps/columns-controls-result.png) - diff --git a/src/guides/v2.3/ui_comp_guide/components/wysiwyg/add-custom-editor/_code-samples/ckeditor4Adapter.md b/src/guides/v2.3/ui_comp_guide/components/wysiwyg/add-custom-editor/code-samples/ckeditor4Adapter.md similarity index 100% rename from src/guides/v2.3/ui_comp_guide/components/wysiwyg/add-custom-editor/_code-samples/ckeditor4Adapter.md rename to src/guides/v2.3/ui_comp_guide/components/wysiwyg/add-custom-editor/code-samples/ckeditor4Adapter.md diff --git a/src/guides/v2.3/ui_comp_guide/components/wysiwyg/add-custom-editor/index.md b/src/guides/v2.3/ui_comp_guide/components/wysiwyg/add-custom-editor/index.md index 47d9b01de1c..4233d4ada98 100644 --- a/src/guides/v2.3/ui_comp_guide/components/wysiwyg/add-custom-editor/index.md +++ b/src/guides/v2.3/ui_comp_guide/components/wysiwyg/add-custom-editor/index.md @@ -94,7 +94,7 @@ If you are integrating Magento entities such as variable and widget as plugins, **Example:** CKEditor/CKEditor4/view/base/web/ckeditor4Adapter.js {% collapsible Show file content %} -{% include_relative _code-samples/ckeditor4Adapter.md %} +{% include_relative code-samples/ckeditor4Adapter.md %} {% endcollapsible %} ## Step 4. Load editor library diff --git a/src/guides/v2.3/ui_comp_guide/components/wysiwyg/extension-points/index.md b/src/guides/v2.3/ui_comp_guide/components/wysiwyg/extension-points/index.md index ccf86f1c823..fb878fd232c 100644 --- a/src/guides/v2.3/ui_comp_guide/components/wysiwyg/extension-points/index.md +++ b/src/guides/v2.3/ui_comp_guide/components/wysiwyg/extension-points/index.md @@ -128,6 +128,7 @@ public function getVariablesWysiwygActionUrl() return $this->_url->getUrl('mui/index/render', ['namespace' => 'variables_modal']); } ``` + * htmlId of the WYSIWYG editor. For CKEditor4, you can get this by calling `editor.element.getId()`. diff --git a/src/guides/v2.3/ui_comp_guide/concepts/ui_comp_data_source.md b/src/guides/v2.3/ui_comp_guide/concepts/ui_comp_data_source.md index 2d068ac2ef4..867a5d4b304 100644 --- a/src/guides/v2.3/ui_comp_guide/concepts/ui_comp_data_source.md +++ b/src/guides/v2.3/ui_comp_guide/concepts/ui_comp_data_source.md @@ -61,7 +61,7 @@ A good way to keep configuration data out of the javascript is to declare a "pro This example declares the name of the data provider class and will be output in the JSON that contains the UI component's configuration. It can then be used to locate the data source component. This is essentially declaring a variable that will be available to a javascript class. -# Javascript Template Literals +## Javascript Template Literals Throughout Magento's core Javascript components there are strings like this: `'${ $.provider }:data.totalRecords'`. These are ES2015 [template literals](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals). The `${ }` surrounds an expression that will be parsed as Javascript. `$.provider` is the expression, in this example. @@ -71,7 +71,7 @@ When the component is initialized, it will automatically evaluate all string lit But, XML is static and while that gets us the name of the data provider component, it still does not actually provide data. There is one more important step in providing data to Javascript components. -# Javascript Component Linking +## Javascript Component Linking Every Javascript component should extend the core Element class in some way (mapped to [`uiElement`]({{ page.baseurl }}/ui_comp_guide/concepts/ui_comp_uielement_concept.html) with RequireJS and located in [`Magento/Ui/view/base/web/js/lib/core/element/element.js`]({{ site.mage2bloburl }}/{{ page.guide_version }}/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js). When this class initializes it runs an `initLinks()` method. That method, in turn, passes a few class properties into a method that handles linking components together. This file (`lib/core/element/link.js`) binds the values of those parameters to actual components. diff --git a/src/guides/v2.4/extension-dev-guide/xss-protection.md b/src/guides/v2.4/extension-dev-guide/xss-protection.md index 785fb42e4a5..5c6be2857b6 100644 --- a/src/guides/v2.4/extension-dev-guide/xss-protection.md +++ b/src/guides/v2.4/extension-dev-guide/xss-protection.md @@ -193,8 +193,8 @@ To check your .phtml template for XSS vulnerabilities, use the _Magento2.Securit This sniff finds all _echo_ calls in PHTML-templates and determines if the output is properly escaped. It covers the following cases: -- /_ @noEscape _/ before output. Output does not require escaping. Test is green. -- /_ @escapeNotVerified _/ before output. Output escaping is not checked and should be verified. Test is green. +- `/_ @noEscape _/` before output. Output does not require escaping. Test is green. +- `/_ @escapeNotVerified _/` before output. Output escaping is not checked and should be verified. Test is green. - Methods which contain "html" in their names (for example echo $object->{suffix}Html{postfix}()). Data is ready for the HTML output. Test is green. - AbstractBlock methods `escapeHtml`, `escapeHtmlAttr`, `escapeUrl`, `escapeJs` are allowed. Test is green. - Type casting and php function `count()` are allowed (for example `echo (int)$var`, `(bool)$var`, `count($var)`). Test is green. diff --git a/src/guides/v2.4/frontend-dev-guide/bk-frontend-dev-guide.md b/src/guides/v2.4/frontend-dev-guide/bk-frontend-dev-guide.md index c511ff236f2..7458720bb9d 100644 --- a/src/guides/v2.4/frontend-dev-guide/bk-frontend-dev-guide.md +++ b/src/guides/v2.4/frontend-dev-guide/bk-frontend-dev-guide.md @@ -68,4 +68,3 @@ Related topics * [JavaScript coding standard]({{ page.baseurl }}/coding-standards/code-standard-javascript.html) * [Responsive web design]({{ page.baseurl }}/frontend-dev-guide/responsive-web-design/rwd_overview.html) * [Translations]({{ page.baseurl }}/frontend-dev-guide/translations/xlate.html) - diff --git a/src/guides/v2.4/frontend-dev-guide/themes/theme-images.md b/src/guides/v2.4/frontend-dev-guide/themes/theme-images.md index 5f9cb59ef82..7f447a2921b 100644 --- a/src/guides/v2.4/frontend-dev-guide/themes/theme-images.md +++ b/src/guides/v2.4/frontend-dev-guide/themes/theme-images.md @@ -82,7 +82,6 @@ Can have any value, but in out-of-the- box Magento themes id's are
  • swatch_thumb - corresponds to the Swatch Image role in the [Magento Admin](https://glossary.magento.com/magento-admin).
  • thumbnail - corresponds to the Thumbnail Image role in the Magento Admin
  • - diff --git a/src/guides/v2.4/graphql/interfaces/grouped-product.md b/src/guides/v2.4/graphql/interfaces/grouped-product.md index c5ac54e3708..2729145aece 100644 --- a/src/guides/v2.4/graphql/interfaces/grouped-product.md +++ b/src/guides/v2.4/graphql/interfaces/grouped-product.md @@ -30,4 +30,3 @@ Attribute | Type | Description The following query returns information about downloadable product `24-WG085_Group`, which is defined in the sample data. {% include graphql/grouped-product-sample.md %} - diff --git a/src/guides/v2.4/graphql/queries/index.md b/src/guides/v2.4/graphql/queries/index.md index 687b3f0add1..3091dbd39f2 100644 --- a/src/guides/v2.4/graphql/queries/index.md +++ b/src/guides/v2.4/graphql/queries/index.md @@ -432,6 +432,16 @@ Introspection queries allow you to return information about the schema. For exam A Magento introspection query returns the same result whether or not you assign it an operation name, such as `IntrospectionQuery`. +### Disable introspection querying + +Introspection querying is enabled by default. To disable it in production mode to improve security, add the following to your `app/etc/env.php` file. + +```php +'graphql' => [ + 'disable_introspection' => true, +] +``` + ### Example introspection queries #### Return a list of Magento queries @@ -564,4 +574,4 @@ query IntrospectionQuery { } } } -``` +``` \ No newline at end of file diff --git a/src/guides/v2.4/howdoi/checkout/checkout_payment.md b/src/guides/v2.4/howdoi/checkout/checkout_payment.md index 53a78b442c8..955d12e39c5 100644 --- a/src/guides/v2.4/howdoi/checkout/checkout_payment.md +++ b/src/guides/v2.4/howdoi/checkout/checkout_payment.md @@ -76,7 +76,6 @@ Usually, your component will extend the default payment method component (defaul getBillingAddressFormName():string Gets the unique billing address name. - disposeSubscriptions() Terminates the object's subscription. diff --git a/src/guides/v2.4/install-gde/bk-install-guide.md b/src/guides/v2.4/install-gde/bk-install-guide.md index 856f267cde5..8aab650d3f0 100644 --- a/src/guides/v2.4/install-gde/bk-install-guide.md +++ b/src/guides/v2.4/install-gde/bk-install-guide.md @@ -6,6 +6,8 @@ functional_areas: - Install - System - Setup +redirect_from: + - /guides/v2.4/install-gde/continue-to-install.html --- You are among the 240,000 merchants worldwide who put their trust in our eCommerce software. We've gathered some information to help you get started with Magento and with your Magento installation. diff --git a/src/guides/v2.4/install-gde/continue-to-install.md b/src/guides/v2.4/install-gde/continue-to-install.md deleted file mode 100644 index 1eaaf1f4df0..00000000000 --- a/src/guides/v2.4/install-gde/continue-to-install.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -group: installation-guide -title: -functional_areas: - - Install - - System - - Setup ---- - -{:.bs-callout-tip} -Totally lost? Need a helping hand? Try our [installation quick reference (tutorial)]({{ page.baseurl }}/install-gde/install-quick-ref.html) or [installation roadmap (reference)]({{ page.baseurl }}/install-gde/install-roadmap_part1.html). - -## Installation - -Now that you've installed prerequisites and taken the first steps (merchant, system integrator, or developer), you're ready to install the Magento software. You must use the [command line]({{ page.baseurl }}/install-gde/install/cli/install-cli.html) to install Magento. - -## Already installed the Magento software? - -You might want to manage Magento components or to upgrade. See the [Upgrade Guide]({{ page.baseurl }}/comp-mgr/bk-compman-upgrade-guide.html). diff --git a/src/guides/v2.4/javascript-dev-guide/back_to_guide.md b/src/guides/v2.4/javascript-dev-guide/back_to_guide.md deleted file mode 120000 index d732e49d3b9..00000000000 --- a/src/guides/v2.4/javascript-dev-guide/back_to_guide.md +++ /dev/null @@ -1 +0,0 @@ -../../v2.3/javascript-dev-guide/back_to_guide.md \ No newline at end of file diff --git a/src/guides/v2.4/release-notes/b2b-release-notes.md b/src/guides/v2.4/release-notes/b2b-release-notes.md index 0cc0e119c42..f8c5a56c60d 100644 --- a/src/guides/v2.4/release-notes/b2b-release-notes.md +++ b/src/guides/v2.4/release-notes/b2b-release-notes.md @@ -46,4 +46,3 @@ These release notes can include: - Magento throws an exception during upgrade to B2B 1.2.0 in a multi-website deployment. When `setup:upgrade` runs, this error occurs on the `PurchaseOrder` module: `Module Magento_PurchaseOrder: Unable to apply data patch Magento\PurchaseOrder\Setup\Patch\Data\InitPurchaseOrderSalesSequence for moduleMagento_PurchaseOrder`. **Workaround**: Install the **B2B-716 Add NonTransactionableInterface interface to the InitPurchaseOrderSalesSequence data patch** hotfix, which is now available from the **My Account** > **Downloads** section of `magento.com`. - If a discount code expires before a Purchase Order (PO) is approved, the PO continues to display the discounted amount, but once the PO is approved, the order is placed at the non-discounted total. **Workaround**: Install the **B2B-709 Purchase Order Discount patch** hotfix for this issue, which is now available from the **My Account** > **Downloads** section of `magento.com`. - If items in a purchase order are out-of-stock, or of insufficient quantity when the purchase order is converted into an actual order, an error will occur. If backorders are enabled, the order will be processed normally. - diff --git a/src/guides/v2.4/test/testing.md b/src/guides/v2.4/test/testing.md index e83e1667ea9..9f27ca0fa99 100644 --- a/src/guides/v2.4/test/testing.md +++ b/src/guides/v2.4/test/testing.md @@ -102,7 +102,7 @@ It is run on changed `*.php` files using rule strictness [level 1][] and detects - Array has N duplicate keys - Call to an undefined method - Possibly undefined variables -- Unknown magic methods and properties on classes with __call and __get (supports DataObject's magic methods: get/set/has/uns) +- Unknown magic methods and properties on classes with `__call` and `__get` (supports DataObject's magic methods: get/set/has/uns) #### Suppressing errors diff --git a/src/guides/v2.4/ui_comp_guide/components/wysiwyg/add-custom-editor/_code-samples/ckeditor4Adapter.md b/src/guides/v2.4/ui_comp_guide/components/wysiwyg/add-custom-editor/_code-samples/ckeditor4Adapter.md deleted file mode 120000 index 97a261f0c8f..00000000000 --- a/src/guides/v2.4/ui_comp_guide/components/wysiwyg/add-custom-editor/_code-samples/ckeditor4Adapter.md +++ /dev/null @@ -1 +0,0 @@ -../../../../../../v2.3/ui_comp_guide/components/wysiwyg/add-custom-editor/_code-samples/ckeditor4Adapter.md \ No newline at end of file diff --git a/src/guides/v2.4/ui_comp_guide/components/wysiwyg/add-custom-editor/code-samples/ckeditor4Adapter.md b/src/guides/v2.4/ui_comp_guide/components/wysiwyg/add-custom-editor/code-samples/ckeditor4Adapter.md new file mode 120000 index 00000000000..9572008b48e --- /dev/null +++ b/src/guides/v2.4/ui_comp_guide/components/wysiwyg/add-custom-editor/code-samples/ckeditor4Adapter.md @@ -0,0 +1 @@ +../../../../../../v2.3/ui_comp_guide/components/wysiwyg/add-custom-editor/code-samples/ckeditor4Adapter.md \ No newline at end of file diff --git a/src/marketplace/sellers/product-descriptions.md b/src/marketplace/sellers/product-descriptions.md index 7d634d1ceb8..be4184e0e53 100644 --- a/src/marketplace/sellers/product-descriptions.md +++ b/src/marketplace/sellers/product-descriptions.md @@ -17,7 +17,7 @@ A detailed opening paragraph that describes the extension. ### List of features (required) - Add a “Features” heading, using H3 or H2 tags. -- List features vertically with bullet points. +- List features vertically with bullet points (minimum 5). - Only use the bullet point button in the Admin to create the bullet points. ### Demo links (recommended) @@ -27,7 +27,7 @@ A detailed opening paragraph that describes the extension. ### Heading Levels -Use headings for any additional sections. (H3 or H2 tags) +Use headings for any additional sections. Use only after "Features" section. (H3 or H2 tags) - Headings can be Black or Orange only. - Provide hyperlinks to functioning demos. @@ -96,4 +96,4 @@ _Example 3:_ ATTENTION: Use this extension at your own risk. Sensitive customer payment data is stored on your server. Merchants are expected to take every precaution that they are fully PCI certified. Please only purchase this extension if you have an environment where storing credit card information is permitted by law. -[1]: https://marketplacesupport.magento.com/hc/en-us \ No newline at end of file +[1]: https://marketplacesupport.magento.com/hc/en-us diff --git a/src/quality-patches/release-notes.md b/src/quality-patches/release-notes.md index adecd8a2186..75b699743df 100644 --- a/src/quality-patches/release-notes.md +++ b/src/quality-patches/release-notes.md @@ -18,6 +18,21 @@ The [Magento Quality Patches](https://github.com/magento/quality-patches) packag {:.bs-callout-info} See [Apply patches]({{ site.baseurl }}/guides/v2.4/comp-mgr/patching.html) for instructions on applying patches to your Magento projects. +## v1.0.5 + +- **MDVA-30841** _(for Magento `>=2.3.4 <2.3.6 || 2.4.0`)_—Fixes the issue with layered navigation, where the 'No' value for boolean type product attributes was not included in layered navigation if Elasticsearch was used as a search engine. +- **MDVA-28191** _(for Magento `>=2.3.3 <2.4.2`)_—Fixes the issue where no payment methods are loaded during order creation via Magento Admin panel. +- **MDVA-29959** _(for Magento B2B `>=1.1.0 <=1.1.3-p1`)_—Fixes the issue where restricted admin user with 'Companies' permissions is not allowed to delete company account. +- **MDVA-30265** _(for Magento `>=2.3.3 <2.4.2`)_—Fixes the issue where shipment tracking link stops working after Invoice creation. +- **MDVA-28409** _(for Magento `>=2.3.4 <2.3.6 || 2.4.0`)_—Fixes the issue where the "sales_clean_quotes" cron job fails with out-of-memory error when the number of expired quotes in the database is huge. +- **MDVA-30593** _(for Magento `>=2.3.0 <2.3.4`)_—Fixes the issue where quotes, that expired according to the Quote Lifetime setting, are not cleaned up. +- **MDVA-30107** _(for Magento `>=2.3.0 <2.3.6`)_—Fixes the issue where store switcher doesn't work as expected if different base URLs are used for store views. +- **MDVA-28763** _(for Magento `>=2.3.2 <2.3.4`)_—Fixes the issue where product image is getting duplicated after updating product information using REST API more than once. +- **MDVA-30284** _(for Magento `>=2.3.0 <2.4.2`)_—Fixes the issue where Catalog Search indexer fails due to the following Elasticsearch error: limit of total fields in index has been exceeded. +- **MDVA-29042** _(for Magento B2B `>=1.1.3 <=1.1.4-p2`)_—Fixes the issue where Catalog permissions were changed to Allow automatically after new product was added to the shared catalog. +- **MDVA-30428** _(for Magento `>=2.3.3 <2.4.2`)_—Fixes the issue where customers cannot add a product to wishlist if this product is assigned to a custom inventory source. +- **MDVA-28661** _(for Magento B2B `>=1.1.0 <1.2.2`)_—Fixes the issue where an error is thrown in the Company Users company account section after company admin is changed. + ## v1.0.4 - **MDVA-30195** _(for Magento `2.3.1 - 2.3.4-p2`)_—Fixes the issue where cron jobs fail if database name is too long, resulting in categories not being updated on the frontend. diff --git a/src/recommendations/install-configure.md b/src/recommendations/install-configure.md index 0e5ff0fd986..da1ea69e6a0 100644 --- a/src/recommendations/install-configure.md +++ b/src/recommendations/install-configure.md @@ -56,7 +56,7 @@ Like all of Magento, Product Recommendations uses Composer for installation and composer update magento/product-recommendations --with-dependencies ``` -If you need to update to a major version, such as from 2.0 to 3.0, you need to edit your project's root `composer.json` file. For example, let's open the main `composer.json` file and search for the `magento/product-recommendations` module: +To update to a major version, such as from 2.0 to 3.0, you must edit your project's root `composer.json` file. (See the [release notes]({{ page.baseurl }}/recommendations/release-notes.html) for information about the latest version.) For example, let's open the main `composer.json` file and search for the `magento/product-recommendations` module: ```json "require": { diff --git a/src/release/index.md b/src/release/index.md index 2ac21bd08aa..667b01e2785 100644 --- a/src/release/index.md +++ b/src/release/index.md @@ -11,14 +11,14 @@ Magento releases security and functional patches for each supported release line The following table provides the dates for scheduled releases in 2020 and 2021 (dates are subject to change): -| Quarter | Versions | General Availability | Pre-release | Beta | -|---------------------|----------------------------|----------------------|--------------------|--------------------| -| 2020 Q3 | 2.4.0
    2.3.5-p2 | July 28, 2020 | None | June 8, 2020 | -| 2020 Q4 | 2.4.1
    2.4.0-p1
    2.3.6 | October 15, 2020 | October 1, 2020 | September 10, 2020 | -| 2021 Q1 | 2.4.2
    2.4.1-p1
    2.3.7 | February 9, 2021 | January 26, 2021 | January 5, 2021 | -| 2021 Q2 | 2.4.3
    2.4.2-p1
    2.3.8 | May 11, 2021 | April 27, 2021 | April 6, 2021 | -| 2021 Q3 | 2.4.4
    2.4.3-p1
    2.3.9 | August 10, 2021 | July 27, 2021 | July 6, 2021 | -| 2021 Q4* | 2.4.4-p1
    2.3.10 | October 12, 2021 | September 28, 2021 | None | +| Quarter | Versions | General Availability | Pre-release | Beta | +|---------------------|----------------------------|----------------------|--------------------|-------------------------------------------| +| 2020 Q3 | 2.4.0
    2.3.5-p2 | July 28, 2020 | None | June 8, 2020 | +| 2020 Q4 | 2.4.1
    2.4.0-p1
    2.3.6 | October 15, 2020 | October 1, 2020 | September 10, 2020
    Available for 2.4.1 | +| 2021 Q1 | 2.4.2
    2.4.1-p1
    2.3.7 | February 9, 2021 | January 26, 2021 | January 5, 2021 | +| 2021 Q2 | 2.4.3
    2.4.2-p1
    2.3.8 | May 11, 2021 | April 27, 2021 | April 6, 2021 | +| 2021 Q3 | 2.4.4
    2.4.3-p1
    2.3.9 | August 10, 2021 | July 27, 2021 | July 6, 2021 | +| 2021 Q4* | 2.4.4-p1
    2.3.10 | October 12, 2021 | September 28, 2021 | None | _*There will not be a 2.4.5 release in 2021 Q4._ diff --git a/src/release/lifecycle-policy.md b/src/release/lifecycle-policy.md new file mode 100644 index 00000000000..28d894ad68f --- /dev/null +++ b/src/release/lifecycle-policy.md @@ -0,0 +1,27 @@ +--- +title: Lifecycle policy +group: release +--- + +For {{site.data.var.ece}} 2.3 and subsequent releases: + +- Magento will provide quality fixes for a minor release for a minimum of 12 months from the general availability announcement date of the next minor software release. + +- Magento will provide security fixes for a minor release for a minimum of 18 months from the general availability announcement date of the next minor software release. + +- Magento will provide security fixes through patch releases for currently supported minor release versions only. Security fixes will not be backported to previous minor releases, nor to previous patch releases within supported minor releases. + + For example, while 2.3 and 2.4 are currently supported minor releases, security fixes will be released as 2.3.X and 2.4.Y, where X and Y represent the next incremental patch release cumulative of all prior patches. Patch releases will not be released for prior minor releases that have reached end of support (for example, 2.2.Z), or as patches to prior patch releases (for example, 2.3.1.X). + +- Magento will provide quality fixes through patch release for the latest supported minor release version only. Quality fixes will be available as individual patches for all other currently supported minor release versions. Quality fixes will not be backported to other previous minor releases, nor to previous patch releases within supported minor releases. + + For example, while 2.3 and 2.4 are currently supported minor releases, individual patches will be released as 2.3.X and release patches will be released as 2.4.Y, where X and Y represent the next incremental patch release cumulative of all prior patches. Neither patch releases nor individual patches will be released for prior minor releases that have reached end of support (e.g. 2.2.2). + +| Release | Release Date | End of Quality Fixes | End of Security Fixes/
    End of Software Support | +|---------------------------|---------------|----------------------|---------------------------------------------------| +| {{site.data.var.ece}} 2.3 | November 2018 | July 2021 | April 2022* | +| {{site.data.var.ece}} 2.4 | July 2020 | | | + +** The End of Software Support date for {{site.data.vr.ece}} 2.3 has been extended to April 2022 due to impacts from COVID-19.* + +See [Magento Software Lifecycle Policy](https://magento.com/sites/default/files/magento-software-lifecycle-policy.pdf).