From fde3e0435c496af7dc37527f465573abd5657f5a Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Mon, 14 Dec 2020 15:09:40 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .rubocop.yml | 6 ++ .rubocop_manual_todo.yml | 4 + .../add_extra_tokens_for_merge_requests.js | 12 +++ .../issuable_filtered_search_token_keys.js | 9 --- .../components/visibility_level_dropdown.vue | 48 ++++++++++++ .../javascripts/groups/visibility_level.js | 24 ++++++ ...ete_container_repository.mutation.graphql} | 0 ...ontainer_repository_tags.mutation.graphql} | 0 ...ontainer_repository_details.query.graphql} | 0 ...roup_container_repositories.query.graphql} | 2 +- ...ject_container_repositories.query.graphql} | 0 .../registry/explorer/pages/details.vue | 4 +- .../registry/explorer/pages/list.vue | 12 +-- .../components/registry_settings_app.vue | 2 +- .../settings/components/settings_form.vue | 2 +- ...tainer_expiration_policy.mutation.graphql} | 0 ...ql => get_expiration_policy.query.graphql} | 0 .../settings/graphql/utils/cache_update.js | 2 +- .../security_reports/components/help_icon.vue | 58 ++++++++++++++ .../security_reports/security_reports_app.vue | 40 +++++----- app/helpers/visibility_level_helper.rb | 10 +++ app/models/concerns/timebox.rb | 9 ++- app/models/milestone.rb | 4 + app/policies/timebox_policy.rb | 10 +++ .../shared/groups/_visibility_level.html.haml | 3 + app/workers/gitlab_usage_ping_worker.rb | 4 + ...425-security-mr-widget-upgrade-popover.yml | 5 ++ ...t_analytics_aggregated_metrics-rollout.yml | 5 ++ .../product_analytics_aggregated_metrics.yml | 8 -- .../graphql/reference/gitlab_schema.graphql | 15 ++++ doc/api/graphql/reference/gitlab_schema.json | 38 ++++++++++ doc/api/graphql/reference/index.md | 2 + .../documentation/styleguide/index.md | 37 +++++---- doc/development/feature_flags/development.md | 23 ++++++ doc/development/policies.md | 12 ++- doc/user/search/advanced_search_syntax.md | 20 ++--- lib/feature.rb | 3 + lib/feature/definition.rb | 21 +++++- lib/gitlab/ci/pipeline/chain/command.rb | 2 +- lib/gitlab/ci/pipeline/chain/populate.rb | 4 +- lib/gitlab/ci/pipeline/chain/seed.rb | 26 ++----- lib/gitlab/ci/pipeline/quota/deployments.rb | 6 +- lib/gitlab/ci/pipeline/seed/pipeline.rb | 51 +++++++++++++ lib/gitlab/usage_data.rb | 4 - .../aggregated_metrics/common.yml | 1 - locale/gitlab.pot | 6 ++ rubocop/cop/gitlab/policy_rule_boolean.rb | 56 ++++++++++++++ .../filtered_search/filter_issues_spec.rb | 8 ++ .../visibility_level_dropdown_spec.js | 73 ++++++++++++++++++ .../registry/explorer/pages/details_spec.js | 4 +- .../registry/explorer/pages/list_spec.js | 12 +-- .../components/registry_settings_app_spec.js | 2 +- .../settings/components/settings_form_spec.js | 4 +- .../settings/graphql/cache_updated_spec.js | 2 +- .../security_reports/help_icon_spec.js | 68 +++++++++++++++++ .../security_reports_app_spec.js | 12 ++- spec/helpers/visibility_level_helper_spec.rb | 30 ++++++++ spec/lib/feature/definition_spec.rb | 59 +++++++++++++++ spec/lib/feature_spec.rb | 61 ++++++++++++++- .../pipeline/chain/limit/deployments_spec.rb | 17 +---- .../lib/gitlab/ci/pipeline/chain/seed_spec.rb | 62 +++++++-------- .../ci/pipeline/quota/deployments_spec.rb | 16 +--- .../gitlab/ci/pipeline/seed/pipeline_spec.rb | 75 +++++++++++++++++++ spec/lib/gitlab/usage_data_spec.rb | 46 +++--------- .../cop/gitlab/policy_rule_boolean_spec.rb | 52 +++++++++++++ .../helpers/stub_feature_flags_spec.rb | 27 ++++--- spec/workers/gitlab_usage_ping_worker_spec.rb | 7 ++ 67 files changed, 1012 insertions(+), 235 deletions(-) create mode 100644 app/assets/javascripts/groups/components/visibility_level_dropdown.vue create mode 100644 app/assets/javascripts/groups/visibility_level.js rename app/assets/javascripts/registry/explorer/graphql/mutations/{delete_container_repository.graphql => delete_container_repository.mutation.graphql} (100%) rename app/assets/javascripts/registry/explorer/graphql/mutations/{delete_container_repository_tags.graphql => delete_container_repository_tags.mutation.graphql} (100%) rename app/assets/javascripts/registry/explorer/graphql/queries/{get_container_repository_details.graphql => get_container_repository_details.query.graphql} (100%) rename app/assets/javascripts/registry/explorer/graphql/queries/{get_group_container_repositories.graphql => get_group_container_repositories.query.graphql} (92%) rename app/assets/javascripts/registry/explorer/graphql/queries/{get_project_container_repositories.graphql => get_project_container_repositories.query.graphql} (100%) rename app/assets/javascripts/registry/settings/graphql/mutations/{update_container_expiration_policy.graphql => update_container_expiration_policy.mutation.graphql} (100%) rename app/assets/javascripts/registry/settings/graphql/queries/{get_expiration_policy.graphql => get_expiration_policy.query.graphql} (100%) create mode 100644 app/assets/javascripts/vue_shared/security_reports/components/help_icon.vue create mode 100644 app/policies/timebox_policy.rb create mode 100644 app/views/shared/groups/_visibility_level.html.haml create mode 100644 changelogs/unreleased/273425-security-mr-widget-upgrade-popover.yml create mode 100644 changelogs/unreleased/mwaw-267550-product_analytics_aggregated_metrics-rollout.yml delete mode 100644 config/feature_flags/development/product_analytics_aggregated_metrics.yml create mode 100644 lib/gitlab/ci/pipeline/seed/pipeline.rb create mode 100644 rubocop/cop/gitlab/policy_rule_boolean.rb create mode 100644 spec/frontend/groups/components/visibility_level_dropdown_spec.js create mode 100644 spec/frontend/vue_shared/components/security_reports/help_icon_spec.js create mode 100644 spec/lib/gitlab/ci/pipeline/seed/pipeline_spec.rb create mode 100644 spec/rubocop/cop/gitlab/policy_rule_boolean_spec.rb diff --git a/.rubocop.yml b/.rubocop.yml index 6d2ade9e1ed..eac0d2748ae 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -276,6 +276,12 @@ GitlabSecurity/PublicSend: Gitlab/DuplicateSpecLocation: Enabled: true +Gitlab/PolicyRuleBoolean: + Enabled: true + Include: + - 'app/policies/**/*' + - 'ee/app/policies/**/*' + Cop/InjectEnterpriseEditionModule: Enabled: true Exclude: diff --git a/.rubocop_manual_todo.yml b/.rubocop_manual_todo.yml index ef316e8b08f..1bdc83fc902 100644 --- a/.rubocop_manual_todo.yml +++ b/.rubocop_manual_todo.yml @@ -41,6 +41,10 @@ Graphql/ResolverType: - 'app/graphql/resolvers/users/group_count_resolver.rb' - 'ee/app/graphql/resolvers/vulnerabilities_base_resolver.rb' +Gitlab/PolicyRuleBoolean: + Exclude: + - 'ee/app/policies/ee/identity_provider_policy.rb' + Rails/SaveBang: Exclude: - 'ee/spec/controllers/projects/merge_requests_controller_spec.rb' diff --git a/app/assets/javascripts/filtered_search/add_extra_tokens_for_merge_requests.js b/app/assets/javascripts/filtered_search/add_extra_tokens_for_merge_requests.js index 8899870be79..38a5bdd4a71 100644 --- a/app/assets/javascripts/filtered_search/add_extra_tokens_for_merge_requests.js +++ b/app/assets/javascripts/filtered_search/add_extra_tokens_for_merge_requests.js @@ -1,6 +1,18 @@ import { __ } from '~/locale'; export default (IssuableTokenKeys, disableTargetBranchFilter = false) => { + const reviewerToken = { + formattedKey: __('Reviewer'), + key: 'reviewer', + type: 'string', + param: 'username', + symbol: '@', + icon: 'user', + tag: '@reviewer', + }; + IssuableTokenKeys.tokenKeys.splice(2, 0, reviewerToken); + IssuableTokenKeys.tokenKeysWithAlternative.splice(2, 0, reviewerToken); + const draftToken = { token: { formattedKey: __('Draft'), diff --git a/app/assets/javascripts/filtered_search/issuable_filtered_search_token_keys.js b/app/assets/javascripts/filtered_search/issuable_filtered_search_token_keys.js index 6e742e4ca02..f9388e9c5d8 100644 --- a/app/assets/javascripts/filtered_search/issuable_filtered_search_token_keys.js +++ b/app/assets/javascripts/filtered_search/issuable_filtered_search_token_keys.js @@ -21,15 +21,6 @@ export const tokenKeys = [ icon: 'user', tag: '@assignee', }, - { - formattedKey: __('Reviewer'), - key: 'reviewer', - type: 'string', - param: 'username', - symbol: '@', - icon: 'user', - tag: '@reviewer', - }, { formattedKey: __('Milestone'), key: 'milestone', diff --git a/app/assets/javascripts/groups/components/visibility_level_dropdown.vue b/app/assets/javascripts/groups/components/visibility_level_dropdown.vue new file mode 100644 index 00000000000..ff0f8c3ff46 --- /dev/null +++ b/app/assets/javascripts/groups/components/visibility_level_dropdown.vue @@ -0,0 +1,48 @@ + + diff --git a/app/assets/javascripts/groups/visibility_level.js b/app/assets/javascripts/groups/visibility_level.js new file mode 100644 index 00000000000..d570b5e65ac --- /dev/null +++ b/app/assets/javascripts/groups/visibility_level.js @@ -0,0 +1,24 @@ +import Vue from 'vue'; +import VisibilityLevelDropdown from './components/visibility_level_dropdown.vue'; + +export default () => { + const el = document.querySelector('.js-visibility-level-dropdown'); + + if (!el) { + return null; + } + + const { visibilityLevelOptions, defaultLevel } = el.dataset; + + return new Vue({ + el, + render(createElement) { + return createElement(VisibilityLevelDropdown, { + props: { + visibilityLevelOptions: JSON.parse(visibilityLevelOptions), + defaultLevel: Number(defaultLevel), + }, + }); + }, + }); +}; diff --git a/app/assets/javascripts/registry/explorer/graphql/mutations/delete_container_repository.graphql b/app/assets/javascripts/registry/explorer/graphql/mutations/delete_container_repository.mutation.graphql similarity index 100% rename from app/assets/javascripts/registry/explorer/graphql/mutations/delete_container_repository.graphql rename to app/assets/javascripts/registry/explorer/graphql/mutations/delete_container_repository.mutation.graphql diff --git a/app/assets/javascripts/registry/explorer/graphql/mutations/delete_container_repository_tags.graphql b/app/assets/javascripts/registry/explorer/graphql/mutations/delete_container_repository_tags.mutation.graphql similarity index 100% rename from app/assets/javascripts/registry/explorer/graphql/mutations/delete_container_repository_tags.graphql rename to app/assets/javascripts/registry/explorer/graphql/mutations/delete_container_repository_tags.mutation.graphql diff --git a/app/assets/javascripts/registry/explorer/graphql/queries/get_container_repository_details.graphql b/app/assets/javascripts/registry/explorer/graphql/queries/get_container_repository_details.query.graphql similarity index 100% rename from app/assets/javascripts/registry/explorer/graphql/queries/get_container_repository_details.graphql rename to app/assets/javascripts/registry/explorer/graphql/queries/get_container_repository_details.query.graphql diff --git a/app/assets/javascripts/registry/explorer/graphql/queries/get_group_container_repositories.graphql b/app/assets/javascripts/registry/explorer/graphql/queries/get_group_container_repositories.query.graphql similarity index 92% rename from app/assets/javascripts/registry/explorer/graphql/queries/get_group_container_repositories.graphql rename to app/assets/javascripts/registry/explorer/graphql/queries/get_group_container_repositories.query.graphql index a3bafef15d9..348eda97ea7 100644 --- a/app/assets/javascripts/registry/explorer/graphql/queries/get_group_container_repositories.graphql +++ b/app/assets/javascripts/registry/explorer/graphql/queries/get_group_container_repositories.query.graphql @@ -1,7 +1,7 @@ #import "~/graphql_shared/fragments/pageInfo.fragment.graphql" #import "../fragments/container_repository.fragment.graphql" -query getProjectContainerRepositories( +query getGroupContainerRepositories( $fullPath: ID! $name: String $first: Int diff --git a/app/assets/javascripts/registry/explorer/graphql/queries/get_project_container_repositories.graphql b/app/assets/javascripts/registry/explorer/graphql/queries/get_project_container_repositories.query.graphql similarity index 100% rename from app/assets/javascripts/registry/explorer/graphql/queries/get_project_container_repositories.graphql rename to app/assets/javascripts/registry/explorer/graphql/queries/get_project_container_repositories.query.graphql diff --git a/app/assets/javascripts/registry/explorer/pages/details.vue b/app/assets/javascripts/registry/explorer/pages/details.vue index 57c59c7dc42..540f02d58d4 100644 --- a/app/assets/javascripts/registry/explorer/pages/details.vue +++ b/app/assets/javascripts/registry/explorer/pages/details.vue @@ -12,8 +12,8 @@ import TagsList from '../components/details_page/tags_list.vue'; import TagsLoader from '../components/details_page/tags_loader.vue'; import EmptyTagsState from '../components/details_page/empty_tags_state.vue'; -import getContainerRepositoryDetailsQuery from '../graphql/queries/get_container_repository_details.graphql'; -import deleteContainerRepositoryTagsMutation from '../graphql/mutations/delete_container_repository_tags.graphql'; +import getContainerRepositoryDetailsQuery from '../graphql/queries/get_container_repository_details.query.graphql'; +import deleteContainerRepositoryTagsMutation from '../graphql/mutations/delete_container_repository_tags.mutation.graphql'; import { ALERT_SUCCESS_TAG, diff --git a/app/assets/javascripts/registry/explorer/pages/list.vue b/app/assets/javascripts/registry/explorer/pages/list.vue index ce27b990013..3192ba82db8 100644 --- a/app/assets/javascripts/registry/explorer/pages/list.vue +++ b/app/assets/javascripts/registry/explorer/pages/list.vue @@ -18,9 +18,9 @@ import RegistryHeader from '../components/list_page/registry_header.vue'; import ImageList from '../components/list_page/image_list.vue'; import CliCommands from '../components/list_page/cli_commands.vue'; -import getProjectContainerRepositories from '../graphql/queries/get_project_container_repositories.graphql'; -import getGroupContainerRepositories from '../graphql/queries/get_group_container_repositories.graphql'; -import deleteContainerRepository from '../graphql/mutations/delete_container_repository.graphql'; +import getProjectContainerRepositoriesQuery from '../graphql/queries/get_project_container_repositories.query.graphql'; +import getGroupContainerRepositoriesQuery from '../graphql/queries/get_group_container_repositories.query.graphql'; +import deleteContainerRepositoryMutation from '../graphql/mutations/delete_container_repository.mutation.graphql'; import { DELETE_IMAGE_SUCCESS_MESSAGE, @@ -111,8 +111,8 @@ export default { }, graphQlQuery() { return this.config.isGroupPage - ? getGroupContainerRepositories - : getProjectContainerRepositories; + ? getGroupContainerRepositoriesQuery + : getProjectContainerRepositoriesQuery; }, queryVariables() { return { @@ -152,7 +152,7 @@ export default { this.mutationLoading = true; return this.$apollo .mutate({ - mutation: deleteContainerRepository, + mutation: deleteContainerRepositoryMutation, variables: { id: this.itemToDelete.id, }, diff --git a/app/assets/javascripts/registry/settings/components/registry_settings_app.vue b/app/assets/javascripts/registry/settings/components/registry_settings_app.vue index ac6a0871153..35c7a8be4ea 100644 --- a/app/assets/javascripts/registry/settings/components/registry_settings_app.vue +++ b/app/assets/javascripts/registry/settings/components/registry_settings_app.vue @@ -1,7 +1,7 @@ + + diff --git a/app/assets/javascripts/vue_shared/security_reports/security_reports_app.vue b/app/assets/javascripts/vue_shared/security_reports/security_reports_app.vue index 3f4a790d24e..bdbf9957ad4 100644 --- a/app/assets/javascripts/vue_shared/security_reports/security_reports_app.vue +++ b/app/assets/javascripts/vue_shared/security_reports/security_reports_app.vue @@ -1,6 +1,6 @@