Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2024-02-21 12:10:01 +00:00
parent 482be09c39
commit 2f49e36105
82 changed files with 350 additions and 322 deletions

View File

@ -1203,6 +1203,7 @@ rspec-ee unit pg16:
rspec-ee unit pg16 es8:
extends:
- .rspec-ee-base-pg16-es8
- .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only
- .rspec-ee-unit-parallel
rspec-ee integration pg16:
@ -1214,6 +1215,7 @@ rspec-ee integration pg16:
rspec-ee integration pg16 es8:
extends:
- .rspec-ee-base-pg16-es8
- .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only
- .rspec-ee-integration-parallel
rspec-ee system pg16:
@ -1225,6 +1227,7 @@ rspec-ee system pg16:
rspec-ee system pg16 es8:
extends:
- .rspec-ee-base-pg16-es8
- .rails:rules:default-branch-schedule-nightly--code-backstage-ee-only
- .rspec-ee-system-parallel
# EE: default branch nightly scheduled jobs #
#####################################

View File

@ -2049,6 +2049,9 @@
rules:
- <<: *if-fork-merge-request
changes: *code-backstage-patterns
- <<: *if-merge-request
changes: *core-backend-patterns
when: never
- <<: *if-merge-request-labels-pipeline-expedite
when: never
- <<: *if-merge-request-approved

View File

