From 58acbd41a1ee5aa51777f2ef88ce03bd698530c7 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 1 Mar 2023 21:13:05 +0000 Subject: Add latest changes from gitlab-org/gitlab@master --- .gitlab-ci.yml | 9 +- .gitlab/ci/notify.gitlab-ci.yml | 25 + .gitlab/ci/rules.gitlab-ci.yml | 9 + .rubocop_todo/rake/require.yml | 2 - .../analytics/cycle_analytics/constants.js | 5 - .../components/ci_variable_settings.vue | 8 + .../components/ci_variable_shared.vue | 72 ++- .../components/ci_variable_table.vue | 43 +- .../javascripts/ci/ci_variable_list/constants.js | 5 + .../graphql/queries/group_variables.query.graphql | 11 +- .../queries/project_variables.query.graphql | 11 +- .../graphql/queries/variables.query.graphql | 10 +- .../ci/ci_variable_list/graphql/settings.js | 49 +- .../javascripts/ci/ci_variable_list/index.js | 9 +- app/assets/javascripts/ci/reports/constants.js | 14 - app/assets/javascripts/ci/runner/constants.js | 1 - app/assets/javascripts/clusters/constants.js | 16 - app/assets/javascripts/diffs/constants.js | 8 - app/assets/javascripts/editor/constants.js | 3 - app/assets/javascripts/feature_flags/constants.js | 8 - app/assets/javascripts/groups/constants.js | 1 - app/assets/javascripts/header_search/constants.js | 4 - app/assets/javascripts/invite_members/constants.js | 1 - .../javascripts/issuable/components/status_box.vue | 6 +- app/assets/javascripts/issues/constants.js | 1 + .../javascripts/jobs/components/table/constants.js | 1 - app/assets/javascripts/members/constants.js | 2 - app/assets/javascripts/monitoring/constants.js | 6 - .../package_registry/constants.js | 11 - .../settings/group/constants.js | 4 - app/assets/javascripts/pipelines/constants.js | 3 - .../javascripts/protected_branches/constants.js | 9 - .../security_configuration/components/constants.js | 1 - .../components/assignees/assignee_avatar.vue | 4 +- .../components/assignees/assignee_avatar_link.vue | 4 +- .../assignees/sidebar_assignees_widget.vue | 4 +- .../components/assignees/sidebar_participant.vue | 4 +- .../assignees/uncollapsed_assignee_list.vue | 6 +- .../labels_select_widget/labels_select_root.vue | 6 +- .../components/milestone/milestone_dropdown.vue | 9 +- .../sidebar/components/sidebar_dropdown.vue | 4 +- .../sidebar/components/sidebar_dropdown_widget.vue | 4 +- .../subscriptions/sidebar_subscriptions_widget.vue | 4 +- .../components/time_tracking/time_tracker.vue | 4 +- app/assets/javascripts/sidebar/constants.js | 23 +- app/assets/javascripts/sidebar/mount_sidebar.js | 26 +- .../javascripts/usage_quotas/storage/constants.js | 1 - .../vue_merge_request_widget/constants.js | 3 - .../vue_shared/components/pagination/constants.js | 3 - .../components/source_viewer/constants.js | 2 - .../components/user_select/user_select.vue | 4 +- app/assets/javascripts/vue_shared/constants.js | 2 - .../admin/application_settings_controller.rb | 4 + .../groups/settings/ci_cd_controller.rb | 5 + .../projects/settings/ci_cd_controller.rb | 4 + app/models/clusters/applications/crossplane.rb | 58 -- app/models/clusters/cluster.rb | 2 - ...ownstream_pipeline_duration_for_calculation.yml | 8 - .../development/ci_variables_pages.yml | 8 + db/docs/clusters_applications_crossplane.yml | 2 - doc/development/fe_guide/widgets.md | 4 +- doc/development/fips_compliance.md | 83 +-- doc/integration/jira/configure.md | 4 +- doc/integration/jira/development_panel.md | 80 +-- doc/integration/jira/index.md | 2 +- doc/topics/awesome_co.md | 70 +++ .../application_security/secret_detection/index.md | 11 +- doc/user/group/reporting/git_abuse_rate_limit.md | 2 +- lib/api/search.rb | 3 + .../gitlab/snowplow_event_definition_generator.rb | 4 +- lib/gitlab/ci/pipeline/duration.rb | 7 +- lib/gitlab/search_results.rb | 8 + lib/tasks/gitlab/x509/update.rake | 4 +- lib/tasks/import.rake | 6 +- locale/gitlab.pot | 15 +- package.json | 70 +-- scripts/api/update_issue.rb | 29 + scripts/pipeline/create_test_failure_issues.rb | 224 ++++++++ spec/factories/clusters/applications/helm.rb | 5 - spec/factories/clusters/clusters.rb | 1 - spec/features/admin_variables_spec.rb | 14 +- spec/features/group_variables_spec.rb | 13 +- spec/features/issuables/issuable_list_spec.rb | 2 +- .../merge_request/user_comments_on_diff_spec.rb | 2 +- spec/features/project_variables_spec.rb | 13 +- .../components/ci_variable_settings_spec.js | 20 + .../components/ci_variable_shared_spec.js | 584 +++++++++++---------- .../components/ci_variable_table_spec.js | 189 +++---- .../commit/pipelines/pipelines_table_spec.js | 114 ++-- spec/frontend/emoji/components/emoji_list_spec.js | 33 +- .../assignees/sidebar_assignees_widget_spec.js | 4 +- .../assignees/sidebar_participant_spec.js | 6 +- .../copy/sidebar_reference_widget_spec.js | 4 +- .../labels_select_root_spec.js | 6 +- .../vue_shared/components/user_select_spec.js | 4 +- .../snowplow_event_definition_generator_spec.rb | 2 +- spec/lib/gitlab/ci/pipeline/duration_spec.rb | 48 -- .../clusters/applications/crossplane_spec.rb | 62 --- spec/requests/api/search_spec.rb | 17 + .../pipeline/create_test_failure_issues_spec.rb | 145 +++++ .../variable_list_pagination_shared_examples.rb | 66 +++ yarn.lock | 366 ++++++------- 102 files changed, 1708 insertions(+), 1214 deletions(-) delete mode 100644 app/assets/javascripts/clusters/constants.js delete mode 100644 app/models/clusters/applications/crossplane.rb delete mode 100644 config/feature_flags/development/ci_use_downstream_pipeline_duration_for_calculation.yml create mode 100644 config/feature_flags/development/ci_variables_pages.yml create mode 100644 scripts/api/update_issue.rb create mode 100755 scripts/pipeline/create_test_failure_issues.rb delete mode 100644 spec/models/clusters/applications/crossplane_spec.rb create mode 100644 spec/scripts/pipeline/create_test_failure_issues_spec.rb create mode 100644 spec/support/shared_examples/features/variable_list_pagination_shared_examples.rb diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 29e51b25200..dd23c648bd4 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -36,11 +36,12 @@ default: OMNIBUS_GITLAB_RUBY2_BUILD: "true" OMNIBUS_GITLAB_CACHE_EDITION: "GITLAB_RUBY2" -.default-branch-incident-variables: &default-branch-incident-variables +.default-branch-pipeline-failure-variables: &default-branch-pipeline-failure-variables CREATE_INCIDENT_FOR_PIPELINE_FAILURE: "true" NOTIFY_PIPELINE_FAILURE_CHANNEL: "master-broken" BROKEN_BRANCH_INCIDENTS_PROJECT: "gitlab-org/quality/engineering-productivity/master-broken-incidents" BROKEN_BRANCH_INCIDENTS_PROJECT_TOKEN: "${BROKEN_MASTER_INCIDENTS_PROJECT_TOKEN}" + CREATE_ISSUES_FOR_FAILING_TESTS: "true" workflow: name: '$PIPELINE_NAME' @@ -76,7 +77,7 @@ workflow: - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE == "schedule"' variables: <<: *ruby3-variables - <<: *default-branch-incident-variables + <<: *default-branch-pipeline-failure-variables CRYSTALBALL: "true" PIPELINE_NAME: 'Scheduled Ruby 3 $CI_COMMIT_BRANCH branch pipeline' # Run pipelines for ruby2 branch @@ -90,14 +91,14 @@ workflow: - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $GITLAB_USER_LOGIN =~ /project_\d+_bot\d*/' variables: <<: *ruby3-variables - <<: *default-branch-incident-variables + <<: *default-branch-pipeline-failure-variables GITLAB_DEPENDENCY_PROXY_ADDRESS: "" PIPELINE_NAME: 'Ruby 3 $CI_COMMIT_BRANCH branch pipeline (triggered by a project token)' # For `$CI_DEFAULT_BRANCH` branch, create a pipeline (this includes on schedules, pushes, merges, etc.). - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' variables: <<: *ruby3-variables - <<: *default-branch-incident-variables + <<: *default-branch-pipeline-failure-variables PIPELINE_NAME: 'Ruby 3 $CI_COMMIT_BRANCH branch pipeline' # For tags, create a pipeline. - if: '$CI_COMMIT_TAG' diff --git a/.gitlab/ci/notify.gitlab-ci.yml b/.gitlab/ci/notify.gitlab-ci.yml index 20f19978022..795a0cd6439 100644 --- a/.gitlab/ci/notify.gitlab-ci.yml +++ b/.gitlab/ci/notify.gitlab-ci.yml @@ -70,3 +70,28 @@ notify-pipeline-failure: - ${FAILED_PIPELINE_SLACK_MESSAGE_FILE} when: always expire_in: 2 days + +create-issues-for-failing-tests: + extends: + - .notify-defaults + - .notify:rules:create-issues-for-failing-tests + image: ${GITLAB_DEPENDENCY_PROXY_ADDRESS}ruby:${RUBY_VERSION} + variables: + FAILED_TESTS_DIR: "${CI_PROJECT_DIR}/tmp/failed_tests" + FAILING_ISSUES_PROJECT: "gitlab-org/quality/engineering-productivity/flaky-tests-playground" + FAILING_ISSUE_JSON_DIR: "${CI_PROJECT_DIR}/tmp/issues" + before_script: + - source ./scripts/utils.sh + - source ./scripts/rspec_helpers.sh + - install_gitlab_gem + script: + - mkdir -p "${FAILING_ISSUE_JSON_DIR}" + - retrieve_failed_tests "${FAILED_TESTS_DIR}" "json" "latest" + - scripts/pipeline/create_test_failure_issues.rb --project "${FAILING_ISSUES_PROJECT}" --tests-report-file "${FAILED_TESTS_DIR}/rspec_failed_tests.json" --issues-json-folder "${FAILING_ISSUE_JSON_DIR}" --api-token "${FAILING_ISSUES_PROJECT_TOKEN}" + - scripts/pipeline/create_test_failure_issues.rb --project "${FAILING_ISSUES_PROJECT}" --tests-report-file "${FAILED_TESTS_DIR}/rspec_ee_failed_tests.json" --issues-json-folder "${FAILING_ISSUE_JSON_DIR}" --api-token "${FAILING_ISSUES_PROJECT_TOKEN}" + artifacts: + paths: + - ${FAILED_TESTS_DIR}/ + - ${FAILING_ISSUE_JSON_DIR}/ + when: always + expire_in: 2 days diff --git a/.gitlab/ci/rules.gitlab-ci.yml b/.gitlab/ci/rules.gitlab-ci.yml index 066654565b2..69e846440c3 100644 --- a/.gitlab/ci/rules.gitlab-ci.yml +++ b/.gitlab/ci/rules.gitlab-ci.yml @@ -1105,6 +1105,15 @@ when: on_failure allow_failure: true +.notify:rules:create-issues-for-failing-tests: + rules: + # Don't report child pipeline failures + - if: '$CI_PIPELINE_SOURCE == "parent_pipeline"' + when: never + - if: '$CREATE_ISSUES_FOR_FAILING_TESTS == "true"' + when: on_failure + allow_failure: true + ############### # Pages rules # ############### diff --git a/.rubocop_todo/rake/require.yml b/.rubocop_todo/rake/require.yml index 11c645d682a..339a2018d19 100644 --- a/.rubocop_todo/rake/require.yml +++ b/.rubocop_todo/rake/require.yml @@ -11,7 +11,5 @@ Rake/Require: - 'lib/tasks/gitlab/packages/migrate.rake' - 'lib/tasks/gitlab/pages.rake' - 'lib/tasks/gitlab/refresh_project_statistics_build_artifacts_size.rake' - - 'lib/tasks/gitlab/x509/update.rake' - - 'lib/tasks/import.rake' - 'lib/tasks/tokens.rake' - 'qa/tasks/webdrivers.rake' diff --git a/app/assets/javascripts/analytics/cycle_analytics/constants.js b/app/assets/javascripts/analytics/cycle_analytics/constants.js index 2758d686fb1..0bf4d0ef8c5 100644 --- a/app/assets/javascripts/analytics/cycle_analytics/constants.js +++ b/app/assets/javascripts/analytics/cycle_analytics/constants.js @@ -32,11 +32,6 @@ export const I18N_VSA_ERROR_SELECTED_STAGE = __( 'There was an error fetching data for the selected stage', ); -export const OVERVIEW_METRICS = { - TIME_SUMMARY: 'TIME_SUMMARY', - RECENT_ACTIVITY: 'RECENT_ACTIVITY', -}; - export const SUMMARY_METRICS_REQUEST = [ { endpoint: METRIC_TYPE_SUMMARY, name: __('recent activity'), request: getValueStreamMetrics }, ]; diff --git a/app/assets/javascripts/ci/ci_variable_list/components/ci_variable_settings.vue b/app/assets/javascripts/ci/ci_variable_list/components/ci_variable_settings.vue index 3c6114b38ce..257c3309e10 100644 --- a/app/assets/javascripts/ci/ci_variable_list/components/ci_variable_settings.vue +++ b/app/assets/javascripts/ci/ci_variable_list/components/ci_variable_settings.vue @@ -38,6 +38,10 @@ export default { required: false, default: 0, }, + pageInfo: { + type: Object, + required: true, + }, variables: { type: Array, required: true, @@ -87,8 +91,12 @@ export default { :entity="entity" :is-loading="isLoading" :max-variable-limit="maxVariableLimit" + :page-info="pageInfo" :variables="variables" + @handle-prev-page="$emit('handle-prev-page')" + @handle-next-page="$emit('handle-next-page')" @set-selected-variable="setSelectedVariable" + @sort-changed="(val) => $emit('sort-changed', val)" /> import { createAlert } from '~/flash'; import { __ } from '~/locale'; +import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin'; import { mapEnvironmentNames, reportMessageToSentry } from '../utils'; import { ADD_MUTATION_ACTION, DELETE_MUTATION_ACTION, + SORT_DIRECTIONS, UPDATE_MUTATION_ACTION, environmentFetchErrorText, genericMutationErrorText, @@ -16,6 +18,7 @@ export default { components: { CiVariableSettings, }, + mixins: [glFeatureFlagsMixin()], inject: ['endpoint'], props: { areScopedVariablesAvailable: { @@ -97,6 +100,7 @@ export default { loadingCounter: 0, maxVariableLimit: 0, pageInfo: {}, + sortDirection: SORT_DIRECTIONS.ASC, }; }, apollo: { @@ -107,6 +111,8 @@ export default { variables() { return { fullPath: this.fullPath || undefined, + first: this.pageSize, + sort: this.sortDirection, }; }, update(data) { @@ -116,21 +122,23 @@ export default { this.maxVariableLimit = this.queryData.ciVariables.lookup(data)?.limit || 0; this.pageInfo = this.queryData.ciVariables.lookup(data)?.pageInfo || this.pageInfo; - this.hasNextPage = this.pageInfo?.hasNextPage || false; - // Because graphQL has a limit of 100 items, - // we batch load all the variables by making successive queries - // to keep the same UX. As a safeguard, we make sure that we cannot go over - // 20 consecutive API calls, which means 2000 variables loaded maximum. - if (!this.hasNextPage) { - this.isLoadingMoreItems = false; - } else if (this.loadingCounter < 20) { - this.hasNextPage = false; - this.fetchMoreVariables(); - this.loadingCounter += 1; - } else { - createAlert({ message: this.$options.tooManyCallsError }); - reportMessageToSentry(this.componentName, this.$options.tooManyCallsError, {}); + if (!this.glFeatures?.ciVariablesPages) { + this.hasNextPage = this.pageInfo?.hasNextPage || false; + // Because graphQL has a limit of 100 items, + // we batch load all the variables by making successive queries + // to keep the same UX. As a safeguard, we make sure that we cannot go over + // 20 consecutive API calls, which means 2000 variables loaded maximum. + if (!this.hasNextPage) { + this.isLoadingMoreItems = false; + } else if (this.loadingCounter < 20) { + this.hasNextPage = false; + this.fetchMoreVariables(); + this.loadingCounter += 1; + } else { + createAlert({ message: this.$options.tooManyCallsError }); + reportMessageToSentry(this.componentName, this.$options.tooManyCallsError, {}); + } } }, error() { @@ -172,6 +180,9 @@ export default { this.isLoadingMoreItems ); }, + pageSize() { + return this.glFeatures?.ciVariablesPages ? 20 : 100; + }, }, methods: { addVariable(variable) { @@ -189,6 +200,31 @@ export default { }, }); }, + handlePrevPage() { + this.$apollo.queries.ciVariables.fetchMore({ + variables: { + before: this.pageInfo.startCursor, + first: null, + last: this.pageSize, + }, + }); + }, + handleNextPage() { + this.$apollo.queries.ciVariables.fetchMore({ + variables: { + after: this.pageInfo.endCursor, + first: this.pageSize, + last: null, + }, + }); + }, + async handleSortChanged({ sortDesc }) { + this.sortDirection = sortDesc ? SORT_DIRECTIONS.DESC : SORT_DIRECTIONS.ASC; + + // Wait for the new sort direction to be updated and then refetch + await this.$nextTick(); + this.$apollo.queries.ciVariables.refetch(); + }, updateVariable(variable) { this.variableMutation(UPDATE_MUTATION_ACTION, variable); }, @@ -230,13 +266,17 @@ export default { diff --git a/app/assets/javascripts/ci/ci_variable_list/components/ci_variable_table.vue b/app/assets/javascripts/ci/ci_variable_list/components/ci_variable_table.vue index 345a8def49d..5e367ff33b2 100644 --- a/app/assets/javascripts/ci/ci_variable_list/components/ci_variable_table.vue +++ b/app/assets/javascripts/ci/ci_variable_list/components/ci_variable_table.vue @@ -4,6 +4,7 @@ import { GlButton, GlLoadingIcon, GlModalDirective, + GlKeysetPagination, GlTable, GlTooltipDirective, } from '@gitlab/ui'; @@ -56,6 +57,7 @@ export default { components: { GlAlert, GlButton, + GlKeysetPagination, GlLoadingIcon, GlTable, }, @@ -78,6 +80,10 @@ export default { type: Number, required: true, }, + pageInfo: { + type: Object, + required: true, + }, variables: { type: Array, required: true, @@ -165,6 +171,28 @@ export default { > {{ exceedsVariableLimitText }} +
+ {{ valuesButtonText }} + {{ __('Add variable') }} +
diff --git a/app/assets/javascripts/ci/ci_variable_list/constants.js b/app/assets/javascripts/ci/ci_variable_list/constants.js index 627ace1b28e..c77d8c67bc8 100644 --- a/app/assets/javascripts/ci/ci_variable_list/constants.js +++ b/app/assets/javascripts/ci/ci_variable_list/constants.js @@ -2,6 +2,11 @@ import { __, s__ } from '~/locale'; export const ADD_CI_VARIABLE_MODAL_ID = 'add-ci-variable'; +export const SORT_DIRECTIONS = { + ASC: 'KEY_ASC', + DESC: 'KEY_DESC', +}; + // This const will be deprecated once we remove VueX from the section export const displayText = { variableText: __('Variable'), diff --git a/app/assets/javascripts/ci/ci_variable_list/graphql/queries/group_variables.query.graphql b/app/assets/javascripts/ci/ci_variable_list/graphql/queries/group_variables.query.graphql index 538502fdd3b..4a64a24573e 100644 --- a/app/assets/javascripts/ci/ci_variable_list/graphql/queries/group_variables.query.graphql +++ b/app/assets/javascripts/ci/ci_variable_list/graphql/queries/group_variables.query.graphql @@ -1,10 +1,17 @@ #import "~/ci/ci_variable_list/graphql/fragments/ci_variable.fragment.graphql" #import "~/graphql_shared/fragments/page_info.fragment.graphql" -query getGroupVariables($after: String, $first: Int = 100, $fullPath: ID!) { +query getGroupVariables( + $after: String + $before: String + $first: Int + $fullPath: ID! + $last: Int + $sort: CiVariableSort = KEY_ASC +) { group(fullPath: $fullPath) { id - ciVariables(after: $after, first: $first) { + ciVariables(after: $after, before: $before, first: $first, last: $last, sort: $sort) { limit pageInfo { ...PageInfo diff --git a/app/assets/javascripts/ci/ci_variable_list/graphql/queries/project_variables.query.graphql b/app/assets/javascripts/ci/ci_variable_list/graphql/queries/project_variables.query.graphql index af0cd2d0b2c..03a7142080b 100644 --- a/app/assets/javascripts/ci/ci_variable_list/graphql/queries/project_variables.query.graphql +++ b/app/assets/javascripts/ci/ci_variable_list/graphql/queries/project_variables.query.graphql @@ -1,10 +1,17 @@ #import "~/ci/ci_variable_list/graphql/fragments/ci_variable.fragment.graphql" #import "~/graphql_shared/fragments/page_info.fragment.graphql" -query getProjectVariables($after: String, $first: Int = 100, $fullPath: ID!) { +query getProjectVariables( + $after: String + $before: String + $first: Int + $fullPath: ID! + $last: Int + $sort: CiVariableSort = KEY_ASC +) { project(fullPath: $fullPath) { id - ciVariables(after: $after, first: $first) { + ciVariables(after: $after, before: $before, first: $first, last: $last, sort: $sort) { limit pageInfo { ...PageInfo diff --git a/app/assets/javascripts/ci/ci_variable_list/graphql/queries/variables.query.graphql b/app/assets/javascripts/ci/ci_variable_list/graphql/queries/variables.query.graphql index b8dd6f5f562..adf539a44ae 100644 --- a/app/assets/javascripts/ci/ci_variable_list/graphql/queries/variables.query.graphql +++ b/app/assets/javascripts/ci/ci_variable_list/graphql/queries/variables.query.graphql @@ -1,8 +1,14 @@ #import "~/ci/ci_variable_list/graphql/fragments/ci_variable.fragment.graphql" #import "~/graphql_shared/fragments/page_info.fragment.graphql" -query getVariables($after: String, $first: Int = 100) { - ciVariables(after: $after, first: $first) { +query getVariables( + $after: String + $before: String + $first: Int + $last: Int + $sort: CiVariableSort = KEY_ASC +) { + ciVariables(after: $after, before: $before, first: $first, last: $last, sort: $sort) { pageInfo { ...PageInfo } diff --git a/app/assets/javascripts/ci/ci_variable_list/graphql/settings.js b/app/assets/javascripts/ci/ci_variable_list/graphql/settings.js index cafe3df35d0..7ed0418d5f4 100644 --- a/app/assets/javascripts/ci/ci_variable_list/graphql/settings.js +++ b/app/assets/javascripts/ci/ci_variable_list/graphql/settings.js @@ -205,33 +205,40 @@ export const mergeVariables = (existing, incoming, { args }) => { return result; }; -export const cacheConfig = { - cacheConfig: { - typePolicies: { - Query: { - fields: { - ciVariables: { - keyArgs: false, - merge: mergeVariables, +export const mergeOnlyIncomings = (_, incoming) => { + return incoming; +}; + +export const generateCacheConfig = (isVariablePagesEnabled = false) => { + const merge = isVariablePagesEnabled ? mergeOnlyIncomings : mergeVariables; + return { + cacheConfig: { + typePolicies: { + Query: { + fields: { + ciVariables: { + keyArgs: false, + merge, + }, }, }, - }, - Project: { - fields: { - ciVariables: { - keyArgs: ['fullPath', 'endpoint', 'id'], - merge: mergeVariables, + Project: { + fields: { + ciVariables: { + keyArgs: ['fullPath'], + merge, + }, }, }, - }, - Group: { - fields: { - ciVariables: { - keyArgs: ['fullPath'], - merge: mergeVariables, + Group: { + fields: { + ciVariables: { + keyArgs: ['fullPath'], + merge, + }, }, }, }, }, - }, + }; }; diff --git a/app/assets/javascripts/ci/ci_variable_list/index.js b/app/assets/javascripts/ci/ci_variable_list/index.js index 4270c3c67fc..3ed56201f0d 100644 --- a/app/assets/javascripts/ci/ci_variable_list/index.js +++ b/app/assets/javascripts/ci/ci_variable_list/index.js @@ -5,7 +5,7 @@ import { parseBoolean } from '~/lib/utils/common_utils'; import CiAdminVariables from './components/ci_admin_variables.vue'; import CiGroupVariables from './components/ci_group_variables.vue'; import CiProjectVariables from './components/ci_project_variables.vue'; -import { cacheConfig, resolvers } from './graphql/settings'; +import { generateCacheConfig, resolvers } from './graphql/settings'; const mountCiVariableListApp = (containerEl) => { const { @@ -42,8 +42,13 @@ const mountCiVariableListApp = (containerEl) => { Vue.use(VueApollo); + // If the feature flag `ci_variables_pages` is enabled, + // we are using the default cache config with pages. const apolloProvider = new VueApollo({ - defaultClient: createDefaultClient(resolvers, cacheConfig), + defaultClient: createDefaultClient( + resolvers, + generateCacheConfig(window.gon?.features?.ciVariablesPages), + ), }); return new Vue({ diff --git a/app/assets/javascripts/ci/reports/constants.js b/app/assets/javascripts/ci/reports/constants.js index bad6fa1e7b9..1137236d355 100644 --- a/app/assets/javascripts/ci/reports/constants.js +++ b/app/assets/javascripts/ci/reports/constants.js @@ -1,10 +1,3 @@ -export const fieldTypes = { - codeBlock: 'codeBlock', - link: 'link', - seconds: 'seconds', - text: 'text', -}; - export const LOADING = 'LOADING'; export const ERROR = 'ERROR'; export const SUCCESS = 'SUCCESS'; @@ -15,10 +8,6 @@ export const STATUS_NEUTRAL = 'neutral'; export const STATUS_NOT_FOUND = 'not_found'; export const ICON_WARNING = 'warning'; -export const ICON_SUCCESS = 'success'; -export const ICON_NOTFOUND = 'notfound'; -export const ICON_PENDING = 'pending'; -export const ICON_FAILED = 'failed'; export const status = { LOADING, @@ -26,9 +15,6 @@ export const status = { SUCCESS, }; -export const ACCESSIBILITY_ISSUE_ERROR = 'error'; -export const ACCESSIBILITY_ISSUE_WARNING = 'warning'; - /** * Slot names for the ReportSection component, corresponding to the success, * loading and error statuses. diff --git a/app/assets/javascripts/ci/runner/constants.js b/app/assets/javascripts/ci/runner/constants.js index 1db4ff68872..054e6b954d0 100644 --- a/app/assets/javascripts/ci/runner/constants.js +++ b/app/assets/javascripts/ci/runner/constants.js @@ -105,7 +105,6 @@ export const I18N_JOBS = s__('Runners|Jobs'); export const I18N_ASSIGNED_PROJECTS = s__('Runners|Assigned Projects (%{projectCount})'); export const I18N_FILTER_PROJECTS = s__('Runners|Filter projects'); export const I18N_CLEAR_FILTER_PROJECTS = __('Clear'); -export const I18N_NONE = __('None'); export const I18N_NO_JOBS_FOUND = s__('Runners|This runner has not run any jobs.'); export const I18N_NO_PROJECTS_FOUND = __('No projects found'); diff --git a/app/assets/javascripts/clusters/constants.js b/app/assets/javascripts/clusters/constants.js deleted file mode 100644 index c6ca895778d..00000000000 --- a/app/assets/javascripts/clusters/constants.js +++ /dev/null @@ -1,16 +0,0 @@ -// These need to match the enum found in app/models/clusters/cluster.rb -export const CLUSTER_TYPE = { - INSTANCE: 'instance_type', - GROUP: 'group_type', - PROJECT: 'project_type', -}; - -// These need to match the available providers in app/models/clusters/providers/ -export const PROVIDER_TYPE = { - GCP: 'gcp', -}; - -// These are only used client-side - -export const LOGGING_MODE = 'logging'; -export const BLOCKING_MODE = 'blocking'; diff --git a/app/assets/javascripts/diffs/constants.js b/app/assets/javascripts/diffs/constants.js index 6c0c9c4e1d0..873c4819669 100644 --- a/app/assets/javascripts/diffs/constants.js +++ b/app/assets/javascripts/diffs/constants.js @@ -6,10 +6,8 @@ export const OLD_NO_NEW_LINE_TYPE = 'old-nonewline'; export const NEW_NO_NEW_LINE_TYPE = 'new-nonewline'; export const CONTEXT_LINE_TYPE = 'context'; export const EMPTY_CELL_TYPE = 'empty-cell'; -export const COMMENT_FORM_TYPE = 'commentForm'; export const DIFF_NOTE_TYPE = 'DiffNote'; export const LEGACY_DIFF_NOTE_TYPE = 'LegacyDiffNote'; -export const NOTE_TYPE = 'Note'; export const NEW_LINE_TYPE = 'new'; export const OLD_LINE_TYPE = 'old'; export const TEXT_DIFF_POSITION_TYPE = 'text'; @@ -17,14 +15,10 @@ export const IMAGE_DIFF_POSITION_TYPE = 'image'; export const LINE_POSITION_LEFT = 'left'; export const LINE_POSITION_RIGHT = 'right'; -export const LINE_SIDE_LEFT = 'left-side'; -export const LINE_SIDE_RIGHT = 'right-side'; export const DIFF_VIEW_COOKIE_NAME = 'diff_view'; export const DIFF_WHITESPACE_COOKIE_NAME = 'diff_whitespace'; export const LINE_HOVER_CLASS_NAME = 'is-over'; -export const LINE_UNFOLD_CLASS_NAME = 'unfold js-unfold'; -export const CONTEXT_LINE_CLASS_NAME = 'diff-expanded'; export const UNFOLD_COUNT = 20; export const COUNT_OF_AVATARS_IN_GUTTER = 3; @@ -46,14 +40,12 @@ export const TREE_HIDE_STATS_WIDTH = 260; export const OLD_LINE_KEY = 'old_line'; export const NEW_LINE_KEY = 'new_line'; export const TYPE_KEY = 'type'; -export const LEFT_LINE_KEY = 'left'; export const MAX_RENDERING_DIFF_LINES = 500; export const MAX_RENDERING_BULK_ROWS = 30; export const MIN_RENDERING_MS = 2; export const START_RENDERING_INDEX = 200; export const INLINE_DIFF_LINES_KEY = 'highlighted_diff_lines'; -export const PARALLEL_DIFF_LINES_KEY = 'parallel_diff_lines'; export const DIFF_COMPARE_BASE_VERSION_INDEX = -1; export const DIFF_COMPARE_HEAD_VERSION_INDEX = -2; diff --git a/app/assets/javascripts/editor/constants.js b/app/assets/javascripts/editor/constants.js index 2a47eef148e..df5571d0872 100644 --- a/app/assets/javascripts/editor/constants.js +++ b/app/assets/javascripts/editor/constants.js @@ -21,9 +21,6 @@ export const EDITOR_TOOLBAR_RIGHT_GROUP = 'right'; export const SOURCE_EDITOR_INSTANCE_ERROR_NO_EL = s__( 'SourceEditor|"el" parameter is required for createInstance()', ); -export const ERROR_INSTANCE_REQUIRED_FOR_EXTENSION = s__( - 'SourceEditor|Source Editor instance is required to set up an extension.', -); export const EDITOR_EXTENSION_DEFINITION_ERROR = s__( 'SourceEditor|Extension definition should be either a class or a function', ); diff --git a/app/assets/javascripts/feature_flags/constants.js b/app/assets/javascripts/feature_flags/constants.js index f697f203cf5..1993ec7abf2 100644 --- a/app/assets/javascripts/feature_flags/constants.js +++ b/app/assets/javascripts/feature_flags/constants.js @@ -1,4 +1,3 @@ -import { property } from 'lodash'; import { s__ } from '~/locale'; export const ROLLOUT_STRATEGY_ALL_USERS = 'default'; @@ -9,15 +8,8 @@ export const ROLLOUT_STRATEGY_GITLAB_USER_LIST = 'gitlabUserList'; export const PERCENT_ROLLOUT_GROUP_ID = 'default'; -export const DEFAULT_PERCENT_ROLLOUT = '100'; - export const ALL_ENVIRONMENTS_NAME = '*'; -export const INTERNAL_ID_PREFIX = 'internal_'; - -export const fetchPercentageParams = property(['parameters', 'percentage']); -export const fetchUserIdParams = property(['parameters', 'userIds']); - export const NEW_VERSION_FLAG = 'new_version_flag'; export const LEGACY_FLAG = 'legacy_flag'; diff --git a/app/assets/javascripts/groups/constants.js b/app/assets/javascripts/groups/constants.js index 6fb12cd6270..6f5b03788a8 100644 --- a/app/assets/javascripts/groups/constants.js +++ b/app/assets/javascripts/groups/constants.js @@ -12,7 +12,6 @@ export const ACTIVE_TAB_SHARED = 'shared'; export const ACTIVE_TAB_ARCHIVED = 'archived'; export const GROUPS_LIST_HOLDER_CLASS = '.js-groups-list-holder'; -export const GROUPS_FILTER_FORM_CLASS = '.js-group-filter-form'; export const CONTENT_LIST_CLASS = '.groups-list'; export const COMMON_STR = { diff --git a/app/assets/javascripts/header_search/constants.js b/app/assets/javascripts/header_search/constants.js index 65e113e5084..76fbf664913 100644 --- a/app/assets/javascripts/header_search/constants.js +++ b/app/assets/javascripts/header_search/constants.js @@ -12,10 +12,6 @@ export const MSG_MR_IVE_CREATED = s__("GlobalSearch|Merge requests I've created" export const MSG_IN_ALL_GITLAB = s__('GlobalSearch|all GitLab'); -export const MSG_IN_GROUP = s__('GlobalSearch|group'); - -export const MSG_IN_PROJECT = s__('GlobalSearch|project'); - export const ICON_PROJECT = 'project'; export const ICON_GROUP = 'group'; diff --git a/app/assets/javascripts/invite_members/constants.js b/app/assets/javascripts/invite_members/constants.js index 0e0734159bf..34b4e436392 100644 --- a/app/assets/javascripts/invite_members/constants.js +++ b/app/assets/javascripts/invite_members/constants.js @@ -79,7 +79,6 @@ export const READ_MORE_TEXT = s__( export const INVITE_BUTTON_TEXT = s__('InviteMembersModal|Invite'); export const INVITE_BUTTON_TEXT_DISABLED = s__('InviteMembersModal|Manage members'); export const CANCEL_BUTTON_TEXT = s__('InviteMembersModal|Cancel'); -export const CANCEL_BUTTON_TEXT_DISABLED = s__('InviteMembersModal|Explore paid plans'); export const HEADER_CLOSE_LABEL = s__('InviteMembersModal|Close invite team members'); export const MEMBER_ERROR_LIST_TEXT = s__( 'InviteMembersModal|Review the invite errors and try again:', diff --git a/app/assets/javascripts/issuable/components/status_box.vue b/app/assets/javascripts/issuable/components/status_box.vue index 0c75e44443d..c27fa166b69 100644 --- a/app/assets/javascripts/issuable/components/status_box.vue +++ b/app/assets/javascripts/issuable/components/status_box.vue @@ -4,7 +4,7 @@ import Vue from 'vue'; import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin'; import { fetchPolicies } from '~/lib/graphql'; import { __ } from '~/locale'; -import { IssuableType, TYPE_ISSUE } from '~/issues/constants'; +import { TYPE_ISSUE, TYPE_MERGE_REQUEST } from '~/issues/constants'; import { IssuableStates } from '~/vue_shared/issuable/list/constants'; export const badgeState = Vue.observable({ @@ -76,7 +76,7 @@ export default { return [ CLASSES[this.state], { - 'gl-vertical-align-bottom': this.issuableType === IssuableType.MergeRequest, + 'gl-vertical-align-bottom': this.issuableType === TYPE_MERGE_REQUEST, }, ]; }, @@ -84,7 +84,7 @@ export default { if (this.state === IssuableStates.Opened) { return 'success'; } else if (this.state === IssuableStates.Closed) { - return this.issuableType === IssuableType.MergeRequest ? 'danger' : 'info'; + return this.issuableType === TYPE_MERGE_REQUEST ? 'danger' : 'info'; } return 'info'; }, diff --git a/app/assets/javascripts/issues/constants.js b/app/assets/javascripts/issues/constants.js index 52e012c1e6c..7a89ce6554a 100644 --- a/app/assets/javascripts/issues/constants.js +++ b/app/assets/javascripts/issues/constants.js @@ -9,6 +9,7 @@ export const TITLE_LENGTH_MAX = 255; export const TYPE_EPIC = 'epic'; export const TYPE_INCIDENT = 'incident'; export const TYPE_ISSUE = 'issue'; +export const TYPE_MERGE_REQUEST = 'merge_request'; export const WORKSPACE_GROUP = 'group'; export const WORKSPACE_PROJECT = 'project'; diff --git a/app/assets/javascripts/jobs/components/table/constants.js b/app/assets/javascripts/jobs/components/table/constants.js index 41ce6e4d64d..1b572e60c58 100644 --- a/app/assets/javascripts/jobs/components/table/constants.js +++ b/app/assets/javascripts/jobs/components/table/constants.js @@ -1,7 +1,6 @@ import { s__, __ } from '~/locale'; /* Error constants */ -export const POST_FAILURE = 'post_failure'; export const DEFAULT = 'default'; export const RAW_TEXT_WARNING = s__( 'Jobs|Raw text search is not currently supported for the jobs filtered search feature. Please use the available search tokens.', diff --git a/app/assets/javascripts/members/constants.js b/app/assets/javascripts/members/constants.js index 68c5831db62..8e5b88d362e 100644 --- a/app/assets/javascripts/members/constants.js +++ b/app/assets/javascripts/members/constants.js @@ -192,8 +192,6 @@ export const MEMBER_STATE_ACTIVE = 2; export const BADGE_LABELS_AWAITING_SIGNUP = __('Awaiting user signup'); export const BADGE_LABELS_PENDING = __('Pending owner action'); -export const DAYS_TO_EXPIRE_SOON = 7; - export const LEAVE_MODAL_ID = 'member-leave-modal'; export const REMOVE_GROUP_LINK_MODAL_ID = 'remove-group-link-modal-id'; diff --git a/app/assets/javascripts/monitoring/constants.js b/app/assets/javascripts/monitoring/constants.js index 1b506c6564b..faef4b01c27 100644 --- a/app/assets/javascripts/monitoring/constants.js +++ b/app/assets/javascripts/monitoring/constants.js @@ -226,12 +226,6 @@ export const OVERVIEW_DASHBOARD_PATH = 'config/prometheus/common_metrics.yml'; */ export const OUT_OF_THE_BOX_DASHBOARDS_PATH_PREFIX = 'config/prometheus/'; -export const OPERATORS = { - greaterThan: '>', - equalTo: '==', - lessThan: '<', -}; - /** * Dashboard yml files support custom user-defined variables that * are rendered as input elements in the monitoring dashboard. diff --git a/app/assets/javascripts/packages_and_registries/package_registry/constants.js b/app/assets/javascripts/packages_and_registries/package_registry/constants.js index b8875b5dc18..5f369bea4df 100644 --- a/app/assets/javascripts/packages_and_registries/package_registry/constants.js +++ b/app/assets/javascripts/packages_and_registries/package_registry/constants.js @@ -27,15 +27,7 @@ export const PACKAGE_TYPE_DEBIAN = 'DEBIAN'; export const PACKAGE_TYPE_HELM = 'HELM'; export const TRACKING_LABEL_CODE_INSTRUCTION = 'code_instruction'; -export const TRACKING_LABEL_CONAN_INSTALLATION = 'conan_installation'; export const TRACKING_LABEL_MAVEN_INSTALLATION = 'maven_installation'; -export const TRACKING_LABEL_NPM_INSTALLATION = 'npm_installation'; -export const TRACKING_LABEL_NUGET_INSTALLATION = 'nuget_installation'; -export const TRACKING_LABEL_PYPI_INSTALLATION = 'pypi_installation'; -export const TRACKING_LABEL_COMPOSER_INSTALLATION = 'composer_installation'; - -export const TRACKING_ACTION_INSTALLATION = 'installation'; -export const TRACKING_ACTION_REGISTRY_SETUP = 'registry_setup'; export const TRACKING_ACTION_COPY_CONAN_COMMAND = 'copy_conan_command'; export const TRACKING_ACTION_COPY_CONAN_SETUP_COMMAND = 'copy_conan_setup_command'; @@ -68,7 +60,6 @@ export const TRACKING_ACTION_COPY_COMPOSER_PACKAGE_INCLUDE_COMMAND = export const TRACKING_LABEL_PACKAGE_ASSET = 'package_assets'; -export const TRACKING_ACTION_DOWNLOAD_PACKAGE_ASSET = 'download_package_asset'; export const TRACKING_ACTION_EXPAND_PACKAGE_ASSET = 'expand_package_asset'; export const TRACKING_ACTION_COPY_PACKAGE_ASSET_SHA = 'copy_package_asset_sha'; @@ -147,8 +138,6 @@ export const PACKAGE_REGISTRY_TITLE = __('Package Registry'); export const PACKAGE_ERROR_STATUS = 'ERROR'; export const PACKAGE_DEFAULT_STATUS = 'DEFAULT'; -export const PACKAGE_HIDDEN_STATUS = 'HIDDEN'; -export const PACKAGE_PROCESSING_STATUS = 'PROCESSING'; export const NPM_PACKAGE_MANAGER = 'npm'; export const YARN_PACKAGE_MANAGER = 'yarn'; diff --git a/app/assets/javascripts/packages_and_registries/settings/group/constants.js b/app/assets/javascripts/packages_and_registries/settings/group/constants.js index c93cd7f7d78..b47759df35f 100644 --- a/app/assets/javascripts/packages_and_registries/settings/group/constants.js +++ b/app/assets/javascripts/packages_and_registries/settings/group/constants.js @@ -78,8 +78,4 @@ export const MAVEN_FORWARDING_FIELDS = { // Parameters -export const PACKAGES_DOCS_PATH = helpPagePath('user/packages/index'); -export const MAVEN_DUPLICATES_ALLOWED = 'mavenDuplicatesAllowed'; -export const MAVEN_DUPLICATE_EXCEPTION_REGEX = 'mavenDuplicateExceptionRegex'; - export const DEPENDENCY_PROXY_DOCS_PATH = helpPagePath('user/packages/dependency_proxy/index'); diff --git a/app/assets/javascripts/pipelines/constants.js b/app/assets/javascripts/pipelines/constants.js index 820501089ed..ca146ac1e87 100644 --- a/app/assets/javascripts/pipelines/constants.js +++ b/app/assets/javascripts/pipelines/constants.js @@ -1,7 +1,6 @@ import { s__, __ } from '~/locale'; export const CANCEL_REQUEST = 'CANCEL_REQUEST'; -export const LAYOUT_CHANGE_DELAY = 300; export const FILTER_PIPELINES_SEARCH_DELAY = 200; export const ANY_TRIGGER_AUTHOR = 'Any'; export const SUPPORTED_FILTER_PARAMETERS = ['username', 'ref', 'status', 'source']; @@ -35,8 +34,6 @@ export const RAW_TEXT_WARNING = s__( export const DEFAULT = 'default'; export const DELETE_FAILURE = 'delete_pipeline_failure'; export const DRAW_FAILURE = 'draw_failure'; -export const EMPTY_PIPELINE_DATA = 'empty_data'; -export const INVALID_CI_CONFIG = 'invalid_ci_config'; export const LOAD_FAILURE = 'load_failure'; export const PARSE_FAILURE = 'parse_failure'; export const POST_FAILURE = 'post_failure'; diff --git a/app/assets/javascripts/protected_branches/constants.js b/app/assets/javascripts/protected_branches/constants.js index ae5eaa8e622..b5d00cb7e82 100644 --- a/app/assets/javascripts/protected_branches/constants.js +++ b/app/assets/javascripts/protected_branches/constants.js @@ -9,12 +9,3 @@ export const LEVEL_TYPES = { GROUP: 'group', DEPLOY_KEY: 'deploy_key', }; - -export const LEVEL_ID_PROP = { - ROLE: 'access_level', - USER: 'user_id', - GROUP: 'group_id', - DEPLOY_KEY: 'deploy_key_id', -}; - -export const ACCESS_LEVEL_NONE = 0; diff --git a/app/assets/javascripts/security_configuration/components/constants.js b/app/assets/javascripts/security_configuration/components/constants.js index 7b0ade09dff..6beb6cd4d34 100644 --- a/app/assets/javascripts/security_configuration/components/constants.js +++ b/app/assets/javascripts/security_configuration/components/constants.js @@ -65,7 +65,6 @@ export const DAST_PROFILES_NAME = __('DAST profiles'); export const DAST_PROFILES_DESCRIPTION = s__( 'SecurityConfiguration|Manage profiles for use by DAST scans.', ); -export const DAST_PROFILES_HELP_PATH = helpPagePath('user/application_security/dast/index'); export const DAST_PROFILES_CONFIG_TEXT = s__('SecurityConfiguration|Manage profiles'); export const SECRET_DETECTION_NAME = __('Secret Detection'); diff --git a/app/assets/javascripts/sidebar/components/assignees/assignee_avatar.vue b/app/assets/javascripts/sidebar/components/assignees/assignee_avatar.vue index 323f6f23df6..d65c950b33a 100644 --- a/app/assets/javascripts/sidebar/components/assignees/assignee_avatar.vue +++ b/app/assets/javascripts/sidebar/components/assignees/assignee_avatar.vue @@ -1,6 +1,6 @@