Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-02-16 21:09:00 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-02-16 21:09:00 +0300
commit5c4df0629a70c28eb479b513a3e6860e7a35d1c9 (patch)
treef9a661c7358b4265b2a479d62365154139f951e4
parentc1f98d9590def61ad2fca09cc06a7a9d52cdebc5 (diff)
Add latest changes from gitlab-org/gitlab@master
-rw-r--r--.rubocop_todo/rake/require.yml1
-rw-r--r--app/assets/javascripts/pipelines/pipeline_tabs.js2
-rw-r--r--app/assets/javascripts/related_issues/constants.js28
-rw-r--r--app/assets/javascripts/search/sidebar/components/language_filter.vue7
-rw-r--r--app/controllers/projects_controller.rb11
-rw-r--r--app/finders/fork_targets_finder.rb10
-rw-r--r--app/finders/groups_finder.rb8
-rw-r--r--app/graphql/types/packages/package_details_type.rb6
-rw-r--r--app/models/merge_request.rb6
-rw-r--r--app/views/groups/edit.html.haml1
-rw-r--r--app/views/projects/_merge_request_pipelines_and_threads_options.html.haml12
-rw-r--r--config/audit_events/types/manually_trigger_housekeeping.yml9
-rw-r--r--config/feature_flags/development/searchable_fork_targets.yml8
-rw-r--r--config/initializers_before_autoloader/001_fast_gettext.rb2
-rw-r--r--db/post_migrate/20230216052103_prepare_async_foreign_key_validation_for_ci_build_report_results.rb15
-rw-r--r--db/schema_migrations/202302160521031
-rw-r--r--doc/administration/gitaly/praefect.md2
-rw-r--r--doc/administration/integration/kroki.md2
-rw-r--r--doc/administration/integration/mailgun.md2
-rw-r--r--doc/administration/integration/plantuml.md2
-rw-r--r--doc/administration/sidekiq/index.md4
-rw-r--r--doc/api/graphql/reference/index.md29
-rw-r--r--doc/api/runners.md10
-rw-r--r--doc/development/fe_guide/style/javascript.md4
-rw-r--r--doc/development/pipelines/index.md9
-rw-r--r--doc/integration/advanced_search/elasticsearch.md2
-rw-r--r--doc/integration/datadog.md2
-rw-r--r--doc/integration/gitpod.md2
-rw-r--r--doc/integration/gmail_action_buttons_for_gitlab.md2
-rw-r--r--doc/integration/jenkins.md2
-rw-r--r--doc/integration/jira/configure.md2
-rw-r--r--doc/integration/jira/jira_cloud_configuration.md4
-rw-r--r--doc/integration/oauth_provider.md2
-rw-r--r--doc/integration/recaptcha.md2
-rw-r--r--doc/integration/security_partners/index.md2
-rw-r--r--doc/integration/sourcegraph.md2
-rw-r--r--doc/integration/trello_power_up.md2
-rw-r--r--doc/user/packages/harbor_container_registry/index.md2
-rw-r--r--doc/user/project/integrations/apple_app_store.md2
-rw-r--r--doc/user/project/integrations/asana.md2
-rw-r--r--doc/user/project/integrations/bamboo.md2
-rw-r--r--doc/user/project/integrations/bugzilla.md2
-rw-r--r--doc/user/project/integrations/discord_notifications.md6
-rw-r--r--doc/user/project/integrations/emails_on_push.md4
-rw-r--r--doc/user/project/integrations/ewm.md6
-rw-r--r--doc/user/project/integrations/github.md2
-rw-r--r--doc/user/project/integrations/hangouts_chat.md2
-rw-r--r--doc/user/project/integrations/harbor.md2
-rw-r--r--doc/user/project/integrations/irker.md4
-rw-r--r--doc/user/project/integrations/mattermost.md4
-rw-r--r--doc/user/project/integrations/microsoft_teams.md4
-rw-r--r--doc/user/project/integrations/mock_ci.md4
-rw-r--r--doc/user/project/integrations/pivotal_tracker.md4
-rw-r--r--doc/user/project/integrations/prometheus.md2
-rw-r--r--doc/user/project/integrations/redmine.md2
-rw-r--r--doc/user/project/integrations/servicenow.md2
-rw-r--r--doc/user/project/integrations/shimo.md6
-rw-r--r--doc/user/project/integrations/slack.md2
-rw-r--r--doc/user/project/integrations/unify_circuit.md4
-rw-r--r--doc/user/project/integrations/webex_teams.md2
-rw-r--r--doc/user/project/integrations/youtrack.md2
-rw-r--r--doc/user/project/integrations/zentao.md2
-rw-r--r--lib/api/ci/runner.rb4
-rw-r--r--lib/api/projects.rb11
-rw-r--r--lib/tasks/gitlab/dependency_proxy/migrate.rake2
-rw-r--r--locale/gitlab.pot39
-rw-r--r--package.json2
-rw-r--r--qa/qa/page/project/settings/merge_request.rb4
-rw-r--r--sidekiq_cluster/cli.rb2
-rw-r--r--spec/controllers/projects_controller_spec.rb14
-rw-r--r--spec/finders/fork_targets_finder_spec.rb14
-rw-r--r--spec/finders/groups_finder_spec.rb12
-rw-r--r--spec/fixtures/api/schemas/graphql/packages/package_details.json146
-rw-r--r--spec/frontend/issuable/related_issues/components/add_issuable_form_spec.js12
-rw-r--r--spec/frontend/search/sidebar/components/app_spec.js5
-rw-r--r--spec/graphql/types/packages/package_details_type_spec.rb2
-rw-r--r--spec/requests/api/ci/runner/runners_reset_spec.rb5
-rw-r--r--spec/requests/api/ci/runner/runners_verify_post_spec.rb35
-rw-r--r--spec/requests/api/graphql/packages/package_spec.rb85
-rw-r--r--spec/requests/api/projects_spec.rb30
-rw-r--r--yarn.lock8
81 files changed, 525 insertions, 200 deletions
diff --git a/.rubocop_todo/rake/require.yml b/.rubocop_todo/rake/require.yml
index d098c28bf80..e3cd483f056 100644
--- a/.rubocop_todo/rake/require.yml
+++ b/.rubocop_todo/rake/require.yml
@@ -3,7 +3,6 @@ Rake/Require:
Details: grace period
Exclude:
- 'lib/tasks/gitlab/assets.rake'
- - 'lib/tasks/gitlab/dependency_proxy/migrate.rake'
- 'lib/tasks/gitlab/docs/redirect.rake'
- 'lib/tasks/gitlab/graphql.rake'
- 'lib/tasks/gitlab/lfs/migrate.rake'
diff --git a/app/assets/javascripts/pipelines/pipeline_tabs.js b/app/assets/javascripts/pipelines/pipeline_tabs.js
index d0ee6871a48..6360ccc41bc 100644
--- a/app/assets/javascripts/pipelines/pipeline_tabs.js
+++ b/app/assets/javascripts/pipelines/pipeline_tabs.js
@@ -34,6 +34,7 @@ export const createAppOptions = (selector, apolloProvider, router) => {
totalJobCount,
licenseManagementApiUrl,
licenseManagementSettingsPath,
+ licenseScanCount,
licensesApiPath,
canManageLicenses,
summaryEndpoint,
@@ -87,6 +88,7 @@ export const createAppOptions = (selector, apolloProvider, router) => {
totalJobCount,
licenseManagementApiUrl,
licenseManagementSettingsPath,
+ licenseScanCount,
licensesApiPath,
canManageLicenses: parseBoolean(canManageLicenses),
summaryEndpoint,
diff --git a/app/assets/javascripts/related_issues/constants.js b/app/assets/javascripts/related_issues/constants.js
index 821f6b525c5..2a4ce70511b 100644
--- a/app/assets/javascripts/related_issues/constants.js
+++ b/app/assets/javascripts/related_issues/constants.js
@@ -1,5 +1,5 @@
import { __, sprintf } from '~/locale';
-import { TYPE_ISSUE } from '~/issues/constants';
+import { TYPE_EPIC, TYPE_ISSUE } from '~/issues/constants';
export const issuableTypesMap = {
ISSUE: 'issue',
@@ -32,7 +32,7 @@ export const autoCompleteTextMap = {
{ emphasisStart: '<', emphasisEnd: '>' },
false,
),
- [issuableTypesMap.EPIC]: sprintf(
+ [TYPE_EPIC]: sprintf(
__(' or %{emphasisStart}&epic id%{emphasisEnd}'),
{ emphasisStart: '<', emphasisEnd: '>' },
false,
@@ -45,7 +45,7 @@ export const autoCompleteTextMap = {
},
false: {
[TYPE_ISSUE]: '',
- [issuableTypesMap.EPIC]: '',
+ [TYPE_EPIC]: '',
[issuableTypesMap.MERGE_REQUEST]: __(' or references'),
},
};
@@ -53,24 +53,24 @@ export const autoCompleteTextMap = {
export const inputPlaceholderTextMap = {
[TYPE_ISSUE]: __('Paste issue link'),
[issuableTypesMap.INCIDENT]: __('Paste link'),
- [issuableTypesMap.EPIC]: __('Paste epic link'),
+ [TYPE_EPIC]: __('Paste epic link'),
[issuableTypesMap.MERGE_REQUEST]: __('Enter merge request URLs'),
};
export const inputPlaceholderConfidentialTextMap = {
[TYPE_ISSUE]: __('Paste confidential issue link'),
- [issuableTypesMap.EPIC]: __('Paste confidential epic link'),
+ [TYPE_EPIC]: __('Paste confidential epic link'),
[issuableTypesMap.MERGE_REQUEST]: __('Enter merge request URLs'),
};
export const relatedIssuesRemoveErrorMap = {
[TYPE_ISSUE]: __('An error occurred while removing issues.'),
- [issuableTypesMap.EPIC]: __('An error occurred while removing epics.'),
+ [TYPE_EPIC]: __('An error occurred while removing epics.'),
};
export const pathIndeterminateErrorMap = {
[TYPE_ISSUE]: __('We could not determine the path to remove the issue'),
- [issuableTypesMap.EPIC]: __('We could not determine the path to remove the epic'),
+ [TYPE_EPIC]: __('We could not determine the path to remove the epic'),
};
export const itemAddFailureTypesMap = {
@@ -80,7 +80,7 @@ export const itemAddFailureTypesMap = {
export const addRelatedIssueErrorMap = {
[TYPE_ISSUE]: __('Issue cannot be found.'),
- [issuableTypesMap.EPIC]: __('Epic cannot be found.'),
+ [TYPE_EPIC]: __('Epic cannot be found.'),
};
export const addRelatedItemErrorMap = {
@@ -97,7 +97,7 @@ export const addRelatedItemErrorMap = {
export const issuableIconMap = {
[TYPE_ISSUE]: 'issues',
[issuableTypesMap.INCIDENT]: 'issues',
- [issuableTypesMap.EPIC]: 'epic',
+ [TYPE_EPIC]: 'epic',
};
export const PathIdSeparator = {
@@ -108,28 +108,28 @@ export const PathIdSeparator = {
export const issuablesBlockHeaderTextMap = {
[TYPE_ISSUE]: __('Linked items'),
[issuableTypesMap.INCIDENT]: __('Linked incidents or issues'),
- [issuableTypesMap.EPIC]: __('Linked epics'),
+ [TYPE_EPIC]: __('Linked epics'),
};
export const issuablesBlockHelpTextMap = {
[TYPE_ISSUE]: __('Learn more about linking issues'),
[issuableTypesMap.INCIDENT]: __('Learn more about linking issues and incidents'),
- [issuableTypesMap.EPIC]: __('Learn more about linking epics'),
+ [TYPE_EPIC]: __('Learn more about linking epics'),
};
export const issuablesBlockAddButtonTextMap = {
[TYPE_ISSUE]: __('Add a related issue'),
- [issuableTypesMap.EPIC]: __('Add a related epic'),
+ [TYPE_EPIC]: __('Add a related epic'),
};
export const issuablesFormCategoryHeaderTextMap = {
[TYPE_ISSUE]: __('The current issue'),
[issuableTypesMap.INCIDENT]: __('The current incident'),
- [issuableTypesMap.EPIC]: __('The current epic'),
+ [TYPE_EPIC]: __('The current epic'),
};
export const issuablesFormInputTextMap = {
[TYPE_ISSUE]: __('the following issues'),
[issuableTypesMap.INCIDENT]: __('the following incidents or issues'),
- [issuableTypesMap.EPIC]: __('the following epics'),
+ [TYPE_EPIC]: __('the following epics'),
};
diff --git a/app/assets/javascripts/search/sidebar/components/language_filter.vue b/app/assets/javascripts/search/sidebar/components/language_filter.vue
index 7a65f8c7956..26ce204cb5c 100644
--- a/app/assets/javascripts/search/sidebar/components/language_filter.vue
+++ b/app/assets/javascripts/search/sidebar/components/language_filter.vue
@@ -31,9 +31,6 @@ export default {
computed: {
...mapState(['aggregations', 'sidebarDirty']),
...mapGetters(['langugageAggregationBuckets']),
- ffBasedXPadding() {
- return this.glFeatures.searchPageVerticalNav ? 'gl-px-5' : 'gl-px-0';
- },
hasBuckets() {
return this.langugageAggregationBuckets.length > 0;
},
@@ -87,7 +84,7 @@ export default {
class="gl-overflow-x-hidden gl-overflow-y-auto"
:class="{ 'language-filter-max-height': showAll }"
>
- <checkbox-filter :class="ffBasedXPadding" :filter-data="filtersData" />
+ <checkbox-filter class="gl-px-5" :filter-data="filtersData" />
<span v-if="showAll && hasOverMax" data-testid="has-over-max-text">{{
$options.i18n.showingMax
}}</span>
@@ -109,7 +106,7 @@ export default {
</div>
<div v-if="!aggregations.error">
<hr :class="$options.HR_DEFAULT_CLASSES" />
- <div class="gl-display-flex gl-align-items-center gl-mt-4 gl-mx-5" :class="ffBasedXPadding">
+ <div class="gl-display-flex gl-align-items-center gl-mt-4 gl-mx-5 gl-px-5">
<gl-button
category="primary"
variant="confirm"
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index 0338c912b53..71ad747b6b1 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -228,7 +228,16 @@ class ProjectsController < Projects::ApplicationController
:eager
end
- ::Repositories::HousekeepingService.new(@project, task).execute
+ ::Repositories::HousekeepingService.new(@project, task).execute do
+ ::Gitlab::Audit::Auditor.audit(
+ name: 'manually_trigger_housekeeping',
+ author: current_user,
+ scope: @project,
+ target: @project,
+ message: "Housekeeping task: #{task}",
+ created_at: DateTime.current
+ )
+ end
redirect_to(
project_path(@project),
diff --git a/app/finders/fork_targets_finder.rb b/app/finders/fork_targets_finder.rb
index e129fde3748..c1769ea28f9 100644
--- a/app/finders/fork_targets_finder.rb
+++ b/app/finders/fork_targets_finder.rb
@@ -7,8 +7,6 @@ class ForkTargetsFinder
end
def execute(options = {})
- return previous_execute(options) unless Feature.enabled?(:searchable_fork_targets)
-
items = fork_targets(options)
by_search(items, options)
@@ -31,14 +29,6 @@ class ForkTargetsFinder
user.forkable_namespaces.sort_by_type
end
end
-
- # rubocop: disable CodeReuse/ActiveRecord
- def previous_execute(options = {})
- return ::Namespace.where(id: user.forkable_namespaces).sort_by_type unless options[:only_groups]
-
- ::Group.where(id: user.manageable_groups(include_groups_with_developer_maintainer_access: true))
- end
- # rubocop: enable CodeReuse/ActiveRecord
end
ForkTargetsFinder.prepend_mod_with('ForkTargetsFinder')
diff --git a/app/finders/groups_finder.rb b/app/finders/groups_finder.rb
index 61d79885001..24003111f88 100644
--- a/app/finders/groups_finder.rb
+++ b/app/finders/groups_finder.rb
@@ -13,6 +13,7 @@
# min_access_level: integer
# search: string
# exclude_group_ids: array of integers
+# filter_group_ids: array of integers - only include groups from the specified list of ids
# include_parent_descendants: boolean (defaults to false) - includes descendant groups when
# filtering by parent. The parent param must be present.
# include_ancestors: boolean (defaults to true)
@@ -34,6 +35,7 @@ class GroupsFinder < UnionFinder
items = all_groups.map do |item|
item = by_parent(item)
item = by_custom_attributes(item)
+ item = filter_group_ids(item)
item = exclude_group_ids(item)
item = by_search(item)
@@ -90,6 +92,12 @@ class GroupsFinder < UnionFinder
groups.id_not_in(params[:exclude_group_ids])
end
+ def filter_group_ids(groups)
+ return groups unless params[:filter_group_ids]
+
+ groups.id_in(params[:filter_group_ids])
+ end
+
# rubocop: disable CodeReuse/ActiveRecord
def by_parent(groups)
return groups unless params[:parent]
diff --git a/app/graphql/types/packages/package_details_type.rb b/app/graphql/types/packages/package_details_type.rb
index 6c0d955ed77..f63b41b3c92 100644
--- a/app/graphql/types/packages/package_details_type.rb
+++ b/app/graphql/types/packages/package_details_type.rb
@@ -28,6 +28,8 @@ module Types
field :last_downloaded_at, Types::TimeType, null: true, description: 'Last time that a file of this package was downloaded.'
+ field :public_package, GraphQL::Types::Boolean, null: true, description: 'Indicates if there is public access to the package.'
+
def versions
object.versions
end
@@ -63,6 +65,10 @@ module Types
def pypi_url
pypi_registry_url(object.project.id)
end
+
+ def public_package
+ object.project.public? || object.project.project_feature.package_registry_access_level == ProjectFeature::PUBLIC
+ end
end
end
end
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 8646e6aecb1..485ca3a3850 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -2080,7 +2080,11 @@ class MergeRequest < ApplicationRecord
end
def report_type_enabled?(report_type)
- !!actual_head_pipeline&.batch_lookup_report_artifact_for_file_type(report_type)
+ if report_type == :license_scanning
+ ::Gitlab::LicenseScanning.scanner_for_pipeline(project, actual_head_pipeline).has_data?
+ else
+ !!actual_head_pipeline&.batch_lookup_report_artifact_for_file_type(report_type)
+ end
end
end
diff --git a/app/views/groups/edit.html.haml b/app/views/groups/edit.html.haml
index f1ed1311195..0c416d57b75 100644
--- a/app/views/groups/edit.html.haml
+++ b/app/views/groups/edit.html.haml
@@ -28,6 +28,7 @@
.settings-content
= render 'groups/settings/permissions'
+= render_if_exists 'groups/merge_requests', expanded: expanded, group: @group
= render_if_exists 'groups/merge_request_approval_settings', expanded: expanded, group: @group, user: current_user
= render_if_exists 'groups/insights', expanded: expanded
= render_if_exists 'groups/analytics_dashboards', expanded: expanded
diff --git a/app/views/projects/_merge_request_pipelines_and_threads_options.html.haml b/app/views/projects/_merge_request_pipelines_and_threads_options.html.haml
index 94f8d3cc4a3..a9609434f15 100644
--- a/app/views/projects/_merge_request_pipelines_and_threads_options.html.haml
+++ b/app/views/projects/_merge_request_pipelines_and_threads_options.html.haml
@@ -1,13 +1,13 @@
- form = local_assigns.fetch(:form)
= form.gitlab_ui_checkbox_component :only_allow_merge_if_pipeline_succeeds,
- s_('ProjectSettings|Pipelines must succeed'),
- help_text: s_("ProjectSettings|Merge requests can't be merged if the latest pipeline did not succeed or is still running.")
+ s_('MergeChecks|Pipelines must succeed'),
+ help_text: s_("MergeChecks|Merge requests can't be merged if the latest pipeline did not succeed or is still running.")
.gl-pl-6
= form.gitlab_ui_checkbox_component :allow_merge_on_skipped_pipeline,
- s_('ProjectSettings|Skipped pipelines are considered successful'),
- help_text: s_('ProjectSettings|Introduces the risk of merging changes that do not pass the pipeline.'),
+ s_('MergeChecks|Skipped pipelines are considered successful'),
+ help_text: s_('MergeChecks|Introduces the risk of merging changes that do not pass the pipeline.'),
checkbox_options: { class: 'gl-pl-6' }
= form.gitlab_ui_checkbox_component :only_allow_merge_if_all_discussions_are_resolved,
- s_('ProjectSettings|All threads must be resolved'),
- checkbox_options: { data: { qa_selector: 'allow_merge_if_all_discussions_are_resolved_checkbox' } }
+ s_('MergeChecks|All threads must be resolved'),
+ checkbox_options: { data: { qa_selector: 'only_allow_merge_if_all_discussions_are_resolved_checkbox' } }
diff --git a/config/audit_events/types/manually_trigger_housekeeping.yml b/config/audit_events/types/manually_trigger_housekeeping.yml
new file mode 100644
index 00000000000..70c9818d8e8
--- /dev/null
+++ b/config/audit_events/types/manually_trigger_housekeeping.yml
@@ -0,0 +1,9 @@
+---
+name: manually_trigger_housekeeping
+description: Triggered when manually triggering housekeeping via api or admin UI
+introduced_by_issue: https://gitlab.com/gitlab-org/gitlab/-/issues/390761
+introduced_by_mr: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/112095
+feature_category: source_code_management
+milestone: '15.9'
+saved_to_database: true
+streamed: true
diff --git a/config/feature_flags/development/searchable_fork_targets.yml b/config/feature_flags/development/searchable_fork_targets.yml
deleted file mode 100644
index 3baea34623a..00000000000
--- a/config/feature_flags/development/searchable_fork_targets.yml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-name: searchable_fork_targets
-introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/94991
-rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/370795
-milestone: '15.3'
-type: development
-group: group::source code
-default_enabled: true
diff --git a/config/initializers_before_autoloader/001_fast_gettext.rb b/config/initializers_before_autoloader/001_fast_gettext.rb
index 4436eee2f90..3d54ed8f32f 100644
--- a/config/initializers_before_autoloader/001_fast_gettext.rb
+++ b/config/initializers_before_autoloader/001_fast_gettext.rb
@@ -1,3 +1,5 @@
# frozen_string_literal: true
+require_relative '../../lib/gitlab/i18n'
+
Gitlab::I18n.setup(domain: 'gitlab', default_locale: :en)
diff --git a/db/post_migrate/20230216052103_prepare_async_foreign_key_validation_for_ci_build_report_results.rb b/db/post_migrate/20230216052103_prepare_async_foreign_key_validation_for_ci_build_report_results.rb
new file mode 100644
index 00000000000..e9add3fd2ae
--- /dev/null
+++ b/db/post_migrate/20230216052103_prepare_async_foreign_key_validation_for_ci_build_report_results.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+class PrepareAsyncForeignKeyValidationForCiBuildReportResults < Gitlab::Database::Migration[2.1]
+ TABLE_NAME = :ci_build_report_results
+ COLUMN_NAMES = [:partition_id, :build_id]
+ FOREIGN_KEY_NAME = :fk_rails_16cb1ff064_p
+
+ def up
+ prepare_async_foreign_key_validation(TABLE_NAME, COLUMN_NAMES, name: FOREIGN_KEY_NAME)
+ end
+
+ def down
+ unprepare_async_foreign_key_validation(TABLE_NAME, COLUMN_NAMES, name: FOREIGN_KEY_NAME)
+ end
+end
diff --git a/db/schema_migrations/20230216052103 b/db/schema_migrations/20230216052103
new file mode 100644
index 00000000000..5b4fa3b84fa
--- /dev/null
+++ b/db/schema_migrations/20230216052103
@@ -0,0 +1 @@
+f6520e0b7cda276b7cf198bcbb0be4425c844a88d38118740675b639dbc73694 \ No newline at end of file
diff --git a/doc/administration/gitaly/praefect.md b/doc/administration/gitaly/praefect.md
index abcd26cae1b..440bd7427ae 100644
--- a/doc/administration/gitaly/praefect.md
+++ b/doc/administration/gitaly/praefect.md
@@ -1025,7 +1025,7 @@ Particular attention should be shown to:
WARNING:
If you have existing data stored on the default Gitaly storage,
- you should [migrate the data your Gitaly Cluster storage](index.md#migrate-to-gitaly-cluster)
+ you should [migrate the data to your Gitaly Cluster storage](index.md#migrate-to-gitaly-cluster)
first.
```ruby
diff --git a/doc/administration/integration/kroki.md b/doc/administration/integration/kroki.md
index 491eeb002e4..081c4d8a08c 100644
--- a/doc/administration/integration/kroki.md
+++ b/doc/administration/integration/kroki.md
@@ -4,7 +4,7 @@ group: Project Management
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# Kroki diagrams **(FREE SELF)**
+# Kroki **(FREE SELF)**
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/241744) in GitLab 13.7.
> - Support for reStructuredText and Textile documents [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/324766) in GitLab 13.12.
diff --git a/doc/administration/integration/mailgun.md b/doc/administration/integration/mailgun.md
index 3beb380c48f..218b2888033 100644
--- a/doc/administration/integration/mailgun.md
+++ b/doc/administration/integration/mailgun.md
@@ -5,7 +5,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
type: reference, howto
---
-# Mailgun and GitLab **(FREE SELF)**
+# Mailgun **(FREE SELF)**
When you use Mailgun to send emails for your GitLab instance and [Mailgun](https://www.mailgun.com/)
integration is enabled and configured in GitLab, you can receive their webhook for
diff --git a/doc/administration/integration/plantuml.md b/doc/administration/integration/plantuml.md
index f0b3e949b35..33434e15c4e 100644
--- a/doc/administration/integration/plantuml.md
+++ b/doc/administration/integration/plantuml.md
@@ -5,7 +5,7 @@ info: "To determine the technical writer assigned to the Stage/Group associated
type: reference, howto
---
-# PlantUML and GitLab **(FREE)**
+# PlantUML **(FREE)**
When the [PlantUML](https://plantuml.com) integration is enabled and configured in
GitLab, you can create diagrams in snippets, wikis, and repositories. This integration
diff --git a/doc/administration/sidekiq/index.md b/doc/administration/sidekiq/index.md
index 7b3ecdd0890..bf858476c0c 100644
--- a/doc/administration/sidekiq/index.md
+++ b/doc/administration/sidekiq/index.md
@@ -184,8 +184,8 @@ Updates to example must be made at:
## Set number of Sidekiq queue processes to the same number as available CPUs
sidekiq['queue_groups'] = ['*'] * 4
- ## Set number of Sidekiq threads per queue process to the recommend number of 10
- sidekiq['max_concurrency'] = 10
+ ## Set number of Sidekiq threads per queue process to the recommend number of 20
+ sidekiq['max_concurrency'] = 20
```
1. Copy the `/etc/gitlab/gitlab-secrets.json` file from the GitLab instance and replace the file in the Sidekiq instance.
diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md
index 74e8035232b..1d6f08eea58 100644
--- a/doc/api/graphql/reference/index.md
+++ b/doc/api/graphql/reference/index.md
@@ -883,6 +883,28 @@ Input type: `ApiFuzzingCiConfigurationCreateInput`
| <a id="mutationapifuzzingciconfigurationcreateerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
| <a id="mutationapifuzzingciconfigurationcreategitlabciyamleditpath"></a>`gitlabCiYamlEditPath` **{warning-solid}** | [`String`](#string) | **Deprecated:** The configuration snippet is now generated client-side. Deprecated in 14.6. |
+### `Mutation.approveDeployment`
+
+Input type: `ApproveDeploymentInput`
+
+#### Arguments
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="mutationapprovedeploymentclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
+| <a id="mutationapprovedeploymentcomment"></a>`comment` | [`String`](#string) | Comment to go with the approval. |
+| <a id="mutationapprovedeploymentid"></a>`id` | [`DeploymentID!`](#deploymentid) | ID of the deployment. |
+| <a id="mutationapprovedeploymentrepresentedas"></a>`representedAs` | [`String`](#string) | Name of the User/Group/Role to use for the approval, when the user belongs to multiple approval rules. |
+| <a id="mutationapprovedeploymentstatus"></a>`status` | [`DeploymentsApprovalStatus!`](#deploymentsapprovalstatus) | Status of the approval (either `APPROVED` or `REJECTED`). |
+
+#### Fields
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="mutationapprovedeploymentclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
+| <a id="mutationapprovedeploymentdeploymentapproval"></a>`deploymentApproval` | [`DeploymentApproval!`](#deploymentapproval) | DeploymentApproval after mutation. |
+| <a id="mutationapprovedeploymenterrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
+
### `Mutation.artifactDestroy`
Input type: `ArtifactDestroyInput`
@@ -17130,6 +17152,7 @@ Represents a package details in the Package Registry.
| <a id="packagedetailstypepackagetype"></a>`packageType` | [`PackageTypeEnum!`](#packagetypeenum) | Package type. |
| <a id="packagedetailstypepipelines"></a>`pipelines` | [`PipelineConnection`](#pipelineconnection) | Pipelines that built the package. Max page size 20. (see [Connections](#connections)) |
| <a id="packagedetailstypeproject"></a>`project` | [`Project!`](#project) | Project where the package is stored. |
+| <a id="packagedetailstypepublicpackage"></a>`publicPackage` | [`Boolean`](#boolean) | Indicates if there is public access to the package. |
| <a id="packagedetailstypepypisetupurl"></a>`pypiSetupUrl` | [`String`](#string) | Url of the PyPi project setup endpoint. |
| <a id="packagedetailstypepypiurl"></a>`pypiUrl` | [`String`](#string) | Url of the PyPi project endpoint. |
| <a id="packagedetailstypestatus"></a>`status` | [`PackageStatus!`](#packagestatus) | Package status. |
@@ -24155,6 +24178,12 @@ A `DependencyProxyManifestID` is a global ID. It is encoded as a string.
An example `DependencyProxyManifestID` is: `"gid://gitlab/DependencyProxy::Manifest/1"`.
+### `DeploymentID`
+
+A `DeploymentID` is a global ID. It is encoded as a string.
+
+An example `DeploymentID` is: `"gid://gitlab/Deployment/1"`.
+
### `DescriptionVersionID`
A `DescriptionVersionID` is a global ID. It is encoded as a string.
diff --git a/doc/api/runners.md b/doc/api/runners.md
index 66a638d4961..be69b762555 100644
--- a/doc/api/runners.md
+++ b/doc/api/runners.md
@@ -764,6 +764,16 @@ Response:
| 200 | Credentials are valid |
| 403 | Credentials are invalid |
+Example response:
+
+```json
+{
+ "id": 12345,
+ "token": "glrt-6337ff461c94fd3fa32ba3b1ff4125",
+ "token_expires_at": "2021-09-27T21:05:03.203Z"
+}
+```
+
## Reset instance's runner registration token
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/30942) in GitLab 14.3.
diff --git a/doc/development/fe_guide/style/javascript.md b/doc/development/fe_guide/style/javascript.md
index 0536d1c5c77..3e3a79dd7bb 100644
--- a/doc/development/fe_guide/style/javascript.md
+++ b/doc/development/fe_guide/style/javascript.md
@@ -41,12 +41,12 @@ instead.
```javascript
// bad
-function a(p1, p2, p3) {
+function a(p1, p2, p3, p4) {
// ...
};
// good
-function a(p) {
+function a({ p1, p2, p3, p4 }) {
// ...
};
```
diff --git a/doc/development/pipelines/index.md b/doc/development/pipelines/index.md
index bfe4f2697b4..240d98a855f 100644
--- a/doc/development/pipelines/index.md
+++ b/doc/development/pipelines/index.md
@@ -435,9 +435,12 @@ After that, the next pipeline uses the up-to-date `knapsack/report-master.json`
### Automatic skipping of flaky tests
-Tests that are [known to be flaky](../testing_guide/flaky_tests.md#automatic-retries-and-flaky-tests-detection) are
-skipped unless the `$SKIP_FLAKY_TESTS_AUTOMATICALLY` variable is set to `false` or if the `pipeline:run-flaky-tests`
-label is set on the MR.
+We used to skip tests that are [known to be flaky](../testing_guide/flaky_tests.md#automatic-retries-and-flaky-tests-detection),
+but we stopped doing so since that could actually lead to actual broken `master`.
+Instead, we proactively quarantine any flaky test reported in `#master-broken` incidents
+so that they're ultimately fixed by their respective group.
+
+The automatic skipping of flaky tests can still be enabled by setting the `$SKIP_FLAKY_TESTS_AUTOMATICALLY` variable to `true`.
See the [experiment issue](https://gitlab.com/gitlab-org/quality/team-tasks/-/issues/1069).
diff --git a/doc/integration/advanced_search/elasticsearch.md b/doc/integration/advanced_search/elasticsearch.md
index f1c2ad8ea6b..6a2c562377f 100644
--- a/doc/integration/advanced_search/elasticsearch.md
+++ b/doc/integration/advanced_search/elasticsearch.md
@@ -5,7 +5,7 @@ group: Global Search
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# Elasticsearch integration **(PREMIUM SELF)**
+# Elasticsearch **(PREMIUM SELF)**
This page describes how to enable Advanced Search. When enabled,
Advanced Search provides faster search response times and [improved search features](../../user/search/advanced_search.md).
diff --git a/doc/integration/datadog.md b/doc/integration/datadog.md
index ffb2c981be7..8b64e3898f9 100644
--- a/doc/integration/datadog.md
+++ b/doc/integration/datadog.md
@@ -4,7 +4,7 @@ group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# Datadog integration **(FREE)**
+# Datadog **(FREE)**
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/270123) in GitLab 14.1
diff --git a/doc/integration/gitpod.md b/doc/integration/gitpod.md
index 53a05f66675..ee8f46e73df 100644
--- a/doc/integration/gitpod.md
+++ b/doc/integration/gitpod.md
@@ -5,7 +5,7 @@ group: Editor
info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments"
---
-# Gitpod integration **(FREE)**
+# Gitpod **(FREE)**
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/228893) in GitLab 13.4.
> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/258206) in GitLab 13.8
diff --git a/doc/integration/gmail_action_buttons_for_gitlab.md b/doc/integration/gmail_action_buttons_for_gitlab.md
index 42b89670a68..4a233df3899 100644
--- a/doc/integration/gmail_action_buttons_for_gitlab.md
+++ b/doc/integration/gmail_action_buttons_for_gitlab.md
@@ -4,7 +4,7 @@ group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# Gmail actions buttons for GitLab **(FREE)**
+# Gmail actions **(FREE)**
GitLab supports [Google actions in email](https://developers.google.com/gmail/markup/actions/actions-overview).
diff --git a/doc/integration/jenkins.md b/doc/integration/jenkins.md
index 6950ad38101..983ff3c54bc 100644
--- a/doc/integration/jenkins.md
+++ b/doc/integration/jenkins.md
@@ -4,7 +4,7 @@ group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# Jenkins integration **(FREE)**
+# Jenkins **(FREE)**
> [Moved](https://gitlab.com/gitlab-org/gitlab/-/issues/246756) to GitLab Free in 13.7.
diff --git a/doc/integration/jira/configure.md b/doc/integration/jira/configure.md
index c7c1887dc7f..03d742703a1 100644
--- a/doc/integration/jira/configure.md
+++ b/doc/integration/jira/configure.md
@@ -4,7 +4,7 @@ group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# Configure the Jira integration in GitLab **(FREE)**
+# Configure the Jira integration **(FREE)**
You can set up the [Jira integration](index.md#jira-integration)
by configuring your project settings in GitLab.
diff --git a/doc/integration/jira/jira_cloud_configuration.md b/doc/integration/jira/jira_cloud_configuration.md
index d47c84df5e5..9d52368f528 100644
--- a/doc/integration/jira/jira_cloud_configuration.md
+++ b/doc/integration/jira/jira_cloud_configuration.md
@@ -4,10 +4,10 @@ group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# Create an API token for Jira in Atlassian cloud **(FREE)**
+# Create a Jira Cloud API token **(FREE)**
You need an API token to [integrate with Jira](index.md)
-on Atlassian cloud. To create the API token:
+in Atlassian Cloud. To create the API token:
1. Sign in to [Atlassian](https://id.atlassian.com/manage-profile/security/api-tokens)
using an account with *write* access to Jira projects.
diff --git a/doc/integration/oauth_provider.md b/doc/integration/oauth_provider.md
index 381924177cc..3e8c892cf38 100644
--- a/doc/integration/oauth_provider.md
+++ b/doc/integration/oauth_provider.md
@@ -48,6 +48,7 @@ To create a new application for your user:
- In the **Secret** field in GitLab 14.1 and earlier.
- By selecting **Copy** in the **Secret** field
[in GitLab 14.2 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/332844).
+ - The **Renew secret** function in [GitLab 15.9 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/338243). Use this function to generate and copy a new secret for this application. Renewing a secret prevents the existing application from functioning until the credentials are updated.
## Create a group-owned application
@@ -67,6 +68,7 @@ To create a new application for a group:
- In the **Secret** field in GitLab 14.1 and earlier.
- By selecting **Copy** in the **Secret** field
[in GitLab 14.2 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/332844).
+ - The **Renew secret** function in [GitLab 15.9 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/338243). Use this function to generate and copy a new secret for this application. Renewing a secret prevents the existing application from functioning until the credentials are updated.
## Create an instance-wide application
diff --git a/doc/integration/recaptcha.md b/doc/integration/recaptcha.md
index 3a8ec271e27..3cdbc5303f8 100644
--- a/doc/integration/recaptcha.md
+++ b/doc/integration/recaptcha.md
@@ -6,7 +6,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
# reCAPTCHA **(FREE SELF)**
-GitLab leverages [Google's reCAPTCHA](https://www.google.com/recaptcha/about/)
+GitLab leverages [reCAPTCHA](https://www.google.com/recaptcha/about/)
to protect against spam and abuse. GitLab displays the CAPTCHA form on the sign-up page
to confirm that a real user, not a bot, is attempting to create an account.
diff --git a/doc/integration/security_partners/index.md b/doc/integration/security_partners/index.md
index 276315b9adf..1ad8ab03914 100644
--- a/doc/integration/security_partners/index.md
+++ b/doc/integration/security_partners/index.md
@@ -5,7 +5,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
type: index
---
-# Security partner integrations **(FREE)**
+# Security partners **(FREE)**
You can integrate GitLab with its security partners. This page has information on how do this with
each security partner:
diff --git a/doc/integration/sourcegraph.md b/doc/integration/sourcegraph.md
index a3e54204798..a40290683a5 100644
--- a/doc/integration/sourcegraph.md
+++ b/doc/integration/sourcegraph.md
@@ -5,7 +5,7 @@ info: "To determine the technical writer assigned to the Stage/Group associated
type: reference, how-to
---
-# Sourcegraph integration **(FREE)**
+# Sourcegraph **(FREE)**
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/16556) in GitLab 12.5 [with a flag](../administration/feature_flags.md) named `sourcegraph`. Disabled by default.
> - Enabled on GitLab.com in GitLab 12.5.
diff --git a/doc/integration/trello_power_up.md b/doc/integration/trello_power_up.md
index df3755dbf31..9cca8e5485d 100644
--- a/doc/integration/trello_power_up.md
+++ b/doc/integration/trello_power_up.md
@@ -4,7 +4,7 @@ group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# Trello Power-Up **(FREE)**
+# Trello Power-Ups **(FREE)**
You can use the Trello Power-Up for GitLab to attach
GitLab merge requests to Trello cards.
diff --git a/doc/user/packages/harbor_container_registry/index.md b/doc/user/packages/harbor_container_registry/index.md
index f159522d77d..1ad5e2c2f05 100644
--- a/doc/user/packages/harbor_container_registry/index.md
+++ b/doc/user/packages/harbor_container_registry/index.md
@@ -6,7 +6,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
# Harbor Registry **(FREE)**
-You can integrate the [Harbor container registry](../../../user/project/integrations/harbor.md#harbor-container-registry-integration) into GitLab and use Harbor as the container registry for your GitLab project to store images.
+You can integrate the [Harbor container registry](../../../user/project/integrations/harbor.md) into GitLab and use Harbor as the container registry for your GitLab project to store images.
## View the Harbor Registry
diff --git a/doc/user/project/integrations/apple_app_store.md b/doc/user/project/integrations/apple_app_store.md
index 62b25bf8191..1b41dd0b669 100644
--- a/doc/user/project/integrations/apple_app_store.md
+++ b/doc/user/project/integrations/apple_app_store.md
@@ -4,7 +4,7 @@ group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# Apple App Store integration **(FREE)**
+# Apple App Store **(FREE)**
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/104888) in GitLab 15.8 [with a flag](../../../administration/feature_flags.md) named `apple_app_store_integration`. Disabled by default.
diff --git a/doc/user/project/integrations/asana.md b/doc/user/project/integrations/asana.md
index 97fb4e7c463..8bc1a984e3d 100644
--- a/doc/user/project/integrations/asana.md
+++ b/doc/user/project/integrations/asana.md
@@ -4,7 +4,7 @@ group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# Asana integration **(FREE)**
+# Asana **(FREE)**
This integration adds commit messages as comments to Asana tasks.
Once enabled, commit messages are checked for Asana task URLs (for example,
diff --git a/doc/user/project/integrations/bamboo.md b/doc/user/project/integrations/bamboo.md
index b4ebb379688..12039a70d0e 100644
--- a/doc/user/project/integrations/bamboo.md
+++ b/doc/user/project/integrations/bamboo.md
@@ -4,7 +4,7 @@ group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# Atlassian Bamboo integration **(FREE)**
+# Atlassian Bamboo **(FREE)**
You can automatically trigger builds in Atlassian Bamboo when you push changes
to your project in GitLab.
diff --git a/doc/user/project/integrations/bugzilla.md b/doc/user/project/integrations/bugzilla.md
index 00a96679e96..2933203c593 100644
--- a/doc/user/project/integrations/bugzilla.md
+++ b/doc/user/project/integrations/bugzilla.md
@@ -4,7 +4,7 @@ group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# Bugzilla service **(FREE)**
+# Bugzilla **(FREE)**
[Bugzilla](https://www.bugzilla.org/) is a web-based general-purpose bug tracking system and testing
tool.
diff --git a/doc/user/project/integrations/discord_notifications.md b/doc/user/project/integrations/discord_notifications.md
index 9439e480484..0163bce3496 100644
--- a/doc/user/project/integrations/discord_notifications.md
+++ b/doc/user/project/integrations/discord_notifications.md
@@ -4,9 +4,9 @@ group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# Discord Notifications service **(FREE)**
+# Discord Notifications **(FREE)**
-The Discord Notifications service sends event notifications from GitLab to the channel for which the webhook was created.
+The Discord Notifications integration sends event notifications from GitLab to the channel for which the webhook was created.
To send GitLab event notifications to a Discord channel, [create a webhook in Discord](https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks)
and configure it in GitLab.
@@ -24,7 +24,7 @@ and configure it in GitLab.
## Configure created webhook in GitLab
-With the webhook URL created in the Discord channel, you can set up the Discord Notifications service in GitLab.
+With the webhook URL created in the Discord channel, you can set up the Discord Notifications integration in GitLab.
1. On the top bar, select **Main menu > Projects** and find your project.
1. On the left sidebar, select **Settings > Integrations**.
diff --git a/doc/user/project/integrations/emails_on_push.md b/doc/user/project/integrations/emails_on_push.md
index ff255cbba51..c3134e986d3 100644
--- a/doc/user/project/integrations/emails_on_push.md
+++ b/doc/user/project/integrations/emails_on_push.md
@@ -4,9 +4,9 @@ group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# Enabling emails on push **(FREE)**
+# Emails on push **(FREE)**
-By enabling this service, you receive email notifications for every change
+When you enable emails on push, you receive email notifications for every change
that is pushed to your project.
To enable emails on push:
diff --git a/doc/user/project/integrations/ewm.md b/doc/user/project/integrations/ewm.md
index ae09fce4d5e..c2371d32853 100644
--- a/doc/user/project/integrations/ewm.md
+++ b/doc/user/project/integrations/ewm.md
@@ -4,13 +4,13 @@ group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# IBM Engineering Workflow Management (EWM) Integration **(FREE)**
+# Engineering Workflow Management (EWM) **(FREE)**
-This service allows you to go from GitLab to EWM work items mentioned in merge request
+This integration allows you to go from GitLab to EWM work items mentioned in merge request
descriptions and commit messages.
Each work item reference is automatically converted to a link to the work item.
-This IBM product was [formerly named Rational Team Concert](https://jazz.net/blog/index.php/2019/04/23/renaming-the-ibm-continuous-engineering-portfolio/)(RTC). This integration is compatible with all versions of RTC and EWM.
+This IBM product was [formerly named Rational Team Concert (RTC)](https://jazz.net/blog/index.php/2019/04/23/renaming-the-ibm-continuous-engineering-portfolio/). This integration is compatible with all versions of RTC and EWM.
To enable the EWM integration, in a project:
diff --git a/doc/user/project/integrations/github.md b/doc/user/project/integrations/github.md
index 603ed8b4c05..990d0839581 100644
--- a/doc/user/project/integrations/github.md
+++ b/doc/user/project/integrations/github.md
@@ -4,7 +4,7 @@ group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# GitHub project integration **(PREMIUM)**
+# GitHub **(PREMIUM)**
You can update GitHub with pipeline status updates from GitLab.
This integration can help you if you use GitLab for CI/CD.
diff --git a/doc/user/project/integrations/hangouts_chat.md b/doc/user/project/integrations/hangouts_chat.md
index 563dda2b63f..3537033902d 100644
--- a/doc/user/project/integrations/hangouts_chat.md
+++ b/doc/user/project/integrations/hangouts_chat.md
@@ -4,7 +4,7 @@ group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# Google Chat integration **(FREE)**
+# Google Chat **(FREE)**
Integrate your project to send notifications from GitLab to a
room of your choice in [Google Chat](https://chat.google.com/) (former Google
diff --git a/doc/user/project/integrations/harbor.md b/doc/user/project/integrations/harbor.md
index d75f10e0e11..596821ba12b 100644
--- a/doc/user/project/integrations/harbor.md
+++ b/doc/user/project/integrations/harbor.md
@@ -4,7 +4,7 @@ group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# Harbor container registry integration **(FREE)**
+# Harbor **(FREE)**
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/80999) in GitLab 14.9.
diff --git a/doc/user/project/integrations/irker.md b/doc/user/project/integrations/irker.md
index 70f48e4647a..23525c33e84 100644
--- a/doc/user/project/integrations/irker.md
+++ b/doc/user/project/integrations/irker.md
@@ -4,10 +4,10 @@ group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# irker IRC Gateway **(FREE)**
+# irker (IRC gateway) **(FREE)**
GitLab provides a way to push update messages to an irker server. When
-configured, pushes to a project trigger the service to send data directly
+configured, pushes to a project trigger the integration to send data directly
to the irker server.
See also the [irker integration API documentation](../../../api/integrations.md).
diff --git a/doc/user/project/integrations/mattermost.md b/doc/user/project/integrations/mattermost.md
index 3782d3acd0c..fcc364724b7 100644
--- a/doc/user/project/integrations/mattermost.md
+++ b/doc/user/project/integrations/mattermost.md
@@ -4,9 +4,9 @@ group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# Mattermost notifications service **(FREE)**
+# Mattermost notifications **(FREE)**
-Use the Mattermost notifications service to send notifications for GitLab events
+Use the Mattermost notifications integration to send notifications for GitLab events
(for example, `issue created`) to Mattermost. You must configure both [Mattermost](#configure-mattermost-to-receive-gitlab-notifications)
and [GitLab](#configure-gitlab-to-send-notifications-to-mattermost).
diff --git a/doc/user/project/integrations/microsoft_teams.md b/doc/user/project/integrations/microsoft_teams.md
index cedb5af144f..fc5d4d3cc80 100644
--- a/doc/user/project/integrations/microsoft_teams.md
+++ b/doc/user/project/integrations/microsoft_teams.md
@@ -4,9 +4,9 @@ group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# Microsoft Teams service **(FREE)**
+# Microsoft Teams notifications **(FREE)**
-You can integrate Microsoft Teams with GitLab, and display notifications about GitLab projects
+You can integrate Microsoft Teams notifications with GitLab and display notifications about GitLab projects
in Microsoft Teams. To integrate the services, you must:
1. [Configure Microsoft Teams](#configure-microsoft-teams) to enable a webhook
diff --git a/doc/user/project/integrations/mock_ci.md b/doc/user/project/integrations/mock_ci.md
index 64ee4521ce4..ae1737f8d3f 100644
--- a/doc/user/project/integrations/mock_ci.md
+++ b/doc/user/project/integrations/mock_ci.md
@@ -4,10 +4,10 @@ group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# Mock CI Service **(FREE)**
+# Mock CI **(FREE)**
NOTE:
-This service is only listed if you are in a [development environment](https://gitlab.com/gitlab-org/gitlab-mock-ci-service#setup-mockci-integration)!
+This integration only appears if you're in a [development environment](https://gitlab.com/gitlab-org/gitlab-mock-ci-service#setup-mockci-integration).
To set up the mock CI service server, respond to the following endpoints
diff --git a/doc/user/project/integrations/pivotal_tracker.md b/doc/user/project/integrations/pivotal_tracker.md
index 79a00725470..034be8ab3d8 100644
--- a/doc/user/project/integrations/pivotal_tracker.md
+++ b/doc/user/project/integrations/pivotal_tracker.md
@@ -4,9 +4,9 @@ group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# Pivotal Tracker service **(FREE)**
+# Pivotal Tracker **(FREE)**
-This service adds commit messages as comments to Pivotal Tracker stories.
+This integration adds commit messages as comments to Pivotal Tracker stories.
Once enabled, commit messages are checked for square brackets containing a hash mark followed by
the story ID (for example, `[#555]`). Every story ID found gets the commit comment added to it.
diff --git a/doc/user/project/integrations/prometheus.md b/doc/user/project/integrations/prometheus.md
index dfa5a4593d8..cd92e49cada 100644
--- a/doc/user/project/integrations/prometheus.md
+++ b/doc/user/project/integrations/prometheus.md
@@ -4,7 +4,7 @@ group: Respond
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# Prometheus integration **(FREE)**
+# Prometheus **(FREE)**
GitLab offers powerful integration with [Prometheus](https://prometheus.io) for
monitoring key metrics of your apps, directly in GitLab.
diff --git a/doc/user/project/integrations/redmine.md b/doc/user/project/integrations/redmine.md
index 373c6d51854..0a399d3481f 100644
--- a/doc/user/project/integrations/redmine.md
+++ b/doc/user/project/integrations/redmine.md
@@ -4,7 +4,7 @@ group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# Redmine service **(FREE)**
+# Redmine **(FREE)**
Use [Redmine](https://www.redmine.org/) as the issue tracker.
diff --git a/doc/user/project/integrations/servicenow.md b/doc/user/project/integrations/servicenow.md
index fcc8db7cb87..a34655c8e35 100644
--- a/doc/user/project/integrations/servicenow.md
+++ b/doc/user/project/integrations/servicenow.md
@@ -4,7 +4,7 @@ group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# ServiceNow integration **(FREE)**
+# ServiceNow **(FREE)**
ServiceNow offers several integrations to help centralize and automate your
management of GitLab workflows.
diff --git a/doc/user/project/integrations/shimo.md b/doc/user/project/integrations/shimo.md
index 28cb53f8bf6..b950e879537 100644
--- a/doc/user/project/integrations/shimo.md
+++ b/doc/user/project/integrations/shimo.md
@@ -4,7 +4,7 @@ group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# Shimo Workspace integration **(FREE)**
+# Shimo **(FREE)**
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/343386) in GitLab 14.5 with a feature flag named `shimo_integration`. Disabled by default.
> - [Enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/345356) in GitLab 15.4.
@@ -14,11 +14,11 @@ info: To determine the technical writer assigned to the Stage/Group associated w
## Configure settings in GitLab
-To enable the Shimo Workspace integration for your group or project:
+To enable the Shimo integration for your group or project:
1. On the top bar, select **Main menu** and find your group or project.
1. On the left sidebar, select **Settings > Integrations**.
-1. In **Add an integration**, select **Shimo Workspace**.
+1. In **Add an integration**, select **Shimo**.
1. In **Enable integration**, ensure the **Active** checkbox is selected.
1. Provide the **Shimo Workspace URL** you want to link to your group or project (for example, `https://shimo.im/space/aBAYV6VvajUP873j`).
1. Select **Save changes**.
diff --git a/doc/user/project/integrations/slack.md b/doc/user/project/integrations/slack.md
index 1d452141dbd..09e7189d4f5 100644
--- a/doc/user/project/integrations/slack.md
+++ b/doc/user/project/integrations/slack.md
@@ -4,7 +4,7 @@ group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# Slack notifications integration **(FREE)**
+# Slack notifications **(FREE)**
WARNING:
This feature was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/372411) on GitLab.com
diff --git a/doc/user/project/integrations/unify_circuit.md b/doc/user/project/integrations/unify_circuit.md
index 77530b4b417..d465b4e50f0 100644
--- a/doc/user/project/integrations/unify_circuit.md
+++ b/doc/user/project/integrations/unify_circuit.md
@@ -4,9 +4,9 @@ group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# Unify Circuit service **(FREE)**
+# Unify Circuit **(FREE)**
-The Unify Circuit service sends notifications from GitLab to a Circuit conversation.
+The Unify Circuit integration sends notifications from GitLab to a Circuit conversation.
## Set up Unify Circuit service
diff --git a/doc/user/project/integrations/webex_teams.md b/doc/user/project/integrations/webex_teams.md
index be4528ba70d..233209966aa 100644
--- a/doc/user/project/integrations/webex_teams.md
+++ b/doc/user/project/integrations/webex_teams.md
@@ -4,7 +4,7 @@ group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# Webex Teams service **(FREE)**
+# Webex Teams **(FREE)**
You can configure GitLab to send notifications to a Webex Teams space:
diff --git a/doc/user/project/integrations/youtrack.md b/doc/user/project/integrations/youtrack.md
index 8ace2b9e89d..a020cc61533 100644
--- a/doc/user/project/integrations/youtrack.md
+++ b/doc/user/project/integrations/youtrack.md
@@ -4,7 +4,7 @@ group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# YouTrack service **(FREE)**
+# YouTrack **(FREE)**
JetBrains [YouTrack](https://www.jetbrains.com/youtrack/) is a web-based issue tracking and project
management platform.
diff --git a/doc/user/project/integrations/zentao.md b/doc/user/project/integrations/zentao.md
index 17727ba22b1..7b66e72341b 100644
--- a/doc/user/project/integrations/zentao.md
+++ b/doc/user/project/integrations/zentao.md
@@ -4,7 +4,7 @@ group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-# ZenTao product integration **(PREMIUM)**
+# ZenTao **(PREMIUM)**
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/338178) in GitLab 14.5.
diff --git a/lib/api/ci/runner.rb b/lib/api/ci/runner.rb
index e10959aecc4..1c81db39bb1 100644
--- a/lib/api/ci/runner.rb
+++ b/lib/api/ci/runner.rb
@@ -77,6 +77,7 @@ module API
desc 'Validate authentication credentials' do
summary "Verify authentication for a registered runner"
+ success Entities::Ci::RunnerRegistrationDetails
http_codes [[200, 'Credentials are valid'], [403, 'Forbidden']]
end
params do
@@ -86,7 +87,8 @@ module API
post '/verify', urgency: :low, feature_category: :runner do
authenticate_runner!
status 200
- body "200"
+
+ present current_runner, with: Entities::Ci::RunnerRegistrationDetails
end
desc 'Reset runner authentication token with current token' do
diff --git a/lib/api/projects.rb b/lib/api/projects.rb
index 36c132fdc10..6eea56ea117 100644
--- a/lib/api/projects.rb
+++ b/lib/api/projects.rb
@@ -875,7 +875,16 @@ module API
authorize_admin_project
begin
- ::Repositories::HousekeepingService.new(user_project, params[:task]).execute
+ ::Repositories::HousekeepingService.new(user_project, params[:task]).execute do
+ ::Gitlab::Audit::Auditor.audit(
+ name: 'manually_trigger_housekeeping',
+ author: current_user,
+ scope: user_project,
+ target: user_project,
+ message: "Housekeeping task: #{params[:task]}",
+ created_at: DateTime.current
+ )
+ end
rescue ::Repositories::HousekeepingService::LeaseTaken => error
conflict!(error.message)
end
diff --git a/lib/tasks/gitlab/dependency_proxy/migrate.rake b/lib/tasks/gitlab/dependency_proxy/migrate.rake
index fa35eacc59d..7a4b8800c34 100644
--- a/lib/tasks/gitlab/dependency_proxy/migrate.rake
+++ b/lib/tasks/gitlab/dependency_proxy/migrate.rake
@@ -1,7 +1,5 @@
# frozen_string_literal: true
-require 'logger'
-
desc "GitLab | Dependency Proxy | Migrate dependency proxy files to remote storage"
namespace :gitlab do
namespace :dependency_proxy do
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index 26fb9554d9c..0fa5287f4ed 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -20114,6 +20114,9 @@ msgstr ""
msgid "GroupSettings|Choose a group path that does not start with a dash or end with a period. It can also contain alphanumeric characters and underscores."
msgstr ""
+msgid "GroupSettings|Choose the merge request checks for projects in this group. This setting overrides the same settings configured on each project in this group."
+msgstr ""
+
msgid "GroupSettings|Compliance frameworks"
msgstr ""
@@ -26557,6 +26560,27 @@ msgstr ""
msgid "Merge..."
msgstr ""
+msgid "MergeChecks|All threads must be resolved"
+msgstr ""
+
+msgid "MergeChecks|Enable \"Pipelines must succeed\" first."
+msgstr ""
+
+msgid "MergeChecks|Introduces the risk of merging changes that do not pass the pipeline."
+msgstr ""
+
+msgid "MergeChecks|Merge requests can't be merged if the latest pipeline did not succeed or is still running."
+msgstr ""
+
+msgid "MergeChecks|Pipelines must succeed"
+msgstr ""
+
+msgid "MergeChecks|Skipped pipelines are considered successful"
+msgstr ""
+
+msgid "MergeChecks|This setting is configured in group %{groupName} and can only be changed in the group settings by an administrator or group owner."
+msgstr ""
+
msgid "MergeConflict|Commit to source branch"
msgstr ""
@@ -33484,9 +33508,6 @@ msgstr ""
msgid "ProjectSettings|All merge requests and commits are made against this branch unless you specify a different one."
msgstr ""
-msgid "ProjectSettings|All threads must be resolved"
-msgstr ""
-
msgid "ProjectSettings|Allow"
msgstr ""
@@ -33637,9 +33658,6 @@ msgstr ""
msgid "ProjectSettings|Internal"
msgstr ""
-msgid "ProjectSettings|Introduces the risk of merging changes that do not pass the pipeline."
-msgstr ""
-
msgid "ProjectSettings|Issues"
msgstr ""
@@ -33682,9 +33700,6 @@ msgstr ""
msgid "ProjectSettings|Merge requests approved for merge are queued, and pipelines validate the combined results of the source and target branches before merge. %{link_start}What are merge trains?%{link_end}"
msgstr ""
-msgid "ProjectSettings|Merge requests can't be merged if the latest pipeline did not succeed or is still running."
-msgstr ""
-
msgid "ProjectSettings|Merge suggestions"
msgstr ""
@@ -33721,9 +33736,6 @@ msgstr ""
msgid "ProjectSettings|Pages for project documentation."
msgstr ""
-msgid "ProjectSettings|Pipelines must succeed"
-msgstr ""
-
msgid "ProjectSettings|Prevents direct linking to potentially sensitive media files"
msgstr ""
@@ -33793,9 +33805,6 @@ msgstr ""
msgid "ProjectSettings|Show link to create or view a merge request when pushing from the command line"
msgstr ""
-msgid "ProjectSettings|Skipped pipelines are considered successful"
-msgstr ""
-
msgid "ProjectSettings|Snippets"
msgstr ""
diff --git a/package.json b/package.json
index c6ae8a5d0f7..ebf860be405 100644
--- a/package.json
+++ b/package.json
@@ -57,7 +57,7 @@
"@gitlab/favicon-overlay": "2.0.0",
"@gitlab/fonts": "^1.2.0",
"@gitlab/svgs": "3.20.0",
- "@gitlab/ui": "55.2.0",
+ "@gitlab/ui": "55.2.1",
"@gitlab/visual-review-tools": "1.7.3",
"@gitlab/web-ide": "0.0.1-dev-20230210211358",
"@rails/actioncable": "6.1.4-7",
diff --git a/qa/qa/page/project/settings/merge_request.rb b/qa/qa/page/project/settings/merge_request.rb
index ae6a04028c9..c42a4e0bebe 100644
--- a/qa/qa/page/project/settings/merge_request.rb
+++ b/qa/qa/page/project/settings/merge_request.rb
@@ -16,7 +16,7 @@ module QA
end
view 'app/views/projects/_merge_request_pipelines_and_threads_options.html.haml' do
- element :allow_merge_if_all_discussions_are_resolved_checkbox
+ element :only_allow_merge_if_all_discussions_are_resolved_checkbox
end
def click_save_changes
@@ -29,7 +29,7 @@ module QA
end
def enable_merge_if_all_disscussions_are_resolved
- check_element(:allow_merge_if_all_discussions_are_resolved_checkbox, true)
+ check_element(:only_allow_merge_if_all_discussions_are_resolved_checkbox, true)
click_save_changes
end
end
diff --git a/sidekiq_cluster/cli.rb b/sidekiq_cluster/cli.rb
index 42454a20907..23b05bf2d16 100644
--- a/sidekiq_cluster/cli.rb
+++ b/sidekiq_cluster/cli.rb
@@ -195,7 +195,7 @@ module Gitlab
abort opt.to_s
end
- opt.on('-m', '--max-concurrency INT', 'Maximum threads to use with Sidekiq (default: 50, 0 to disable)') do |int|
+ opt.on('-m', '--max-concurrency INT', 'Maximum threads to use with Sidekiq (default: 20, 0 to disable)') do |int|
@max_concurrency = int.to_i
end
diff --git a/spec/controllers/projects_controller_spec.rb b/spec/controllers/projects_controller_spec.rb
index c0c5dcfe21d..cf87b2c4437 100644
--- a/spec/controllers/projects_controller_spec.rb
+++ b/spec/controllers/projects_controller_spec.rb
@@ -664,6 +664,20 @@ RSpec.describe ProjectsController do
expect(response).to have_gitlab_http_status(:found)
end
+ it 'logs an audit event' do
+ expect(housekeeping).to receive(:execute).once.and_yield
+
+ expect(::Gitlab::Audit::Auditor).to receive(:audit).with(a_hash_including(
+ name: 'manually_trigger_housekeeping',
+ author: user,
+ scope: project,
+ target: project,
+ message: "Housekeeping task: eager"
+ ))
+
+ subject
+ end
+
context 'and requesting prune' do
let(:prune) { true }
diff --git a/spec/finders/fork_targets_finder_spec.rb b/spec/finders/fork_targets_finder_spec.rb
index 1acc38bb492..41651513f18 100644
--- a/spec/finders/fork_targets_finder_spec.rb
+++ b/spec/finders/fork_targets_finder_spec.rb
@@ -55,19 +55,5 @@ RSpec.describe ForkTargetsFinder do
expect(finder.execute(search: maintained_group.path)).to eq([maintained_group])
end
end
-
- context 'when searchable_fork_targets feature flag is disabled' do
- before do
- stub_feature_flags(searchable_fork_targets: false)
- end
-
- it_behaves_like 'returns namespaces and groups'
-
- context 'when search is provided' do
- it 'ignores the param and returns all user manageable namespaces' do
- expect(finder.execute).to match_array([user.namespace, maintained_group, owned_group, project.namespace, developer_group])
- end
- end
- end
end
end
diff --git a/spec/finders/groups_finder_spec.rb b/spec/finders/groups_finder_spec.rb
index 123df418f8d..25f9331005d 100644
--- a/spec/finders/groups_finder_spec.rb
+++ b/spec/finders/groups_finder_spec.rb
@@ -262,6 +262,18 @@ RSpec.describe GroupsFinder do
end
end
+ context 'with filter_group_ids' do
+ let_it_be(:group_one) { create(:group, :public, name: 'group_one') }
+ let_it_be(:group_two) { create(:group, :public, name: 'group_two') }
+ let_it_be(:group_three) { create(:group, :public, name: 'group_three') }
+
+ subject { described_class.new(user, { filter_group_ids: [group_one.id, group_three.id] }).execute }
+
+ it 'returns only the groups listed in the filter' do
+ is_expected.to contain_exactly(group_one, group_three)
+ end
+ end
+
context 'with include_ancestors' do
let_it_be(:user) { create(:user) }
diff --git a/spec/fixtures/api/schemas/graphql/packages/package_details.json b/spec/fixtures/api/schemas/graphql/packages/package_details.json
index 1f3de0e0ff5..f66f5eb35b5 100644
--- a/spec/fixtures/api/schemas/graphql/packages/package_details.json
+++ b/spec/fixtures/api/schemas/graphql/packages/package_details.json
@@ -9,6 +9,7 @@
"version",
"packageType",
"project",
+ "publicPackage",
"tags",
"pipelines",
"versions",
@@ -31,13 +32,20 @@
"type": "string"
},
"version": {
- "type": ["string", "null"]
+ "type": [
+ "string",
+ "null"
+ ]
},
"canDestroy": {
- "type": ["boolean"]
+ "type": [
+ "boolean"
+ ]
},
"packageType": {
- "type": ["string"],
+ "type": [
+ "string"
+ ],
"enum": [
"MAVEN",
"NPM",
@@ -56,66 +64,126 @@
"type": "object",
"additionalProperties": false,
"properties": {
- "count": { "type": "integer" },
- "pageInfo": { "type": "object" },
- "edges": { "type": "array" },
- "nodes": { "type": "array" }
+ "count": {
+ "type": "integer"
+ },
+ "pageInfo": {
+ "type": "object"
+ },
+ "edges": {
+ "type": "array"
+ },
+ "nodes": {
+ "type": "array"
+ }
}
},
"project": {
"type": "object"
},
+ "publicPackage": {
+ "type": "boolean"
+ },
"pipelines": {
"type": "object",
"additionalProperties": false,
"properties": {
- "pageInfo": { "type": "object" },
- "count": { "type": "integer" },
- "edges": { "type": "array" },
- "nodes": { "type": "array" }
+ "pageInfo": {
+ "type": "object"
+ },
+ "count": {
+ "type": "integer"
+ },
+ "edges": {
+ "type": "array"
+ },
+ "nodes": {
+ "type": "array"
+ }
}
},
"versions": {
"type": "object",
"additionalProperties": false,
"properties": {
- "count": { "type": "integer" },
- "pageInfo": { "type": "object" },
- "edges": { "type": "array" },
- "nodes": { "type": "array" }
+ "count": {
+ "type": "integer"
+ },
+ "pageInfo": {
+ "type": "object"
+ },
+ "edges": {
+ "type": "array"
+ },
+ "nodes": {
+ "type": "array"
+ }
}
},
"metadata": {
"anyOf": [
- { "$ref": "./package_composer_metadata.json" },
- { "$ref": "./package_conan_metadata.json" },
- { "$ref": "./package_maven_metadata.json" },
- { "$ref": "./package_nuget_metadata.json" },
- { "$ref": "./package_pypi_metadata.json" },
- { "type": "null" }
+ {
+ "$ref": "./package_composer_metadata.json"
+ },
+ {
+ "$ref": "./package_conan_metadata.json"
+ },
+ {
+ "$ref": "./package_maven_metadata.json"
+ },
+ {
+ "$ref": "./package_nuget_metadata.json"
+ },
+ {
+ "$ref": "./package_pypi_metadata.json"
+ },
+ {
+ "type": "null"
+ }
]
},
"packageFiles": {
"type": "object",
"additionalProperties": false,
"properties": {
- "count": { "type": "integer" },
- "pageInfo": { "type": "object" },
- "edges": { "type": "array" },
- "nodes": { "type": "array" }
+ "count": {
+ "type": "integer"
+ },
+ "pageInfo": {
+ "type": "object"
+ },
+ "edges": {
+ "type": "array"
+ },
+ "nodes": {
+ "type": "array"
+ }
}
},
"status": {
- "type": ["string"],
- "enum": ["DEFAULT", "HIDDEN", "PROCESSING", "ERROR"]
+ "type": [
+ "string"
+ ],
+ "enum": [
+ "DEFAULT",
+ "HIDDEN",
+ "PROCESSING",
+ "ERROR"
+ ]
},
"dependencyLinks": {
"type": "object",
"additionalProperties": false,
"properties": {
- "pageInfo": { "type": "object" },
- "edges": { "type": "array" },
- "count": { "type": "integer" },
+ "pageInfo": {
+ "type": "object"
+ },
+ "edges": {
+ "type": "array"
+ },
+ "count": {
+ "type": "integer"
+ },
"nodes": {
"type": "array",
"items": {
@@ -143,8 +211,12 @@
},
"metadata": {
"anyOf": [
- { "$ref": "./package_nuget_dependency_link_metadata.json" },
- { "type": "null" }
+ {
+ "$ref": "./package_nuget_dependency_link_metadata.json"
+ },
+ {
+ "type": "null"
+ }
]
}
}
@@ -177,14 +249,20 @@
"type": "string"
},
"lastDownloadedAt": {
- "type": ["string", "null"]
+ "type": [
+ "string",
+ "null"
+ ]
},
"_links": {
"type": "object",
"additionalProperties": false,
"properties": {
"webPath": {
- "type": ["string", "null"]
+ "type": [
+ "string",
+ "null"
+ ]
}
}
}
diff --git a/spec/frontend/issuable/related_issues/components/add_issuable_form_spec.js b/spec/frontend/issuable/related_issues/components/add_issuable_form_spec.js
index e1546f74a59..72fcab63ba7 100644
--- a/spec/frontend/issuable/related_issues/components/add_issuable_form_spec.js
+++ b/spec/frontend/issuable/related_issues/components/add_issuable_form_spec.js
@@ -1,10 +1,10 @@
import { GlFormGroup } from '@gitlab/ui';
import { mount, shallowMount } from '@vue/test-utils';
import { nextTick } from 'vue';
-import { TYPE_ISSUE } from '~/issues/constants';
+import { TYPE_EPIC, TYPE_ISSUE } from '~/issues/constants';
import AddIssuableForm from '~/related_issues/components/add_issuable_form.vue';
import IssueToken from '~/related_issues/components/issue_token.vue';
-import { issuableTypesMap, linkedIssueTypesMap, PathIdSeparator } from '~/related_issues/constants';
+import { linkedIssueTypesMap, PathIdSeparator } from '~/related_issues/constants';
const issuable1 = {
id: 200,
@@ -143,7 +143,7 @@ describe('AddIssuableForm', () => {
wrapper = shallowMount(AddIssuableForm, {
propsData: {
inputValue: '',
- issuableType: issuableTypesMap.EPIC,
+ issuableType: TYPE_EPIC,
pathIdSeparator,
pendingReferences: [],
},
@@ -157,9 +157,9 @@ describe('AddIssuableForm', () => {
describe('categorized issuables', () => {
it.each`
- issuableType | pathIdSeparator | contextHeader | contextFooter
- ${TYPE_ISSUE} | ${PathIdSeparator.Issue} | ${'The current issue'} | ${'the following issues'}
- ${issuableTypesMap.EPIC} | ${PathIdSeparator.Epic} | ${'The current epic'} | ${'the following epics'}
+ issuableType | pathIdSeparator | contextHeader | contextFooter
+ ${TYPE_ISSUE} | ${PathIdSeparator.Issue} | ${'The current issue'} | ${'the following issues'}
+ ${TYPE_EPIC} | ${PathIdSeparator.Epic} | ${'The current epic'} | ${'the following epics'}
`(
'show header text as "$contextHeader" and footer text as "$contextFooter" issuableType is set to $issuableType',
({ issuableType, contextHeader, contextFooter }) => {
diff --git a/spec/frontend/search/sidebar/components/app_spec.js b/spec/frontend/search/sidebar/components/app_spec.js
index 760c83a1dde..83302b90233 100644
--- a/spec/frontend/search/sidebar/components/app_spec.js
+++ b/spec/frontend/search/sidebar/components/app_spec.js
@@ -59,10 +59,7 @@ describe('GlobalSearchSidebar', () => {
${'blobs'} | ${false} | ${true}
`('sidebar scope: $scope', ({ scope, showFilters, ShowsLanguage }) => {
beforeEach(() => {
- createComponent(
- { urlQuery: { scope } },
- { searchBlobsLanguageAggregation: true, searchPageVerticalNav: true },
- );
+ createComponent({ urlQuery: { scope } }, { searchBlobsLanguageAggregation: true });
});
it(`${!showFilters ? "doesn't" : ''} shows filters`, () => {
diff --git a/spec/graphql/types/packages/package_details_type_spec.rb b/spec/graphql/types/packages/package_details_type_spec.rb
index d5688fc64c5..e4fe53f7660 100644
--- a/spec/graphql/types/packages/package_details_type_spec.rb
+++ b/spec/graphql/types/packages/package_details_type_spec.rb
@@ -10,7 +10,7 @@ RSpec.describe GitlabSchema.types['PackageDetailsType'] do
it 'includes all the package fields' do
expected_fields = %w[
id name version created_at updated_at package_type tags project
- pipelines versions package_files dependency_links
+ pipelines versions package_files dependency_links public_package
npm_url maven_url conan_url nuget_url pypi_url pypi_setup_url
composer_url composer_config_repository_url
]
diff --git a/spec/requests/api/ci/runner/runners_reset_spec.rb b/spec/requests/api/ci/runner/runners_reset_spec.rb
index 6ab21138d26..2d1e366e820 100644
--- a/spec/requests/api/ci/runner/runners_reset_spec.rb
+++ b/spec/requests/api/ci/runner/runners_reset_spec.rb
@@ -34,9 +34,10 @@ RSpec.describe API::Ci::Runner, :clean_gitlab_redis_shared_state, feature_catego
expect do
post api("/runners/reset_authentication_token"), params: { token: group_runner.reload.token }
+ group_runner.reload
expect(response).to have_gitlab_http_status(:success)
- expect(json_response).to eq({ 'token' => group_runner.reload.token, 'token_expires_at' => group_runner.reload.token_expires_at.iso8601(3) })
- expect(group_runner.reload.token_expires_at).to eq(5.days.from_now)
+ expect(json_response).to eq({ 'token' => group_runner.token, 'token_expires_at' => group_runner.token_expires_at.iso8601(3) })
+ expect(group_runner.token_expires_at).to eq(5.days.from_now)
end.to change { group_runner.reload.token }
end
diff --git a/spec/requests/api/ci/runner/runners_verify_post_spec.rb b/spec/requests/api/ci/runner/runners_verify_post_spec.rb
index 3853e7ed6c9..a6a1ad947aa 100644
--- a/spec/requests/api/ci/runner/runners_verify_post_spec.rb
+++ b/spec/requests/api/ci/runner/runners_verify_post_spec.rb
@@ -18,7 +18,8 @@ RSpec.describe API::Ci::Runner, :clean_gitlab_redis_shared_state, feature_catego
describe '/api/v4/runners' do
describe 'POST /api/v4/runners/verify' do
- let(:runner) { create(:ci_runner) }
+ let_it_be_with_reload(:runner) { create(:ci_runner, token_expires_at: 3.days.from_now) }
+
let(:params) {}
subject(:verify) { post api('/runners/verify'), params: params }
@@ -53,6 +54,28 @@ RSpec.describe API::Ci::Runner, :clean_gitlab_redis_shared_state, feature_catego
verify
expect(response).to have_gitlab_http_status(:ok)
+ expect(json_response).to eq({
+ 'id' => runner.id,
+ 'token' => runner.token,
+ 'token_expires_at' => runner.token_expires_at.iso8601(3)
+ })
+ end
+
+ context 'with non-expiring runner token' do
+ before do
+ runner.update!(token_expires_at: nil)
+ end
+
+ it 'verifies Runner credentials' do
+ verify
+
+ expect(response).to have_gitlab_http_status(:ok)
+ expect(json_response).to eq({
+ 'id' => runner.id,
+ 'token' => runner.token,
+ 'token_expires_at' => nil
+ })
+ end
end
it_behaves_like 'storing arguments in the application context for the API' do
@@ -77,6 +100,11 @@ RSpec.describe API::Ci::Runner, :clean_gitlab_redis_shared_state, feature_catego
verify
expect(response).to have_gitlab_http_status(:ok)
+ expect(json_response).to eq({
+ 'id' => runner.id,
+ 'token' => runner.token,
+ 'token_expires_at' => runner.token_expires_at.iso8601(3)
+ })
end
context 'when system_id is provided' do
@@ -100,6 +128,11 @@ RSpec.describe API::Ci::Runner, :clean_gitlab_redis_shared_state, feature_catego
verify
expect(response).to have_gitlab_http_status(:ok)
+ expect(json_response).to eq({
+ 'id' => runner.id,
+ 'token' => runner.token,
+ 'token_expires_at' => runner.token_expires_at.iso8601(3)
+ })
end
end
diff --git a/spec/requests/api/graphql/packages/package_spec.rb b/spec/requests/api/graphql/packages/package_spec.rb
index da5478cf409..82fcc5254ad 100644
--- a/spec/requests/api/graphql/packages/package_spec.rb
+++ b/spec/requests/api/graphql/packages/package_spec.rb
@@ -41,6 +41,7 @@ RSpec.describe 'package details', feature_category: :package_registry do
context 'with unauthorized user' do
before do
project.update!(visibility_level: Gitlab::VisibilityLevel::PRIVATE)
+ project.add_guest(user)
end
it 'returns no packages' do
@@ -48,6 +49,47 @@ RSpec.describe 'package details', feature_category: :package_registry do
expect(graphql_data_at(:package)).to be_nil
end
+
+ context 'with access to package registry for everyone' do
+ before do
+ project.project_feature.update!(package_registry_access_level: ProjectFeature::PUBLIC)
+ subject
+ end
+
+ it_behaves_like 'a working graphql query' do
+ it 'matches the JSON schema' do
+ expect(package_details).to match_schema('graphql/packages/package_details')
+ end
+ end
+
+ it '`public_package` returns true' do
+ expect(graphql_data_at(:package, :public_package)).to eq(true)
+ end
+ end
+ end
+
+ context 'when project is public' do
+ let_it_be(:public_project) { create(:project, :public, group: group) }
+ let_it_be(:composer_package) { create(:composer_package, project: public_project) }
+ let(:package_global_id) { global_id_of(composer_package) }
+
+ before do
+ subject
+ end
+
+ it_behaves_like 'a working graphql query' do
+ before do
+ subject
+ end
+
+ it 'matches the JSON schema' do
+ expect(package_details).to match_schema('graphql/packages/package_details')
+ end
+ end
+
+ it '`public_package` returns true' do
+ expect(graphql_data_at(:package, :public_package)).to eq(true)
+ end
end
context 'with authorized user' do
@@ -250,6 +292,49 @@ RSpec.describe 'package details', feature_category: :package_registry do
end
end
+ context 'public_package' do
+ context 'when project is private' do
+ let_it_be(:private_project) { create(:project, :private, group: group) }
+ let_it_be(:composer_package) { create(:composer_package, project: private_project) }
+ let(:package_global_id) { global_id_of(composer_package) }
+
+ before do
+ private_project.add_developer(user)
+ end
+
+ it 'returns false' do
+ subject
+
+ expect(graphql_data_at(:package, :public_package)).to eq(false)
+ end
+
+ context 'with access to package registry for everyone' do
+ before do
+ private_project.project_feature.update!(package_registry_access_level: ProjectFeature::PUBLIC)
+ subject
+ end
+
+ it 'returns true' do
+ expect(graphql_data_at(:package, :public_package)).to eq(true)
+ end
+ end
+ end
+
+ context 'when project is public' do
+ let_it_be(:public_project) { create(:project, :public, group: group) }
+ let_it_be(:composer_package) { create(:composer_package, project: public_project) }
+ let(:package_global_id) { global_id_of(composer_package) }
+
+ before do
+ subject
+ end
+
+ it 'returns true' do
+ expect(graphql_data_at(:package, :public_package)).to eq(true)
+ end
+ end
+ end
+
context 'with package that has no default status' do
before do
composer_package.update!(status: :error)
diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb
index 9a481c524e2..e78ef2f7630 100644
--- a/spec/requests/api/projects_spec.rb
+++ b/spec/requests/api/projects_spec.rb
@@ -4719,6 +4719,9 @@ RSpec.describe API::Projects, feature_category: :projects do
describe 'POST /projects/:id/housekeeping' do
let(:housekeeping) { Repositories::HousekeepingService.new(project) }
+ let(:params) { {} }
+
+ subject { post api("/projects/#{project.id}/housekeeping", user), params: params }
before do
allow(Repositories::HousekeepingService).to receive(:new).with(project, :eager).and_return(housekeeping)
@@ -4728,26 +4731,45 @@ RSpec.describe API::Projects, feature_category: :projects do
it 'starts the housekeeping process' do
expect(housekeeping).to receive(:execute).once
- post api("/projects/#{project.id}/housekeeping", user)
+ subject
expect(response).to have_gitlab_http_status(:created)
end
+ it 'logs an audit event' do
+ expect(housekeeping).to receive(:execute).once.and_yield
+ expect(::Gitlab::Audit::Auditor).to receive(:audit).with(a_hash_including(
+ name: 'manually_trigger_housekeeping',
+ author: user,
+ scope: project,
+ target: project,
+ message: "Housekeeping task: eager"
+ ))
+
+ subject
+ end
+
context 'when requesting prune' do
+ let(:params) { { task: :prune } }
+
it 'triggers a prune' do
expect(Repositories::HousekeepingService).to receive(:new).with(project, :prune).and_return(housekeeping)
expect(housekeeping).to receive(:execute).once
- post api("/projects/#{project.id}/housekeeping", user), params: { task: :prune }
+ subject
expect(response).to have_gitlab_http_status(:created)
end
end
context 'when requesting an unsupported task' do
+ let(:params) { { task: :unsupported_task } }
+
it 'responds with bad_request' do
expect(Repositories::HousekeepingService).not_to receive(:new)
- post api("/projects/#{project.id}/housekeeping", user), params: { task: :unsupported_task }
+
+ subject
+
expect(response).to have_gitlab_http_status(:bad_request)
end
end
@@ -4756,7 +4778,7 @@ RSpec.describe API::Projects, feature_category: :projects do
it 'returns conflict' do
expect(housekeeping).to receive(:execute).once.and_raise(Repositories::HousekeepingService::LeaseTaken)
- post api("/projects/#{project.id}/housekeeping", user)
+ subject
expect(response).to have_gitlab_http_status(:conflict)
expect(json_response['message']).to match(/Somebody already triggered housekeeping for this resource/)
diff --git a/yarn.lock b/yarn.lock
index 416a49623fe..83cffa6c497 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1347,10 +1347,10 @@
resolved "https://registry.yarnpkg.com/@gitlab/svgs/-/svgs-3.20.0.tgz#4ee4f2f24304d13ccce58f82c2ecd87e556f35b4"
integrity sha512-nYTF4j5kon4XbBr/sAzuubgxjIne9+RTZLmSrSaL9FL4eyuv9aa7YMCcOrlIbYX5jlSYlcD+ck2F2M1sqXXOBA==
-"@gitlab/ui@55.2.0":
- version "55.2.0"
- resolved "https://registry.yarnpkg.com/@gitlab/ui/-/ui-55.2.0.tgz#0cd24310a4ebbd08c1fcf4281b8cc60709fde0da"
- integrity sha512-iEbW3OvgyLcT7c0Sd2LcB3eo4kuxIRoqkM4xCZwgIxVLOeGsQfbaBHMCSG9Ekt/OYoesq7B7pX6AqrV9UBuwKw==
+"@gitlab/ui@55.2.1":
+ version "55.2.1"
+ resolved "https://registry.yarnpkg.com/@gitlab/ui/-/ui-55.2.1.tgz#140d8e2c7428777a745fb1cfb33c29c3f1133113"
+ integrity sha512-fIvGzM4nZtHWaUWfaM9PSPJJJFcnvCLCrdAsobiiMlxFFCEwDNm99oL+uzQgbatQRjjIdHqyFKFNMo3rg6U+AQ==
dependencies:
"@popperjs/core" "^2.11.2"
bootstrap-vue "2.20.1"