diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-02-16 21:09:00 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-02-16 21:09:00 +0300 |
commit | 5c4df0629a70c28eb479b513a3e6860e7a35d1c9 (patch) | |
tree | f9a661c7358b4265b2a479d62365154139f951e4 | |
parent | c1f98d9590def61ad2fca09cc06a7a9d52cdebc5 (diff) |
Add latest changes from gitlab-org/gitlab@master
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" |