diff options
30 files changed, 132 insertions, 84 deletions
diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION index 373aea97570..f269cd1b8b6 100644 --- a/GITALY_SERVER_VERSION +++ b/GITALY_SERVER_VERSION @@ -1 +1 @@ -1.57.0 +1.58.0
\ No newline at end of file @@ -283,7 +283,7 @@ gem 'sentry-raven', '~> 2.9' gem 'premailer-rails', '~> 1.9.7' # LabKit: Tracing and Correlation -gem 'gitlab-labkit', '~> 0.3.0' +gem 'gitlab-labkit', '~> 0.4.2' # I18n gem 'ruby_parser', '~> 3.8', require: false @@ -424,8 +424,8 @@ group :ed25519 do gem 'bcrypt_pbkdf', '~> 1.0' end -# Gitaly GRPC client -gem 'gitaly-proto', '~> 1.37.0', require: 'gitaly' +# Gitaly GRPC protocol definitions +gem 'gitaly', '~> 1.58.0' gem 'grpc', '~> 1.19.0' diff --git a/Gemfile.lock b/Gemfile.lock index 68c40cd19f7..6aa96d54abb 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -309,13 +309,13 @@ GEM gettext_i18n_rails (>= 0.7.1) po_to_json (>= 1.0.0) rails (>= 3.2.0) - gitaly-proto (1.37.0) + gitaly (1.58.0) grpc (~> 1.0) github-markup (1.7.0) - gitlab-labkit (0.3.0) + gitlab-labkit (0.4.2) actionpack (~> 5) activesupport (~> 5) - grpc (~> 1.19.0) + grpc (~> 1.19) jaeger-client (~> 0.10) opentracing (~> 0.4) gitlab-markup (1.7.0) @@ -1096,9 +1096,9 @@ DEPENDENCIES gettext (~> 3.2.2) gettext_i18n_rails (~> 1.8.0) gettext_i18n_rails_js (~> 1.3) - gitaly-proto (~> 1.37.0) + gitaly (~> 1.58.0) github-markup (~> 1.7.0) - gitlab-labkit (~> 0.3.0) + gitlab-labkit (~> 0.4.2) gitlab-markup (~> 1.7.0) gitlab-sidekiq-fetcher (= 0.5.1) gitlab-styles (~> 2.7) diff --git a/app/controllers/import/bitbucket_server_controller.rb b/app/controllers/import/bitbucket_server_controller.rb index f71ea8642cd..dc72a4e4fd9 100644 --- a/app/controllers/import/bitbucket_server_controller.rb +++ b/app/controllers/import/bitbucket_server_controller.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true class Import::BitbucketServerController < Import::BaseController + include ActionView::Helpers::SanitizeHelper + before_action :verify_bitbucket_server_import_enabled before_action :bitbucket_auth, except: [:new, :configure] before_action :validate_import_params, only: [:create] @@ -57,7 +59,7 @@ class Import::BitbucketServerController < Import::BaseController # rubocop: disable CodeReuse/ActiveRecord def status - @collection = bitbucket_client.repos(page_offset: page_offset, limit: limit_per_page) + @collection = bitbucket_client.repos(page_offset: page_offset, limit: limit_per_page, filter: sanitized_filter_param) @repos, @incompatible_repos = @collection.partition { |repo| repo.valid? } # Use the import URL to filter beyond what BaseService#find_already_added_projects @@ -147,4 +149,8 @@ class Import::BitbucketServerController < Import::BaseController def limit_per_page BitbucketServer::Paginator::PAGE_LENGTH end + + def sanitized_filter_param + sanitize(params[:filter]) + end end diff --git a/app/services/projects/update_service.rb b/app/services/projects/update_service.rb index 2bc04470342..caab946174d 100644 --- a/app/services/projects/update_service.rb +++ b/app/services/projects/update_service.rb @@ -122,7 +122,7 @@ module Projects ProjectWiki.new(project, project.owner).wiki rescue ProjectWiki::CouldNotCreateWikiError log_error("Could not create wiki for #{project.full_name}") - Gitlab::Metrics.counter(:wiki_can_not_be_created_total, 'Counts the times we failed to create a wiki') + Gitlab::Metrics.counter(:wiki_can_not_be_created_total, 'Counts the times we failed to create a wiki').increment end def update_pages_config diff --git a/app/views/import/bitbucket_server/status.html.haml b/app/views/import/bitbucket_server/status.html.haml index 40609fddbde..aac09801d91 100644 --- a/app/views/import/bitbucket_server/status.html.haml +++ b/app/views/import/bitbucket_server/status.html.haml @@ -17,8 +17,13 @@ = button_tag class: 'btn btn-import btn-success js-import-all' do = _('Import all projects') = icon('spinner spin', class: 'loading-icon') - .btn-group - = link_to('Reconfigure', configure_import_bitbucket_server_path, class: 'btn btn-primary', method: :post) + +.btn-group + = link_to('Reconfigure', configure_import_bitbucket_server_path, class: 'btn btn-primary', method: :post) + +.input-btn-group.float-right + = form_tag status_import_bitbucket_server_path, :method => 'get' do + = text_field_tag :filter, sanitize(params[:filter]), class: 'form-control append-bottom-10', placeholder: _('Filter your projects by name'), size: 40, autoFocus: true .table-responsive.prepend-top-10 %table.table.import-jobs @@ -62,7 +67,7 @@ = text_field_tag :path, current_user.namespace_path, class: "input-group-text input-large form-control", tabindex: 1, disabled: true %span.input-group-prepend .input-group-text / - = text_field_tag :path, sanitize_project_name(repo.slug), class: "input-mini form-control", tabindex: 2, autofocus: true, required: true + = text_field_tag :path, sanitize_project_name(repo.slug), class: "input-mini form-control", tabindex: 2, required: true %td.import-actions.job-status = button_tag class: 'btn btn-import js-add-to-import' do Import diff --git a/changelogs/unreleased/alipniagov-fix-wiki_can_not_be_created_total-counter.yml b/changelogs/unreleased/alipniagov-fix-wiki_can_not_be_created_total-counter.yml new file mode 100644 index 00000000000..58f969ed742 --- /dev/null +++ b/changelogs/unreleased/alipniagov-fix-wiki_can_not_be_created_total-counter.yml @@ -0,0 +1,5 @@ +--- +title: Fix :wiki_can_not_be_created_total counter +merge_request: 31673 +author: +type: fixed diff --git a/changelogs/unreleased/georgekoltsov-51260-add-filtering-to-bitbucket-server-import.yml b/changelogs/unreleased/georgekoltsov-51260-add-filtering-to-bitbucket-server-import.yml new file mode 100644 index 00000000000..c455b4cf642 --- /dev/null +++ b/changelogs/unreleased/georgekoltsov-51260-add-filtering-to-bitbucket-server-import.yml @@ -0,0 +1,5 @@ +--- +title: Add BitBucketServer project import filtering +merge_request: 31420 +author: +type: added diff --git a/changelogs/unreleased/georgekoltsov-63408-user-mapping.yml b/changelogs/unreleased/georgekoltsov-63408-user-mapping.yml new file mode 100644 index 00000000000..451aac9c2e3 --- /dev/null +++ b/changelogs/unreleased/georgekoltsov-63408-user-mapping.yml @@ -0,0 +1,5 @@ +--- +title: 'Fix missing author line (`Created by: <user>`) in MRs/issues/comments of imported Bitbucket Cloud project' +merge_request: 31579 +author: +type: fixed diff --git a/doc/user/project/import/bitbucket.md b/doc/user/project/import/bitbucket.md index 5abce39c093..e509e333313 100644 --- a/doc/user/project/import/bitbucket.md +++ b/doc/user/project/import/bitbucket.md @@ -31,12 +31,12 @@ to enable this if not already. ## How it works When issues/pull requests are being imported, the Bitbucket importer tries to find -the Bitbucket author/assignee in GitLab's database using the Bitbucket ID. For this -to work, the Bitbucket author/assignee should have signed in beforehand in GitLab -and **associated their Bitbucket account**. If the user is not -found in GitLab's database, the project creator (most of the times the current -user that started the import process) is set as the author, but a reference on -the issue about the original Bitbucket author is kept. +the Bitbucket author/assignee in GitLab's database using the Bitbucket `nickname`. +For this to work, the Bitbucket author/assignee should have signed in beforehand in GitLab +and **associated their Bitbucket account**. Their `nickname` must also match their Bitbucket +`username.`. If the user is not found in GitLab's database, the project creator +(most of the times the current user that started the import process) is set as the author, +but a reference on the issue about the original Bitbucket author is kept. The importer will create any new namespaces (groups) if they don't exist or in the case the namespace is taken, the repository will be imported under the user's diff --git a/doc/user/project/import/bitbucket_server.md b/doc/user/project/import/bitbucket_server.md index 4e1614d82a5..28e211ee2ba 100644 --- a/doc/user/project/import/bitbucket_server.md +++ b/doc/user/project/import/bitbucket_server.md @@ -32,6 +32,8 @@ Import your projects from Bitbucket Server to GitLab with minimal effort. 1. Attachments in Markdown are currently not imported. 1. Task lists are not imported. 1. Emoji reactions are not imported +1. Project filtering does not support fuzzy search (only `starts with` or `full + match strings` are currently supported) ## How it works @@ -68,7 +70,7 @@ namespace that started the import process. ![Grant access](img/bitbucket_server_import_credentials.png) 1. Click on the projects that you'd like to import or **Import all projects**. - You can also select the namespace under which each project will be + You can also filter projects by name and select the namespace under which each project will be imported. - ![Import projects](img/bitbucket_server_import_select_project.png) + ![Import projects](img/bitbucket_server_import_select_project_v12_3.png) diff --git a/doc/user/project/import/img/bitbucket_server_import_select_project.png b/doc/user/project/import/img/bitbucket_server_import_select_project.png Binary files differdeleted file mode 100644 index e7fddef9955..00000000000 --- a/doc/user/project/import/img/bitbucket_server_import_select_project.png +++ /dev/null diff --git a/doc/user/project/import/img/bitbucket_server_import_select_project_v12_3.png b/doc/user/project/import/img/bitbucket_server_import_select_project_v12_3.png Binary files differnew file mode 100644 index 00000000000..1c344853cc8 --- /dev/null +++ b/doc/user/project/import/img/bitbucket_server_import_select_project_v12_3.png diff --git a/lib/bitbucket/representation/comment.rb b/lib/bitbucket/representation/comment.rb index 1b8dc27793a..127598a76ab 100644 --- a/lib/bitbucket/representation/comment.rb +++ b/lib/bitbucket/representation/comment.rb @@ -4,7 +4,7 @@ module Bitbucket module Representation class Comment < Representation::Base def author - user['username'] + user['nickname'] end def note diff --git a/lib/bitbucket/representation/issue.rb b/lib/bitbucket/representation/issue.rb index a88797cdab9..3f6db9cb75b 100644 --- a/lib/bitbucket/representation/issue.rb +++ b/lib/bitbucket/representation/issue.rb @@ -14,7 +14,7 @@ module Bitbucket end def author - raw.dig('reporter', 'username') + raw.dig('reporter', 'nickname') end def description diff --git a/lib/bitbucket/representation/pull_request.rb b/lib/bitbucket/representation/pull_request.rb index 6a0e8b354bf..a498c9bc213 100644 --- a/lib/bitbucket/representation/pull_request.rb +++ b/lib/bitbucket/representation/pull_request.rb @@ -4,7 +4,7 @@ module Bitbucket module Representation class PullRequest < Representation::Base def author - raw.fetch('author', {}).fetch('username', nil) + raw.fetch('author', {}).fetch('nickname', nil) end def description diff --git a/lib/bitbucket_server/client.rb b/lib/bitbucket_server/client.rb index 6a608058813..cf55c692271 100644 --- a/lib/bitbucket_server/client.rb +++ b/lib/bitbucket_server/client.rb @@ -23,8 +23,9 @@ module BitbucketServer BitbucketServer::Representation::Repo.new(parsed_response) end - def repos(page_offset: 0, limit: nil) + def repos(page_offset: 0, limit: nil, filter: nil) path = "/repos" + path += "?name=#{filter}" if filter get_collection(path, :repo, page_offset: page_offset, limit: limit) end diff --git a/lib/gitlab/bitbucket_import/importer.rb b/lib/gitlab/bitbucket_import/importer.rb index 8047ef4fa15..24bc73e0de5 100644 --- a/lib/gitlab/bitbucket_import/importer.rb +++ b/lib/gitlab/bitbucket_import/importer.rb @@ -262,13 +262,19 @@ module Gitlab def pull_request_comment_attributes(comment) { project: project, - note: comment.note, author_id: gitlab_user_id(project, comment.author), + note: comment_note(comment), created_at: comment.created_at, updated_at: comment.updated_at } end + def comment_note(comment) + author = @formatter.author_line(comment.author) unless find_user_id(comment.author) + + author.to_s + comment.note.to_s + end + def log_error(details) logger.error(log_base_data.merge(details)) end diff --git a/lib/gitlab/gitaly_client/notification_service.rb b/lib/gitlab/gitaly_client/notification_service.rb deleted file mode 100644 index 873c3e4086d..00000000000 --- a/lib/gitlab/gitaly_client/notification_service.rb +++ /dev/null @@ -1,22 +0,0 @@ -# frozen_string_literal: true - -module Gitlab - module GitalyClient - class NotificationService - # 'repository' is a Gitlab::Git::Repository - def initialize(repository) - @gitaly_repo = repository.gitaly_repository - @storage = repository.storage - end - - def post_receive - GitalyClient.call( - @storage, - :notification_service, - :post_receive, - Gitaly::PostReceiveRequest.new(repository: @gitaly_repo) - ) - end - end - end -end diff --git a/locale/gitlab.pot b/locale/gitlab.pot index b96ceb970ae..8aba22fff14 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -4936,6 +4936,9 @@ msgstr "" msgid "Filter results by project" msgstr "" +msgid "Filter your projects by name" +msgstr "" + msgid "Filter..." msgstr "" diff --git a/package.json b/package.json index 7ff4e74137b..803aebcb5fd 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "@babel/preset-env": "^7.4.4", "@gitlab/csslab": "^1.9.0", "@gitlab/svgs": "^1.67.0", - "@gitlab/ui": "5.14.0", + "@gitlab/ui": "5.15.0", "apollo-cache-inmemory": "^1.5.1", "apollo-client": "^2.5.1", "apollo-link": "^1.2.11", diff --git a/spec/controllers/import/bitbucket_server_controller_spec.rb b/spec/controllers/import/bitbucket_server_controller_spec.rb index b89d7317b9c..e1aeab46fca 100644 --- a/spec/controllers/import/bitbucket_server_controller_spec.rb +++ b/spec/controllers/import/bitbucket_server_controller_spec.rb @@ -134,6 +134,8 @@ describe Import::BitbucketServerController do describe 'GET status' do render_views + let(:repos) { instance_double(BitbucketServer::Collection) } + before do allow(controller).to receive(:bitbucket_client).and_return(client) @@ -145,7 +147,6 @@ describe Import::BitbucketServerController do it 'assigns repository categories' do created_project = create(:project, :import_finished, import_type: 'bitbucket_server', creator_id: user.id, import_source: @created_repo.browse_url) - repos = instance_double(BitbucketServer::Collection) expect(repos).to receive(:partition).and_return([[@repo, @created_repo], [@invalid_repo]]) expect(repos).to receive(:current_page).and_return(1) @@ -159,6 +160,17 @@ describe Import::BitbucketServerController do expect(assigns(:repos)).to eq([@repo]) expect(assigns(:incompatible_repos)).to eq([@invalid_repo]) end + + context 'when filtering' do + let(:filter) { 'test' } + + it 'passes filter param to bitbucket client' do + expect(repos).to receive(:partition).and_return([[@repo, @created_repo], [@invalid_repo]]) + expect(client).to receive(:repos).with(filter: filter, limit: 25, page_offset: 0).and_return(repos) + + get :status, params: { filter: filter }, as: :json + end + end end describe 'GET jobs' do diff --git a/spec/lib/bitbucket/representation/comment_spec.rb b/spec/lib/bitbucket/representation/comment_spec.rb index 2dcc933ee61..1874296df8c 100644 --- a/spec/lib/bitbucket/representation/comment_spec.rb +++ b/spec/lib/bitbucket/representation/comment_spec.rb @@ -4,7 +4,7 @@ require 'spec_helper' describe Bitbucket::Representation::Comment do describe '#author' do - it { expect(described_class.new('user' => { 'username' => 'Ben' }).author).to eq('Ben') } + it { expect(described_class.new('user' => { 'nickname' => 'Ben' }).author).to eq('Ben') } it { expect(described_class.new({}).author).to be_nil } end diff --git a/spec/lib/bitbucket/representation/issue_spec.rb b/spec/lib/bitbucket/representation/issue_spec.rb index c7d1ebdd597..655b9b78b47 100644 --- a/spec/lib/bitbucket/representation/issue_spec.rb +++ b/spec/lib/bitbucket/representation/issue_spec.rb @@ -17,7 +17,7 @@ describe Bitbucket::Representation::Issue do end describe '#author' do - it { expect(described_class.new({ 'reporter' => { 'username' => 'Ben' } }).author).to eq('Ben') } + it { expect(described_class.new({ 'reporter' => { 'nickname' => 'Ben' } }).author).to eq('Ben') } it { expect(described_class.new({}).author).to be_nil } end diff --git a/spec/lib/bitbucket/representation/pull_request_spec.rb b/spec/lib/bitbucket/representation/pull_request_spec.rb index 7cf43b2b6fd..70b51b8efec 100644 --- a/spec/lib/bitbucket/representation/pull_request_spec.rb +++ b/spec/lib/bitbucket/representation/pull_request_spec.rb @@ -8,7 +8,7 @@ describe Bitbucket::Representation::PullRequest do end describe '#author' do - it { expect(described_class.new({ 'author' => { 'username' => 'Ben' } }).author).to eq('Ben') } + it { expect(described_class.new({ 'author' => { 'nickname' => 'Ben' } }).author).to eq('Ben') } it { expect(described_class.new({}).author).to be_nil } end diff --git a/spec/lib/bitbucket_server/client_spec.rb b/spec/lib/bitbucket_server/client_spec.rb index 988710b7c4d..aa0217856ee 100644 --- a/spec/lib/bitbucket_server/client_spec.rb +++ b/spec/lib/bitbucket_server/client_spec.rb @@ -58,6 +58,17 @@ describe BitbucketServer::Client do subject.repos(page_offset: 10, limit: 25) end + + context 'when filter param is passed' do + let(:filter) { 'test' } + let(:expected_path) { "#{path}?name=#{filter}" } + + it 'requests a collection with filter applied' do + expect(BitbucketServer::Paginator).to receive(:new).with(anything, expected_path, :repo, page_offset: 0, limit: nil) + + subject.repos(filter: filter) + end + end end describe '#create_branch' do diff --git a/spec/lib/gitlab/bitbucket_import/importer_spec.rb b/spec/lib/gitlab/bitbucket_import/importer_spec.rb index 280941ff601..3d0d3f91859 100644 --- a/spec/lib/gitlab/bitbucket_import/importer_spec.rb +++ b/spec/lib/gitlab/bitbucket_import/importer_spec.rb @@ -25,12 +25,12 @@ describe Gitlab::BitbucketImport::Importer do let(:reporters) do [ nil, - { "username" => "reporter1" }, + { "nickname" => "reporter1" }, nil, - { "username" => "reporter2" }, - { "username" => "reporter1" }, + { "nickname" => "reporter2" }, + { "nickname" => "reporter1" }, nil, - { "username" => "reporter3" } + { "nickname" => "reporter3" } ] end @@ -115,6 +115,7 @@ describe Gitlab::BitbucketImport::Importer do created_at: Time.now, updated_at: Time.now) end + let(:author_line) { "*Created by: someuser*\n\n" } before do allow(subject).to receive(:import_wiki) @@ -128,7 +129,7 @@ describe Gitlab::BitbucketImport::Importer do old_pos: nil, new_pos: 4, note: 'Hello world', - author: 'root', + author: 'someuser', created_at: Time.now, updated_at: Time.now, inline?: true, @@ -139,7 +140,7 @@ describe Gitlab::BitbucketImport::Importer do iid: 3, file_path: '.gitmodules', note: 'Hello world', - author: 'root', + author: 'someuser', created_at: Time.now, updated_at: Time.now, inline?: true, @@ -163,11 +164,33 @@ describe Gitlab::BitbucketImport::Importer do notes = merge_request.notes.order(:id).to_a start_note = notes.first expect(start_note).to be_a(DiffNote) - expect(start_note.note).to eq(@inline_note.note) + expect(start_note.note).to include(@inline_note.note) + expect(start_note.note).to include(author_line) reply_note = notes.last expect(reply_note).to be_a(DiffNote) - expect(reply_note.note).to eq(@reply.note) + expect(reply_note.note).to include(@reply.note) + expect(reply_note.note).to include(author_line) + end + + context 'when user exists in GitLab' do + let!(:existing_user) { create(:user, username: 'someuser') } + let!(:identity) { create(:identity, provider: 'bitbucket', extern_uid: existing_user.username, user: existing_user) } + + it 'does not add author line to comments' do + expect { subject.execute }.to change { MergeRequest.count }.by(1) + + merge_request = MergeRequest.first + + notes = merge_request.notes.order(:id).to_a + start_note = notes.first + expect(start_note.note).to eq(@inline_note.note) + expect(start_note.note).not_to include(author_line) + + reply_note = notes.last + expect(reply_note.note).to eq(@reply.note) + expect(reply_note.note).not_to include(author_line) + end end context 'when importing a pull request throws an exception' do diff --git a/spec/lib/gitlab/gitaly_client/notification_service_spec.rb b/spec/lib/gitlab/gitaly_client/notification_service_spec.rb deleted file mode 100644 index ffc3a09be30..00000000000 --- a/spec/lib/gitlab/gitaly_client/notification_service_spec.rb +++ /dev/null @@ -1,17 +0,0 @@ -require 'spec_helper' - -describe Gitlab::GitalyClient::NotificationService do - describe '#post_receive' do - let(:project) { create(:project) } - let(:storage_name) { project.repository_storage } - let(:relative_path) { project.disk_path + '.git' } - subject { described_class.new(project.repository) } - - it 'sends a post_receive message' do - expect_any_instance_of(Gitaly::NotificationService::Stub) - .to receive(:post_receive).with(gitaly_request_with_path(storage_name, relative_path), kind_of(Hash)) - - subject.post_receive - end - end -end diff --git a/spec/services/projects/update_service_spec.rb b/spec/services/projects/update_service_spec.rb index 6bbaa410d56..82010dd283c 100644 --- a/spec/services/projects/update_service_spec.rb +++ b/spec/services/projects/update_service_spec.rb @@ -186,7 +186,10 @@ describe Projects::UpdateService do expect_any_instance_of(ProjectWiki).to receive(:wiki).and_raise(ProjectWiki::CouldNotCreateWikiError) expect_any_instance_of(described_class).to receive(:log_error).with("Could not create wiki for #{project.full_name}") - expect(Gitlab::Metrics).to receive(:counter) + + counter = double(:counter) + expect(Gitlab::Metrics).to receive(:counter).with(:wiki_can_not_be_created_total, 'Counts the times we failed to create a wiki').and_return(counter) + expect(counter).to receive(:increment) update_project(project, user, project_feature_attributes: { wiki_access_level: ProjectFeature::ENABLED }) end diff --git a/yarn.lock b/yarn.lock index 2a406b92c5f..ed1f06523c0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1003,10 +1003,10 @@ resolved "https://registry.yarnpkg.com/@gitlab/svgs/-/svgs-1.67.0.tgz#c7b94eca13b99fd3aaa737fb6dcc0abc41d3c579" integrity sha512-hJOmWEs6RkjzyKkb1vc9wwKGZIBIP0coHkxu/KgOoxhBVudpGk4CH7xJ6UuB2TKpb0SEh5CC1CzRZfBYaFhsaA== -"@gitlab/ui@5.14.0": - version "5.14.0" - resolved "https://registry.yarnpkg.com/@gitlab/ui/-/ui-5.14.0.tgz#850214cfc6bb57f7ce672dc1cc60ea3d39ad41f3" - integrity sha512-JXUmk+hT4Rj2GBh0xAF43dYeloBEDX22rgeaDU6/RzD3JEA353yEm2+HOsBjPkQFDAh6Zp7OZSBuhDFrQe8sbg== +"@gitlab/ui@5.15.0": + version "5.15.0" + resolved "https://registry.yarnpkg.com/@gitlab/ui/-/ui-5.15.0.tgz#1ce92cfed77dcd63a90d751043b42b19e64431c9" + integrity sha512-YrYgERcmTxC+oP4GaY7onqvYgvTsyGCiiegQbZbXdNRLGGAmvfxWPzQRz8Ci9yIYkLvi0X2AV7BT8RTVOPQgXg== dependencies: "@babel/standalone" "^7.0.0" "@gitlab/vue-toasted" "^1.2.1" |