From 7a4582e96762f0a582cfbbd2cf085846fa96f1d3 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Fri, 22 Mar 2024 03:10:05 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .../release-environments/main.gitlab-ci.yml | 2 +- GITALY_SERVER_VERSION | 2 +- Gemfile | 6 +- Gemfile.checksum | 5 +- Gemfile.lock | 12 +- .../cycle_analytics/components/filter_bar.vue | 2 +- .../javascripts/batch_comments/index.js | 2 +- .../issue_board_filtered_search.vue | 2 +- .../components/details/ci_resource_header.vue | 138 ++++++++++---- .../catalog_resource.fragment.graphql | 1 + app/assets/javascripts/ci/catalog/index.js | 3 +- .../components/formatting_toolbar.vue | 8 +- .../javascripts/design_management/index.js | 4 +- app/assets/javascripts/diffs/index.js | 3 +- .../issuable_filtered_search_token_keys.js | 2 +- .../issuable/components/issuable_by_email.vue | 21 +- .../issuable/components/issue_milestone.vue | 2 +- .../components/issues_dashboard_app.vue | 2 +- .../empty_state_without_any_issues.vue | 158 ++++++++------- ...ty_state_without_any_issues_experiment.vue | 180 ++++++++++++++++++ .../gl_card_empty_state_experiment.vue | 34 ++++ .../list/components/issue_card_time_info.vue | 2 +- .../list/components/issues_list_app.vue | 11 +- .../issues/service_desk/search_tokens.js | 2 +- app/assets/javascripts/mr_notes/init_notes.js | 2 +- app/assets/javascripts/notes/index.js | 2 +- .../javascripts/search/store/constants.js | 2 +- .../javascripts/sidebar/mount_sidebar.js | 2 +- .../markdown/comment_templates_dropdown.vue | 15 +- .../vue_shared/components/markdown/header.vue | 8 +- app/assets/javascripts/work_items/index.js | 4 +- .../page_bundles/issuable_list.scss | 7 + app/controllers/admin/groups_controller.rb | 5 +- app/controllers/groups_controller.rb | 5 +- .../import/gitlab_groups_controller.rb | 5 +- app/controllers/sessions_controller.rb | 9 - app/helpers/issuables_helper.rb | 7 + app/helpers/merge_requests_helper.rb | 4 +- app/helpers/system_note_helper.rb | 2 +- app/helpers/work_items_helper.rb | 4 +- app/models/commit.rb | 3 +- app/models/user.rb | 1 + app/services/groups/create_service.rb | 106 ++++++----- app/services/groups/nested_create_service.rb | 2 +- app/views/explore/catalog/show.html.haml | 2 +- app/views/projects/_issue.html.haml | 2 +- .../issues/_design_management.html.haml | 2 +- .../projects/issues/_discussion.html.haml | 2 +- .../merge_requests/_merge_request.html.haml | 2 +- .../projects/merge_requests/_page.html.haml | 2 +- app/views/shared/snippets/_snippet.html.haml | 5 +- .../gitlab_com_derisk/ci_fix_input_types.yml | 9 - ...erify_load_performance_testing_monthly.yml | 2 +- ...templates_verify_accessibility_monthly.yml | 2 +- ...p_ci_templates_verify_failfast_monthly.yml | 2 +- ...tes_verify_browser_performance_monthly.yml | 2 +- ...ify_browser_performance_latest_monthly.yml | 2 +- ...lates_security_secure_binaries_monthly.yml | 2 +- ..._jobs_load_performance_testing_monthly.yml | 2 +- ...emplates_jobs_secret_detection_monthly.yml | 2 +- ...bs_browser_performance_testing_monthly.yml | 2 +- ...ser_performance_testing_latest_monthly.yml | 2 +- ..._jobs_load_performance_testing_monthly.yml | 2 +- ...bs_browser_performance_testing_monthly.yml | 2 +- ...ser_performance_testing_latest_monthly.yml | 2 +- ...licit_security_secure_binaries_monthly.yml | 2 +- ..._templates_qualys_iac_security_monthly.yml | 2 +- ...verify_load_performance_testing_weekly.yml | 2 +- ..._templates_verify_accessibility_weekly.yml | 2 +- ..._p_ci_templates_verify_failfast_weekly.yml | 2 +- ...ates_verify_browser_performance_weekly.yml | 2 +- ...rify_browser_performance_latest_weekly.yml | 2 +- ...plates_security_secure_binaries_weekly.yml | 2 +- ...s_jobs_load_performance_testing_weekly.yml | 2 +- ...templates_jobs_secret_detection_weekly.yml | 2 +- ...obs_browser_performance_testing_weekly.yml | 2 +- ...wser_performance_testing_latest_weekly.yml | 2 +- ...t_jobs_load_performance_testing_weekly.yml | 2 +- ...obs_browser_performance_testing_weekly.yml | 2 +- ...wser_performance_testing_latest_weekly.yml | 2 +- ...plicit_security_secure_binaries_weekly.yml | 2 +- ...i_templates_qualys_iac_security_weekly.yml | 2 +- config/routes/development.rb | 1 + data/whats_new/202403210001_16_10.yml | 83 ++++++++ .../monitoring/prometheus/web_exporter.md | 2 +- doc/api/merge_requests.md | 85 ++++++++- doc/ci/components/index.md | 2 +- doc/ci/triggers/index.md | 8 +- doc/ci/yaml/index.md | 20 +- doc/development/database/database_lab.md | 89 +++------ doc/development/database/database_lab_pgai.md | 76 ++++++++ doc/install/docker.md | 149 +-------------- doc/install/docker_troubleshooting.md | 156 +++++++++++++++ doc/integration/kerberos.md | 119 ------------ doc/integration/kerberos_troubleshooting.md | 130 +++++++++++++ doc/update/versions/gitlab_16_changes.md | 2 +- lib/api/group_import.rb | 5 +- lib/api/groups.rb | 9 +- .../groups/loaders/group_loader.rb | 5 +- lib/gitlab/ci/config/interpolation/block.rb | 8 - .../ci/config/interpolation/template.rb | 36 +--- .../import_export/group/tree_restorer.rb | 3 +- .../seeders/ci/runner/runner_fleet_seeder.rb | 2 +- .../concurrency_limit/workers_concurrency.rb | 6 +- .../your_work/menus/milestones_menu.rb | 2 +- lib/tasks/gitlab/seed/group_seed.rake | 4 +- locale/gitlab.pot | 30 ++- qa/gdk/Dockerfile.gdk | 2 +- .../auto_devops/auto_devops_templates_spec.rb | 6 +- spec/controllers/sessions_controller_spec.rb | 16 ++ spec/features/users/login_spec.rb | 9 - spec/frontend/boards/mock_data.js | 2 +- .../details/ci_resource_header_spec.js | 58 +++++- .../pages/ci_resource_details_page_spec.js | 2 +- spec/frontend/ci/catalog/mock.js | 37 +++- .../components/formatting_toolbar_spec.js | 2 +- .../components/issuable_by_email_spec.js | 17 +- .../components/issue_milestone_spec.js | 2 +- ...tate_without_any_issues_experiment_spec.js | 159 ++++++++++++++++ .../empty_state_without_any_issues_spec.js | 19 ++ .../gl_card_empty_state_experiment_spec.js | 35 ++++ .../components/issue_card_time_info_spec.js | 2 +- .../list/components/issues_list_app_spec.js | 19 ++ spec/frontend/search/mock_data.js | 2 +- .../filtered_search_bar/mock_data.js | 2 +- .../comment_templates_dropdown_spec.js | 23 ++- .../components/markdown/header_spec.js | 4 +- spec/frontend/work_items/mock_data.js | 6 +- spec/helpers/merge_requests_helper_spec.rb | 1 + spec/helpers/work_items_helper_spec.rb | 3 +- .../commit_reference_filter_spec.rb | 14 ++ .../groups/loaders/group_loader_spec.rb | 7 +- .../ci/config/interpolation/block_spec.rb | 20 -- .../ci/config/interpolation/template_spec.rb | 20 -- .../interpolation/text_interpolator_spec.rb | 2 +- .../interpolation/text_template_spec.rb | 2 +- .../workers_concurrency_spec.rb | 13 ++ spec/models/user_spec.rb | 24 +++ spec/services/groups/create_service_spec.rb | 6 +- spec/support/rspec_order_todo.yml | 2 +- .../snippets/_snippet.html.haml_spec.rb | 2 +- 141 files changed, 1701 insertions(+), 756 deletions(-) create mode 100644 app/assets/javascripts/issues/list/components/empty_state_without_any_issues_experiment.vue create mode 100644 app/assets/javascripts/issues/list/components/gl_card_empty_state_experiment.vue delete mode 100644 config/feature_flags/gitlab_com_derisk/ci_fix_input_types.yml create mode 100644 data/whats_new/202403210001_16_10.yml create mode 100644 doc/development/database/database_lab_pgai.md create mode 100644 doc/install/docker_troubleshooting.md create mode 100644 doc/integration/kerberos_troubleshooting.md create mode 100644 spec/frontend/issues/list/components/empty_state_without_any_issues_experiment_spec.js create mode 100644 spec/frontend/issues/list/components/gl_card_empty_state_experiment_spec.js diff --git a/.gitlab/ci/release-environments/main.gitlab-ci.yml b/.gitlab/ci/release-environments/main.gitlab-ci.yml index 8ff0f160565..0b75e10898f 100644 --- a/.gitlab/ci/release-environments/main.gitlab-ci.yml +++ b/.gitlab/ci/release-environments/main.gitlab-ci.yml @@ -57,7 +57,7 @@ release-environments-qa: - .qa-base timeout: 3h variables: - QA_SCENARIO: "Test::Instance::Smoke" + QA_SCENARIO: "Test::Instance::Any" RELEASE: "${CI_REGISTRY}/${CI_PROJECT_PATH}/gitlab-ee-qa:${CI_COMMIT_SHA}" GITLAB_QA_OPTS: --address "https://gitlab.${ENVIRONMENT}.release.gke.gitlab.net" GITLAB_INITIAL_ROOT_PASSWORD: "${RELEASE_ENVIRONMENTS_ROOT_PASSWORD}" diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION index d847ce8c2e2..ac6695a39d3 100644 --- a/GITALY_SERVER_VERSION +++ b/GITALY_SERVER_VERSION @@ -1 +1 @@ -f68eed8a9d41bfe20840e87c8a9f6cd58db30de3 +cb8bec7d843749b73a0fc06f44e6aec25b378d92 diff --git a/Gemfile b/Gemfile index 1d7c35ab3ed..bd5209e4ca6 100644 --- a/Gemfile +++ b/Gemfile @@ -376,7 +376,7 @@ gem 'thrift', '>= 0.16.0' # rubocop:todo Gemfile/MissingFeatureCategory # I18n gem 'rails-i18n', '~> 7.0', feature_category: :internationalization -gem 'gettext_i18n_rails', '~> 1.11.0', feature_category: :internationalization +gem 'gettext_i18n_rails', '~> 1.12.0', feature_category: :internationalization gem 'gettext', '~> 3.4', '>= 3.4.9', require: false, group: [:development, :test], @@ -419,6 +419,8 @@ group :development do gem 'ruby-lsp-rails', "~> 0.3.0", feature_category: :tooling gem 'ruby-lsp-rspec', "~> 0.1.10", require: false, feature_category: :tooling + + gem 'gdk-toogle', '~> 0.9', require: 'toogle', feature_category: :tooling end group :development, :test do @@ -500,7 +502,7 @@ end group :test do gem 'fuubar', '~> 2.2.0' # rubocop:todo Gemfile/MissingFeatureCategory gem 'rspec-retry', '~> 0.6.2', feature_category: :tooling - gem 'rspec_profiling', '~> 0.0.8', feature_category: :tooling + gem 'rspec_profiling', '~> 0.0.9', feature_category: :tooling gem 'rspec-benchmark', '~> 0.6.0', feature_category: :tooling gem 'rspec-parameterized', '~> 1.0', require: false, feature_category: :tooling gem 'os', '~> 1.1', '>= 1.1.4', feature_category: :tooling diff --git a/Gemfile.checksum b/Gemfile.checksum index f3317e56afd..a13753d37a3 100644 --- a/Gemfile.checksum +++ b/Gemfile.checksum @@ -201,10 +201,11 @@ {"name":"fuubar","version":"2.2.0","platform":"ruby","checksum":"9b0263c4074f39c68b37f1e4e69a7d3cfc7523c41bea43601235daa723179b4a"}, {"name":"fuzzyurl","version":"0.9.0","platform":"ruby","checksum":"542efa80f2bcaadbdc402c2f0b572f2e335a1d53e375aecad68bbb3d86860c0f"}, {"name":"gapic-common","version":"0.20.0","platform":"ruby","checksum":"af304704b440f7a2a1e8ce6ecce109a67b79fa173f36f11b513b8a35ce509366"}, +{"name":"gdk-toogle","version":"0.9.3","platform":"ruby","checksum":"897f5d3d5d2b2d4a4438c5fb8227f2888d3ad0180353c0d62d0dece2cd22eebf"}, {"name":"gemoji","version":"3.0.1","platform":"ruby","checksum":"80553f2f4932a7a95fb1b3c7c63f7dd937e7c8c610164bbdea28fd06eba5f36d"}, {"name":"get_process_mem","version":"0.2.7","platform":"ruby","checksum":"4afd3c3641dd6a817c09806c7d6d509d8a9984512ac38dea8b917426bbf77eba"}, {"name":"gettext","version":"3.4.9","platform":"ruby","checksum":"292864fe6a15c224cee4125a4a72fab426fdbb280e4cff3cfe44935f549b009a"}, -{"name":"gettext_i18n_rails","version":"1.11.0","platform":"ruby","checksum":"e19c7e4a256c500f7f38396dca44a282b9838ae278f57c362993a54964b22bbe"}, +{"name":"gettext_i18n_rails","version":"1.12.0","platform":"ruby","checksum":"6ac4817731a9e2ce47e1e83381ac34f9142263bc2911aaaafb2526d2f1afc1be"}, {"name":"git","version":"1.18.0","platform":"ruby","checksum":"c9b80462e4565cd3d7a9ba8440c41d2c52244b17b0dad0bfddb46de70630c465"}, {"name":"gitaly","version":"16.10.0.pre.rc1","platform":"ruby","checksum":"483162f2c271fc78e985ad6b25bd06f69a91a4fabc2ff6f25909db7f69458cdb"}, {"name":"gitlab","version":"4.19.0","platform":"ruby","checksum":"3f645e3e195dbc24f0834fbf83e8ccfb2056d8e9712b01a640aad418a6949679"}, @@ -560,7 +561,7 @@ {"name":"rspec-retry","version":"0.6.2","platform":"ruby","checksum":"6101ba23a38809811ae3484acde4ab481c54d846ac66d5037ccb40131a60d858"}, {"name":"rspec-support","version":"3.12.0","platform":"ruby","checksum":"dd4d44b247ff679b95b5607ac5641d197a5f9b1d33f916123cb98fc5f917c58b"}, {"name":"rspec_junit_formatter","version":"0.6.0","platform":"ruby","checksum":"40dde674e6ae4e6cc0ff560da25497677e34fefd2338cc467a8972f602b62b15"}, -{"name":"rspec_profiling","version":"0.0.8","platform":"ruby","checksum":"b31ee456811b8914806a9d46b07959877fc319a0515b1c207987d70a1c499445"}, +{"name":"rspec_profiling","version":"0.0.9","platform":"ruby","checksum":"6199be2daeaa14bac3d10d704dbb0a8df052cf046332c505603263aea24f7590"}, {"name":"rubocop","version":"1.57.2","platform":"ruby","checksum":"8f679dfe42d7821dc61dafb17d14b1294343157a197b9f8a23720ca17fb9161b"}, {"name":"rubocop-ast","version":"1.29.0","platform":"ruby","checksum":"d1da2ab279a074baefc81758ac430c5768a8da8c7438dd4e5819ce5984d00ba1"}, {"name":"rubocop-capybara","version":"2.19.0","platform":"ruby","checksum":"fa329e0f185be313fa5dabd6056f83a718db7f4a259aa97fc287a40254899ccb"}, diff --git a/Gemfile.lock b/Gemfile.lock index ec8778ac997..4db14ca4fec 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -669,6 +669,9 @@ GEM googleapis-common-protos-types (>= 1.3.1, < 2.a) googleauth (~> 1.0) grpc (~> 1.36) + gdk-toogle (0.9.3) + haml + rails (>= 7.0.4.2) gemoji (3.0.1) get_process_mem (0.2.7) ffi (~> 1.0) @@ -678,7 +681,7 @@ GEM prime racc text (>= 1.3.0) - gettext_i18n_rails (1.11.0) + gettext_i18n_rails (1.12.0) fast_gettext (>= 0.9.0) git (1.18.0) addressable (~> 2.8) @@ -1471,7 +1474,7 @@ GEM rspec-support (3.12.0) rspec_junit_formatter (0.6.0) rspec-core (>= 2, < 4, != 2.12.0) - rspec_profiling (0.0.8) + rspec_profiling (0.0.9) activerecord get_process_mem rails @@ -1899,8 +1902,9 @@ DEPENDENCIES fog-local (~> 0.8) fugit (~> 1.8.1) fuubar (~> 2.2.0) + gdk-toogle (~> 0.9) gettext (~> 3.4, >= 3.4.9) - gettext_i18n_rails (~> 1.11.0) + gettext_i18n_rails (~> 1.12.0) gitaly (~> 16.10.0.pre.rc1) gitlab-backup-cli! gitlab-chronic (~> 0.10.5) @@ -2076,7 +2080,7 @@ DEPENDENCIES rspec-rails (~> 6.1.1) rspec-retry (~> 0.6.2) rspec_junit_formatter - rspec_profiling (~> 0.0.8) + rspec_profiling (~> 0.0.9) rubocop ruby-fogbugz (~> 0.3.0) ruby-lsp (~> 0.14.4) diff --git a/app/assets/javascripts/analytics/cycle_analytics/components/filter_bar.vue b/app/assets/javascripts/analytics/cycle_analytics/components/filter_bar.vue index a69909a68dd..a613b6e007c 100644 --- a/app/assets/javascripts/analytics/cycle_analytics/components/filter_bar.vue +++ b/app/assets/javascripts/analytics/cycle_analytics/components/filter_bar.vue @@ -51,7 +51,7 @@ export default { tokens() { return [ { - icon: 'clock', + icon: 'milestone', title: TOKEN_TITLE_MILESTONE, type: TOKEN_TYPE_MILESTONE, token: MilestoneToken, diff --git a/app/assets/javascripts/batch_comments/index.js b/app/assets/javascripts/batch_comments/index.js index fe3e27a253c..a4ae6672d9a 100644 --- a/app/assets/javascripts/batch_comments/index.js +++ b/app/assets/javascripts/batch_comments/index.js @@ -22,7 +22,7 @@ export const initReviewBar = () => { ReviewBar: () => import('./components/review_bar.vue'), }, provide: { - newCommentTemplatePath: el.dataset.newCommentTemplatePath, + newCommentTemplatePaths: JSON.parse(el.dataset.newCommentTemplatePaths), canSummarize: parseBoolean(el.dataset.canSummarize), }, computed: { diff --git a/app/assets/javascripts/boards/components/issue_board_filtered_search.vue b/app/assets/javascripts/boards/components/issue_board_filtered_search.vue index 2e2d04996ee..9f215d848f6 100644 --- a/app/assets/javascripts/boards/components/issue_board_filtered_search.vue +++ b/app/assets/javascripts/boards/components/issue_board_filtered_search.vue @@ -145,7 +145,7 @@ export default { { type: TOKEN_TYPE_MILESTONE, title: TOKEN_TITLE_MILESTONE, - icon: 'clock', + icon: 'milestone', symbol: '%', token: MilestoneToken, unique: true, diff --git a/app/assets/javascripts/ci/catalog/components/details/ci_resource_header.vue b/app/assets/javascripts/ci/catalog/components/details/ci_resource_header.vue index f16d097a1b1..072b863c52b 100644 --- a/app/assets/javascripts/ci/catalog/components/details/ci_resource_header.vue +++ b/app/assets/javascripts/ci/catalog/components/details/ci_resource_header.vue @@ -1,20 +1,40 @@ diff --git a/app/assets/javascripts/ci/catalog/graphql/fragments/catalog_resource.fragment.graphql b/app/assets/javascripts/ci/catalog/graphql/fragments/catalog_resource.fragment.graphql index db706006688..ded14b18664 100644 --- a/app/assets/javascripts/ci/catalog/graphql/fragments/catalog_resource.fragment.graphql +++ b/app/assets/javascripts/ci/catalog/graphql/fragments/catalog_resource.fragment.graphql @@ -21,6 +21,7 @@ fragment CatalogResourceFields on CiCatalogResource { author { id name + state webUrl } } diff --git a/app/assets/javascripts/ci/catalog/index.js b/app/assets/javascripts/ci/catalog/index.js index 34866bfb821..0678f7f2126 100644 --- a/app/assets/javascripts/ci/catalog/index.js +++ b/app/assets/javascripts/ci/catalog/index.js @@ -15,7 +15,7 @@ export const initCatalog = (selector = '#js-ci-cd-catalog') => { } const { dataset } = el; - const { ciCatalogPath } = dataset; + const { ciCatalogPath, reportAbusePath } = dataset; Vue.use(VueApollo); @@ -30,6 +30,7 @@ export const initCatalog = (selector = '#js-ci-cd-catalog') => { apolloProvider, provide: { ciCatalogPath, + reportAbusePath, }, render(h) { return h(GlobalCatalog); diff --git a/app/assets/javascripts/content_editor/components/formatting_toolbar.vue b/app/assets/javascripts/content_editor/components/formatting_toolbar.vue index c1eae345f72..5eea12de477 100644 --- a/app/assets/javascripts/content_editor/components/formatting_toolbar.vue +++ b/app/assets/javascripts/content_editor/components/formatting_toolbar.vue @@ -21,7 +21,7 @@ export default { HeaderDivider, }, inject: { - newCommentTemplatePath: { default: null }, + newCommentTemplatePaths: { default: () => [] }, tiptapEditor: { default: null }, contentEditor: { default: null }, }, @@ -199,11 +199,11 @@ export default { :label="__('Add a quick action')" @execute="trackToolbarControlExecution" /> - + diff --git a/app/assets/javascripts/design_management/index.js b/app/assets/javascripts/design_management/index.js index 12bb4b830f8..e4d3f1a3341 100644 --- a/app/assets/javascripts/design_management/index.js +++ b/app/assets/javascripts/design_management/index.js @@ -14,7 +14,7 @@ export default () => { issuePath, registerPath, signInPath, - newCommentTemplatePath, + newCommentTemplatePaths, } = el.dataset; const router = createRouter(issuePath); @@ -39,7 +39,7 @@ export default () => { issueIid, registerPath, signInPath, - newCommentTemplatePath, + newCommentTemplatePaths: JSON.parse(newCommentTemplatePaths), }, mounted() { performanceMarkAndMeasure({ diff --git a/app/assets/javascripts/diffs/index.js b/app/assets/javascripts/diffs/index.js index 9acfda93303..eed57d2edd5 100644 --- a/app/assets/javascripts/diffs/index.js +++ b/app/assets/javascripts/diffs/index.js @@ -17,6 +17,7 @@ export default function initDiffsApp(store = notesStore) { const { dataset } = el; Vue.use(VueApollo); + const { newCommentTemplatePaths } = dataset; const vm = new Vue({ el, @@ -27,7 +28,7 @@ export default function initDiffsApp(store = notesStore) { store, apolloProvider, provide: { - newCommentTemplatePath: dataset.newCommentTemplatePath, + newCommentTemplatePaths: newCommentTemplatePaths ? JSON.parse(newCommentTemplatePaths) : [], }, data() { return { diff --git a/app/assets/javascripts/filtered_search/issuable_filtered_search_token_keys.js b/app/assets/javascripts/filtered_search/issuable_filtered_search_token_keys.js index 5a785de2e66..7665b53013b 100644 --- a/app/assets/javascripts/filtered_search/issuable_filtered_search_token_keys.js +++ b/app/assets/javascripts/filtered_search/issuable_filtered_search_token_keys.js @@ -43,7 +43,7 @@ export const createTokenKeys = ({ disableReleaseFilter = false } = {}) => { type: 'string', param: 'title', symbol: '%', - icon: 'clock', + icon: 'milestone', tag: '%milestone', }, { diff --git a/app/assets/javascripts/issuable/components/issuable_by_email.vue b/app/assets/javascripts/issuable/components/issuable_by_email.vue index 71ec5544c34..647339d3dc2 100644 --- a/app/assets/javascripts/issuable/components/issuable_by_email.vue +++ b/app/assets/javascripts/issuable/components/issuable_by_email.vue @@ -52,6 +52,23 @@ export default { default: '', }, }, + props: { + buttonClass: { + type: String, + required: false, + default: null, + }, + variant: { + type: String, + required: false, + default: 'link', + }, + text: { + type: String, + required: false, + default: __('Email a new %{name} to this project'), + }, + }, data() { return { email: this.initialEmail, @@ -90,8 +107,8 @@ export default {