diff options
28 files changed, 182 insertions, 43 deletions
diff --git a/app/assets/javascripts/api.js b/app/assets/javascripts/api.js index a887c22af2e..38be2442dfb 100644 --- a/app/assets/javascripts/api.js +++ b/app/assets/javascripts/api.js @@ -22,6 +22,7 @@ const Api = { projectLabelsPath: '/:namespace_path/:project_path/-/labels', projectFileSchemaPath: '/:namespace_path/:project_path/-/schema/:ref/:filename', projectUsersPath: '/api/:version/projects/:id/users', + projectMembersPath: '/api/:version/projects/:id/members', projectMergeRequestsPath: '/api/:version/projects/:id/merge_requests', projectMergeRequestPath: '/api/:version/projects/:id/merge_requests/:mrid', projectMergeRequestChangesPath: '/api/:version/projects/:id/merge_requests/:mrid/changes', @@ -214,6 +215,12 @@ const Api = { .then(({ data }) => data); }, + inviteProjectMembers(id, data) { + const url = Api.buildUrl(this.projectMembersPath).replace(':id', encodeURIComponent(id)); + + return axios.post(url, data); + }, + // Return single project project(projectPath) { const url = Api.buildUrl(Api.projectPath).replace(':id', encodeURIComponent(projectPath)); diff --git a/app/assets/javascripts/helpers/startup_css_helper.js b/app/assets/javascripts/helpers/startup_css_helper.js index 8e25e1421c0..8351cbf04bf 100644 --- a/app/assets/javascripts/helpers/startup_css_helper.js +++ b/app/assets/javascripts/helpers/startup_css_helper.js @@ -32,7 +32,7 @@ const handleStartupEvents = () => { action(); -*/ export const waitForCSSLoaded = (action = () => {}) => { - if (!gon.features.startupCss || allLinksLoaded()) { + if (!gon?.features?.startupCss || allLinksLoaded()) { return new Promise(resolve => { action(); resolve(); diff --git a/app/assets/javascripts/invite_members/components/invite_members_modal.vue b/app/assets/javascripts/invite_members/components/invite_members_modal.vue index b47b22c4d44..b55ef77ae5d 100644 --- a/app/assets/javascripts/invite_members/components/invite_members_modal.vue +++ b/app/assets/javascripts/invite_members/components/invite_members_modal.vue @@ -10,7 +10,7 @@ import { GlFormInput, } from '@gitlab/ui'; import eventHub from '../event_hub'; -import { s__, sprintf } from '~/locale'; +import { s__, __, sprintf } from '~/locale'; import Api from '~/api'; import MembersTokenSelect from '~/invite_members/components/members_token_select.vue'; @@ -28,11 +28,15 @@ export default { MembersTokenSelect, }, props: { - groupId: { + id: { type: String, required: true, }, - groupName: { + isProject: { + type: Boolean, + required: true, + }, + name: { type: String, required: true, }, @@ -59,9 +63,16 @@ export default { }; }, computed: { + inviteToName() { + return this.name.toUpperCase(); + }, + inviteToType() { + return this.isProject ? __('project') : __('group'); + }, introText() { - return sprintf(s__("InviteMembersModal|You're inviting members to the %{group_name} group"), { - group_name: this.groupName, + return sprintf(s__("InviteMembersModal|You're inviting members to the %{name} %{type}"), { + name: this.inviteToName, + type: this.inviteToType, }); }, toastOptions() { @@ -110,13 +121,14 @@ export default { this.selectedAccessLevel = item; }, submitForm(formData) { - return Api.inviteGroupMember(this.groupId, formData) - .then(() => { - this.showToastMessageSuccess(); - }) - .catch(error => { - this.showToastMessageError(error); - }); + if (this.isProject) { + return Api.inviteProjectMembers(this.id, formData) + .then(this.showToastMessageSuccess) + .catch(this.showToastMessageError); + } + return Api.inviteGroupMember(this.id, formData) + .then(this.showToastMessageSuccess) + .catch(this.showToastMessageError); }, showToastMessageSuccess() { this.$toast.show(this.$options.labels.toastMessageSuccessful, this.toastOptions); diff --git a/app/assets/javascripts/invite_members/init_invite_members_modal.js b/app/assets/javascripts/invite_members/init_invite_members_modal.js index 92aa3187fc3..db957ecacfd 100644 --- a/app/assets/javascripts/invite_members/init_invite_members_modal.js +++ b/app/assets/javascripts/invite_members/init_invite_members_modal.js @@ -18,7 +18,6 @@ export default function initInviteMembersModal() { props: { ...el.dataset, accessLevels: JSON.parse(el.dataset.accessLevels), - groupName: el.dataset.groupName.toUpperCase(), }, }), }); diff --git a/app/assets/javascripts/pages/projects/show/index.js b/app/assets/javascripts/pages/projects/show/index.js index dd8141d34c7..413b2d01621 100644 --- a/app/assets/javascripts/pages/projects/show/index.js +++ b/app/assets/javascripts/pages/projects/show/index.js @@ -10,6 +10,8 @@ import leaveByUrl from '~/namespaces/leave_by_url'; import Star from '../../../star'; import notificationsDropdown from '../../../notifications_dropdown'; import { showLearnGitLabProjectPopover } from '~/onboarding_issues'; +import initInviteMembersTrigger from '~/invite_members/init_invite_members_trigger'; +import initInviteMembersModal from '~/invite_members/init_invite_members_modal'; initReadMore(); new Star(); // eslint-disable-line no-new @@ -42,3 +44,6 @@ showLearnGitLabProjectPopover(); notificationsDropdown(); new ShortcutsNavigation(); // eslint-disable-line no-new + +initInviteMembersTrigger(); +initInviteMembersModal(); diff --git a/app/views/admin/identities/_identity.html.haml b/app/views/admin/identities/_identity.html.haml index a0eff3f1d0b..d852e4a2463 100644 --- a/app/views/admin/identities/_identity.html.haml +++ b/app/views/admin/identities/_identity.html.haml @@ -1,6 +1,6 @@ %tr %td - #{Gitlab::Auth::OAuth::Provider.label_for(identity.provider)} (#{identity.provider}) #{identity.saml_provider_id.present? ? "ID: #{identity.saml_provider_id}" : ""} + #{Gitlab::Auth::OAuth::Provider.label_for(identity.provider)} (#{identity.provider}) #{identity.saml_provider_id.present? ? "for #{link_to identity.saml_provider.group.path, identity.saml_provider.group} ID: #{identity.saml_provider_id}".html_safe : ""} %td = identity.extern_uid %td diff --git a/app/views/groups/_invite_members_modal.html.haml b/app/views/groups/_invite_members_modal.html.haml index 51f41d58029..3aae81cef8d 100644 --- a/app/views/groups/_invite_members_modal.html.haml +++ b/app/views/groups/_invite_members_modal.html.haml @@ -1,6 +1,7 @@ - if invite_members_allowed?(group) - .js-invite-members-modal{ data: { group_id: group.id, - group_name: group.name, + .js-invite-members-modal{ data: { id: group.id, + name: group.name, + is_project: false, access_levels: GroupMember.access_level_roles.to_json, default_access_level: Gitlab::Access::GUEST, help_link: help_page_url('user/permissions') } } diff --git a/app/views/groups/_invite_members_side_nav_link.html.haml b/app/views/groups/_invite_members_side_nav_link.html.haml index 1c90eaee992..4f1c06d9fe3 100644 --- a/app/views/groups/_invite_members_side_nav_link.html.haml +++ b/app/views/groups/_invite_members_side_nav_link.html.haml @@ -1,3 +1,3 @@ - if invite_members_allowed?(group) && body_data_page == 'groups:show' %li - .js-invite-members-trigger{ data: { icon: 'plus', display_text: 'Invite team members' } } + .js-invite-members-trigger{ data: { icon: 'plus', display_text: _('Invite team members') } } diff --git a/app/views/layouts/nav/sidebar/_project.html.haml b/app/views/layouts/nav/sidebar/_project.html.haml index bff8c861f1f..5ff774d5d9c 100644 --- a/app/views/layouts/nav/sidebar/_project.html.haml +++ b/app/views/layouts/nav/sidebar/_project.html.haml @@ -380,6 +380,8 @@ %strong.fly-out-top-item-name = _('Members') + = render_if_exists 'projects/invite_members_side_nav_link', project: @project + - if project_nav_tab? :settings = nav_link(path: sidebar_settings_paths) do = link_to edit_project_path(@project) do diff --git a/app/views/projects/_home_panel.html.haml b/app/views/projects/_home_panel.html.haml index 0c33cefc65a..569255ec2e5 100644 --- a/app/views/projects/_home_panel.html.haml +++ b/app/views/projects/_home_panel.html.haml @@ -3,6 +3,8 @@ - max_project_topic_length = 15 - emails_disabled = @project.emails_disabled? += render_if_exists 'projects/invite_members_modal', project: @project + .project-home-panel.js-show-on-project-root.gl-my-5{ class: [("empty-project" if empty_repo)] } .row.gl-mb-3 .home-panel-title-row.col-md-12.col-lg-6.d-flex diff --git a/app/views/projects/_invite_members_modal.html.haml b/app/views/projects/_invite_members_modal.html.haml new file mode 100644 index 00000000000..ad95f39bbfa --- /dev/null +++ b/app/views/projects/_invite_members_modal.html.haml @@ -0,0 +1,7 @@ +- if invite_members_allowed?(project.group) + .js-invite-members-modal{ data: { id: project.id, + name: project.name, + is_project: true, + access_levels: GroupMember.access_level_roles.to_json, + default_access_level: Gitlab::Access::GUEST, + help_link: help_page_url('user/permissions') } } diff --git a/app/views/projects/_invite_members_side_nav_link.html.haml b/app/views/projects/_invite_members_side_nav_link.html.haml new file mode 100644 index 00000000000..15e0b75cf57 --- /dev/null +++ b/app/views/projects/_invite_members_side_nav_link.html.haml @@ -0,0 +1,3 @@ +- if invite_members_allowed?(project.group) && body_data_page == 'projects:show' + %li + .js-invite-members-trigger{ data: { icon: 'plus', display_text: _('Invite team members') } } diff --git a/app/views/projects/blob/_breadcrumb.html.haml b/app/views/projects/blob/_breadcrumb.html.haml index 84f292a2bae..710417f90e3 100644 --- a/app/views/projects/blob/_breadcrumb.html.haml +++ b/app/views/projects/blob/_breadcrumb.html.haml @@ -23,13 +23,13 @@ - if blob.readable_text? - if blame = link_to 'Normal view', project_blob_path(@project, @id), - class: 'btn' + class: 'gl-button btn' - else = link_to 'Blame', project_blame_path(@project, @id), class: 'gl-button btn js-blob-blame-link' unless blob.empty? = link_to 'History', project_commits_path(@project, @id), - class: 'btn' + class: 'gl-button btn' = link_to 'Permalink', project_blob_path(@project, tree_join(@commit.sha, @path)), class: 'gl-button btn js-data-file-blob-permalink-url' diff --git a/app/views/projects/no_repo.html.haml b/app/views/projects/no_repo.html.haml index 8631f03cc1b..65c4232b240 100644 --- a/app/views/projects/no_repo.html.haml +++ b/app/views/projects/no_repo.html.haml @@ -12,6 +12,8 @@ #{ _('This means you can not push code until you create an empty repository or import existing one.') } %hr += render_if_exists 'projects/invite_members_modal', project: @project + .no-repo-actions = link_to project_repository_path(@project), method: :post, class: 'btn btn-primary' do #{ _('Create empty repository') } diff --git a/app/views/search/results/_wiki_blob.html.haml b/app/views/search/results/_wiki_blob.html.haml index 3040917dd6e..55161ce333b 100644 --- a/app/views/search/results/_wiki_blob.html.haml +++ b/app/views/search/results/_wiki_blob.html.haml @@ -1,4 +1,9 @@ - project = wiki_blob.project - wiki_blob_link = project_wiki_path(project, wiki_blob.basename) -= render partial: 'search/results/blob_data', locals: { blob: wiki_blob, project: project, path: wiki_blob.path, blob_link: wiki_blob_link } +%div{ class: 'search-result-row gl-pb-3! gl-mt-5 gl-mb-0!' } + %span.gl-display-flex.gl-align-items-center + = link_to wiki_blob_link, data: { track_event: 'click_text', track_label: "wiki_title", track_property: 'search_result' }, class: 'gl-w-full' do + %span.term.str-truncated.gl-font-weight-bold= ::Gitlab::Git::Wiki::GollumSlug.canonicalize_filename(wiki_blob.path) + .description.term.col-sm-10.gl-px-0 + = simple_search_highlight_and_truncate(wiki_blob.data, @search_term) diff --git a/changelogs/unreleased/260340-wiki-render-like-issues.yml b/changelogs/unreleased/260340-wiki-render-like-issues.yml new file mode 100644 index 00000000000..60be57b65d7 --- /dev/null +++ b/changelogs/unreleased/260340-wiki-render-like-issues.yml @@ -0,0 +1,5 @@ +--- +title: Improve the look of wikis in search results +merge_request: 47470 +author: +type: changed diff --git a/changelogs/unreleased/277457-saml-admin.yml b/changelogs/unreleased/277457-saml-admin.yml new file mode 100644 index 00000000000..701c522482a --- /dev/null +++ b/changelogs/unreleased/277457-saml-admin.yml @@ -0,0 +1,5 @@ +--- +title: Add group name and link in admin identities +merge_request: 47563 +author: +type: added diff --git a/changelogs/unreleased/281571-fix-blob-header-button-styles.yml b/changelogs/unreleased/281571-fix-blob-header-button-styles.yml new file mode 100644 index 00000000000..3b65985a33d --- /dev/null +++ b/changelogs/unreleased/281571-fix-blob-header-button-styles.yml @@ -0,0 +1,5 @@ +--- +title: Update button styles in blob header +merge_request: 47571 +author: +type: other diff --git a/doc/ci/examples/README.md b/doc/ci/examples/README.md index 34e3b276d3e..1abb33005ca 100644 --- a/doc/ci/examples/README.md +++ b/doc/ci/examples/README.md @@ -15,7 +15,7 @@ Examples are available in several forms. As a collection of: - `.gitlab-ci.yml` [template files](#cicd-templates) maintained in GitLab, for many common frameworks and programming languages. -- Repositories with [example projects](https://gitlab.com/gitlab-examples) for various languages. You can fork and adjust them to your own needs. Projects include demonstrations of [multi-project pipelines](https://gitlab.com/gitlab-examples/multi-project-pipelines) and using [Review Apps with a static site served by NGINX](https://gitlab.com/gitlab-examples/review-apps-nginx/). +- Repositories with [example projects](https://gitlab.com/gitlab-examples) for various languages. You can fork and adjust them to your own needs. Projects include an example of using [Review Apps with a static site served by NGINX](https://gitlab.com/gitlab-examples/review-apps-nginx/). - Examples and [other resources](#other-resources) listed below. ## CI/CD examples @@ -42,6 +42,7 @@ The following table lists examples with step-by-step tutorials that are containe | Scala on Heroku | [Test and deploy a Scala application to Heroku](test-scala-application.md). | | Parallel testing Ruby & JS | [GitLab CI/CD parallel jobs testing for Ruby & JavaScript projects](https://docs.knapsackpro.com/2019/how-to-run-parallel-jobs-for-rspec-tests-on-gitlab-ci-pipeline-and-speed-up-ruby-javascript-testing). | | Secrets management with Vault | [Authenticating and Reading Secrets With Hashicorp Vault](authenticating-with-hashicorp-vault/index.md). | +| Multi project pipeline | [Build, test deploy using multi project pipeline](https://gitlab.com/gitlab-examples/upstream-project). | ### Contributing examples diff --git a/lib/bulk_imports/clients/graphql.rb b/lib/bulk_imports/clients/graphql.rb index 89698cb53ef..b067431aeae 100644 --- a/lib/bulk_imports/clients/graphql.rb +++ b/lib/bulk_imports/clients/graphql.rb @@ -3,6 +3,24 @@ module BulkImports module Clients class Graphql + class HTTP < Graphlient::Adapters::HTTP::Adapter + def execute(document:, operation_name: nil, variables: {}, context: {}) + response = ::Gitlab::HTTP.post( + url, + headers: headers, + follow_redirects: false, + body: { + query: document.to_query_string, + operationName: operation_name, + variables: variables + }.to_json + ) + + ::Gitlab::Json.parse(response.body) + end + end + private_constant :HTTP + attr_reader :client delegate :query, :parse, :execute, to: :client @@ -12,19 +30,19 @@ module BulkImports @token = token @client = Graphlient::Client.new( @url, - request_headers + options(http: HTTP) ) end - def request_headers - return {} unless @token + def options(extra = {}) + return extra unless @token { headers: { 'Content-Type' => 'application/json', 'Authorization' => "Bearer #{@token}" } - } + }.merge(extra) end end end diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 7bd054a42c4..6a973a7647f 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -10842,6 +10842,9 @@ msgstr "" msgid "Error occurred. User was not unlocked" msgstr "" +msgid "Error parsing CSV file. Please make sure it has" +msgstr "" + msgid "Error rendering markdown preview" msgstr "" @@ -10920,6 +10923,9 @@ msgstr "" msgid "Errors" msgstr "" +msgid "Errors found on line %{line_number}: %{error_lines}. Please check if these lines have a requirement title." +msgstr "" + msgid "Errors:" msgstr "" @@ -14163,6 +14169,9 @@ msgstr "" msgid "ImportProjects|Update of imported projects with realtime changes failed" msgstr "" +msgid "Imported requirements" +msgstr "" + msgid "Improve Issue Boards" msgstr "" @@ -14813,6 +14822,9 @@ msgstr "" msgid "Invite member" msgstr "" +msgid "Invite team members" +msgstr "" + msgid "Invite teammates (optional)" msgstr "" @@ -14879,7 +14891,7 @@ msgstr "" msgid "InviteMembersModal|Some of the members could not be added" msgstr "" -msgid "InviteMembersModal|You're inviting members to the %{group_name} group" +msgid "InviteMembersModal|You're inviting members to the %{name} %{type}" msgstr "" msgid "InviteMembers|Invite team members" @@ -31211,6 +31223,9 @@ msgstr "" msgid "Your CSV export of %{written_count} from project %{project_name} (%{project_url}) has been added to this email as an attachment." msgstr "" +msgid "Your CSV import for project" +msgstr "" + msgid "Your Commit Email will be used for web based operations, such as edits and merges." msgstr "" @@ -31976,6 +31991,9 @@ msgstr "" msgid "has already been taken" msgstr "" +msgid "has been completed." +msgstr "" + msgid "help" msgstr "" @@ -32812,6 +32830,9 @@ msgstr "" msgid "teammate%{number}@company.com" msgstr "" +msgid "the correct format." +msgstr "" + msgid "the following issue(s)" msgstr "" diff --git a/package.json b/package.json index c531f9e4f89..f9a0c721f12 100644 --- a/package.json +++ b/package.json @@ -162,7 +162,7 @@ }, "devDependencies": { "@babel/plugin-transform-modules-commonjs": "^7.10.1", - "@gitlab/eslint-plugin": "4.0.0", + "@gitlab/eslint-plugin": "4.1.0", "@testing-library/dom": "^7.16.2", "@vue/test-utils": "1.0.0-beta.30", "acorn": "^6.3.0", diff --git a/qa/qa/specs/features/browser_ui/1_manage/project/create_project_spec.rb b/qa/qa/specs/features/browser_ui/1_manage/project/create_project_spec.rb index c23d375e5f8..2f2f40cba3b 100644 --- a/qa/qa/specs/features/browser_ui/1_manage/project/create_project_spec.rb +++ b/qa/qa/specs/features/browser_ui/1_manage/project/create_project_spec.rb @@ -3,7 +3,7 @@ module QA RSpec.describe 'Manage', :smoke do describe 'Project creation' do - it 'user creates a new project', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/429', quarantine: { issue: 'https://gitlab.com/gitlab-org/gitlab/-/issues/280585', type: :investigating, only: { subdomain: :staging } } do + it 'user creates a new project', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/429' do Flow::Login.sign_in created_project = Resource::Project.fabricate_via_browser_ui! do |project| diff --git a/spec/features/projects/navbar_spec.rb b/spec/features/projects/navbar_spec.rb index 4ff3827b240..25791b393bc 100644 --- a/spec/features/projects/navbar_spec.rb +++ b/spec/features/projects/navbar_spec.rb @@ -67,4 +67,23 @@ RSpec.describe 'Project navbar' do it_behaves_like 'verified navigation bar' end + + context 'when invite team members is not available' do + it 'does not display the js-invite-members-trigger' do + visit project_path(project) + + expect(page).not_to have_selector('.js-invite-members-trigger') + end + end + + context 'when invite team members is available' do + it 'includes the div for js-invite-members-trigger' do + stub_feature_flags(invite_members_group_modal: true) + allow_any_instance_of(InviteMembersHelper).to receive(:invite_members_allowed?).and_return(true) + + visit project_path(project) + + expect(page).to have_selector('.js-invite-members-trigger') + end + end end diff --git a/spec/frontend/helpers/startup_css_helper_spec.js b/spec/frontend/helpers/startup_css_helper_spec.js index 1a88e80344e..2d560c43fa5 100644 --- a/spec/frontend/helpers/startup_css_helper_spec.js +++ b/spec/frontend/helpers/startup_css_helper_spec.js @@ -19,6 +19,26 @@ describe('waitForCSSLoaded', () => { }); }); + describe('when gon features is not provided', () => { + let originalGon; + + beforeEach(() => { + originalGon = window.gon; + window.gon = null; + }); + + afterEach(() => { + window.gon = originalGon; + }); + + it('should invoke the action right away', async () => { + const events = waitForCSSLoaded(mockedCallback); + await events; + + expect(mockedCallback).toHaveBeenCalledTimes(1); + }); + }); + describe('with startup css disabled', () => { gon.features = { startupCss: false, diff --git a/spec/frontend/invite_members/components/invite_members_modal_spec.js b/spec/frontend/invite_members/components/invite_members_modal_spec.js index 18c3699adc3..4ac2a28105c 100644 --- a/spec/frontend/invite_members/components/invite_members_modal_spec.js +++ b/spec/frontend/invite_members/components/invite_members_modal_spec.js @@ -3,8 +3,9 @@ import { GlDropdown, GlDropdownItem, GlDatepicker, GlSprintf, GlLink } from '@gi import Api from '~/api'; import InviteMembersModal from '~/invite_members/components/invite_members_modal.vue'; -const groupId = '1'; -const groupName = 'testgroup'; +const id = '1'; +const name = 'testgroup'; +const isProject = false; const accessLevels = { Guest: 10, Reporter: 20, Developer: 30, Maintainer: 40, Owner: 50 }; const defaultAccessLevel = '10'; const helpLink = 'https://example.com'; @@ -12,8 +13,9 @@ const helpLink = 'https://example.com'; const createComponent = (data = {}) => { return shallowMount(InviteMembersModal, { propsData: { - groupId, - groupName, + id, + name, + isProject, accessLevels, defaultAccessLevel, helpLink, @@ -113,7 +115,7 @@ describe('InviteMembersModal', () => { }); it('calls Api inviteGroupMember with the correct params', () => { - expect(Api.inviteGroupMember).toHaveBeenCalledWith(groupId, postData); + expect(Api.inviteGroupMember).toHaveBeenCalledWith(id, postData); }); }); diff --git a/spec/support/services/issuable_import_csv_service_shared_examples.rb b/spec/support/services/issuable_import_csv_service_shared_examples.rb index f2d84628106..20ac2ff5c7c 100644 --- a/spec/support/services/issuable_import_csv_service_shared_examples.rb +++ b/spec/support/services/issuable_import_csv_service_shared_examples.rb @@ -19,12 +19,10 @@ RSpec.shared_examples 'issuable import csv service' do |issuable_type| end shared_examples_for 'importer with email notification' do - if issuable_type == 'issue' - it 'notifies user of import result' do - expect(Notify).to receive_message_chain(email_method, :deliver_later) + it 'notifies user of import result' do + expect(Notify).to receive_message_chain(email_method, :deliver_later) - subject - end + subject end end diff --git a/yarn.lock b/yarn.lock index 8690c4f36b1..d3861c0d69b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -845,10 +845,10 @@ resolved "https://registry.yarnpkg.com/@gitlab/at.js/-/at.js-1.5.5.tgz#5f6bfe6baaef360daa9b038fa78798d7a6a916b4" integrity sha512-282Dn3SPVsUHVDhMsXgfnv+Rzog0uxecjttxGRQvxh25es1+xvkGQFsvJfkSKJ3X1kHVkSjKf+Tt5Rra+Jhp9g== -"@gitlab/eslint-plugin@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@gitlab/eslint-plugin/-/eslint-plugin-4.0.0.tgz#7beba53dea74f458d92040a8b2652e4fd60a6cc7" - integrity sha512-Gba9HXwWOLAN+O2H8WmGNPZFQ410wiGFmhgDQ5Sx4ic/N1ymtwNen2pnsaWcw8KK/1vAB/rHNUhH4Xu/l/mfMg== +"@gitlab/eslint-plugin@4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@gitlab/eslint-plugin/-/eslint-plugin-4.1.0.tgz#b59b53b9cd984dc692cd094cca4fbe45e466c8b7" + integrity sha512-NjY8XqT9lPKxBiKeaIXAGPGuxLMmbns/W5YF/cqxfWMnMOCCGBPZjwwnPY5wzAeKocT014LCnA7k0ztIUN7DoQ== dependencies: babel-eslint "^10.0.3" eslint-config-airbnb-base "^14.0.0" |