Commit 4de9b14c authored by Rémy Coutable's avatar Rémy Coutable

Merge branch '60475-add-ce-ee-vue-template-danger-check' into 'master'

Resolve "Add rule to Danger to detect possible CE/EE Vue <template> issues"

Closes #60475

See merge request gitlab-org/gitlab-ce!27328
parents 6015b521 c3268a6a
# frozen_string_literal: true
danger.import_plugin('danger/plugins/helper.rb') danger.import_plugin('danger/plugins/helper.rb')
unless helper.release_automation? unless helper.release_automation?
...@@ -16,4 +17,5 @@ unless helper.release_automation? ...@@ -16,4 +17,5 @@ unless helper.release_automation?
danger.import_dangerfile(path: 'danger/roulette') danger.import_dangerfile(path: 'danger/roulette')
danger.import_dangerfile(path: 'danger/single_codebase') danger.import_dangerfile(path: 'danger/single_codebase')
danger.import_dangerfile(path: 'danger/gitlab_ui_wg') danger.import_dangerfile(path: 'danger/gitlab_ui_wg')
danger.import_dangerfile(path: 'danger/ce_ee_vue_templates')
end end
# frozen_string_literal: true
require 'cgi'
def get_vue_files_with_ce_and_ee_versions(files)
files.select do |file|
if file.end_with?('.vue')
counterpart_path = if file.start_with?('ee/')
file.delete_prefix('ee/')
else
"ee/#{file}"
end
escaped_path = CGI.escape(counterpart_path)
api_endpoint = "https://gitlab.com/api/v4/projects/gitlab-org%2Fgitlab-ee/repository/files/#{escaped_path}?ref=master"
response = HTTParty.get(api_endpoint) # rubocop:disable Gitlab/HTTParty
response.code != 404
else
false
end
end
end
vue_candidates = get_vue_files_with_ce_and_ee_versions(helper.all_changed_files)
return if vue_candidates.empty?
message 'This merge request includes changes to Vue files that have both CE and EE versions.'
markdown(<<~MARKDOWN)
## Vue `<template>` in CE and EE
Some Vue files in CE have a counterpart in EE.
(For example, `path/to/file.vue` and `ee/path/to/file.vue`.)
When run in the context of CE, the `<template>` of the CE Vue file is used.
When run in the context of EE, the `<template>` of the EE Vue file is used.
It's easy to accidentally make a change to a CE `<template>` that _should_
appear in both CE and EE without making the change in both places.
When this happens, the change only takes effect in CE.
The following Vue files were changed as part of this merge request that
include both a CE and EE version of the file:
* #{vue_candidates.map { |path| "`#{path}`" }.join("\n* ")}
If you made a change to the `<template>` of any of these Vue files that
should be visible in both CE and EE, please ensure you have made your
change to both versions of the file.
### A better alternative
An even _better_ alternative is to refactor this component to only use
a single template for both CE and EE. More info on this approach here:
https://docs.gitlab.com/ee/development/ee_features.html#template-tag
MARKDOWN
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment