Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
a03d45be00
commit
fb05cd5e49
|
|
@ -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.'),
|
||||
|
|
|
|||
|
|
@ -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: {
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -190,7 +190,7 @@
|
|||
}
|
||||
|
||||
@mixin dropdown-item-hover {
|
||||
background-color: $gray-darker;
|
||||
background-color: $gray-50;
|
||||
color: $gl-text-color;
|
||||
outline: 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -607,7 +607,7 @@
|
|||
}
|
||||
|
||||
.sidebarblock {
|
||||
background: $gray-darker;
|
||||
background: $gray-50;
|
||||
padding: $gl-padding-12 $gl-padding-24;
|
||||
border-radius: $gl-border-radius-large;
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@
|
|||
|
||||
&.cur {
|
||||
@include gl-focus;
|
||||
background-color: $gray-darker;
|
||||
background-color: $gray-50;
|
||||
color: $gl-text-color;
|
||||
|
||||
small {
|
||||
|
|
|
|||
|
|
@ -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.')
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -0,0 +1 @@
|
|||
0c07c0a916056fd73717c65348dcefd31deffc1bd291bf938ebee41ec23bf919
|
||||
|
|
@ -0,0 +1 @@
|
|||
10f2898e5a02425aca29e3fde273fc96ca3a862d681f05d777c696e3a1aca5ad
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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**.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
2559
doc/user/markdown.md
2559
doc/user/markdown.md
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 |
|
|
@ -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.
|
||||
|
||||

|
||||

|
||||
|
||||
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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
||||

|
||||
|
||||
## 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**.
|
||||
|
||||

|
||||
|
||||
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).
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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 ""
|
||||
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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', () => {
|
||||
|
|
|
|||
|
|
@ -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', () => {
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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|
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Reference in New Issue