Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2024-05-20 21:18:21 +00:00
parent a03d45be00
commit fb05cd5e49
54 changed files with 1507 additions and 1396 deletions

View File

@ -29,8 +29,8 @@ export default {
i18n: {
[formType.new]: { title: s__('Board|Create new board'), btnText: s__('Board|Create board') },
[formType.delete]: { title: s__('Board|Delete board'), btnText: __('Delete') },
[formType.edit]: { title: s__('Board|Edit board'), btnText: __('Save changes') },
scopeModalTitle: s__('Board|Board scope'),
[formType.edit]: { title: s__('Board|Configure board'), btnText: __('Save changes') },
scopeModalTitle: s__('Board|Board configuration'),
cancelButtonText: __('Cancel'),
deleteErrorMessage: s__('Board|Failed to delete board. Please try again.'),
saveErrorMessage: __('Unable to save your changes. Please try again.'),

View File

@ -16,7 +16,7 @@ export default {
inject: ['canAdminList'],
computed: {
buttonText() {
return this.canAdminList ? s__('Boards|Edit board') : s__('Boards|View scope');
return this.canAdminList ? s__('Board|Configure board') : s__('Board|Board configuration');
},
},
methods: {

View File

@ -294,7 +294,7 @@ export default class CreateMergeRequestDropdown {
}
setLoading(loading) {
this.createMergeRequestLoading.classList.toggle('gl-display-none', !loading);
this.createMergeRequestLoading.classList.toggle('gl-hidden', !loading);
}
disableCreateAction() {
@ -588,10 +588,10 @@ export default class CreateMergeRequestDropdown {
setUnavailableButtonState(isLoading = true) {
if (isLoading) {
this.unavailableButtonSpinner.classList.remove('gl-display-none');
this.unavailableButtonSpinner.classList.remove('gl-hidden');
this.unavailableButtonText.textContent = __('Checking branch availability...');
} else {
this.unavailableButtonSpinner.classList.add('gl-display-none');
this.unavailableButtonSpinner.classList.add('gl-hidden');
this.unavailableButtonText.textContent = __('New branch unavailable');
}
}

View File

@ -24,7 +24,7 @@ export default {
<li
v-if="issue.upvotes"
v-gl-tooltip
class="gl-display-none gl-sm-display-block"
class="gl-hidden gl-sm-display-block"
:title="$options.i18n.upvotes"
data-testid="issuable-upvotes"
>
@ -34,7 +34,7 @@ export default {
<li
v-if="issue.downvotes"
v-gl-tooltip
class="gl-display-none gl-sm-display-block"
class="gl-hidden gl-sm-display-block"
:title="$options.i18n.downvotes"
data-testid="issuable-downvotes"
>
@ -44,7 +44,7 @@ export default {
<li
v-if="issue.mergeRequestsCount"
v-gl-tooltip
class="gl-display-none gl-sm-display-block"
class="gl-hidden gl-sm-display-block"
:title="__('Related merge requests')"
data-testid="merge-requests"
>

View File

@ -38,11 +38,7 @@ export default {
<template>
<div class="gl-border-b gl-pb-3 gl-display-flex gl-align-items-flex-start">
<!-- eslint-disable @gitlab/vue-require-i18n-attribute-strings -->
<img
:src="serviceDeskCalloutSvgPath"
alt=""
class="gl-display-none gl-sm-display-block gl-p-5"
/>
<img :src="serviceDeskCalloutSvgPath" alt="" class="gl-hidden gl-sm-display-block gl-p-5" />
<!-- eslint-enable @gitlab/vue-require-i18n-attribute-strings -->
<div class="gl-mt-3 gl-ml-3">
<h5>{{ $options.i18n.infoBannerTitle }}</h5>

View File

@ -416,7 +416,7 @@ export default {
:title="editTooltip"
:aria-label="$options.i18n.editTitleAndDescription"
:aria-keyshortcuts="editShortcutKey"
class="js-issuable-edit gl-display-none! gl-md-display-block!"
class="js-issuable-edit !gl-hidden gl-md-display-block!"
data-testid="edit-button"
@click="edit"
>
@ -428,7 +428,7 @@ export default {
id="new-actions-header-dropdown"
ref="issuableActionsDropdownDesktop"
v-gl-tooltip="showDropdownTooltip"
class="gl-display-none gl-md-display-inline-flex!"
class="gl-hidden gl-md-display-inline-flex!"
icon="ellipsis_v"
category="tertiary"
placement="left"

View File

@ -130,7 +130,7 @@ export default {
lineSeparator.classList.toggle('gl-border-b-0', !isSummaryTab);
itemsToHide.forEach(function hide(item) {
item.classList.toggle('gl-display-none', !isSummaryTab);
item.classList.toggle('gl-hidden', !isSummaryTab);
});
editButton?.classList.toggle('gl-md-display-block!', isSummaryTab);

View File

@ -87,7 +87,7 @@ export default {
>
<gl-badge :variant="statusVariant">
<gl-icon :name="statusIcon" />
<span class="gl-display-none gl-sm-display-block gl-ml-2">{{ statusText }}</span>
<span class="gl-hidden gl-sm-display-block gl-ml-2">{{ statusText }}</span>
</gl-badge>
<confidentiality-badge
v-if="isConfidential"

View File

@ -184,7 +184,7 @@ pre {
hr {
margin: 1.5rem 0;
border-top: 1px solid $gray-darker;
border-top: 1px solid $gray-50;
}
.str-truncated {
@ -332,7 +332,7 @@ li.note {
margin-bottom: $gl-padding;
hr {
border-color: $gray-darker;
border-color: $gray-50;
}
}

View File

@ -103,7 +103,7 @@ $diff-file-header: 41px;
}
.image {
background: $gray-darker;
background: $gray-50;
text-align: center;
padding: 30px;
@ -304,7 +304,7 @@ $diff-file-header: 41px;
.view-modes {
padding: 10px;
text-align: center;
background: $gray-darker;
background: $gray-50;
ul,
li {

View File

@ -190,7 +190,7 @@
}
@mixin dropdown-item-hover {
background-color: $gray-darker;
background-color: $gray-50;
color: $gl-text-color;
outline: 0;
}

View File

@ -102,7 +102,7 @@
&.image_file,
&.audio,
&.video {
background: $gray-darker;
background: $gray-50;
text-align: center;
padding: 30px;
@ -122,13 +122,13 @@
}
&.blob-no-preview {
background: $gray-darker;
background: $gray-50;
text-shadow: 0 1px 2px $white;
padding: 100px 0;
}
&.logs {
background: $gray-darker;
background: $gray-50;
max-height: 700px;
overflow-y: auto;
@ -299,7 +299,7 @@ span.idiff {
overflow: auto;
.file-container {
background-color: $gray-darker;
background-color: $gray-50;
display: flex;
height: 100%;
align-items: center;
@ -510,7 +510,7 @@ span.idiff {
.tr {
display: flex;
border-bottom: 1px solid $gray-darker;
border-bottom: 1px solid $gray-50;
&.last-row {
border-bottom: 0;

View File

@ -6,14 +6,14 @@ html {
body {
&.board-card-content {
background-color: $gray-darker;
background-color: $gray-50;
.content-wrapper {
padding: 0;
.container-fluid,
.container-limited {
background-color: $gray-darker;
background-color: $gray-50;
}
}
}

View File

@ -42,7 +42,7 @@
@include clearfix;
padding: 10px 0;
border-bottom: 1px solid $gray-darker;
border-bottom: 1px solid $gray-50;
display: block;
margin: 0;

View File

@ -1,14 +1,14 @@
.popup {
@include triangle(
$gray-lighter,
$gray-darker,
$gray-50,
$popup-triangle-size,
$popup-triangle-border-size
);
padding: $gl-padding;
background-color: $gray-lighter;
border: 1px solid $gray-darker;
border: 1px solid $gray-50;
border-radius: $gl-border-radius-base;
box-shadow: 0 5px 8px $popup-box-shadow-color;
position: relative;

View File

@ -607,7 +607,7 @@
}
.sidebarblock {
background: $gray-darker;
background: $gray-50;
padding: $gl-padding-12 $gl-padding-24;
border-radius: $gl-border-radius-large;

View File

@ -93,7 +93,6 @@ $gray-light: $gray-10 !default;
$gray-lighter: lighten($gray-50, 4) !default;
$gray-normal: lighten($gray-50, 2) !default;
$gray-dark: darken($gray-light, $darken-dark-factor) !default;
$gray-darker: $gray-50 !default;
$t-white-a-02: rgba(255, 255, 255, 0.02) !default;
$t-white-a-04: rgba(255, 255, 255, 0.04) !default;

View File

@ -99,17 +99,17 @@ $conflict-colors: (
none_line_head_neutral : $gray-normal,
none_button_head_neutral : $gray-normal,
none_header_head_chosen : $gray-darker,
none_line_head_chosen : $gray-darker,
none_button_head_chosen : $gray-darker,
none_header_head_chosen : $gray-100,
none_line_head_chosen : $gray-100,
none_button_head_chosen : $gray-100,
none_header_origin_neutral : $gray-normal,
none_line_origin_neutral : $gray-normal,
none_button_origin_neutral : $gray-normal,
none_header_origin_chosen : $gray-darker,
none_line_origin_chosen : $gray-darker,
none_button_origin_chosen : $gray-darker,
none_header_origin_chosen : $gray-100,
none_line_origin_chosen : $gray-100,
none_button_origin_chosen : $gray-100,
none_header_not_chosen : $gray-light,
none_line_not_chosen : $gray-light

View File

@ -259,7 +259,7 @@
&:hover,
&:focus {
background-color: var(--ide-dropdown-btn-hover-background, $gray-darker) !important;
background-color: var(--ide-dropdown-btn-hover-background, $gray-50) !important;
border-color: var(--ide-dropdown-btn-hover-border, $gray-200) !important;
}
}
@ -327,7 +327,7 @@
li button:not(.disable-hover):hover,
li button:not(.disable-hover):focus,
li button.is-focused {
background-color: var(--ide-dropdown-hover-background, $gray-darker);
background-color: var(--ide-dropdown-hover-background, $gray-50);
color: var(--ide-text-color, $gl-text-color);
}
}

View File

@ -223,7 +223,7 @@ $ide-commit-header-height: 48px;
}
.file-container {
background-color: var(--ide-empty-state-background, $gray-darker);
background-color: var(--ide-empty-state-background, $gray-50);
display: flex;
height: 100%;
align-items: center;

View File

@ -4,7 +4,6 @@ $gray-light: lighten($gray-10, 2);
$gray-lighter: darken($gray-50, 4);
$gray-normal: $gray-50;
$gray-dark: darken($gray-100, 2);
$gray-darker: darken($gray-200, 2);
// Used for border and background in a couple instances where inverting between modes is desirable
// once migrated to suitable color values this can be removed

View File

@ -58,7 +58,7 @@
&.cur {
@include gl-focus;
background-color: $gray-darker;
background-color: $gray-50;
color: $gl-text-color;
small {

View File

@ -15,7 +15,7 @@
.create-mr-dropdown-wrap.d-inline-block.full-width-mobile.js-create-mr{ data: { project_path: @project.full_path, project_id: @project.id, can_create_path: can_create_path, create_mr_path: default_create_mr_path, create_branch_path: create_branch_path, refs_path: refs_path, is_confidential: can_create_confidential_merge_request?.to_s } }
.btn-group.unavailable
= render Pajamas::ButtonComponent.new(button_options: { disabled: 'disabled' }) do
= gl_loading_icon(inline: true, css_class: 'js-create-mr-spinner gl-button-icon gl-display-none')
= gl_loading_icon(inline: true, css_class: 'js-create-mr-spinner gl-button-icon gl-hidden')
%span.text
= _('Checking branch availability…')
@ -23,7 +23,7 @@
.btn-group.available.hidden
= render Pajamas::ButtonComponent.new(variant: :confirm,
button_options: { class: 'js-create-merge-request', data: { action: data_action, **tracking_data } }) do
= gl_loading_icon(inline: true , css_class: 'js-create-mr-spinner js-spinner gl-display-none')
= gl_loading_icon(inline: true , css_class: 'js-create-mr-spinner js-spinner gl-hidden')
= value
= render Pajamas::ButtonComponent.new(variant: :confirm, icon: 'chevron-down', button_options: { class: 'js-dropdown-toggle dropdown-toggle create-merge-request-dropdown-toggle', data: { 'dropdown-trigger': '#create-merge-request-dropdown', display: 'static' } })
@ -72,5 +72,5 @@
= create_mr_text
- if can_create_confidential_merge_request?
%p.gl-text-orange-500.gl-font-sm.js-exposed-info-warning.gl-display-none
%p.gl-text-orange-500.gl-font-sm.js-exposed-info-warning.gl-hidden
= _('This may expose confidential information as the selected fork is in another namespace that can have other members.')

View File

@ -0,0 +1,19 @@
# frozen_string_literal: true
class IndexSbomOccurrencesOnComponentVersionIdAndTraversalIds < Gitlab::Database::Migration[2.2]
INDEX_NAME = 'index_unarchived_occurrences_on_version_id_and_traversal_ids'
milestone '17.0'
disable_ddl_transaction!
def up
add_concurrent_index :sbom_occurrences, [:component_version_id, :traversal_ids],
where: 'archived = false',
name: INDEX_NAME
end
def down
remove_concurrent_index_by_name :sbom_occurrences, INDEX_NAME
end
end

View File

@ -0,0 +1,19 @@
# frozen_string_literal: true
class IndexSbomOccurrencesForAggregations < Gitlab::Database::Migration[2.2]
INDEX_NAME = 'index_unarchived_sbom_occurrences_for_aggregations'
milestone '17.0'
disable_ddl_transaction!
def up
add_concurrent_index :sbom_occurrences, [:traversal_ids, :component_id, :component_version_id],
where: 'archived = false',
name: INDEX_NAME
end
def down
remove_concurrent_index_by_name :sbom_occurrences, INDEX_NAME
end
end

View File

@ -0,0 +1 @@
0c07c0a916056fd73717c65348dcefd31deffc1bd291bf938ebee41ec23bf919

View File

@ -0,0 +1 @@
10f2898e5a02425aca29e3fde273fc96ca3a862d681f05d777c696e3a1aca5ad

View File

@ -27637,6 +27637,10 @@ CREATE INDEX index_topics_total_projects_count ON topics USING btree (total_proj
CREATE UNIQUE INDEX index_trending_projects_on_project_id ON trending_projects USING btree (project_id);
CREATE INDEX index_unarchived_occurrences_on_version_id_and_traversal_ids ON sbom_occurrences USING btree (component_version_id, traversal_ids) WHERE (archived = false);
CREATE INDEX index_unarchived_sbom_occurrences_for_aggregations ON sbom_occurrences USING btree (traversal_ids, component_id, component_version_id) WHERE (archived = false);
CREATE UNIQUE INDEX index_uniq_ci_runners_on_token ON ci_runners USING btree (token);
CREATE UNIQUE INDEX index_uniq_ci_runners_on_token_encrypted ON ci_runners USING btree (token_encrypted);

View File

@ -15,7 +15,7 @@ participating-stages: []
## Summary
GitLab CI/CD, [integrated into GitLab in 2015](https://about.gitlab.com/releases/2015/09/22/gitlab-8-0-released/),
is a [crucial]((https://about.gitlab.com/blog/2017/09/27/gitlab-leader-continuous-integration-forrester-wave/))
is a [crucial](https://about.gitlab.com/blog/2017/09/27/gitlab-leader-continuous-integration-forrester-wave/)
yet resource-intensive component that has experienced exponential growth, surpassing 1 billion builds by 2021.
Despite its evolution, the CI/CD data storage architecture remains largely unchanged since 2012,

View File

@ -113,7 +113,11 @@ and displays it to users, providing information about ongoing incidents without
extra effort from your team:
```mermaid
%%{init: { "fontFamily": "GitLab Sans" }}%%
graph TB
accTitle: Understand your status page
accDescr: How GitLab fetches, formats, and displays incident data
subgraph GitLab Instance
issues(issue updates) -- trigger --> middleware(Background job: JSON generation)
end

View File

@ -42,7 +42,10 @@ The following chart should help you determine your subscription model. Select
the list item to go to the respective help page.
```mermaid
%%{init: { "fontFamily": "GitLab Sans" }}%%
graph TD
accTitle: My subscription
accDescr: Determine your subscription model and see its help page
A(Is your user account on GitLab.com?)
A --> B(Yes)

View File

@ -50,7 +50,11 @@ disable the automated scheduling to
Similar to membership, iterations cascade down your group, subgroup, and project hierarchy. If your team has multiple groups and projects, create the iteration cadence in the top-most shared group:
```mermaid
%%{init: { "fontFamily": "GitLab Sans" }}%%
graph TD
accTitle: Iteration cadence
accDescr: Identify the group you should create an iteration cadence in
Group --> SubgroupA --> Project1
Group --> SubgroupB --> Project2
Group --> IterationCadence
@ -88,7 +92,7 @@ the "Open" list into iteration lists to schedule them for upcoming iterations.
To visualize the workflow for issues in the current iteration, create another issue board called
"Current Iteration." When you're creating the board:
1. Select **Edit board**.
1. Select **Configure board** (**{settings}**).
1. Next to **Iteration**, select **Edit**.
1. From the dropdown list, select **Current iteration**.
1. Select **Save changes**.

View File

@ -35,7 +35,11 @@ Each time you push a change, Git records it as a unique *commit*. These commits
the history of when and how a file changed, and who changed it.
```mermaid
%%{init: { "fontFamily": "GitLab Sans" }}%%
graph LR
accTitle: Repository commit history
accDescr: Flowchart showing linear changes to a repository history
subgraph Repository commit history
direction LR
A(Author: Alex<br>Date: 3 Jan at 1PM<br>Commit message: Added sales figures<br> Commit ID: 123abc12) ---> B
@ -53,7 +57,11 @@ of a repository are in a default branch. To make changes, you:
1. When you're ready, *merge* your branch into the default branch.
```mermaid
%%{init: { "fontFamily": "GitLab Sans" }}%%
flowchart LR
accTitle: Use branches in Git
accDescr: The flow of creating, then using, a branch in Git
subgraph Default branch
A[Commit] --> B[Commit] --> C[Commit] --> D[Commit]
end

View File

@ -49,6 +49,7 @@ standardize labels, boards, and iterations across multiple projects:
flowchart TD
accTitle: GitLab inheritance model diagram
accDescr: Shows how groups, projects, issues, labels, milestones, iterations, tasks, and epics relate to one another in GitLab
Group -->|Contains| Project
Group -->|Contains| Epics
Group -->|Contains| Labels
@ -224,7 +225,11 @@ GitLab is extensible to support different flavors of backlog management.
For this tutorial, we will structure our deliverables in the following way:
```mermaid
%%{init: { "fontFamily": "GitLab Sans" }}%%
flowchart TD
accTitle: Deliverables structure
accDescr: Flowchart of features (epics) to job stories (issues) to implementation steps (tasks)
Epic["Feature (Epic)"] --> Issue["Job Story (Issue)"]
Issue --> Task["Implementation Step (Task)"]
```
@ -258,10 +263,14 @@ Here's an example of breaking a feature into vertically sliced job stories based
journey:
```mermaid
%%{init: { "fontFamily": "GitLab Sans" }}%%
flowchart TD
Epic["Epic: When using the application, I need to create an <br> account, so that I can use the application features"] --> Issue1["Issue: When creating my account, I need to specify my email address,<br> so that I can receive future updates from the application"]
Epic --> Issue2["Issue: When creating my account, I need to <br>specify a password, so that my account remains secure"]
Epic --> Issue3["Issue: When creating my account and entering the required info, I need to <br>finalize creating my account, so that I can log in"]
accTitle: Slicing a feature
accDescr: Use the end user's journey to identify slices of work to be completed in iterations
Epic["Epic: When using the application,<br>I need to create an account,<br> so I can use the application features"] --> Issue1["Issue: When creating my account,<br> I need to specify my email address,<br> so I can receive future updates from the application"]
Epic --> Issue2["Issue: When creating my account,<br> I need to specify a password,<br> so my account remains secure"]
Epic --> Issue3["Issue: When creating my account<br> and entering the required info,<br> I need to finalize creating my account,<br> so I can log in"]
```
You've taken the feature of an unmodified account sign-up for an application and broke it down into
@ -275,12 +284,16 @@ After you have broken down a feature into stories, you can further break down th
implementation steps:
```mermaid
%%{init: { "fontFamily": "GitLab Sans" }}%%
flowchart TD
Issue1["Issue: When creating my account, I need to specify my email address,<br> so that I can receive future updates from the application"]
Issue1 --> Task2["Task: Backend - Validate email formatting"]
Issue1 --> Task3["Task: Backend - API endpoint to accept POST request from client"]
Issue1 --> Task4["Task: Frontend - Display email input"]
Issue1 --> Task5["Task: Frontend - Display error message when validation fails"]
accTitle: Break the story down further
accDescr: Split apart a story into smaller steps
Issue1["Issue: When creating my account,<br> I need to specify my email address,<br> so I can receive future updates from the application"]
Issue1 --> Task2["Task: Backend<br> Validate email formatting"]
Issue1 --> Task3["Task: Backend<br> API endpoint to accept<br> POST request from client"]
Issue1 --> Task4["Task: Frontend<br> Display email input"]
Issue1 --> Task5["Task: Frontend<br> Display error message when validation fails"]
```
### Set up a release planning board

View File

@ -141,8 +141,7 @@ To use this feature:
- Belong to at least one group with the [experiment and beta features setting](ai_features_enable.md#turn-on-beta-and-experimental-features) enabled.
- Have sufficient permissions to view the CI/CD job.
When the feature is available, the "Root cause analysis" button will appears on
a failed CI/CD job. Selecting this button generates an analysis regarding the
When the feature is available, the "Troubleshoot" button displays on failed CI/CD jobs. Selecting this option generates an analysis regarding the
reason for the failure.
## Summarize an issue with Issue description generation

View File

@ -212,7 +212,7 @@ Prerequisites:
To edit the scope of an epic board:
1. In the upper-right corner, select **Edit board**.
1. In the upper-right corner, select **Configure board** (**{settings}**).
1. Optional:
- Edit the board's title.
- Show or hide the Open and Closed columns.

View File

@ -41,7 +41,10 @@ The possible relationships between epics and issues are:
- An epic is the parent of one or more [child epics](manage_epics.md#multi-level-child-epics). Ultimate only.
```mermaid
%%{init: { "fontFamily": "GitLab Sans" }}%%
graph TD
accTitle: Epics and issues
accDescr: How issues and child epics relate to parent epics
Parent_epic --> Issue1
Parent_epic --> Child_epic
Child_epic --> Issue2

View File

@ -28,7 +28,10 @@ portfolio management, see
With epics, you can achieve the following hierarchy:
```mermaid
%%{init: { "fontFamily": "GitLab Sans" }}%%
graph TD
accTitle: Hierarchies with epics
accDescr: Use epics to link projects, issues, and groups
Group_epic --> Project1_Issue1
Group_epic --> Project1_Issue2
Group_epic --> Project2_Issue1
@ -48,6 +51,7 @@ Image below was generated with the following Mermaid code.
Attached as an image because a rendered diagram doesn't look clear on the docs page.
```mermaid
%%{init: { "fontFamily": "GitLab Sans" }}%%
classDiagram
direction TD
class Epic

View File

@ -142,7 +142,7 @@ group overage claim attribute in the SAML response. Then group memberships must
The [Graph API endpoint](https://learn.microsoft.com/en-us/graph/api/user-list-transitivememberof?view=graph-rest-1.0&tabs=http#http-request) supports only a
[user object ID](https://learn.microsoft.com/en-us/partner-center/find-ids-and-domain-names#find-the-user-object-id) or
[userPrincipalName](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/plan-connect-userprincipalname#what-is-userprincipalname)
as the [configured](../../../user/group/saml_sso/index.md#azure) Unique User Identifier (Name identifier) attribute.
as the [configured](../../../user/group/saml_sso/index.md#azure) Unique User Identifier (Name identifier) attribute.
When the integration processes Group Sync, only Group Links configured with
group unique identifiers (like `12345678-9abc-def0-1234-56789abcde`) are supported.
@ -249,6 +249,7 @@ For example, in the following diagram:
not yet signed in.
```mermaid
%%{init: { "fontFamily": "GitLab Sans" }}%%
graph TB
subgraph SAML users
SAMLUserA[Sidney Jones]
@ -274,6 +275,7 @@ graph TB
```
```mermaid
%%{init: { "fontFamily": "GitLab Sans" }}%%
graph TB
subgraph GitLab users
GitLabUserA[Sidney Jones]
@ -283,9 +285,9 @@ graph TB
end
subgraph GitLab groups
GitLabGroupA["Group A (SAML configured)"] --> GitLabGroupB["Group B (SAML Group Link not configured)"]
GitLabGroupA --> GitLabGroupC["Group C (SAML Group Link configured)"]
GitLabGroupA --> GitLabGroupD["Group D (SAML Group Link configured)"]
GitLabGroupA["Group A<br> (SAML configured)"] --> GitLabGroupB["Group B<br> (SAML Group Link not configured)"]
GitLabGroupA --> GitLabGroupC["Group C<br> (SAML Group Link configured)"]
GitLabGroupA --> GitLabGroupD["Group D<br> (SAML Group Link configured)"]
end
GitLabGroupB --> |Member|GitLabUserA
@ -308,9 +310,9 @@ graph TB
subgraph GitLab groups after Alex Garcia signs in
GitLabGroupA[Group A]
GitLabGroupA["Group A (SAML configured)"] --> GitLabGroupB["Group B (SAML Group Link not configured)"]
GitLabGroupA --> GitLabGroupC["Group C (SAML Group Link configured)"]
GitLabGroupA --> GitLabGroupD["Group D (SAML Group Link configured)"]
GitLabGroupA["Group A<br> (SAML configured)"] --> GitLabGroupB["Group B<br> (SAML Group Link not configured)"]
GitLabGroupA --> GitLabGroupC["Group C<br> (SAML Group Link configured)"]
GitLabGroupA --> GitLabGroupD["Group D<br> (SAML Group Link configured)"]
end
GitLabGroupB --> |Member|GitLabUserA

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

View File

@ -277,15 +277,15 @@ An issue board can be associated with a [milestone](milestones/index.md),
which automatically filter the board issues accordingly.
This allows you to create unique boards according to your team's need.
![Create scoped board](img/issue_board_creation_v13_6.png)
![Create scoped board](img/issue_board_creation_v17_1.png)
You can define the scope of your board when creating it or by selecting the **Edit board** button.
You can define the scope of your board when creating it or by selecting the **Configure board** (**{settings}**) button.
After a milestone, iteration, assignee, or weight is assigned to an issue board, you can no longer
filter through these in the search bar. To do that, you need to remove the desired scope
(for example, milestone, assignee, or weight) from the issue board.
If you don't have editing permission in a board, you're still able to see the configuration by
selecting **View scope**.
selecting **Board configuration** (**{settings}**).
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i>
Watch a [video presentation](https://youtu.be/m5UTNCSqaDk) of

View File

@ -35,7 +35,11 @@ Indirect membership can be inherited, shared, or inherited shared.
| [Inherited shared](../../group/manage.md#share-a-group-with-another-group) | The user is a member of a parent of a group or project invited to the current group or project. |
```mermaid
%%{init: { "fontFamily": "GitLab Sans" }}%%
flowchart RL
accTitle: Membership types
accDescr: Describes membership types and their inheritance
subgraph Group A
A(Direct member)
B{{Shared member}}
@ -397,7 +401,10 @@ In the following example, `User` is a:
- Indirect inherited member of `subsubgroup-2` and `subsubgroup-3`.
```mermaid
%%{init: { "fontFamily": "GitLab Sans" }}%%
graph TD
accTitle: Diagram of group inheritance
accDescr: User inheritance, both direct and indirect through subgroups
classDef user stroke:green,color:green;
root --> subgroup --> subsubgroup

View File

@ -10,17 +10,21 @@ DETAILS:
**Tier:** Free, Premium, Ultimate
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
You can estimate and track the time you spend on [issues](issues/index.md)
and [merge requests](merge_requests/index.md).
> - Time tracking for tasks [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/438577) in GitLab 17.0.
Then you can [view a report](#view-a-time-tracking-report) that shows totals over time.
You can estimate and track the time you spend on an item, such as:
- [Issue](issues/index.md)
- [Task](../tasks.md)
- [Merge request](merge_requests/index.md)
Then you can [view a report](#view-an-items-time-tracking-report) that shows totals over time.
Use time tracking for these tasks:
- Record the time spent working on an issue or a merge request.
- Add or update an estimate of the total time to complete an issue or a merge
request.
- View a breakdown of time spent working on an issue or a merge request.
- Record the time spent working on an item.
- Add or update an estimate of the total time to complete an item.
- View a breakdown of time spent working on an item.
You don't have to indicate an estimate to enter the time spent, and vice versa.
@ -28,13 +32,13 @@ To enter and remove time tracking data, you must use [quick actions](quick_actio
Type all quick actions on their own lines.
If you use any quick action more than once in a single comment, only its last occurrence is applied.
You can see the data about time tracking on the right sidebar in issues and merge requests:
You can see the data about time tracking on the right sidebar:
![Time tracking in the sidebar](img/time_tracking_sidebar_v13_12.png)
## Estimates
The estimate is designed to show the total time needed to complete an issue or merge request.
The estimate is designed to show the total time needed to complete an item.
You can see the estimated time remaining when you hover over the time tracking information in the right sidebar.
@ -45,6 +49,7 @@ You can see the estimated time remaining when you hover over the time tracking i
Prerequisites:
- In issues, you must have at least the Reporter role for the project.
- In tasks, you must have at least the Reporter role for the project.
- In merge requests, you must have at least the Developer role for the project.
To enter an estimate, use the `/estimate` [quick action](quick_actions.md), followed by the time.
@ -53,7 +58,7 @@ For example, if you need to enter an estimate of 1 month, 2 weeks, 3 days, 4 hou
type `/estimate 1mo 2w 3d 4h 5m`.
Check the [time units you can use](#available-time-units).
An issue or a merge request can have only one estimate.
An item can have only one estimate.
Every time you enter a new time estimate, it overwrites the previous value.
### Remove an estimate
@ -61,6 +66,7 @@ Every time you enter a new time estimate, it overwrites the previous value.
Prerequisites:
- In issues, you must have at least the Reporter role for the project.
- In tasks, you must have at least the Reporter role for the project.
- In merge requests, you must have at least the Developer role for the project.
To remove an estimate entirely, use the `/remove_estimate` [quick action](quick_actions.md).
@ -70,9 +76,9 @@ To remove an estimate entirely, use the `/remove_estimate` [quick action](quick_
As you work, you can log the time you've spent.
Every new time spent entry is added to the current total time spent for the
issue or the merge request.
issue, task, or the merge request.
The total amount of time spent on an issue or merge request cannot exceed a year.
The total amount of time spent on an issue, task, or merge request cannot exceed a year.
### Add time spent
@ -96,7 +102,7 @@ To add a time entry using the user interface:
1. Select **Save**.
The **Spent** total in the sidebar is updated and you can view all entries in a [time tracking report](#view-a-time-tracking-report).
The **Spent** total in the sidebar is updated and you can view all entries in a [time tracking report](#view-an-items-time-tracking-report).
#### Using a quick action
@ -106,7 +112,7 @@ For example, if you need
to log 1 month, 2 weeks, 3 days, 4 hours, and 5 minutes, type `/spend 1mo 2w 3d 4h 5m`.
Check the [time units you can use](#available-time-units).
To add a [time tracking report](#view-a-time-tracking-report) entry with a note, create a comment
To add a [time tracking report](#view-an-items-time-tracking-report) entry with a note, create a comment
with a description and the quick action.
It then shows in the time tracking report **Summary/Notes** column. For example:
@ -156,20 +162,25 @@ Prerequisites:
To delete all the time spent at once, use the `/remove_time_spent` [quick action](quick_actions.md).
## View a time tracking report
## View an item's time tracking report
### For an issue or merge request
To view a time tracking report of time spent on an item:
To view a time tracking report of time spent on an issue or merge request:
- For an issue or merge request:
1. Go to an issue or a merge request.
1. In the right sidebar, select **Time tracking report**.
1. Go to an issue or a merge request.
1. In the right sidebar, select **Time tracking report**.
- For a task:
1. Go to a task.
1. In the right sidebar, select the time next to **Spent**.
![Time tracking report](img/time_tracking_report_v15_1.png)
The breakdown of spent time displayed is limited to a maximum of 100 entries.
### Global time tracking report
## Global time tracking report
DETAILS:
**Status**: Experiment
@ -182,7 +193,7 @@ On self-managed GitLab, by default this feature is not available. To make it ava
On GitLab.com, this feature is available. On GitLab Dedicated, this feature is not available.
This feature is not ready for production use.
View a report of time spent in issues and merge requests across all of GitLab.
View a report of time spent in issues, tasks, and merge requests across all of GitLab.
This feature is an [experiment](../../policy/experiment-beta-support.md).
If you find a bug, let us know in the [feedback issue](https://gitlab.com/gitlab-org/gitlab/-/issues/435222).

View File

@ -348,6 +348,12 @@ To add a task to an iteration:
1. Next to **Iteration**, select **Add to iteration**.
1. From the dropdown list, select the iteration to be associated with the task.
## Set time tracking
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/438577) in GitLab 17.0.
To set time tracking, refer to the [time tracking page](project/time_tracking.md)
## View task system notes
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/378949) in GitLab 15.7 [with a flag](../administration/feature_flags.md) named `work_items_mvc_2`. Disabled by default.

View File

@ -8831,9 +8831,6 @@ msgstr ""
msgid "Boards|Create new issue"
msgstr ""
msgid "Boards|Edit board"
msgstr ""
msgid "Boards|Edit list settings"
msgstr ""
@ -8867,16 +8864,16 @@ msgstr ""
msgid "Boards|View all blocking %{issuableType}s"
msgstr ""
msgid "Boards|View scope"
msgstr ""
msgid "Boards|You can add a new list to the board here"
msgstr ""
msgid "Board|Are you sure you want to delete this board?"
msgstr ""
msgid "Board|Board scope"
msgid "Board|Board configuration"
msgstr ""
msgid "Board|Configure board"
msgstr ""
msgid "Board|Create board"
@ -8888,9 +8885,6 @@ msgstr ""
msgid "Board|Delete board"
msgstr ""
msgid "Board|Edit board"
msgstr ""
msgid "Board|Enter board name"
msgstr ""
@ -29507,15 +29501,15 @@ msgstr ""
msgid "Jobs|Raw text search is not currently supported for the jobs filtered search feature. Please use the available search tokens."
msgstr ""
msgid "Jobs|Root cause analysis"
msgstr ""
msgid "Jobs|Stage"
msgstr ""
msgid "Jobs|There was a problem fetching the failed jobs."
msgstr ""
msgid "Jobs|Troubleshoot"
msgstr ""
msgid "Jobs|Use jobs to automate your tasks"
msgstr ""

View File

@ -63,7 +63,7 @@
"@gitlab/favicon-overlay": "2.0.0",
"@gitlab/fonts": "^1.3.0",
"@gitlab/svgs": "3.99.0",
"@gitlab/ui": "80.10.0",
"@gitlab/ui": "80.11.0",
"@gitlab/web-ide": "^0.0.1-dev-20240508140740",
"@mattiasbuelens/web-streams-adapter": "^0.1.0",
"@rails/actioncable": "7.0.8-1",

View File

@ -117,7 +117,7 @@ describe('BoardForm', () => {
});
it('displays board scope title', () => {
expect(findModal().attributes('title')).toBe('Board scope');
expect(findModal().attributes('title')).toBe('Board configuration');
});
it('does not display a form', () => {
@ -246,7 +246,7 @@ describe('BoardForm', () => {
});
it('shows a correct title about creating a board', () => {
expect(findModal().attributes('title')).toBe('Edit board');
expect(findModal().attributes('title')).toBe('Configure board');
});
it('passes correct primary action text and variant', () => {

View File

@ -17,14 +17,14 @@ describe('ConfigToggle', () => {
const findButton = () => wrapper.findComponent(GlButton);
it('renders a button with label `View scope` when `canAdminList` is `false`', () => {
it('renders a button with label `Board configuration` when `canAdminList` is `false`', () => {
wrapper = createComponent({ canAdminList: false });
expect(findButton().attributes('title')).toBe('View scope');
expect(findButton().attributes('title')).toBe('Board configuration');
});
it('renders a button with label `Edit board` when `canAdminList` is `true`', () => {
it('renders a button with label `Configure board` when `canAdminList` is `true`', () => {
wrapper = createComponent();
expect(findButton().element.title).toBe('Edit board');
expect(findButton().element.title).toBe('Configure board');
});
it('emits `showBoardModal` when button is clicked', () => {

View File

@ -93,7 +93,7 @@ describe('CreateMergeRequestDropdown', () => {
`('toggle loading spinner when loading is $loading', ({ loading, hasClass }) => {
dropdown.setLoading(loading);
expect(document.querySelector('.js-spinner').classList.contains('gl-display-none')).toEqual(
expect(document.querySelector('.js-spinner').classList.contains('gl-hidden')).toEqual(
hasClass,
);
});

View File

@ -107,6 +107,9 @@ requirements_management_test_reports:
sbom_component_versions:
index_sbom_component_versions_on_component_id_and_version:
- index_sbom_component_versions_on_component_id
sbom_occurrences:
index_unarchived_occurrences_on_version_id_and_traversal_ids:
- index_sbom_occurrences_on_component_version_id
search_namespace_index_assignments:
index_search_namespace_index_assignments_uniqueness_index_type:
- index_search_namespace_index_assignments_on_namespace_id

View File

@ -194,7 +194,7 @@ module ExceedQueryLimitHelpers
#{sections.join("\n\n")}
MSG
else
@recorder.log_message
query_log(@recorder).join("\n\n")
end
end
@ -348,7 +348,12 @@ RSpec::Matchers.define :exceed_all_query_limit do |expected|
include ExceedQueryLimitHelpers
match do |block|
verify_count(&block)
if block.is_a?(ActiveRecord::QueryRecorder)
@recorder = block
verify_count
else
verify_count(&block)
end
end
failure_message_when_negated do |actual|

View File

@ -1331,10 +1331,10 @@
resolved "https://registry.yarnpkg.com/@gitlab/svgs/-/svgs-3.99.0.tgz#85d2752787c3a87d40d5468a797e67c1e736a9fc"
integrity sha512-N1y2W8ti0Pw7N8UYUdcl7DQuIZfOcL0R85EzJlSgXLt+I0NdmX4s3CCqBV1g62ZDxLgfDqBfiLKLCcYz8JkJ8w==
"@gitlab/ui@80.10.0":
version "80.10.0"
resolved "https://registry.yarnpkg.com/@gitlab/ui/-/ui-80.10.0.tgz#3c748d3127197e1d576aee7546497286e169bdf9"
integrity sha512-SL/obWt6uMVEW1qYSBNaI8U1sekInuckDQbdRH5eo6sjICdlOljm0rTvYaH8hux188sIFhuLD7Ovl84UhF6PFg==
"@gitlab/ui@80.11.0":
version "80.11.0"
resolved "https://registry.yarnpkg.com/@gitlab/ui/-/ui-80.11.0.tgz#8bdaba3f31d5737d47f007488d95444fc0a42dad"
integrity sha512-NaVVNAYYFtnU90Wdhs1iJDVwOeRq5j6iG7QCxl4pEKvjdoVxU504rUUlp2YUmVzHBuDoZlaWIfvPi4p0hVO/9w==
dependencies:
"@floating-ui/dom" "1.4.3"
bootstrap-vue "2.23.1"