c3268a6af5
This commit adds a rule to Danger that warns the developer when their MR includes changes to a CE .vue file that has a counterpart in the EE repo or vice-versa.
56 lines
2 KiB
Ruby
56 lines
2 KiB
Ruby
# 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
|