From 5e65d4f6c601e6636d171dbf8586949fedc334d7 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 16 Feb 2022 18:14:47 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .../javascripts/clusters/agents/index.js | 2 + .../javascripts/clusters/agents/router.js | 22 ++ .../pipeline_wizard/components/commit.vue | 224 ++++++++++++++ .../queries/create_commit.graphql | 9 + .../queries/get_file_meta.graphql | 12 + .../components/training_provider_list.vue | 54 ++-- ...curity_training_providers.mutation.graphql | 7 +- .../security_training_providers.query.graphql | 1 + .../security_configuration/index.js | 3 +- .../security_configuration/resolver.js | 60 ---- app/assets/stylesheets/framework/diffs.scss | 2 + app/graphql/mutations/work_items/create.rb | 8 + app/graphql/types/mutation_type.rb | 2 +- app/models/member.rb | 1 + app/views/groups/settings/_general.html.haml | 3 +- .../vulnerability_report_pagination.yml | 8 + doc/api/container_registry.md | 2 +- doc/api/graphql/reference/index.md | 2 +- doc/integration/elasticsearch.md | 2 +- .../migrating_from_gma_to_project_template.md | 70 ++--- doc/user/group/roadmap/index.md | 4 +- .../group/value_stream_analytics/index.md | 15 +- doc/user/project/import/bitbucket.md | 2 +- doc/user/project/merge_requests/commits.md | 35 +-- lib/gitlab/ci/parsers/test/junit.rb | 4 +- lib/gitlab/database/query_analyzers/base.rb | 8 +- locale/gitlab.pot | 66 ++-- scripts/rspec_helpers.sh | 5 +- .../pipeline_wizard/components/commit_spec.js | 282 ++++++++++++++++++ .../pipeline_wizard/mock/query_responses.js | 62 ++++ .../components/training_provider_list_spec.js | 39 ++- .../security_configuration/mock_data.js | 25 ++ .../backfill_ci_queuing_tables_spec.rb | 2 +- spec/lib/gitlab/ci/parsers/test/junit_spec.rb | 26 ++ ...revent_cross_database_modification_spec.rb | 16 + spec/models/member_spec.rb | 2 + .../mutations/work_items/create_spec.rb | 9 +- .../mutations/work_items/update_spec.rb | 5 +- spec/requests/api/internal/base_spec.rb | 24 ++ 39 files changed, 904 insertions(+), 221 deletions(-) create mode 100644 app/assets/javascripts/clusters/agents/router.js create mode 100644 app/assets/javascripts/pipeline_wizard/components/commit.vue create mode 100644 app/assets/javascripts/pipeline_wizard/queries/create_commit.graphql create mode 100644 app/assets/javascripts/pipeline_wizard/queries/get_file_meta.graphql delete mode 100644 app/assets/javascripts/security_configuration/resolver.js create mode 100644 config/feature_flags/development/vulnerability_report_pagination.yml create mode 100644 spec/frontend/pipeline_wizard/components/commit_spec.js create mode 100644 spec/frontend/pipeline_wizard/mock/query_responses.js diff --git a/app/assets/javascripts/clusters/agents/index.js b/app/assets/javascripts/clusters/agents/index.js index 10055092c29..ba7b3edba72 100644 --- a/app/assets/javascripts/clusters/agents/index.js +++ b/app/assets/javascripts/clusters/agents/index.js @@ -1,6 +1,7 @@ import Vue from 'vue'; import AgentShowPage from 'ee_else_ce/clusters/agents/components/show.vue'; import apolloProvider from './graphql/provider'; +import createRouter from './router'; export default () => { const el = document.querySelector('#js-cluster-agent-details'); @@ -20,6 +21,7 @@ export default () => { return new Vue({ el, apolloProvider, + router: createRouter(), provide: { activityEmptyStateImage, agentName, diff --git a/app/assets/javascripts/clusters/agents/router.js b/app/assets/javascripts/clusters/agents/router.js new file mode 100644 index 00000000000..162a91dc300 --- /dev/null +++ b/app/assets/javascripts/clusters/agents/router.js @@ -0,0 +1,22 @@ +import Vue from 'vue'; +import VueRouter from 'vue-router'; + +Vue.use(VueRouter); + +// Vue Router requires a component to render if the route matches, but since we're only using it for +// querystring handling, we'll create an empty component. +const EmptyRouterComponent = { + render(createElement) { + return createElement('div'); + }, +}; + +export default () => { + // Name and path here don't really matter since we're not rendering anything if the route matches. + const routes = [{ path: '/', name: 'cluster_agents', component: EmptyRouterComponent }]; + return new VueRouter({ + mode: 'history', + base: window.location.pathname, + routes, + }); +}; diff --git a/app/assets/javascripts/pipeline_wizard/components/commit.vue b/app/assets/javascripts/pipeline_wizard/components/commit.vue new file mode 100644 index 00000000000..518b41c66b1 --- /dev/null +++ b/app/assets/javascripts/pipeline_wizard/components/commit.vue @@ -0,0 +1,224 @@ + + + diff --git a/app/assets/javascripts/pipeline_wizard/queries/create_commit.graphql b/app/assets/javascripts/pipeline_wizard/queries/create_commit.graphql new file mode 100644 index 00000000000..9abf8eff587 --- /dev/null +++ b/app/assets/javascripts/pipeline_wizard/queries/create_commit.graphql @@ -0,0 +1,9 @@ +mutation CreateCommit($input: CommitCreateInput!) { + commitCreate(input: $input) { + commit { + id + } + content + errors + } +} diff --git a/app/assets/javascripts/pipeline_wizard/queries/get_file_meta.graphql b/app/assets/javascripts/pipeline_wizard/queries/get_file_meta.graphql new file mode 100644 index 00000000000..87f014fade6 --- /dev/null +++ b/app/assets/javascripts/pipeline_wizard/queries/get_file_meta.graphql @@ -0,0 +1,12 @@ +query GetFileMetadata($fullPath: ID!, $filePath: String!, $ref: String) { + project(fullPath: $fullPath) { + id + repository { + blobs(paths: [$filePath], ref: $ref) { + nodes { + id + } + } + } + } +} diff --git a/app/assets/javascripts/security_configuration/components/training_provider_list.vue b/app/assets/javascripts/security_configuration/components/training_provider_list.vue index dea94503e62..539e2bff17c 100644 --- a/app/assets/javascripts/security_configuration/components/training_provider_list.vue +++ b/app/assets/javascripts/security_configuration/components/training_provider_list.vue @@ -49,7 +49,7 @@ export default { data() { return { errorMessage: '', - toggleLoading: false, + providerLoadingId: null, securityTrainingProviders: [], hasTouchedConfiguration: false, }; @@ -89,37 +89,29 @@ export default { Sentry.captureException(e); } }, - toggleProvider(selectedProviderId) { - const toggledProviders = this.securityTrainingProviders.map((provider) => ({ - ...provider, - ...(provider.id === selectedProviderId && { isEnabled: !provider.isEnabled }), - })); + toggleProvider(provider) { + const { isEnabled } = provider; + const toggledIsEnabled = !isEnabled; - const enabledProviderIds = toggledProviders - .filter(({ isEnabled }) => isEnabled) - .map(({ id }) => id); - - const { isEnabled: selectedProviderIsEnabled } = toggledProviders.find( - (provider) => provider.id === selectedProviderId, - ); - - this.trackProviderToggle(selectedProviderId, selectedProviderIsEnabled); - this.storeEnabledProviders(enabledProviderIds); + this.trackProviderToggle(provider.id, toggledIsEnabled); + this.storeProvider({ ...provider, isEnabled: toggledIsEnabled }); }, - async storeEnabledProviders(enabledProviderIds) { - this.toggleLoading = true; + async storeProvider({ id, isEnabled, isPrimary }) { + this.providerLoadingId = id; try { const { data: { - configureSecurityTrainingProviders: { errors = [] }, + securityTrainingUpdate: { errors = [] }, }, } = await this.$apollo.mutate({ mutation: configureSecurityTrainingProvidersMutation, variables: { input: { - enabledProviders: enabledProviderIds, - fullPath: this.projectFullPath, + projectPath: this.projectFullPath, + providerId: id, + isEnabled, + isPrimary, }, }, }); @@ -133,7 +125,7 @@ export default { } catch { this.errorMessage = this.$options.i18n.configMutationErrorMessage; } finally { - this.toggleLoading = false; + this.providerLoadingId = null; } }, trackProviderToggle(providerId, providerIsEnabled) { @@ -166,25 +158,21 @@ export default {