@ -1,7 +1,7 @@
<!--
* Use this template for documentation issues identified
* by [Vale](https://docs.gitlab.com/ee/development/documentation/testing.html#vale)
* or [markdownlint](https://docs.gitlab.com/ee/development/documentation/testing.html#markdownlint).
* by [Vale](https://docs.gitlab.com/ee/development/documentation/testing/vale.html)
* or [markdownlint](https://docs.gitlab.com/ee/development/documentation/testing/markdownlint.html).
* This template is meant to describe work for first-time contributors or
* for work during Hackathons.
*

View File

@ -233,6 +233,25 @@ function moveCursor({
}
}
/**
* Inserts the given MarkdownText into the given textArea or editor
*
* WARNING: This is a bit of legacy code that has some complicated logic.
* There are a lot of hidden contexts to consider here. Please proceed with caution.
*
* We've tried to document the parameter responsibilities as best as possible.
* Please look for actual usage in the code to verify any assumptions.
*
* @param {Object} options - Named parameters
* @param {HTMLTextAreaElement} options.textArea - The relevant text area
* @param {String} options.text - The current text of the text area
* @param {String} options.tag - The markdown tag we want to enter (Example: `- [ ] ` for lists)
* @param {Number} options.cursorOffset - Applied to the position after we insert the text (moves backward)
* @param {String} options.blockTag - The markdown tag to use if a block is detected (Example ` ``` ` vs. ` ` `)
* @param {Boolean} options.wrap - Flag for whether the tag is a wrapping tag (Example `**text**` vs `* text`)
* @param {String} options.select - The text to select after inserting (Example `url` of `({text})[url]`)
* @param {Object} options.editor - The instance of the SourceEditor which we are inserting MarkdownText into. This should be mutually exclusive with textArea.
*/
export function insertMarkdownText({
textArea,
text,
@ -244,6 +263,13 @@ export function insertMarkdownText({
select,
editor,
}) {
// If we aren't really inserting anything, let's just noop.
// Let's check for `selected` too because there might be hidden logic that actually
// is expected to run for this case.
if (!tag && !blockTag && !selected) {
return;
}
let removedLastNewLine = false;
let removedFirstNewLine = false;
let currentLineEmpty = false;
@ -359,7 +385,8 @@ export function insertMarkdownText({
} else {
insertText(textArea, textToInsert);
}
return moveCursor({
moveCursor({
textArea,
tag: tag.replace(textPlaceholder, selected),
cursorOffset,

View File

@ -155,13 +155,3 @@ aside.right-sidebar:not(.right-sidebar-merge-requests) {
// soften on darkmode
background-color: mix($gray-50, $orange-50, 75%) !important;
}
.tanuki-bot-chat-drawer .tanuki-bot-message {
// lightens chat bubble in darkmode as $gray-50 matches drawer background. See tanuki_bot_chat.scss
background-color: $gray-100;
}
.ai-genie-chat,
.ai-genie-chat .gl-form-input {
background-color: $gray-10;
}

View File

@ -29,6 +29,7 @@ fragment LinkedPipelineData on Pipeline {
group
label
icon
text
}
sourceJob {
__typename
@ -94,6 +95,7 @@ query getPipelineDetails($projectPath: ID!, $iid: ID!) {
label
group
icon
text
}
name
size
@ -128,6 +130,7 @@ query getPipelineDetails($projectPath: ID!, $iid: ID!) {
detailsPath
group
label
text
action {
__typename
id

View File

@ -698,7 +698,6 @@ class Member < ApplicationRecord
end
def create_organization_user_record
return if Feature.disabled?(:update_organization_users, source.root_ancestor, type: :gitlab_com_derisk)
return if invite?
return if source.organization.blank?

View File

@ -1,9 +0,0 @@
---
name: update_organization_users
feature_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/419366
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/139188
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/435868
milestone: '16.8'
group: group::tenant scale
type: gitlab_com_derisk
default_enabled: false

View File

@ -12,7 +12,6 @@ data_source: redis_hll
instrumentation_class: AggregatedMetric
options:
aggregate:
operator: OR
attribute: user_id
events:
- users_viewing_analytics_group_devops_adoption

View File

@ -12,7 +12,6 @@ data_source: redis_hll
instrumentation_class: AggregatedMetric
options:
aggregate:
operator: OR
attribute: user_id
events:
- users_viewing_analytics_group_devops_adoption

View File

@ -12,7 +12,6 @@ instrumentation_class: AggregatedMetric
data_source: redis_hll
options:
aggregate:
operator: OR
attribute: user_id
events:
- g_edit_by_web_ide

View File

@ -12,7 +12,6 @@ data_source: redis_hll
instrumentation_class: AggregatedMetric
options:
aggregate:
operator: OR
attribute: user_id
events:
- g_edit_by_web_ide

View File

@ -15,7 +15,6 @@ data_source: redis_hll
instrumentation_class: AggregatedMetric
options:
aggregate:
operator: OR
attribute: user_id
events:
- i_search_total

View File

@ -12,7 +12,6 @@ instrumentation_class: AggregatedMetric
data_source: redis_hll
options:
aggregate:
operator: OR
attribute: user_id
events:
- 'incident_management_alert_status_changed'

View File

@ -12,7 +12,6 @@ instrumentation_class: AggregatedMetric
data_source: redis_hll
options:
aggregate:
operator: OR
attribute: user_id
events:
- 'incident_management_incident_created'

View File

@ -12,7 +12,6 @@ data_source: redis_hll
instrumentation_class: AggregatedMetric
options:
aggregate:
operator: OR
attribute: user_id
events:
- incident_management_incident_created

View File

@ -12,7 +12,6 @@ data_source: redis_hll
instrumentation_class: AggregatedMetric
options:
aggregate:
operator: OR
attribute: user_id
events:
- g_project_management_issue_title_changed

View File

@ -15,7 +15,6 @@ data_source: redis_hll
instrumentation_class: AggregatedMetric
options:
aggregate:
operator: OR
attribute: user_id
events:
- i_search_total

View File

@ -14,7 +14,6 @@ data_source: redis_hll
instrumentation_class: AggregatedMetric
options:
aggregate:
operator: OR
attribute: user_id
events:
- i_code_review_click_diff_view_setting

View File

@ -12,7 +12,6 @@ data_source: redis_hll
instrumentation_class: AggregatedMetric
options:
aggregate:
operator: OR
attribute: user_id
events:
- i_quickactions_approve

View File

@ -13,7 +13,6 @@ data_source: redis_hll
instrumentation_class: AggregatedMetric
options:
aggregate:
operator: OR
attribute: user_id
events:
- i_package_composer_deploy_token

View File

@ -12,7 +12,6 @@ data_source: redis_hll
instrumentation_class: AggregatedMetric
options:
aggregate:
operator: OR
attribute: user_id
events:
- i_package_composer_user

View File

@ -12,7 +12,6 @@ data_source: redis_hll
instrumentation_class: AggregatedMetric
options:
aggregate:
operator: OR
attribute: user_id
events:
- i_ecosystem_jira_service_close_issue

View File

@ -23,7 +23,6 @@ instrumentation_class: AggregatedMetric
data_source: redis_hll
options:
aggregate:
operator: OR
attribute: user_id
events:
- 'i_code_review_user_single_file_diffs'

View File

@ -14,7 +14,6 @@ instrumentation_class: AggregatedMetric
data_source: redis_hll
options:
aggregate:
operator: OR
attribute: user_id
events:
- 'i_code_review_user_vs_code_api_request'

View File

@ -22,7 +22,6 @@ time_frame: 28d
data_source: redis_hll
options:
aggregate:
operator: OR
attribute: user_id
events:
- 'i_code_review_user_single_file_diffs'

View File

@ -14,7 +14,6 @@ data_source: redis_hll
instrumentation_class: AggregatedMetric
options:
aggregate:
operator: OR
attribute: user_id
events:
- o_pipeline_authoring_unique_users_committing_ciconfigfile

View File

@ -13,7 +13,6 @@ instrumentation_class: AggregatedMetric
data_source: redis_hll
options:
aggregate:
operator: OR
attribute: user_id
events:
- users_creating_work_items

View File

@ -13,7 +13,6 @@ instrumentation_class: AggregatedMetric
data_source: redis_hll
options:
aggregate:
operator: OR
attribute: user_id
events:
- users_creating_work_items

View File

@ -13,7 +13,6 @@ instrumentation_class: AggregatedMetric
data_source: redis_hll
options:
aggregate:
operator: OR
attribute: user_id
events:
- users_creating_work_items

View File

@ -14,7 +14,6 @@ data_category: optional
instrumentation_class: AggregatedMetric
options:
aggregate:
operator: OR
attribute: user_id
events:
- error_tracking_view_list

View File

@ -14,7 +14,6 @@ data_category: optional
instrumentation_class: AggregatedMetric
options:
aggregate:
operator: OR
attribute: user_id
events:
- incident_management_timeline_event_created

View File

@ -14,7 +14,6 @@ instrumentation_class: AggregatedMetric
data_source: redis_hll
options:
aggregate:
operator: OR
attribute: user_id
events:
- 'i_testing_test_report_uploaded'

View File

@ -14,7 +14,6 @@ data_category: optional
instrumentation_class: AggregatedMetric
options:
aggregate:
operator: OR
attribute: user_id
events:
- i_container_registry_push_tag_user

View File

@ -12,7 +12,6 @@ data_source: redis_hll
instrumentation_class: AggregatedMetric
options:
aggregate:
operator: OR
attribute: user_id
events:
- users_viewing_analytics_group_devops_adoption

View File

@ -12,7 +12,6 @@ data_source: redis_hll
instrumentation_class: AggregatedMetric
options:
aggregate:
operator: OR
attribute: user_id
events:
- users_viewing_analytics_group_devops_adoption

View File

@ -12,7 +12,6 @@ instrumentation_class: AggregatedMetric
data_source: redis_hll
options:
aggregate:
operator: OR
attribute: user_id
events:
- g_edit_by_web_ide

View File

@ -12,7 +12,6 @@ data_source: redis_hll
instrumentation_class: AggregatedMetric
options:
aggregate:
operator: OR
attribute: user_id
events:
- i_search_total

View File

@ -12,7 +12,6 @@ instrumentation_class: AggregatedMetric
data_source: redis_hll
options:
aggregate:
operator: OR
attribute: user_id
events:
- 'incident_management_alert_status_changed'

View File

@ -12,7 +12,6 @@ instrumentation_class: AggregatedMetric
data_source: redis_hll
options:
aggregate:
operator: OR
attribute: user_id
events:
- 'incident_management_incident_created'

View File

@ -12,7 +12,6 @@ data_source: redis_hll
instrumentation_class: AggregatedMetric
options:
aggregate:
operator: OR
attribute: user_id
events:
- incident_management_incident_created

View File

@ -12,7 +12,6 @@ data_source: redis_hll
instrumentation_class: AggregatedMetric
options:
aggregate:
operator: OR
attribute: user_id
events:
- g_project_management_issue_title_changed

View File

@ -14,7 +14,6 @@ data_source: redis_hll
instrumentation_class: AggregatedMetric
options:
aggregate:
operator: OR
attribute: user_id
events:
- i_code_review_click_diff_view_setting

View File

@ -12,7 +12,6 @@ data_source: redis_hll
instrumentation_class: AggregatedMetric
options:
aggregate:
operator: OR
attribute: user_id
events:
- i_quickactions_approve

View File

@ -13,7 +13,6 @@ data_source: redis_hll
instrumentation_class: AggregatedMetric
options:
aggregate:
operator: OR
attribute: user_id
events:
- i_package_composer_deploy_token

View File

@ -12,7 +12,6 @@ data_source: redis_hll
instrumentation_class: AggregatedMetric
options:
aggregate:
operator: OR
attribute: user_id
events:
- i_package_composer_user

View File

@ -12,7 +12,6 @@ data_source: redis_hll
instrumentation_class: AggregatedMetric
options:
aggregate:
operator: OR
attribute: user_id
events:
- i_ecosystem_jira_service_close_issue

View File

@ -20,7 +20,6 @@ time_frame: 7d
data_source: redis_hll
options:
aggregate:
operator: OR
attribute: user_id
events:
- 'i_code_review_user_single_file_diffs'

View File

@ -21,7 +21,6 @@ instrumentation_class: AggregatedMetric
data_source: redis_hll
options:
aggregate:
operator: OR
attribute: user_id
events:
- 'i_code_review_user_single_file_diffs'

View File

@ -14,7 +14,6 @@ instrumentation_class: AggregatedMetric
data_source: redis_hll
options:
aggregate:
operator: OR
attribute: user_id
events:
- 'i_code_review_user_vs_code_api_request'

View File

@ -14,7 +14,6 @@ data_source: redis_hll
instrumentation_class: AggregatedMetric
options:
aggregate:
operator: OR
attribute: user_id
events:
- o_pipeline_authoring_unique_users_committing_ciconfigfile

View File

@ -13,7 +13,6 @@ data_source: redis_hll
time_frame: 7d
options:
aggregate:
operator: OR
attribute: user_id
events:
- users_creating_work_items

View File

@ -13,7 +13,6 @@ instrumentation_class: AggregatedMetric
data_source: redis_hll
options:
aggregate:
operator: OR
attribute: user_id
events:
- users_creating_work_items

View File

@ -13,7 +13,6 @@ instrumentation_class: AggregatedMetric
data_source: redis_hll
options:
aggregate:
operator: OR
attribute: user_id
events:
- users_creating_work_items

View File

@ -14,7 +14,6 @@ data_category: optional
instrumentation_class: AggregatedMetric
options:
aggregate:
operator: OR
attribute: user_id
events:
- error_tracking_view_list

View File

@ -14,7 +14,6 @@ data_category: optional
instrumentation_class: AggregatedMetric
options:
aggregate:
operator: OR
attribute: user_id
events:
- incident_management_timeline_event_created

View File

@ -14,7 +14,6 @@ instrumentation_class: AggregatedMetric
data_source: redis_hll
options:
aggregate:
operator: OR
attribute: user_id
events:
- 'i_testing_test_report_uploaded'

View File

@ -14,7 +14,6 @@ data_category: optional
instrumentation_class: AggregatedMetric
options:
aggregate:
operator: OR
attribute: user_id
events:
- i_container_registry_push_tag_user

View File

@ -50,12 +50,6 @@
"aggregate": {
"type": "object",
"properties": {
"operator": {
"enum": [
"OR",
"AND"
]
},
"attribute": {
"enum": [
"user_id",
@ -64,7 +58,6 @@
}
},
"required": [
"operator",
"attribute"
],
"additionalProperties": false

View File

@ -4,7 +4,7 @@ key_path: reply_by_email_enabled
description: Whether incoming email is setup
product_section: dev
product_stage: plan
product_group: certify
product_group: product_planning
value_type: boolean
status: active
time_frame: none

View File

@ -8,7 +8,7 @@
# For a list of all options, see https://vale.sh/docs/topics/styles/
extends: metric
message: "The grade level is %s. Aim for 8th grade or lower by using shorter sentences and words."
link: https://docs.gitlab.com/ee/development/documentation/testing.html#vale-readability-score
link: https://docs.gitlab.com/ee/development/documentation/testing/vale.html#readability-score
level: suggestion
formula: |
(0.39 * (words / sentences)) + (11.8 * (syllables / words)) - 15.59

View File

@ -6,7 +6,7 @@
# For a list of all options, see https://vale.sh/docs/topics/styles/
extends: conditional
message: "Instead of uppercase for '%s', use lowercase or backticks (`) if possible. Otherwise, ask a Technical Writer to add this word or acronym to the rule's exception list."
link: https://docs.gitlab.com/ee/development/documentation/testing.html#vale-uppercase-acronym-test
link: https://docs.gitlab.com/ee/development/documentation/testing/vale.html#vale-uppercase-acronym-test
level: suggestion
ignorecase: false
# Ensures that the existence of 'first' implies the existence of 'second'.

View File

@ -6,8 +6,10 @@ info: To determine the technical writer assigned to the Stage/Group associated w
<!--
This documentation is auto generated by a script.
Please do not edit this file directly.
Please do not edit this file directly, check compile_docs task on lib/tasks/gitlab/graphql.rake.
Run `bundle exec rake gitlab:graphql:compile_docs`
or check the `compile_docs` task in `lib/tasks/gitlab/graphql.rake`.
-->
# GraphQL API resources
@ -26,11 +28,11 @@ in [Removed Items](../removed_items.md).
<!-- vale off -->
<!-- Vale linting disabled after this line. -->
<!-- See https://docs.gitlab.com/ee/development/documentation/testing.html#disable-vale-tests -->
<!-- See https://docs.gitlab.com/ee/development/documentation/testing/vale.html#disable-vale-tests -->
<!-- markdownlint-disable MD044 -->
<!-- MD044/proper-names test disabled after this line to make page compatible with markdownlint-cli 0.29.0. -->
<!-- See https://docs.gitlab.com/ee/development/documentation/testing.html#disable-markdownlint-tests -->
<!-- See https://docs.gitlab.com/ee/development/documentation/testing/markdownlint.html#disable-markdownlint-tests -->
## `Query` type

View File

@ -82,7 +82,7 @@ To enable additional CI analytics features:
| Feature flag name | Purpose | Status |
|------------------------------------|---------------------------------------------------------------------------|------------------------------------|
| `ci_data_ingestion_to_click_house` | Enables synchronization of new finished CI builds to ClickHouse database. | Enabled by default in GitLab 16.8. |
| `clickhouse_ci_analytics` | Enables the **Wait time to pick a job** chart. | Removed in 16.8. |
| `clickhouse_ci_analytics` | Enables the **Wait time to pick a job** chart. | Removed in GitLab 16.8. |
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i>
For a video walkthrough, see [Setting up Runner Fleet Dashboard with ClickHouse](https://www.youtube.com/watch?v=YpGV95Ctbpk).

View File

@ -253,9 +253,6 @@ You can use a YAML file to define your aggregated metrics. The following argumen
use the same data source. Additional data source requirements are described in
[Database sourced aggregated metrics](#database-sourced-aggregated-metrics) and
[Event sourced aggregated metrics](#event-sourced-aggregated-metrics).
- `options.aggregate.operator`: Operator that defines how the aggregated metric data is counted. Available operators are:
- `OR`: Removes duplicates and counts all entries that triggered any of the listed events.
- `AND`: Removes duplicates and counts all elements that were observed triggering all of the following events.
- `options.aggregate.attribute`: Information pointing to the attribute that is being aggregated across events.
- `time_frame`: One or more valid time frames. Use these to limit the data included in aggregated metrics to events within a specific date-range. Valid time frames are:
- `7d`: The last 7 days of data.
@ -277,7 +274,6 @@ instrumentation_class: AggregatedMetric
data_source: internal_events
options:
aggregate:
operator: OR
attribute: user_id
events:
- `incident_management_alert_status_changed`
@ -384,7 +380,6 @@ instrumentation_class: MergeUsageCountAggregatedMetric
data_source: redis_hll
options:
aggregate:
operator: OR
attribute: user_id
events:
- `incident_management_alert_status_changed`

View File

@ -7,7 +7,7 @@ description: 'Learn how to use and administer GitLab, the most scalable Git-base
<!-- markdownlint-disable MD044 -->
<!-- MD044/proper-names test disabled after this line to make page compatible with markdownlint-cli 0.29.0. -->
<!-- See https://docs.gitlab.com/ee/development/documentation/testing.html#disable-markdownlint-tests -->
<!-- See https://docs.gitlab.com/ee/development/documentation/testing/markdownlint.html#disable-markdownlint-tests -->
<div class="d-none">
<h3>Visit <a href="https://docs.gitlab.com/ee/">docs.gitlab.com</a> for the latest version

View File

@ -15,7 +15,7 @@ OpenShift helps you to develop, deploy, and manage container-based applications.
## Use OpenShift to run GitLab self-managed
You can run GitLab in an OpenShift cluster with the GitLab Operator. For more information about
setting up GitLab on OpenShift, see [GitLab Operator](https://docs.gitlab.com/charts/installation/operator.html).
setting up GitLab on OpenShift, see [GitLab Operator](https://docs.gitlab.com/operator/).
## Use OpenShift to run a GitLab Runner Fleet

View File

@ -7,105 +7,150 @@ info: To determine the technical writer assigned to the Stage/Group associated w
# Support for Experiment, Beta, and Generally Available features
There are cases where GitLab would like to validate the edge-cases of scale, support, and maintenance burden of features in their current form for every designed use case.
There are also scenarios where a feature is not complete enough to be considered an [MVC](https://handbook.gitlab.com/handbook/product/product-principles/#the-minimal-viable-change-mvc).
In these cases, GitLab has the option to release features as Experiments or Beta features, and users can opt-in and test the new experience.
Features might not be fully documented or supported in the Experiment or Beta phases.
GitLab sometimes releases features as Experiments or Beta features, and users can opt in and test the new experience.
Some reasons for these kinds of feature releases include:
Please note that some features may not be aligned to these recommendations if they were developed before the recommendations were in place or if the group determined an alternative implementation approach was needed.
- Validating the edge-cases of scale, support, and maintenance burden of features in their current form for every designed use case.
- Features not complete enough to be considered an [MVC](https://handbook.gitlab.com/handbook/product/product-principles/#the-minimal-viable-change-mvc),
but added to the codebase as part of the development process.
Product development teams should refrain from making changes that they reasonably believe could create significant risks or friction for GitLab users or the platform, such as:
Please note that some features may not be aligned to these recommendations if they were developed before the recommendations were in place,
or if a team determined an alternative implementation approach was needed.
- Risking damage or exfiltration of existing production data accessed by our users.
- Destabilizing other parts of the application.
- Introducing friction into high monthly active user (MAU) areas.
Some GitLab features are released as Experiment or Beta versions and are
[not fully supported](https://about.gitlab.com/support/statement-of-support/#experiment-beta-features).
All other features are considered to be Generally Available (GA).
## Experiment
Support is not provided for features listed as "Experimental" or "Alpha" or any similar designation. Issues regarding such features should be opened in the GitLab issue tracker. Teams should release features as GA from the start unless there are strong reasons to release them as Experiment or Beta versions first.
All Experimental features that [meet the review criteria](https://handbook.gitlab.com/handbook/engineering/infrastructure/production/readiness/#criteria-for-starting-a-production-readiness-review) must [initiate Production Readiness Review](https://handbook.gitlab.com/handbook/engineering/infrastructure/production/readiness/#process) and complete the [experiment section in the readiness template](https://gitlab.com/gitlab-com/gl-infra/readiness/-/blob/master/.gitlab/issue_templates/production_readiness.md#experiment).
Experimental features:
Experimental features are:
- Not ready for production use.
- No support available.
- May be unstable.
- Can be removed at any time.
- Data loss may occur.
- Documentation may not exist or just be in a blog format.
- Offer a way to opt-in with minimal friction. For example, needing to flip a feature flag is too much friction, but a group or project-level setting in the UI is not.
- Link out to the [GitLab Testing Agreement](https://handbook.gitlab.com/handbook/legal/testing-agreement/) in the opt-in.
- Documentation reflects that the feature is subject to the [GitLab Testing Agreement](https://handbook.gitlab.com/handbook/legal/testing-agreement/).
- [UI reflects experiment status](https://design.gitlab.com/usability/feature-management#highlighting-feature-versions).
- Feedback issue to engage with team.
- UX not finalized, might be just quick action access.
- Not announced in a release post.
- Can be promoted in the user interface through [discovery moments](https://design.gitlab.com/usability/feature-management#discovery-moments), if needed.
- Are not ready for production use.
- Have [no support available](https://about.gitlab.com/support/statement-of-support/#experiment-beta-features).
Issues regarding such features should be opened in the GitLab issue tracker.
- Might be unstable.
- Could be removed at any time.
- Might have a risk of data loss.
- Might have no documentation, or information limited to just GitLab issues or a blog.
- Might not have a finalized user experience, and might only be accessible through quick actions or API requests.
## Beta
Commercially-reasonable efforts are made to provide limited support for features designated as "Beta," with the expectation that issues require extra time and assistance from development to troubleshoot.
All Beta features that [meet the review criteria](https://handbook.gitlab.com/handbook/engineering/infrastructure/production/readiness/#criteria-for-starting-a-production-readiness-review) must complete all sections up to and including the [beta section in the readiness template](https://gitlab.com/gitlab-com/gl-infra/readiness/-/blob/master/.gitlab/issue_templates/production_readiness.md#beta) by following the [Production Readiness Review process](https://handbook.gitlab.com/handbook/engineering/infrastructure/production/readiness/#process).
Beta features:
Beta features are:
- May not be ready for production use.
- Support on a commercially-reasonable effort basis.
- Not required or necessary for most features.
- May be unstable.
- Configuration and dependencies unlikely to change.
- Features and functions unlikely to change. However, breaking changes may occur outside of major releases or with less notice than for Generally Available features.
- Data loss not likely.
- Documentation reflects Beta status.
- [User interface reflects Beta status](https://design.gitlab.com/usability/feature-management#highlighting-feature-versions).
- User experience complete or near completion.
- Behind a feature flag that is on by default.
- Behind a toggle that is off by default.
- Can be announced in a release post that reflects Beta status.
- Can be promoted in the user interface through [discovery moments](https://design.gitlab.com/usability/feature-management#discovery-moments), if needed.
- Might not be ready for production use.
- Are [supported on a commercially-reasonable effort basis](https://about.gitlab.com/support/statement-of-support/#experiment-beta-features),
but with the expectation that issues require extra time and assistance from development to troubleshoot.
- Might be unstable.
- Have configuration and dependencies that are unlikely to change.
- Have features and functions that are unlikely to change. However, breaking changes can occur outside of major releases
or with less notice than for Generally Available features.
- Have a low risk of data loss.
- Have a user experience that is complete or near completion.
## Generally Available (GA)
Generally Available features that [meet the review criteria](https://handbook.gitlab.com/handbook/engineering/infrastructure/production/readiness/#criteria-for-starting-a-production-readiness-review) must complete the [Production Readiness Review](https://handbook.gitlab.com/handbook/engineering/infrastructure/production/readiness) and complete all sections up to and including the [GA section in the readiness template](https://gitlab.com/gitlab-com/gl-infra/readiness/-/blob/master/.gitlab/issue_templates/production_readiness.md#general-availability).
Generally Available features:
GA features are:
- Ready for production use at any scale.
- Fully documented and supported.
- User experience complete and in line with GitLab design standards.
## Provide earlier access
Give users the ability to opt into experimental features when there is enough value.
Where possible, release an experimental feature externally instead of only testing internally or waiting for the feature to be in a Beta state.
Our [mission is "everyone can contribute"](https://about.gitlab.com/company/mission/), and that is only possible if people outside the company can try a feature.
We get higher quality (more diverse) feedback if people from different organizations try something.
We've learned that keeping features internal only for extended periods of time slows us down unnecessarily.
The experimental features are only shown when people/organizations opt-in to experiments, we are allowed to make mistakes here and literally experiment.
- Are ready for production use at any scale.
- Are [fully supported](https://about.gitlab.com/support/statement-of-support/) and documented.
- Have a complete user experience aligned with GitLab design standards.
## All features are in production
All features that are available on GitLab.com are considered "in production".
Because all Experiment, Beta, and Generally Available features are available on GitLab.com, they are all considered to be in production.
All Experiment, Beta, and Generally Available features are available on GitLab.com,
so they are all considered to be "in production".
## Experiment and Beta Exit Criteria
## GitLab Experiment and Beta development guidelines
To ensure the phases before General Availability are as short as possible each phase of Experiment, Beta and LA should include exit criteria.
This encourages rapid iteration and reduces [cycle time](https://handbook.gitlab.com/handbook/values/#reduce-cycle-time).
GitLab Product Managers will take the following into account when deciding what exit criteria to apply to their Experimental and Beta features:
Teams should release features as GA from the start unless there are strong reasons to release them as Experiment or Beta versions first.
Product development teams should refrain from making changes that they reasonably believe
could create significant risks or friction for GitLab users or the platform, such as:
- Risking damage or exfiltration of existing production data accessed by our users.
- Destabilizing other parts of the application.
- Introducing friction into high Monthly Active User (MAU) areas.
### Experiment features
In addition to the [Experiment details](#experiment) for users, Experiments should:
- Offer a way to opt in with minimal friction. For example, needing to flip a feature flag is too much friction,
but a group or project-level setting in the UI is not.
- Link out to the [GitLab Testing Agreement](https://handbook.gitlab.com/handbook/legal/testing-agreement/) in the opt-in.
- Have documentation that reflects that the feature is subject to the [GitLab Testing Agreement](https://handbook.gitlab.com/handbook/legal/testing-agreement/).
- Have [UI that reflects the Experiment status](https://design.gitlab.com/usability/feature-management#highlighting-feature-versions).
- Have a feedback issue to engage with internal and external users.
- Not be announced in a release post.
- Be promoted in the user interface through [discovery moments](https://design.gitlab.com/usability/feature-management#discovery-moments),
if needed.
All Experimental features that [meet the review criteria](https://handbook.gitlab.com/handbook/engineering/infrastructure/production/readiness/#criteria-for-starting-a-production-readiness-review)
must [initiate Production Readiness Review](https://handbook.gitlab.com/handbook/engineering/infrastructure/production/readiness/#process)
and complete the [experiment section in the readiness template](https://gitlab.com/gitlab-com/gl-infra/readiness/-/blob/master/.gitlab/issue_templates/production_readiness.md#experiment).
### Beta features
In addition to the [Beta details](#beta) for users, Beta features should:
- Not be required or necessary for most features.
- Have documentation that reflects the Beta status.
- Have [UI that reflects the Beta status](https://design.gitlab.com/usability/feature-management#highlighting-feature-versions).
- Be behind a feature flag that is on by default.
- Be behind a toggle that is off by default.
- Be announced in a release post that reflects the Beta status, if desired.
- Be promoted in the user interface through [discovery moments](https://design.gitlab.com/usability/feature-management#discovery-moments),
if needed.
All Beta features that [meet the review criteria](https://handbook.gitlab.com/handbook/engineering/infrastructure/production/readiness/#criteria-for-starting-a-production-readiness-review)
must complete all sections up to and including the [beta section in the readiness template](https://gitlab.com/gitlab-com/gl-infra/readiness/-/blob/master/.gitlab/issue_templates/production_readiness.md#beta)
by following the [Production Readiness Review process](https://handbook.gitlab.com/handbook/engineering/infrastructure/production/readiness/#process).
### GA features
Generally Available features that [meet the review criteria](https://handbook.gitlab.com/handbook/engineering/infrastructure/production/readiness/#criteria-for-starting-a-production-readiness-review)
must complete the [Production Readiness Review](https://handbook.gitlab.com/handbook/engineering/infrastructure/production/readiness)
and complete all sections up to and including the [GA section in the readiness template](https://gitlab.com/gitlab-com/gl-infra/readiness/-/blob/master/.gitlab/issue_templates/production_readiness.md#general-availability).
### Provide earlier access
Our [mission is "everyone can contribute"](https://about.gitlab.com/company/mission/),
and that is only possible if people outside the company can try a feature. We get higher quality (more diverse) feedback
if people from different organizations try something, so give users the ability to opt in to Experimental
features when there is enough value.
Where possible, release an Experimental feature externally instead of only testing internally
or waiting for the feature to be in a Beta state. We've learned that keeping features internal-only
for extended periods of time slows us down unnecessarily.
Experimental features are only shown when people/organizations opt in to Experiments,
so we are allowed to make mistakes here and literally experiment.
### Experiment and Beta Exit Criteria
To ensure the phases before General Availability are as short as possible each phase of Experiment,
Beta, and Limited Availability should include exit criteria. This encourages rapid iteration and
reduces [cycle time](https://handbook.gitlab.com/handbook/values/#reduce-cycle-time).
GitLab Product Managers must take the following into account when deciding what exit criteria
to apply to their Experimental and Beta features:
- **Time**: Define an end date at which point the feature will be General Availability.
- Consider setting a time-bound target metric that will define readiness for exit into GA (e.g. X number of customers retained MoM over 6 months after launch of Experiment, X% growth of free and paid users in three months since launch Beta, etc.)
- Be mindful of balancing time to market, user experience, and richness of experience. Some Beta programs have lasted 1 milestone while other have lasted a couple of years.
- Consider setting a time-bound target metric that will define readiness for exit into GA.
For example, X number of customers retained MoM over 6 months after launch of Experiment,
X% growth of free and paid users in three months since launch Beta, or similar.
- Be mindful of balancing time to market, user experience, and richness of experience.
Some Beta programs have lasted one milestone while others have lasted a couple of years.
- **Feedback**: Define the minimum number of customers that have been onboarded and interviewed.
- Consider also setting a time bound when using user feedback as an exit criteria for leaving a phases. If a given time period elapses and we can not solicit feedback from enough users, it is better to ship what we have and iterate on it as a GA at that point rather than maintain a pre-GA state.
- Consider also setting a time bound when using user feedback as an exit criteria for leaving a phase.
If a given time period elapses and we can not solicit feedback from enough users,
it is better to ship what we have and iterate on it as a GA at that point rather than maintain a pre-GA state.
- **Limited Feature Completion**: Determine if there is functionality that should be completed before moving to General Availability.
- Be wary of including "just one more" feature. Iteration will be easier and more effective with more feedback from more users so getting to General Availability is preferred.
- **System Performance metrics**: Determine the criteria that the platform has shown before being ready for General Availability. Examples include response times and successfully handling a number of requests per second.
- **Success criteria**: Not all features may reach GA. It is OK to pivot if early feedback indicates that a different direction would provide more value or a better user experience. If open questions must be answered to decide if the feature is worth putting in the product, list and answer those.
- Be wary of including "just one more" feature. Iteration is easier and more effective with more feedback from more users,
so getting to General Availability is preferred.
- **System Performance metrics**: Determine the criteria that the platform has shown before being ready for General Availability.
Examples include response times and successfully handling a specific number of requests per second.
- **Success criteria**: Not all features may reach GA. It is OK to pivot if early feedback indicates that
a different direction would provide more value or a better user experience. If open questions must be answered
to decide if the feature is worth putting in the product, list and answer those.
For the exit criteria of **AI features**, in addition to the above, see the [UX maturity requirements](https://handbook.gitlab.com/handbook/product/ai/ux-maturity/).

View File

@ -32,6 +32,8 @@ After you purchase GitLab Duo Pro, you can assign seats to billable users to gra
1. Select the **GitLab Duo Pro** tab.
1. To the right of the user, turn on the toggle to assign GitLab Duo Pro.
To use Code Suggestions in any project or group, a user must be assigned a seat in at least one top-level group.
### For self-managed
Prerequisites:

View File

@ -67,6 +67,16 @@ under **Contribution Analytics**.
The selected time period applies to all charts and the table.
## Contribution analytics with ClickHouse
On GitLab.com, contribution analytics run through the ClickHouse Cloud cluster.
When you configure the ClickHouse integration, the ClickHouse events table is populated in the ClickHouse database, and new events are inserted automatically in ClickHouse.
For more information, see:
- [ClickHouse integration guidelines](../../../integration/clickhouse.md)
- [ClickHouse usage at GitLab](../../../architecture/blueprints/clickhouse_usage/index.md)
## Contribution analytics GraphQL API
To retrieve metrics for user contributions, use the [GraphQL](../../../api/graphql/reference/index.md#groupcontributions) API.

View File

@ -202,7 +202,12 @@ To restore a project marked for deletion:
## Archive a project
When you archive a project, the repository, packages, issues, merge requests, and all
other features become read-only. Archived projects are also hidden from project lists.
other features become read-only. Archived projects are:
- Labeled with an `archived` badge on the project page.
- Listed on the group page in the **Archived projects** tab.
- Hidden from project lists in **Your Work** and **Explore**.
- Read-only.
To archive a project:

View File

@ -58,7 +58,7 @@ pre-push:
files: git diff --name-only --diff-filter=d $(git merge-base origin/master HEAD)..HEAD
glob: '{,ee/}app/graphql/**/*.rb'
run: bundle exec rake gitlab:graphql:check_docs
vale: # Requires Vale: https://docs.gitlab.com/ee/development/documentation/testing.html#install-linters
vale: # Requires Vale: https://docs.gitlab.com/ee/development/documentation/testing/vale.html
tags: documentation style
files: git diff --name-only --diff-filter=d $(git merge-base origin/master HEAD)..HEAD
exclude: "doc/api/graphql/reference/index.md"

View File

@ -194,7 +194,7 @@
"sass": "^1.69.7",
"scrollparent": "^2.0.1",
"semver": "^7.3.4",
"sentrybrowser": "npm:@sentry/browser@7.100.1",
"sentrybrowser": "npm:@sentry/browser@7.102.0",
"sentrybrowser5": "npm:@sentry/browser@5.30.0",
"sortablejs": "^1.10.2",
"string-hash": "1.1.3",

View File

@ -233,6 +233,8 @@ module QA
# Selenium::WebDriver::Error::ElementClickInterceptedError
def click_element_coordinates(name, **kwargs)
page.driver.browser.action.move_to(find_element(name, **kwargs).native).click.perform
rescue Selenium::WebDriver::Error::StaleElementReferenceError => e
QA::Runtime::Logger.error("Element #{name} has become stale: #{e}")
end
# replace with (..., page = self.class)

View File

@ -72,6 +72,6 @@ await Promise.all(
if (errors > 0) {
console.log(`Total errors: ${errors}`);
// eslint-disable-next-line no-restricted-syntax
console.log(`To fix these errors, see https://docs.gitlab.com/ee/development/documentation/testing.html#mermaid.`);
console.log(`To fix these errors, see https://docs.gitlab.com/ee/development/documentation/testing/#tests-in-mermaidlint.`);
process.exit(1);
}

View File

@ -26,6 +26,7 @@ export const downstream = {
group: 'success',
label: 'passed',
icon: 'status_success',
text: 'Success',
__typename: 'DetailedStatus',
},
sourceJob: {
@ -57,6 +58,7 @@ export const downstream = {
group: 'success',
label: 'passed',
icon: 'status_success',
text: 'Success',
__typename: 'DetailedStatus',
},
sourceJob: {
@ -91,6 +93,7 @@ export const upstream = {
group: 'success',
label: 'passed',
icon: 'status_success',
text: 'Success',
__typename: 'DetailedStatus',
},
sourceJob: null,
@ -144,6 +147,7 @@ export const wrappedPipelineReturn = {
group: 'success',
label: 'passed',
icon: 'status_success',
text: 'Success',
},
sourceJob: {
name: 'test_c',
@ -182,6 +186,7 @@ export const wrappedPipelineReturn = {
label: 'passed',
group: 'success',
icon: 'status_success',
text: 'Success',
},
name: 'build_n',
size: 1,
@ -206,6 +211,7 @@ export const wrappedPipelineReturn = {
__typename: 'DetailedStatus',
id: '84',
icon: 'status_success',
text: 'Success',
tooltip: 'passed',
label: 'passed',
hasDetails: true,
@ -276,6 +282,7 @@ export const delayedJob = {
hasDetails: true,
detailsPath: '/root/kinder-pipe/-/jobs/5339',
group: 'scheduled',
text: 'Success',
action: {
__typename: 'StatusAction',
icon: 'time-out',

View File

@ -20,6 +20,8 @@ describe('init markdown', () => {
let outdentButton;
let axiosMock;
let spyTextAreaInput;
beforeAll(() => {
setHTMLFixture(
`<div class='md-area'>
@ -35,6 +37,9 @@ describe('init markdown', () => {
textArea.focus();
spyTextAreaInput = jest.fn();
textArea.addEventListener('input', spyTextAreaInput);
// needed for the underlying insertText to work
document.execCommand = jest.fn(() => false);
});
@ -57,14 +62,28 @@ describe('init markdown', () => {
insertMarkdownText({
textArea,
text: '',
tag: '',
text: '2',
tag: '*',
blockTag: null,
selected,
wrap: false,
});
expect(textArea.value).toBe(selected.toString());
expect(spyTextAreaInput).toHaveBeenCalled();
expect(textArea.value).toBe('*2');
});
it('will not do anything if tag, blockTag, and selected are falsey', () => {
insertMarkdownText({
textArea,
text: 'lorem ipsum',
tab: '',
blockTag: '',
selected: '',
wrap: false,
});
expect(spyTextAreaInput).not.toHaveBeenCalled();
});
});

View File

@ -308,20 +308,18 @@ RSpec.describe Gitlab::Usage::MetricDefinition, feature_category: :service_ping
'RedisHLLMetric' | { events: [2] } | false
'RedisHLLMetric' | { events: 'a' } | false
'RedisHLLMetric' | { event: ['a'] } | false
'AggregatedMetric' | { aggregate: { operator: 'OR', attribute: 'user_id' }, events: ['a'] } | true
'AggregatedMetric' | { aggregate: { operator: 'AND', attribute: 'project_id' }, events: %w[b c] } | true
'AggregatedMetric' | { aggregate: { attribute: 'user_id' }, events: ['a'] } | true
'AggregatedMetric' | { aggregate: { attribute: 'project_id' }, events: %w[b c] } | true
'AggregatedMetric' | nil | false
'AggregatedMetric' | {} | false
'AggregatedMetric' | { aggregate: { operator: 'OR', attribute: 'user_id' }, events: ['a'], event: 'a' } | false
'AggregatedMetric' | { aggregate: { operator: 'OR', attribute: 'user_id' } } | false
'AggregatedMetric' | { aggregate: { attribute: 'user_id' }, events: ['a'], event: 'a' } | false
'AggregatedMetric' | { aggregate: { attribute: 'user_id' } } | false
'AggregatedMetric' | { events: ['a'] } | false
'AggregatedMetric' | { aggregate: { operator: 'OR', attribute: 'user_id' }, events: 'a' } | false
'AggregatedMetric' | { aggregate: { attribute: 'user_id' }, events: 'a' } | false
'AggregatedMetric' | { aggregate: 'a', events: ['a'] } | false
'AggregatedMetric' | { aggregate: { operator: 'OR' }, events: ['a'] } | false
'AggregatedMetric' | { aggregate: { attribute: 'user_id' }, events: ['a'] } | false
'AggregatedMetric' | { aggregate: { operator: 'OR', attribute: 'user_id', a: 'b' }, events: ['a'] } | false
'AggregatedMetric' | { aggregate: { operator: '???', attribute: 'user_id' }, events: ['a'] } | false
'AggregatedMetric' | { aggregate: { operator: 'OR', attribute: ['user_id'] }, events: ['a'] } | false
'AggregatedMetric' | { aggregate: {}, events: ['a'] } | false
'AggregatedMetric' | { aggregate: { attribute: 'user_id', a: 'b' }, events: ['a'] } | false
'AggregatedMetric' | { aggregate: { attribute: ['user_id'] }, events: ['a'] } | false
end
with_them do

View File

@ -1119,13 +1119,11 @@ RSpec.describe Member, feature_category: :groups_and_projects do
let_it_be(:group) { create(:group, :with_organization) }
let_it_be(:user) { create(:user) }
let(:member) { create(:group_member, source: group, user: user) }
let(:update_organization_users_enabled) { true }
subject(:commit_member) { member }
before do
allow(Organizations::OrganizationUser).to receive(:create_organization_record_for).once.and_call_original
stub_feature_flags(update_organization_users: update_organization_users_enabled)
end
shared_examples_for 'does not create an organization_user entry' do
@ -1135,75 +1133,67 @@ RSpec.describe Member, feature_category: :groups_and_projects do
end
context 'when creating' do
context 'when update_organization_users is enabled' do
it 'inserts new record on member creation' do
expect { member }.to change { Organizations::OrganizationUser.count }.by(1)
record_attrs = { organization: group.organization, user: member.user, access_level: :default }
expect(Organizations::OrganizationUser.exists?(record_attrs)).to be(true)
end
it 'inserts new record on member creation' do
expect { member }.to change { Organizations::OrganizationUser.count }.by(1)
record_attrs = { organization: group.organization, user: member.user, access_level: :default }
expect(Organizations::OrganizationUser.exists?(record_attrs)).to be(true)
end
context 'when user already exists in the organization_users' do
let_it_be(:user) { create(:user) }
let_it_be(:common_attrs) { { organization: group.organization, user: user } }
let(:new_member) { create(:group_member, :owner, source: group, user: user) }
context 'when user already exists in the organization_users' do
let_it_be(:user) { create(:user) }
let_it_be(:common_attrs) { { organization: group.organization, user: user } }
let(:new_member) { create(:group_member, :owner, source: group, user: user) }
context 'for an already existing default organization_user' do
before_all do
create(:organization_user, common_attrs)
end
it 'does not insert a new record in organization_users' do
expect { new_member }.not_to change { Organizations::OrganizationUser.count }
expect(
Organizations::OrganizationUser.exists?(
organization: group.organization, user: user, access_level: :default
)
).to be(true)
end
it 'does not update timestamps' do
travel_to(1.day.from_now) do
expect { new_member }.not_to change { Organizations::OrganizationUser.last.updated_at }
end
end
context 'for an already existing default organization_user' do
before_all do
create(:organization_user, common_attrs)
end
context 'for an already existing owner organization_user' do
before_all do
create(:organization_user, :owner, common_attrs)
end
it 'does not insert a new record in organization_users' do
expect { new_member }.not_to change { Organizations::OrganizationUser.count }
expect(
Organizations::OrganizationUser.exists?(
organization: group.organization, user: user, access_level: :default
)
).to be(true)
end
it 'does not insert a new record in organization_users nor update the access_level' do
expect do
create(:group_member, :owner, source: group, user: user)
end.not_to change { Organizations::OrganizationUser.count }
expect(
Organizations::OrganizationUser.exists?(common_attrs.merge(access_level: :default))
).to be(false)
expect(
Organizations::OrganizationUser.exists?(common_attrs.merge(access_level: :owner))
).to be(true)
it 'does not update timestamps' do
travel_to(1.day.from_now) do
expect { new_member }.not_to change { Organizations::OrganizationUser.last.updated_at }
end
end
end
context 'when updating the organization_users is not successful' do
it 'rolls back the member creation' do
allow(Organizations::OrganizationUser)
.to receive(:create_organization_record_for).once.and_raise(ActiveRecord::StatementTimeout)
context 'for an already existing owner organization_user' do
before_all do
create(:organization_user, :owner, common_attrs)
end
expect { commit_member }.to raise_error(ActiveRecord::StatementTimeout)
expect(Organizations::OrganizationUser.exists?(organization: group.organization)).to be(false)
expect(group.group_members).to be_empty
it 'does not insert a new record in organization_users nor update the access_level' do
expect do
create(:group_member, :owner, source: group, user: user)
end.not_to change { Organizations::OrganizationUser.count }
expect(
Organizations::OrganizationUser.exists?(common_attrs.merge(access_level: :default))
).to be(false)
expect(
Organizations::OrganizationUser.exists?(common_attrs.merge(access_level: :owner))
).to be(true)
end
end
end
context 'when update_organization_users is disabled' do
let(:update_organization_users_enabled) { false }
context 'when updating the organization_users is not successful' do
it 'rolls back the member creation' do
allow(Organizations::OrganizationUser)
.to receive(:create_organization_record_for).once.and_raise(ActiveRecord::StatementTimeout)
it_behaves_like 'does not create an organization_user entry'
expect { commit_member }.to raise_error(ActiveRecord::StatementTimeout)
expect(Organizations::OrganizationUser.exists?(organization: group.organization)).to be(false)
expect(group.group_members).to be_empty
end
end
context 'when member is an invite' do
@ -1228,30 +1218,22 @@ RSpec.describe Member, feature_category: :groups_and_projects do
subject(:commit_member) { member.accept_invite!(user) }
context 'when update_organization_users is enabled' do
it 'inserts new record on member creation' do
expect { commit_member }.to change { Organizations::OrganizationUser.count }.by(1)
expect(group.organization.user?(user)).to be(true)
end
context 'when updating the organization_users is not successful' do
before do
allow(Organizations::OrganizationUser)
.to receive(:create_organization_record_for).once.and_raise(ActiveRecord::StatementTimeout)
end
it 'rolls back the member creation' do
expect { commit_member }.to raise_error(ActiveRecord::StatementTimeout)
expect(group.organization.user?(user)).to be(false)
expect(member.reset.user).to be_nil
end
end
it 'inserts new record on member creation' do
expect { commit_member }.to change { Organizations::OrganizationUser.count }.by(1)
expect(group.organization.user?(user)).to be(true)
end
context 'when update_organization_users is disabled' do
let(:update_organization_users_enabled) { false }
context 'when updating the organization_users is not successful' do
before do
allow(Organizations::OrganizationUser)
.to receive(:create_organization_record_for).once.and_raise(ActiveRecord::StatementTimeout)
end
it_behaves_like 'does not create an organization_user entry'
it 'rolls back the member creation' do
expect { commit_member }.to raise_error(ActiveRecord::StatementTimeout)
expect(group.organization.user?(user)).to be(false)
expect(member.reset.user).to be_nil
end
end
context 'when organization does not exist' do

View File

@ -62,8 +62,10 @@ module Tooling
<!--
This documentation is auto generated by a script.
Please do not edit this file directly.
Please do not edit this file directly, check compile_docs task on lib/tasks/gitlab/graphql.rake.
Run `bundle exec rake gitlab:graphql:compile_docs`
or check the `compile_docs` task in `lib/tasks/gitlab/graphql.rake`.
-->
MD
end

View File

@ -19,11 +19,11 @@
<!-- vale off -->
<!-- Vale linting disabled after this line. -->
<!-- See https://docs.gitlab.com/ee/development/documentation/testing.html#disable-vale-tests -->
<!-- See https://docs.gitlab.com/ee/development/documentation/testing/vale.html#disable-vale-tests -->
<!-- markdownlint-disable MD044 -->
<!-- MD044/proper-names test disabled after this line to make page compatible with markdownlint-cli 0.29.0. -->
<!-- See https://docs.gitlab.com/ee/development/documentation/testing.html#disable-markdownlint-tests -->
<!-- See https://docs.gitlab.com/ee/development/documentation/testing/markdownlint.html#disable-markdownlint-tests -->
\
:plain

112
yarn.lock
View File

@ -2027,33 +2027,33 @@
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.4.1.tgz#8311b77e6cce322865ba12ada8c3779369610d18"
integrity sha512-eAhItDX9yQtZVM3yvXS/VR3qPqcnXvnLyx1pLXl4JzyNMBNO3KC986t/iAg2zcMzpAp9JSvxB5VZGnBiNoA98w==
"@sentry-internal/feedback@7.100.1":
version "7.100.1"
resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.100.1.tgz#99585ba6f71eca3e7afe918273dd55b12f3aac8a"
integrity sha512-yqcRVnjf+qS+tC4NxOKLJOaSJ+csHmh/dHUzvCTkf5rLsplwXYRnny2r0tqGTQ4tuXMxwgSMKPYwicg81P+xuw==
"@sentry-internal/feedback@7.102.0":
version "7.102.0"
resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.102.0.tgz#c3c7f5cfe9726b6d4d1917bd5bd01238154f8ee7"
integrity sha512-GxHdzbOF4tg6TtyQzFqb/8c/p07n68qZC5KYwzs7AuW5ey0IPmdC58pOh3Kk52JA0P69/RZy39+r1p1Swr6C+Q==
dependencies:
"@sentry/core" "7.100.1"
"@sentry/types" "7.100.1"
"@sentry/utils" "7.100.1"
"@sentry/core" "7.102.0"
"@sentry/types" "7.102.0"
"@sentry/utils" "7.102.0"
"@sentry-internal/replay-canvas@7.100.1":
version "7.100.1"
resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.100.1.tgz#d37228575931b869d2ad415af46b342d83dd0fd7"
integrity sha512-TnqxqJGhbFhhYRhTG2WLFer+lVieV7mNGeIxFBiw1L4kuj8KGl+C0sknssKyZSRVJFSahhHIosHJGRMkkD//7g==
"@sentry-internal/replay-canvas@7.102.0":
version "7.102.0"
resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.102.0.tgz#2bed235bbcb22eea71c39650096d21a3ed32f466"
integrity sha512-rgNO4PdFv0AYflBsCNbSIwpQuOOJQTqyu8i8U0PupjveNjkm0CUJhber/ZOcaGmbyjdvwikGwgWY2O0Oj0USCA==
dependencies:
"@sentry/core" "7.100.1"
"@sentry/replay" "7.100.1"
"@sentry/types" "7.100.1"
"@sentry/utils" "7.100.1"
"@sentry/core" "7.102.0"
"@sentry/replay" "7.102.0"
"@sentry/types" "7.102.0"
"@sentry/utils" "7.102.0"
"@sentry-internal/tracing@7.100.1":
version "7.100.1"
resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.100.1.tgz#4329492e50c390567197a4acbf7e3672b1db7820"
integrity sha512-+u9RRf5eL3StiyiRyAHZmdkAR7GTSGx4Mt4Lmi5NEtCcWlTGZ1QgW2r8ZbhouVmTiJkjhQgYCyej3cojtazeJg==
"@sentry-internal/tracing@7.102.0":
version "7.102.0"
resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.102.0.tgz#24cf662e1eb5623f6d5197e78c66d7b257560eb8"
integrity sha512-BlE33HWL1IzkGa0W+pwTiyu01MUIfYf+WnO9UC8qkDW3jxVvg2zhoSjXSxikT+KPCOgoZpQHspaTzwjnI1LCvw==
dependencies:
"@sentry/core" "7.100.1"
"@sentry/types" "7.100.1"
"@sentry/utils" "7.100.1"
"@sentry/core" "7.102.0"
"@sentry/types" "7.102.0"
"@sentry/utils" "7.102.0"
"@sentry/core@5.30.0":
version "5.30.0"
@ -2066,13 +2066,13 @@
"@sentry/utils" "5.30.0"
tslib "^1.9.3"
"@sentry/core@7.100.1":
version "7.100.1"
resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.100.1.tgz#7b8e101a931af8e8b3b2449534749f882772df4f"
integrity sha512-f+ItUge/o9AjlveQq0ZUbQauKlPH1FIJbC1TRaYLJ4KNfOdrsh8yZ29RmWv0cFJ/e+FGTr603gWpRPObF5rM8Q==
"@sentry/core@7.102.0":
version "7.102.0"
resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.102.0.tgz#da5e04a5fe97ed91464944dac40b813e6f8aa453"
integrity sha512-GO9eLOSBK1waW4AD0wDXAreaNqXFQ1MPQZrkKcN+GJYEFhJK1+u+MSV7vO5Fs/rIfaTZIZ2jtEkxSSAOucE8EQ==
dependencies:
"@sentry/types" "7.100.1"
"@sentry/utils" "7.100.1"
"@sentry/types" "7.102.0"
"@sentry/utils" "7.102.0"
"@sentry/hub@5.30.0":
version "5.30.0"
@ -2092,25 +2092,25 @@
"@sentry/types" "5.30.0"
tslib "^1.9.3"
"@sentry/replay@7.100.1":
version "7.100.1"
resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.100.1.tgz#d9af5f8e92ce0f93cef89f5aef74d91a8d12c3eb"
integrity sha512-B1NFjzGEFaqejxBRdUyEzH8ChXc2kfiqlA/W/Lg0aoWIl2/7nuMk+l4ld9gW5F5bIAXDTVd5vYltb1lWEbpr7w==
"@sentry/replay@7.102.0":
version "7.102.0"
resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.102.0.tgz#209b7adb68e89772824218ecab498d3a6fbc2c42"
integrity sha512-sUIBN4ZY0J5/dQS3KOe5VLykm856KZkTrhV8kmBEylzQhw1BBc8i2ehTILy5ZYh9Ra8uXPTAmtwpvYf/dRDfAg==
dependencies:
"@sentry-internal/tracing" "7.100.1"
"@sentry/core" "7.100.1"
"@sentry/types" "7.100.1"
"@sentry/utils" "7.100.1"
"@sentry-internal/tracing" "7.102.0"
"@sentry/core" "7.102.0"
"@sentry/types" "7.102.0"
"@sentry/utils" "7.102.0"
"@sentry/types@5.30.0":
version "5.30.0"
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402"
integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==
"@sentry/types@7.100.1":
version "7.100.1"
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.100.1.tgz#1349b77269cecf4e80c087842575bd1a001e9995"
integrity sha512-fLM+LedHuKzOd8IhXBqaQuym+AA519MGjeczBa5kGakes/BbAsUMwsNfjsKQedp7Kh44RgYF99jwoRPK2oDrXw==
"@sentry/types@7.102.0":
version "7.102.0"
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.102.0.tgz#b31e9faa54036053ab82c09c3c855035a4889c59"
integrity sha512-FPfFBP0x3LkPARw1/6cWySLq1djIo8ao3Qo2KNBeE9CHdq8bsS1a8zzjJLuWG4Ww+wieLP8/lY3WTgrCz4jowg==
"@sentry/utils@5.30.0":
version "5.30.0"
@ -2120,12 +2120,12 @@
"@sentry/types" "5.30.0"
tslib "^1.9.3"
"@sentry/utils@7.100.1":
version "7.100.1"
resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.100.1.tgz#6e26f3b06b1e485a2180f464ab3374ecb8d5e407"
integrity sha512-Ve6dXr1o6xiBe3VCoJgiutmBKrugryI65EZAbYto5XI+t+PjiLLf9wXtEMF24ZrwImo4Lv3E9Uqza+fWkEbw6A==
"@sentry/utils@7.102.0":
version "7.102.0"
resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.102.0.tgz#66325f2567986cc3fd12fbdb980fb8ada170342b"
integrity sha512-cp5KCRe0slOVMwG4iP2Z4UajQkjryRTiFskZ5H7Q3X9R5voM8+DAhiDcIW88GL9NxqyUrAJOjmKdeLK2vM+bdA==
dependencies:
"@sentry/types" "7.100.1"
"@sentry/types" "7.102.0"
"@sinclair/typebox@^0.24.1":
version "0.24.40"
@ -11933,18 +11933,18 @@ send@0.17.2:
"@sentry/utils" "5.30.0"
tslib "^1.9.3"
"sentrybrowser@npm:@sentry/browser@7.100.1":
version "7.100.1"
resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.100.1.tgz#146ffca94cc187ecbf49915ef3100f6037316110"
integrity sha512-IxHQ08ixf0bmaWpe4yt1J4UUsOpg02fxax9z3tOQYXw5MSzz5pDXn8M8DFUVJB3wWuyXhHXTub9yD3VIP9fnoA==
"sentrybrowser@npm:@sentry/browser@7.102.0":
version "7.102.0"
resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.102.0.tgz#335f51d01aabf8c4d2abc871855f9c2d19f8f70d"
integrity sha512-hIggcMnojIbWhbmlRfkykHmy6n7pjug0AHfF19HRUQxAx9KJfMH5YdWvohov0Hb9fS+jdvqgE+/4AWbEeXQrHw==
dependencies:
"@sentry-internal/feedback" "7.100.1"
"@sentry-internal/replay-canvas" "7.100.1"
"@sentry-internal/tracing" "7.100.1"
"@sentry/core" "7.100.1"
"@sentry/replay" "7.100.1"
"@sentry/types" "7.100.1"
"@sentry/utils" "7.100.1"
"@sentry-internal/feedback" "7.102.0"
"@sentry-internal/replay-canvas" "7.102.0"
"@sentry-internal/tracing" "7.102.0"
"@sentry/core" "7.102.0"
"@sentry/replay" "7.102.0"
"@sentry/types" "7.102.0"
"@sentry/utils" "7.102.0"
serialize-javascript@^2.1.2:
version "2.1.2"