Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2025-02-06 09:14:20 +00:00
parent 5840f0543a
commit 6a15c083c5
286 changed files with 2910 additions and 1649 deletions

View File

@ -114,7 +114,7 @@ include:
- bundle exec gem list gitlab_quality-test_tooling
- |
section_start "failed-test-issues" "Report test failures"
if [ "$CREATE_RAILS_TEST_FAILURE_ISSUES" == "true" ]; then
if [[ "$CREATE_RAILS_TEST_FAILURE_ISSUES" == "true" ]] && [[ -n "$TEST_FAILURES_PROJECT_TOKEN" ]]; then
input_file="rspec/rspec-${CI_JOB_ID}.json"
# The actual failures will always be part of the retry report
@ -129,12 +129,12 @@ include:
--exclude-labels-for-search "QA,knapsack_report" \
--related-issues-file "rspec/${CI_JOB_ID}-failed-test-issues.json";
else
echoinfo "Not reporting test failures because \$CREATE_RAILS_TEST_FAILURE_ISSUES != 'true'"
echoinfo "Not reporting test failures because \$CREATE_RAILS_TEST_FAILURE_ISSUES != 'true' or TEST_FAILURES_PROJECT_TOKEN is not set"
fi
section_end "failed-test-issues"
- |
section_start "flaky-test-issues" "Report test flakiness"
if [ "$CREATE_RAILS_FLAKY_TEST_ISSUES" == "true" ]; then
if [[ "$CREATE_RAILS_FLAKY_TEST_ISSUES" == "true" ]] && [[ -n "$TEST_FAILURES_PROJECT_TOKEN" ]]; then
if [ -f "rspec/rspec-retry-${CI_JOB_ID}.json" ]; then
bundle exec flaky-test-issues \
--token "${TEST_FAILURES_PROJECT_TOKEN}" \
@ -144,43 +144,43 @@ include:
echoerr "Not reporting test flakiness because 'rspec/rspec-retry-${CI_JOB_ID}.json' is missing!"
fi
else
echoinfo "Not reporting test flakiness because \$CREATE_RAILS_FLAKY_TEST_ISSUES != 'true'"
echoinfo "Not reporting test flakiness because \$CREATE_RAILS_FLAKY_TEST_ISSUES != 'true' or TEST_FAILURES_PROJECT_TOKEN is not set"
fi
section_end "flaky-test-issues"
- |
section_start "slow-test-issues" "Report test slowness"
if [ "$CREATE_RAILS_SLOW_TEST_ISSUES" == "true" ]; then
if [[ "$CREATE_RAILS_SLOW_TEST_ISSUES" == "true" ]] && [[ -n "$TEST_FAILURES_PROJECT_TOKEN" ]]; then
bundle exec slow-test-issues \
--token "${TEST_FAILURES_PROJECT_TOKEN}" \
--project "gitlab-org/gitlab" \
--input-files "rspec/rspec-*.json" \
--related-issues-file "rspec/${CI_JOB_ID}-slow-test-issues.json";
else
echoinfo "Not reporting test slowness because \$CREATE_RAILS_SLOW_TEST_ISSUES != 'true'"
echoinfo "Not reporting test slowness because \$CREATE_RAILS_SLOW_TEST_ISSUES != 'true' or TEST_FAILURES_PROJECT_TOKEN is not set"
fi
section_end "slow-test-issues"
- |
section_start "slow-test-merge-request-report-note" "Report test slowness in MR note"
if [ "$ADD_SLOW_TEST_NOTE_TO_MERGE_REQUEST" == "true" ]; then
if [[ "$ADD_SLOW_TEST_NOTE_TO_MERGE_REQUEST" == "true" ]] && [[ -n "$TEST_SLOW_NOTE_PROJECT_TOKEN" ]]; then
bundle exec slow-test-merge-request-report-note \
--token "${TEST_SLOW_NOTE_PROJECT_TOKEN}" \
--project "gitlab-org/gitlab" \
--input-files "rspec/rspec-*.json" \
--merge_request_iid "$CI_MERGE_REQUEST_IID";
else
echoinfo "Not reporting test slowness in MR note because \$ADD_SLOW_TEST_NOTE_TO_MERGE_REQUEST != 'true'"
echoinfo "Not reporting test slowness in MR note because \$ADD_SLOW_TEST_NOTE_TO_MERGE_REQUEST != 'true' or TEST_SLOW_NOTE_PROJECT_TOKEN is not set"
fi
section_end "slow-test-merge-request-report-note"
- |
section_start "knapsack-report-issues" "Report test files close to timing out"
if [ "$ALLOW_KNAPSACK_REPORT_CREATE_ISSUES" == "true" ]; then
if [[ "$ALLOW_KNAPSACK_REPORT_CREATE_ISSUES" == "true" ]] && [[ -n "$KNAPSACK_REPORT_ISSUES_PROJECT_TOKEN" ]]; then
bundle exec knapsack-report-issues \
--token "${KNAPSACK_REPORT_ISSUES_PROJECT_TOKEN}" \
--project "gitlab-org/gitlab" \
--input-file knapsack/rspec*_report.json \
--expected-report knapsack/node_specs_expected_duration.json;
else
echoinfo "Not reporting test files close to timing out because \$ALLOW_KNAPSACK_REPORT_CREATE_ISSUES != 'true'"
echoinfo "Not reporting test files close to timing out because \$ALLOW_KNAPSACK_REPORT_CREATE_ISSUES != 'true' or KNAPSACK_REPORT_ISSUES_PROJECT_TOKEN is not set"
fi
section_end "knapsack-report-issues"
- tooling/bin/push_job_metrics || true

View File

@ -275,7 +275,6 @@ RSpec/BeEq:
- 'ee/spec/models/onboarding_spec.rb'
- 'ee/spec/models/product_analytics/funnel_spec.rb'
- 'ee/spec/models/project_feature_spec.rb'
- 'ee/spec/models/projects/all_branches_rule_spec.rb'
- 'ee/spec/models/projects/all_protected_branches_rule_spec.rb'
- 'ee/spec/models/push_rule_spec.rb'
- 'ee/spec/models/requirements_management/requirement_spec.rb'

View File

@ -596,7 +596,6 @@ RSpec/NamedSubject:
- 'ee/spec/models/product_analytics/panel_spec.rb'
- 'ee/spec/models/product_analytics/visualization_spec.rb'
- 'ee/spec/models/project_feature_spec.rb'
- 'ee/spec/models/projects/all_branches_rule_spec.rb'
- 'ee/spec/models/projects/all_protected_branches_rule_spec.rb'
- 'ee/spec/models/projects/target_branch_rule_spec.rb'
- 'ee/spec/models/protected_environment_spec.rb'

View File

@ -1 +1 @@
0d6c9b04da0dc111925ff7828b2ccf749266c2e8
12d49304c0163157cce8cf5aa46d5caf7384f976

View File

@ -645,7 +645,7 @@ gem 'spamcheck', '~> 1.3.0', feature_category: :insider_threat
gem 'gitaly', '~> 17.8.0', feature_category: :gitaly
# KAS GRPC protocol definitions
gem 'gitlab-kas-grpc', '~> 17.8.0', feature_category: :deployment_management
gem 'gitlab-kas-grpc', '~> 17.9.0.pre.rc2', feature_category: :deployment_management
# Lock the version before issues below are resolved:
# https://gitlab.com/gitlab-org/gitlab/-/issues/473169#note_2028352939

View File

@ -233,7 +233,7 @@
{"name":"gitlab-glfm-markdown","version":"0.0.27","platform":"x86_64-darwin","checksum":"ec6775054481b3e07a97d4be945fe41d043f89dc1fa1d95cdfc6a70b439ea0e4"},
{"name":"gitlab-glfm-markdown","version":"0.0.27","platform":"x86_64-linux-gnu","checksum":"ebcccc617db4f669cd2de900e6d31fae5de67acedeb178d242063e338cb57050"},
{"name":"gitlab-glfm-markdown","version":"0.0.27","platform":"x86_64-linux-musl","checksum":"77cf356f2a2fc496ec17206d68a6a1fe4f4d680bc1aac2206c32ee5393611a15"},
{"name":"gitlab-kas-grpc","version":"17.8.1","platform":"ruby","checksum":"fbb9cf7411d12a7dc491d688a80a1d4064bd92dfbbadce523a549b07d26226e6"},
{"name":"gitlab-kas-grpc","version":"17.9.0.pre.rc2","platform":"ruby","checksum":"b4572e47d0807e51c7a8f7a43d44a196ebea40ed073b8cb95f72d20044ea4482"},
{"name":"gitlab-labkit","version":"0.37.0","platform":"ruby","checksum":"d2dd0a60db2149a9a8eebf2975dc23f54ac3ceb01bdba732eb1b26b86dfffa70"},
{"name":"gitlab-license","version":"2.6.0","platform":"ruby","checksum":"2c1f8ae73835640ec77bf758c1d0c9730635043c01cf77902f7976e826d7d016"},
{"name":"gitlab-mail_room","version":"0.0.25","platform":"ruby","checksum":"223ce7c3c0797b6015eaa37147884e6ddc7be9a7ee90a424358c96bc18613b1a"},

View File

@ -745,7 +745,7 @@ GEM
nokogiri (~> 1, >= 1.10.8)
gitlab-glfm-markdown (0.0.27)
rb_sys (~> 0.9.109)
gitlab-kas-grpc (17.8.1)
gitlab-kas-grpc (17.9.0.pre.rc2)
grpc (~> 1.0)
gitlab-labkit (0.37.0)
actionpack (>= 5.0.0, < 8.1.0)
@ -2094,7 +2094,7 @@ DEPENDENCIES
gitlab-glfm-markdown (~> 0.0.21)
gitlab-housekeeper!
gitlab-http!
gitlab-kas-grpc (~> 17.8.0)
gitlab-kas-grpc (~> 17.9.0.pre.rc2)
gitlab-labkit (~> 0.37.0)
gitlab-license (~> 2.6)
gitlab-mail_room (~> 0.0.24)

View File

@ -233,7 +233,7 @@
{"name":"gitlab-glfm-markdown","version":"0.0.27","platform":"x86_64-darwin","checksum":"ec6775054481b3e07a97d4be945fe41d043f89dc1fa1d95cdfc6a70b439ea0e4"},
{"name":"gitlab-glfm-markdown","version":"0.0.27","platform":"x86_64-linux-gnu","checksum":"ebcccc617db4f669cd2de900e6d31fae5de67acedeb178d242063e338cb57050"},
{"name":"gitlab-glfm-markdown","version":"0.0.27","platform":"x86_64-linux-musl","checksum":"77cf356f2a2fc496ec17206d68a6a1fe4f4d680bc1aac2206c32ee5393611a15"},
{"name":"gitlab-kas-grpc","version":"17.8.1","platform":"ruby","checksum":"fbb9cf7411d12a7dc491d688a80a1d4064bd92dfbbadce523a549b07d26226e6"},
{"name":"gitlab-kas-grpc","version":"17.9.0.pre.rc2","platform":"ruby","checksum":"b4572e47d0807e51c7a8f7a43d44a196ebea40ed073b8cb95f72d20044ea4482"},
{"name":"gitlab-labkit","version":"0.37.0","platform":"ruby","checksum":"d2dd0a60db2149a9a8eebf2975dc23f54ac3ceb01bdba732eb1b26b86dfffa70"},
{"name":"gitlab-license","version":"2.6.0","platform":"ruby","checksum":"2c1f8ae73835640ec77bf758c1d0c9730635043c01cf77902f7976e826d7d016"},
{"name":"gitlab-mail_room","version":"0.0.25","platform":"ruby","checksum":"223ce7c3c0797b6015eaa37147884e6ddc7be9a7ee90a424358c96bc18613b1a"},

View File

@ -757,7 +757,7 @@ GEM
nokogiri (~> 1, >= 1.10.8)
gitlab-glfm-markdown (0.0.27)
rb_sys (~> 0.9.109)
gitlab-kas-grpc (17.8.1)
gitlab-kas-grpc (17.9.0.pre.rc2)
grpc (~> 1.0)
gitlab-labkit (0.37.0)
actionpack (>= 5.0.0, < 8.1.0)
@ -2129,7 +2129,7 @@ DEPENDENCIES
gitlab-glfm-markdown (~> 0.0.21)
gitlab-housekeeper!
gitlab-http!
gitlab-kas-grpc (~> 17.8.0)
gitlab-kas-grpc (~> 17.9.0.pre.rc2)
gitlab-labkit (~> 0.37.0)
gitlab-license (~> 2.6)
gitlab-mail_room (~> 0.0.24)

View File

@ -46,10 +46,6 @@ export default {
});
},
},
popoverOptions: {
triggers: 'hover',
placement: 'bottom',
},
};
</script>
<template>
@ -58,7 +54,7 @@ export default {
<template #default="{ pathItem, pathId }">
<gl-popover
v-if="showPopover(pathItem)"
v-bind="$options.popoverOptions"
placement="bottom"
:target="pathId"
:css-classes="['stage-item-popover']"
data-testid="stage-item-popover"

View File

@ -44,7 +44,9 @@ export default {
class="board-add-new-list board gl-inline-block gl-h-full gl-shrink-0 gl-whitespace-normal gl-rounded-base gl-pl-2 gl-align-top"
data-testid="board-add-new-column"
>
<div class="gl-relative gl-flex gl-h-full gl-flex-col gl-rounded-base gl-bg-gray-50">
<div
class="gl-relative gl-flex gl-h-full gl-flex-col gl-rounded-base gl-bg-strong dark:gl-bg-subtle"
>
<h3 class="gl-m-0 gl-px-5 gl-py-5 gl-text-size-h2" data-testid="board-add-column-form-title">
{{ $options.i18n.newList }}
</h3>

View File

@ -114,7 +114,7 @@ export default {
class="board is-expandable gl-relative gl-inline-block gl-h-full gl-whitespace-normal gl-px-3 gl-align-top"
>
<div
class="gl-relative gl-flex gl-h-full gl-flex-col gl-rounded-base gl-bg-gray-50"
class="gl-relative gl-flex gl-h-full gl-flex-col gl-rounded-base gl-bg-strong dark:gl-bg-subtle"
:class="{ 'board-column-highlighted': highlighted }"
>
<board-list-header

View File

@ -320,7 +320,7 @@ export default {
<header
:class="{
'gl-h-full': list.collapsed,
'gl-bg-gray-50': isSwimlanesHeader,
'gl-bg-strong': isSwimlanesHeader,
'gl-rounded-tl-base gl-rounded-tr-base gl-border-4 gl-border-t-solid': isLabelList,
'gl-rounded-tl-base gl-rounded-tr-base gl-bg-red-50': boardItemsSizeExceedsMax,
}"
@ -345,7 +345,7 @@ export default {
:aria-label="chevronTooltip"
:title="chevronTooltip"
:icon="chevronIcon"
class="board-title-caret no-drag gl-cursor-pointer hover:gl-bg-gray-50"
class="board-title-caret no-drag gl-cursor-pointer hover:gl-bg-strong"
:class="{
'-gl-mt-1': list.collapsed && isLabelList,
'gl-mb-2': list.collapsed && isLabelList && !isSwimlanesHeader,

View File

@ -537,7 +537,7 @@ export default {
<gl-link :href="item.pipeline.path" class="gl-mr-2">
{{ pipelineId(item) }}
</gl-link>
<span class="gl-inline-block gl-rounded-base gl-bg-gray-50 gl-px-2">
<span class="gl-inline-block gl-rounded-base gl-bg-strong gl-px-2">
<gl-icon name="commit" :size="12" class="gl-mr-2" />
<gl-link :href="item.commitPath" class="gl-text-sm gl-text-default gl-font-monospace">
{{ item.shortSha }}
@ -545,7 +545,7 @@ export default {
</span>
</div>
<div>
<span class="gl-inline-block gl-rounded-base gl-bg-gray-50 gl-px-2">
<span class="gl-inline-block gl-rounded-base gl-bg-strong gl-px-2">
<gl-icon name="branch" :size="12" class="gl-mr-1" />
<gl-link :href="item.refPath" class="gl-text-sm gl-text-default gl-font-monospace">
{{ item.refName }}

View File

@ -178,7 +178,7 @@ export default {
:class="{
'pipeline-graph-container gl-pipeline-min-h gl-mt-3 gl-items-start gl-overflow-auto gl-bg-subtle gl-pb-8 gl-pt-3':
!isLinkedPipeline,
'gl-bg-gray-50 sm:gl-ml-5': isLinkedPipeline,
'gl-bg-strong sm:gl-ml-5': isLinkedPipeline,
}"
data-testid="pipeline-container"
>

View File

@ -335,7 +335,7 @@ export default {
:title="tooltipText"
:href="detailsPath"
:class="jobClasses"
class="menu-item gl-w-full gl-rounded-base gl-text-strong hover:gl-bg-gray-50 hover:gl-no-underline focus:gl-bg-gray-50 focus:gl-no-underline active:gl-no-underline dark:hover:gl-bg-gray-200 dark:focus:gl-bg-gray-200"
class="menu-item gl-w-full gl-rounded-base gl-text-strong hover:gl-bg-strong hover:gl-no-underline focus:gl-bg-strong focus:gl-no-underline active:gl-no-underline dark:hover:gl-bg-gray-200 dark:focus:gl-bg-gray-200"
data-testid="ci-job-item-content"
@click="jobItemClick"
@mouseout="hideTooltips"

View File

@ -80,9 +80,9 @@ export default {
'gl-p-3',
'gl-border-0',
'!gl-rounded-base',
'hover:gl-bg-gray-50',
'hover:gl-bg-strong',
'dark:hover:gl-bg-gray-200',
'focus:gl-bg-gray-50',
'focus:gl-bg-strong',
'dark:focus:gl-bg-gray-200',
'hover:gl-text-strong',
'focus:gl-text-strong',

View File

@ -42,7 +42,7 @@ export default {
jobPillClasses() {
return [
{ 'gl-opacity-3': this.isFadedOut },
{ 'gl-bg-gray-50 gl-shadow-inner-1-gray-200': this.isHovered },
{ 'gl-bg-strong gl-shadow-inner-1-gray-200': this.isHovered },
];
},
},

View File

@ -76,7 +76,7 @@ export default {
v-gl-tooltip="{ title: counterTooltipText }"
:title="counterTooltipText"
:href="pipelinePath"
class="gl-inline-flex gl-h-6 gl-w-7 gl-items-center gl-justify-center gl-rounded-pill gl-bg-gray-50 gl-text-sm gl-text-subtle gl-no-underline"
class="gl-inline-flex gl-h-6 gl-w-7 gl-items-center gl-justify-center gl-rounded-pill gl-bg-strong gl-text-sm gl-text-subtle gl-no-underline"
data-testid="downstream-pipeline-counter"
>
{{ counterLabel }}

View File

@ -203,7 +203,7 @@ export default {
<div class="gl-flex gl-flex-wrap gl-items-center gl-gap-2 gl-whitespace-nowrap gl-pl-3">
<gl-sprintf :message="__('From line %{line1} to %{line2}')">
<template #line1>
<div class="gl-mx-1 gl-flex gl-rounded-base gl-bg-gray-50">
<div class="gl-mx-1 gl-flex gl-rounded-base gl-bg-strong">
<gl-button
size="small"
icon="dash"
@ -230,7 +230,7 @@ export default {
</div>
</template>
<template #line2>
<div class="gl-ml-1 gl-flex gl-rounded-base gl-bg-gray-50">
<div class="gl-ml-1 gl-flex gl-rounded-base gl-bg-strong">
<gl-button
size="small"
icon="dash"

View File

@ -433,7 +433,7 @@
"additionalProperties": false,
"properties": {
"project": {
"description": "Path to the project, e.g. `group/project`, or `group/sub-group/project` [Learn more](https://docs.gitlab.com/ee/ci/yaml/index.html#includefile).",
"description": "Path to the project, e.g. `group/project`, or `group/sub-group/project` [Learn more](https://docs.gitlab.com/ee/ci/yaml/#includefile).",
"type": "string",
"pattern": "(?:\\S/\\S|\\$\\S+)"
},
@ -1174,7 +1174,7 @@
}
},
"rulesVariables": {
"markdownDescription": "Defines variables for a rule result. [Learn More](https://docs.gitlab.com/ee/ci/yaml/index.html#rulesvariables).",
"markdownDescription": "Defines variables for a rule result. [Learn More](https://docs.gitlab.com/ee/ci/yaml/#rulesvariables).",
"type": "object",
"patternProperties": {
".*": {
@ -1279,7 +1279,7 @@
},
"timeout": {
"type": "string",
"markdownDescription": "Allows you to configure a timeout for a specific job (e.g. `1 minute`, `1h 30m 12s`). [Learn More](https://docs.gitlab.com/ee/ci/yaml/index.html#timeout).",
"markdownDescription": "Allows you to configure a timeout for a specific job (e.g. `1 minute`, `1h 30m 12s`). [Learn More](https://docs.gitlab.com/ee/ci/yaml/#timeout).",
"minLength": 1
},
"start_in": {
@ -1288,7 +1288,7 @@
"minLength": 1
},
"rulesNeeds": {
"markdownDescription": "Use needs in rules to update job needs for specific conditions. When a condition matches a rule, the job's needs configuration is completely replaced with the needs in the rule. [Learn More](https://docs.gitlab.com/ee/ci/yaml/index.html#rulesneeds).",
"markdownDescription": "Use needs in rules to update job needs for specific conditions. When a condition matches a rule, the job's needs configuration is completely replaced with the needs in the rule. [Learn More](https://docs.gitlab.com/ee/ci/yaml/#rulesneeds).",
"type": "array",
"items": {
"oneOf": [
@ -2152,7 +2152,7 @@
"description": "Limit job concurrency. Can be used to ensure that the Runner will not run certain jobs simultaneously."
},
"trigger": {
"markdownDescription": "Trigger allows you to define downstream pipeline trigger. When a job created from trigger definition is started by GitLab, a downstream pipeline gets created. [Learn More](https://docs.gitlab.com/ee/ci/yaml/index.html#trigger).",
"markdownDescription": "Trigger allows you to define downstream pipeline trigger. When a job created from trigger definition is started by GitLab, a downstream pipeline gets created. [Learn More](https://docs.gitlab.com/ee/ci/yaml/#trigger).",
"oneOf": [
{
"type": "object",
@ -2376,7 +2376,7 @@
}
},
{
"markdownDescription": "Path to the project, e.g. `group/project`, or `group/sub-group/project`. [Learn More](https://docs.gitlab.com/ee/ci/yaml/index.html#trigger).",
"markdownDescription": "Path to the project, e.g. `group/project`, or `group/sub-group/project`. [Learn More](https://docs.gitlab.com/ee/ci/yaml/#trigger).",
"type": "string",
"pattern": "(?:\\S/\\S|\\$\\S+)"
}

View File

@ -6,7 +6,7 @@ import eventHub from '../event_hub';
import stopEnvironmentMutation from '../graphql/mutations/stop_environment.mutation.graphql';
export default {
environmentOnStopLink: helpPagePath('ci/yaml/index.html', {
environmentOnStopLink: helpPagePath('ci/yaml/_index.html', {
anchor: 'environmenton_stop',
}),
stoppingEnvironmentDocsLink: helpPagePath('ci/environments/index', {

View File

@ -165,7 +165,7 @@ export default {
<div
v-if="statusFilter && podsSearch"
class="gl-mt-5 gl-rounded-base gl-bg-gray-50 gl-p-5"
class="gl-mt-5 gl-rounded-base gl-bg-strong gl-p-5"
data-testid="pods-filtered-message"
>
<gl-sprintf :message="$options.i18n.filteredText">

View File

@ -73,7 +73,7 @@ export const translations = {
};
export const environmentsLearnMorePath = helpPagePath('ci/environments/index');
export const environmentsHelpPagePath = helpPagePath('ci/yaml/index', { anchor: 'environment' });
export const environmentsHelpPagePath = helpPagePath('ci/yaml/_index', { anchor: 'environment' });
export const DEPLOYMENTS_SORT_OPTIONS = [
{

View File

@ -64,9 +64,9 @@ export default {
<th :style="headerStyle" class="gl-relative">
<slot></slot>
<div
class="gl-absolute gl-right-0 gl-top-0 gl-z-1 gl-w-2 gl-cursor-col-resize gl-select-none hover:gl-bg-gray-50"
class="gl-absolute gl-right-0 gl-top-0 gl-z-1 gl-w-2 gl-cursor-col-resize gl-select-none hover:gl-bg-strong"
data-testid="resize-handle"
:class="{ 'gl-bg-gray-50': isResizing }"
:class="{ 'gl-bg-strong': isResizing }"
:style="{ height: `${tableHeight}px` }"
@mouseover="updateTableHeight"
@mousedown="onMouseDown"

View File

@ -87,7 +87,7 @@ export const initGitlabWebIDE = async (el) => {
},
editorFont,
extensionsGallerySettings,
...(gon?.features?.webIdeSettingsContextHash && { settingsContextHash }),
settingsContextHash,
codeSuggestionsEnabled,
handleContextUpdate: handleUpdateUrl,
handleTracking,

View File

@ -88,7 +88,7 @@ export default {
<div v-for="(lists, i) in tab.lists" :key="`lists_${i}`">
<div
v-if="i === 1"
class="gl-mb-5 gl-mt-8 gl-rounded-base gl-bg-gray-50 gl-px-4 gl-py-2 gl-font-bold gl-text-subtle"
class="gl-mb-5 gl-mt-8 gl-rounded-base gl-bg-strong gl-px-4 gl-py-2 gl-font-bold gl-text-subtle"
data-testid="merge-request-count-explanation"
>
{{ __('Items below are excluded from the active count') }}

View File

@ -131,11 +131,7 @@ export default {
/>
</div>
</div>
<div
v-if="showCommitBox"
class="gl-my-4 gl-rounded-base gl-bg-gray-50"
data-testid="commit-box"
>
<div v-if="showCommitBox" class="gl-my-4 gl-rounded-base gl-bg-strong" data-testid="commit-box">
<gl-loading-icon v-if="loading" class="gl-py-3" />
<template v-else>
<div

View File

@ -33,9 +33,9 @@ export default {
<template>
<router-link
:to="{ name: to }"
active-class="gl-font-bold gl-bg-gray-50"
active-class="gl-font-bold gl-bg-strong"
exact
class="gl-flex gl-items-center gl-rounded-base gl-p-2 gl-text-default hover:gl-bg-gray-50 hover:gl-text-default hover:gl-no-underline"
class="gl-flex gl-items-center gl-rounded-base gl-p-2 gl-text-default hover:gl-bg-strong hover:gl-text-default hover:gl-no-underline"
>
<status-icon :icon-name="statusIcon" :is-loading="isLoading" />
<slot></slot>

View File

@ -125,7 +125,7 @@ export default {
class="gl-flex gl-min-h-7 gl-items-center gl-rounded-base gl-pl-4"
:class="{
'gl-bg-orange-50': blocksMerge && !allResolved,
'gl-bg-gray-50': !blocksMerge || allResolved,
'gl-bg-strong': !blocksMerge || allResolved,
'gl-mr-3': !isNotificationsTodosButtons,
'gl-mr-5': isNotificationsTodosButtons,
}"

View File

@ -29,7 +29,7 @@ export default {
data-testid="discussion-filter-container"
>
<div
class="gl-float-left -gl-mt-1 gl-ml-2 gl-flex gl-h-6 gl-w-6 gl-items-center gl-justify-center gl-rounded-full gl-bg-gray-50 gl-text-subtle"
class="gl-float-left -gl-mt-1 gl-ml-2 gl-flex gl-h-6 gl-w-6 gl-items-center gl-justify-center gl-rounded-full gl-bg-strong gl-text-subtle"
>
<gl-icon name="comment" />
</div>

View File

@ -238,8 +238,6 @@ export default {
});
}
scrollToTargetOnResize();
eventHub.$on('noteFormAddToReview', this.handleReviewTracking);
eventHub.$on('noteFormStartReview', this.handleReviewTracking);

View File

@ -100,7 +100,7 @@ export default {
<additional-metadata-loader v-if="isLoading" />
<div
v-if="showMetadata"
class="gl-rounded-base gl-bg-gray-50 gl-shadow-inner-1-gray-100"
class="gl-rounded-base gl-bg-strong gl-shadow-inner-1-gray-100"
data-testid="main"
>
<component

View File

@ -14,7 +14,7 @@ export default {
</script>
<template>
<div class="gl-rounded-base gl-bg-gray-50 gl-shadow-inner-1-gray-100">
<div class="gl-rounded-base gl-bg-strong gl-shadow-inner-1-gray-100">
<div
v-for="index in $options.loader.repeat"
:key="index"

View File

@ -22,7 +22,7 @@ export default {
name: 'ReleasesIndexApp',
i18n,
links: {
alertInfoMessageLink: helpPagePath('ci/yaml/index.html', { anchor: 'release' }),
alertInfoMessageLink: helpPagePath('ci/yaml/_index.html', { anchor: 'release' }),
alertInfoPublishLink: helpPagePath('ci/components/index', { anchor: 'publish-a-new-release' }),
},
components: {

View File

@ -38,7 +38,7 @@ export default {
</script>
<template>
<div class="gl-bg-gray-50 gl-py-13 gl-text-center">
<div class="gl-bg-strong gl-py-13 gl-text-center">
<gl-link :href="filePath" rel="nofollow" :download="fileName" target="_blank">
<div>
<gl-icon :size="16" name="download" variant="strong" />

View File

@ -15,7 +15,7 @@ export default {
};
</script>
<template>
<div class="gl-bg-gray-50 gl-p-7 gl-text-center">
<div class="gl-bg-strong gl-p-7 gl-text-center">
<img :src="url" :alt="alt" data-testid="image" class="gl-max-w-full" />
</div>
</template>

View File

@ -28,7 +28,7 @@ export default {
</script>
<template>
<div class="gl-bg-gray-50 gl-py-13 gl-text-center" data-type="lfs">
<div class="gl-bg-strong gl-py-13 gl-text-center" data-type="lfs">
<gl-sprintf :message="$options.i18n.lfsText">
<template #link="{ content }">
<gl-link :href="filePath" :download="fileName" target="_blank">{{ content }}</gl-link>

View File

@ -14,7 +14,7 @@ export default {
};
</script>
<template>
<div class="gl-bg-gray-50 gl-p-7 gl-text-center">
<div class="gl-bg-strong gl-p-7 gl-text-center">
<video :src="url" controls data-testid="video" class="gl-max-w-full"></video>
</div>
</template>

View File

@ -156,7 +156,7 @@ export default {
<div class="gl-mb-2">
<div
v-if="shouldShowRefInfo"
class="gl-inline-block gl-rounded-base gl-bg-gray-50 gl-px-2 gl-text-subtle"
class="gl-inline-block gl-rounded-base gl-bg-strong gl-px-2 gl-text-subtle"
data-testid="commit-ref-info"
>
<gl-icon v-if="tag" name="tag" :size="12" variant="subtle" />
@ -178,7 +178,7 @@ export default {
</tooltip-on-truncate>
</div>
<div class="gl-inline-block gl-rounded-base gl-bg-gray-50 gl-px-2 gl-text-sm gl-text-default">
<div class="gl-inline-block gl-rounded-base gl-bg-strong gl-px-2 gl-text-sm gl-text-default">
<gl-icon name="commit" class="js-commit-icon" :size="12" />
<gl-link :href="commitUrl" class="gl-text-gray-700" data-testid="commit-sha">{{
shortSha

View File

@ -14,7 +14,7 @@ export default {
<template>
<timeline-entry-item class="note note-wrapper">
<div
class="gl-float-left -gl-mt-1 gl-ml-2 gl-flex gl-h-6 gl-w-6 gl-items-center gl-justify-center gl-rounded-full gl-bg-gray-50 gl-text-subtle"
class="gl-float-left -gl-mt-1 gl-ml-2 gl-flex gl-h-6 gl-w-6 gl-items-center gl-justify-center gl-rounded-full gl-bg-strong gl-text-subtle"
></div>
<div class="timeline-content">
<div class="note-header"></div>

View File

@ -106,7 +106,7 @@ export default {
return this.getNoteableData.noteableType === 'MergeRequest';
},
iconBgClass() {
return ICON_COLORS[this.note.system_note_icon_name] || 'gl-bg-gray-50 gl-text-subtle';
return ICON_COLORS[this.note.system_note_icon_name] || 'gl-bg-strong gl-text-subtle';
},
systemNoteIconName() {
let icon = this.note.system_note_icon_name;

View File

@ -1,6 +1,6 @@
<template>
<div
class="gl-float-left -gl-mt-1 gl-ml-2 gl-flex gl-h-6 gl-w-6 gl-items-center gl-justify-center gl-rounded-full gl-bg-gray-50 gl-text-subtle"
class="gl-float-left -gl-mt-1 gl-ml-2 gl-flex gl-h-6 gl-w-6 gl-items-center gl-justify-center gl-rounded-full gl-bg-strong gl-text-subtle"
>
<slot></slot>
</div>

View File

@ -1,6 +1,6 @@
export const tdClass = 'table-col gl-flex d-md-table-cell gl-items-center gl-whitespace-nowrap';
export const bodyTrClass =
'gl-border-1 gl-border-t-solid gl-border-default hover:gl-cursor-pointer hover:gl-bg-gray-50 hover:gl-border-b-solid';
'gl-border-1 gl-border-t-solid gl-border-default hover:gl-cursor-pointer hover:gl-bg-strong hover:gl-border-b-solid';
export const defaultPageSize = 20;

View File

@ -20,7 +20,7 @@ export default {
<template>
<timeline-entry-item class="system-note note-wrapper">
<div
class="gl-float-left -gl-mt-1 gl-ml-2 gl-flex gl-h-6 gl-w-6 gl-items-center gl-justify-center gl-rounded-full gl-bg-gray-50 gl-text-subtle"
class="gl-float-left -gl-mt-1 gl-ml-2 gl-flex gl-h-6 gl-w-6 gl-items-center gl-justify-center gl-rounded-full gl-bg-strong gl-text-subtle"
>
<gl-icon :name="icon" />
</div>

View File

@ -29,7 +29,7 @@ export default {
</script>
<template>
<div class="gl-mt-4 sm:gl-ml-auto">
<div class="sm:gl-ml-auto">
<gl-button
v-gl-tooltip.hover
:title="

View File

@ -31,7 +31,7 @@ export default {
<template>
<li class="timeline-entry note note-wrapper discussion-filter-note">
<div
class="gl-float-left -gl-mt-1 gl-ml-2 gl-flex gl-h-6 gl-w-6 gl-items-center gl-justify-center gl-rounded-full gl-bg-gray-50 gl-text-subtle"
class="gl-float-left -gl-mt-1 gl-ml-2 gl-flex gl-h-6 gl-w-6 gl-items-center gl-justify-center gl-rounded-full gl-bg-strong gl-text-subtle"
>
<gl-icon name="comment" />
</div>

View File

@ -232,7 +232,7 @@ export default {
</script>
<template>
<div v-if="!isLoading" class="gl-mt-3">
<div v-if="!isLoading">
<awards-list
:awards="awards"
:can-award-emoji="$options.isLoggedIn"

View File

@ -326,7 +326,7 @@ export default {
</div>
<div
v-if="organizationName !== s__('Crm|No organization')"
class="gl-flex gl-flex-col gl-gap-2 gl-rounded-base gl-bg-gray-50 gl-p-3"
class="gl-flex gl-flex-col gl-gap-2 gl-rounded-base gl-bg-strong gl-p-3"
>
<div class="gl-font-bold">{{ organizationName }}</div>
<div

View File

@ -964,7 +964,7 @@ export default {
@cancelEditing="cancelEditing"
@error="updateError = $event"
/>
<div class="gl-flex gl-flex-wrap gl-justify-between">
<div class="gl-mt-3 gl-flex gl-flex-wrap gl-justify-between gl-gap-y-3">
<work-item-award-emoji
v-if="workItemAwardEmoji"
:work-item-id="workItem.id"
@ -974,7 +974,7 @@ export default {
@error="updateError = $event"
@emoji-updated="$emit('work-item-emoji-updated', $event)"
/>
<div class="gl-flex gl-gap-3">
<div class="gl-mt-2 gl-flex gl-flex-wrap gl-gap-3 gl-gap-y-3">
<gl-intersection-observer
v-if="showUploadDesign"
@appear="isDesignUploadButtonInViewport = true"

View File

@ -111,7 +111,7 @@ export default {
</script>
<template>
<div v-if="showCreateOptions" class="gl-mt-4">
<div v-if="showCreateOptions">
<gl-button-group>
<gl-button
:loading="checkingBranchAvailibility"

View File

@ -54,6 +54,7 @@ module Groups
def authorize_show_cicd_settings!
return if can_any?(current_user, [
:admin_cicd_variables,
:admin_protected_environments,
:admin_runner
], group)

View File

@ -14,7 +14,6 @@ class IdeController < ApplicationController
push_frontend_feature_flag(:build_service_proxy)
push_frontend_feature_flag(:reject_unsigned_commits_by_gitlab)
push_frontend_feature_flag(:web_ide_language_server, current_user)
push_frontend_feature_flag(:web_ide_settings_context_hash, current_user)
end
feature_category :web_ide

View File

@ -113,6 +113,7 @@ module Projects
def authorize_show_cicd_settings!
return if can_any?(current_user, [
:admin_cicd_variables,
:admin_protected_environments,
:admin_runner
], project)

View File

@ -46,10 +46,22 @@ module Types
null: true,
description: 'Timestamp of when the branch rule was created.'
field :squash_option,
type: ::Types::Projects::BranchRules::SquashOptionType,
null: true,
description: 'The default behavior for squashing in merge requests. ' \
'Returns null if `branch_rule_squash_settings` feature flag is disabled.',
experiment: { milestone: '17.9' }
field :updated_at,
Types::TimeType,
null: true,
description: 'Timestamp of when the branch rule was last updated.'
def squash_option
return unless ::Feature.enabled?(:branch_rule_squash_settings, branch_rule.project)
branch_rule.squash_option
end
end
end
end

View File

@ -0,0 +1,26 @@
# frozen_string_literal: true
module Types
module Projects
module BranchRules
class SquashOptionType < Types::BaseObject
graphql_name 'SquashOption'
description 'Squash option overrides for a protected branch'
accepts ::Projects::SquashOption
authorize :read_squash_option
present_using ::Projects::BranchRules::SquashOptionPresenter
field :option,
GraphQL::Types::String,
null: false,
description: 'Human-readable description of the squash option.',
method: :human_squash_option
field :help_text,
GraphQL::Types::String,
null: false,
description: 'Help text for the squash option.'
end
end
end
end

View File

@ -25,7 +25,7 @@ module Ci
"initial-branch-name" => initial_branch,
"includes-help-page-path" => help_page_path('ci/yaml/includes.md'),
"lint-help-page-path" => help_page_path('ci/yaml/lint.md', anchor: 'check-cicd-syntax'),
"needs-help-page-path" => help_page_path('ci/yaml/index.md', anchor: 'needs'),
"needs-help-page-path" => help_page_path('ci/yaml/_index.md', anchor: 'needs'),
"new-merge-request-path" => namespace_project_new_merge_request_path,
"pipeline_etag" => latest_commit ? graphql_etag_pipeline_sha_path(latest_commit.sha) : '',
"pipeline-page-path" => project_pipelines_path(project),
@ -36,7 +36,7 @@ module Ci
"total-branches" => total_branches,
"uses-external-config" => uses_external_config?(project) ? 'true' : 'false',
"validate-tab-illustration-path" => image_path('illustrations/empty-state/empty-devops-md.svg'),
"yml-help-page-path" => help_page_path('ci/yaml/index.md')
"yml-help-page-path" => help_page_path('ci/yaml/_index.md')
}
end

View File

@ -11,6 +11,12 @@ module Clusters
belongs_to :environment
validates :template_name, length: { maximum: 1024 }
enum :status, {
processing: 0,
completed: 1,
failed: 2
}
end
end
end

View File

@ -19,7 +19,7 @@ module Ci
def ci_docs_link(name, anchor)
ApplicationController.helpers.link_to(
name, Rails.application.routes.url_helpers.help_page_url('ci/yaml/index.md', anchor: anchor)
name, Rails.application.routes.url_helpers.help_page_url('ci/yaml/_index.md', anchor: anchor)
)
end
end

View File

@ -0,0 +1,67 @@
# frozen_string_literal: true
module Projects
module CustomBranchRule
extend ActiveSupport::Concern
included do
include GlobalID::Identification
extend Forwardable
attr_reader :project
def_delegators(:project, :id)
end
class_methods do
def find(id)
project = Project.find(id)
new(project)
rescue ActiveRecord::RecordNotFound
raise ActiveRecord::RecordNotFound, "Couldn't find #{name} with 'id'=#{id}"
end
end
def initialize(project)
@project = project
end
def name
raise NotImplementedError
end
def matching_branches_count
raise NotImplementedError
end
def default_branch?
false
end
def protected?
false
end
def branch_protection
nil
end
def group
nil
end
def squash_option
nil
end
def created_at
nil
end
def updated_at
nil
end
end
end
Projects::CustomBranchRule.prepend_mod

View File

@ -24,5 +24,9 @@ module Projects
def squash_readonly?
%w[always never].include?(squash_option)
end
def branch_rule
raise NotImplementedError
end
end
end

View File

@ -81,6 +81,10 @@ class ProjectSetting < ApplicationRecord
super(value.presence) # Call the default setter to set the value
end
def branch_rule
::Projects::AllBranchesRule.new(project)
end
private
def validates_mr_default_target_self

View File

@ -0,0 +1,20 @@
# frozen_string_literal: true
module Projects
class AllBranchesRule < BranchRule
include Projects::CustomBranchRule
def name
s_('All branches')
end
def matching_branches_count
project.repository.branch_count
end
def squash_option
project.project_setting
end
end
end
Projects::AllBranchesRule.prepend_mod_with('Projects::AllBranchesRule')

View File

@ -32,6 +32,10 @@ module Projects
matching_branches = protected_branch.matching(branch_names)
matching_branches.count
end
def squash_option
nil
end
end
end

View File

@ -0,0 +1,36 @@
# frozen_string_literal: true
module Projects
module BranchRules
class SquashOption < ApplicationRecord
include ::Projects::SquashOption
belongs_to :protected_branch, optional: false
belongs_to :project, optional: false
validates :protected_branch, uniqueness: true
validate :validate_protected_branch_not_wildcard
validate :validate_protected_branch_belongs_to_project
def branch_rule
::Projects::BranchRule.new(project, protected_branch)
end
private
def validate_protected_branch_not_wildcard
return unless protected_branch&.wildcard?
errors.add(:protected_branch, 'cannot be a wildcard')
end
def validate_protected_branch_belongs_to_project
return unless protected_branch && project
return if protected_branch.project_id == project.id
errors.add(:protected_branch, 'must belong to project')
end
end
end
end

View File

@ -151,7 +151,13 @@ class GlobalPolicy < BasePolicy
enable :admin_web_hook
# Admin pages
enable :read_admin_audit_log
enable :read_admin_background_jobs
enable :read_admin_background_migrations
enable :read_admin_cicd
enable :read_admin_health_check
enable :read_admin_metrics_dashboard
enable :read_admin_system_information
end
# We can't use `read_statistics` because the user may have different permissions for different projects

View File

@ -283,6 +283,7 @@ class GroupPolicy < Namespaces::GroupProjectNamespaceSharedPolicy
enable :admin_package
enable :admin_runner
enable :admin_integrations
enable :admin_protected_environments
enable :change_visibility_level
enable :read_usage_quotas

View File

@ -665,6 +665,7 @@ class ProjectPolicy < BasePolicy
enable :change_restrict_user_defined_variables
enable :create_protected_branch
enable :admin_protected_branch
enable :admin_protected_environments
end
rule { can?(:manage_protected_tags) }.policy do

View File

@ -0,0 +1,17 @@
# frozen_string_literal: true
module Projects
class SquashOptionPolicy < ::BasePolicy
delegate { @subject.branch_rule }
rule { can?(:read_branch_rule) }.policy do
enable :read_squash_option
end
rule { can?(:update_branch_rule) }.policy do
enable :create_squash_option
enable :update_squash_option
enable :destroy_squash_option
end
end
end

View File

@ -0,0 +1,22 @@
# frozen_string_literal: true
module Projects
module BranchRules
class SquashOptionPresenter < Gitlab::View::Presenter::Delegated
presents ::Projects::BranchRules::SquashOption
def help_text
case squash_option
when 'never'
'Squashing is never performed and the checkbox is hidden.'
when 'always'
'Checkbox is visible and unselected by default.'
when 'default_on'
'Checkbox is visible and selected by default.'
when 'default_off'
'Squashing is always performed. Checkbox is visible and selected, and users cannot change it.'
end
end
end
end
end

View File

@ -138,7 +138,7 @@ class BuildDetailsEntity < Ci::JobEntity
def callout_message
return super unless build.failure_reason.to_sym == :missing_dependency_failure
docs_url = "https://docs.gitlab.com/ee/ci/yaml/index.html#dependencies"
docs_url = "https://docs.gitlab.com/ee/ci/yaml/#dependencies"
troubleshooting_url = "https://docs.gitlab.com/ee/ci/jobs/job_artifacts_troubleshooting.html#error-message-this-job-could-not-start-because-it-could-not-retrieve-the-needed-artifacts"
[

View File

@ -22,6 +22,9 @@
"admin_protected_branch": {
"type": "boolean"
},
"admin_protected_environments": {
"type": "boolean"
},
"admin_push_rules": {
"type": "boolean"
},

View File

@ -82,5 +82,5 @@
variant: :danger,
method: :delete,
href: admin_spam_log_path(spam_log, remove_user: true),
button_options: { class: 'menu-item focus:!gl-bg-gray-50', data: { confirm: _("User %{user_name} will be removed! Are you sure?") % { user_name: user.name }, confirm_btn_variant: 'danger' } }) do
button_options: { class: 'menu-item focus:!gl-bg-strong', data: { confirm: _("User %{user_name} will be removed! Are you sure?") % { user_name: user.name }, confirm_btn_variant: 'danger' } }) do
%span.gl-text-danger= _('Remove user')

View File

@ -50,4 +50,5 @@
- c.with_body do
= render 'groups/settings/ci_cd/auto_devops_form', group: @group
- if can?(current_user, :admin_protected_environments, @group)
= render_if_exists 'groups/settings/ci_cd/protected_environments', expanded: expanded

View File

@ -48,7 +48,7 @@
#blame-stream-container.blame-stream-container
- if @blame_mode.pagination? && @blame_pagination.total_pages > 1
.gl-flex.gl-justify-center.gl-flex-col.gl-items-center.gl-p-3.gl-bg-gray-50.gl-border-t-solid.gl-border-t-1.gl-border-default
.gl-flex.gl-justify-center.gl-flex-col.gl-items-center.gl-p-3.gl-bg-strong.gl-border-t-solid.gl-border-t-1.gl-border-default
= render Pajamas::ButtonComponent.new(href: entire_blame_path(@id, @project), size: :small, button_options: { class: 'gl-mt-3' }) do |c|
= _('Show full blame')

View File

@ -6,4 +6,4 @@
= s_('Pipelines|This GitLab CI configuration is invalid:')
= viewer.validation_message(project: @project, sha: @commit.sha, user: @current_user)
= link_to _('Learn more'), help_page_path('ci/yaml/index.md')
= link_to _('Learn more'), help_page_path('ci/yaml/_index.md')

View File

@ -1,4 +1,4 @@
= gl_loading_icon(inline: true, css_class: "!gl-mr-2")
= s_('Pipelines|Validating GitLab CI configuration…')
= link_to _('Learn more'), help_page_path('ci/yaml/index.md')
= link_to _('Learn more'), help_page_path('ci/yaml/_index.md')

View File

@ -4,7 +4,7 @@
= render "head"
.gl-mt-5
.project-network.gl-border-1.gl-border-solid.gl-border-gray-300
.controls.gl-bg-gray-50.gl-p-2.gl-text-base.gl-text-subtle.gl-border-b-1.gl-border-b-solid.gl-border-b-gray-300
.controls.gl-bg-strong.gl-p-2.gl-text-base.gl-text-subtle.gl-border-b-1.gl-border-b-solid.gl-border-b-gray-300
= form_tag network_path, method: :get, class: 'form-inline network-form' do |f|
= text_field_tag :extended_sha1, @options[:extended_sha1], placeholder: _("Git revision"), class: 'search-input form-control gl-form-input input-mx-250 search-sha gl-mr-2'
= render Pajamas::ButtonComponent.new(type: :submit, variant: :confirm, icon: 'search', button_options: {'aria-label': _("Search"), 'title': _("Search")})

View File

@ -29,6 +29,7 @@
- c.with_body do
= render 'autodevops_form', auto_devops_enabled: @project.auto_devops_enabled?
- if can?(current_user, :admin_protected_environments, @project)
= render_if_exists 'projects/settings/ci_cd/protected_environments', expanded: expanded
- if can?(current_user, :admin_runner, @project)

View File

@ -31,7 +31,7 @@
= link_to avatar_icon_for_user(@user, 400, current_user: current_user), target: '_blank', rel: 'noopener noreferrer', title: s_('UserProfile|View large avatar') do
= render Pajamas::AvatarComponent.new(@user, alt: s_('UserProfile|User profile picture'), size: 96, avatar_options: { itemprop: "image" })
- if @user.status&.busy?
= render Pajamas::BadgeComponent.new(s_('UserProfile|Busy'), variant: 'warning', class: 'gl-absolute gl-flex gl-justify-center gl-items-center gl-left-1/2 gl-bg-gray-50 gl-border gl-border-white -gl-translate-x-1/2 gl-top-full -gl-mt-3')
= render Pajamas::BadgeComponent.new(s_('UserProfile|Busy'), variant: 'warning', class: 'gl-absolute gl-flex gl-justify-center gl-items-center gl-left-1/2 gl-border gl-border-white -gl-translate-x-1/2 gl-top-full -gl-mt-3')
%div
%h1.gl-heading-1.gl-leading-1.gl-mr-2{ class: '!gl-my-0', itemprop: 'name' }
= user_display_name(@user)

View File

@ -1,8 +0,0 @@
---
name: pages_multiple_versions_setting
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/127142
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/422145
milestone: '16.4'
type: beta
group: group::knowledge
default_enabled: true

View File

@ -1,9 +0,0 @@
---
name: web_ide_settings_context_hash
feature_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/501286
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/175031
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/501286
milestone: '17.8'
group: group::remote development
type: beta
default_enabled: false

View File

@ -2,7 +2,7 @@
name: markdown_paste_url
feature_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/233393
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/178942
rollout_issue_url:
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/517295
milestone: '17.9'
group: group::knowledge
type: gitlab_com_derisk

View File

@ -0,0 +1,8 @@
---
migration_job_name: BackfillDesignManagementDesignsVersionsNamespaceId
description: Backfills sharding key `design_management_designs_versions.namespace_id` from `design_management_designs`.
feature_category: design_management
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/180220
milestone: '17.9'
queued_migration_version: 20250204151108
finalized_by: # version of the migration that finalized this BBM

View File

@ -18,3 +18,4 @@ desired_sharding_key:
sharding_key: namespace_id
belongs_to: design
table_size: small
desired_sharding_key_migration_job_name: BackfillDesignManagementDesignsVersionsNamespaceId

View File

@ -0,0 +1,25 @@
# frozen_string_literal: true
class RemoveStartAndDueDateWidgetFromIncident < Gitlab::Database::Migration[2.2]
include Gitlab::Database::MigrationHelpers::WorkItems::Widgets
restrict_gitlab_migration gitlab_schema: :gitlab_main
disable_ddl_transaction!
milestone '17.9'
WORK_ITEM_TYPE_ENUM_VALUES = [1] # incident
WIDGETS = [
{
name: 'Start and due date',
widget_type: 6
}
]
def up
remove_widget_definitions(type_enum_values: WORK_ITEM_TYPE_ENUM_VALUES, widgets: WIDGETS)
end
def down
add_widget_definitions(type_enum_values: WORK_ITEM_TYPE_ENUM_VALUES, widgets: WIDGETS)
end
end

View File

@ -0,0 +1,9 @@
# frozen_string_literal: true
class AddNamespaceIdToDesignManagementDesignsVersions < Gitlab::Database::Migration[2.2]
milestone '17.9'
def change
add_column :design_management_designs_versions, :namespace_id, :bigint
end
end

View File

@ -0,0 +1,16 @@
# frozen_string_literal: true
class IndexDesignManagementDesignsVersionsOnNamespaceId < Gitlab::Database::Migration[2.2]
milestone '17.9'
disable_ddl_transaction!
INDEX_NAME = 'index_design_management_designs_versions_on_namespace_id'
def up
add_concurrent_index :design_management_designs_versions, :namespace_id, name: INDEX_NAME
end
def down
remove_concurrent_index_by_name :design_management_designs_versions, INDEX_NAME
end
end

View File

@ -0,0 +1,17 @@
# frozen_string_literal: true
class AddDesignManagementDesignsVersionsNamespaceIdFk < Gitlab::Database::Migration[2.2]
milestone '17.9'
disable_ddl_transaction!
def up
add_concurrent_foreign_key :design_management_designs_versions, :namespaces, column: :namespace_id,
on_delete: :cascade
end
def down
with_lock_retries do
remove_foreign_key :design_management_designs_versions, column: :namespace_id
end
end
end

View File

@ -0,0 +1,25 @@
# frozen_string_literal: true
class AddDesignManagementDesignsVersionsNamespaceIdTrigger < Gitlab::Database::Migration[2.2]
milestone '17.9'
def up
install_sharding_key_assignment_trigger(
table: :design_management_designs_versions,
sharding_key: :namespace_id,
parent_table: :design_management_designs,
parent_sharding_key: :namespace_id,
foreign_key: :design_id
)
end
def down
remove_sharding_key_assignment_trigger(
table: :design_management_designs_versions,
sharding_key: :namespace_id,
parent_table: :design_management_designs,
parent_sharding_key: :namespace_id,
foreign_key: :design_id
)
end
end

View File

@ -0,0 +1,40 @@
# frozen_string_literal: true
class QueueBackfillDesignManagementDesignsVersionsNamespaceId < Gitlab::Database::Migration[2.2]
milestone '17.9'
restrict_gitlab_migration gitlab_schema: :gitlab_main_cell
MIGRATION = "BackfillDesignManagementDesignsVersionsNamespaceId"
DELAY_INTERVAL = 2.minutes
BATCH_SIZE = 1000
SUB_BATCH_SIZE = 100
def up
queue_batched_background_migration(
MIGRATION,
:design_management_designs_versions,
:id,
:namespace_id,
:design_management_designs,
:namespace_id,
:design_id,
job_interval: DELAY_INTERVAL,
batch_size: BATCH_SIZE,
sub_batch_size: SUB_BATCH_SIZE
)
end
def down
delete_batched_background_migration(
MIGRATION,
:design_management_designs_versions,
:id,
[
:namespace_id,
:design_management_designs,
:namespace_id,
:design_id
]
)
end
end

View File

@ -0,0 +1 @@
34a5aef5395519e84a744d61da72c20179100eb9f80a3155c0d65349cf211577

View File

@ -0,0 +1 @@
4114f5f0abb3885e3f59c7ea7d68e91bc8f3029bfa773fdc05fd645d6d5ee6f8

View File

@ -0,0 +1 @@
59dd208b078e9a7e0beb6ca647fa3b713db6ad8cfbd468cf15407d5aa4d753a9

View File

@ -0,0 +1 @@
d49e35e24ea177fb8d9fe6b41b17de02763acc62a5cd48857f4d8c2ef0309b0d

View File

@ -0,0 +1 @@
1d9bd2a55fc80346d7d0cd6d74ba526886bc11e65128008d38226228fdeac570

View File

@ -0,0 +1 @@
05c4facdc84979f3859ceeae5cdcb05220f39393da6af98722d17bf04720c566

View File

@ -3364,6 +3364,22 @@ RETURN NEW;
END
$$;
CREATE FUNCTION trigger_fac444e0cae6() RETURNS trigger
LANGUAGE plpgsql
AS $$
BEGIN
IF NEW."namespace_id" IS NULL THEN
SELECT "namespace_id"
INTO NEW."namespace_id"
FROM "design_management_designs"
WHERE "design_management_designs"."id" = NEW."design_id";
END IF;
RETURN NEW;
END
$$;
CREATE FUNCTION trigger_fbd42ed69453() RETURNS trigger
LANGUAGE plpgsql
AS $$
@ -12554,7 +12570,8 @@ CREATE TABLE design_management_designs_versions (
design_id bigint NOT NULL,
version_id bigint NOT NULL,
event smallint DEFAULT 0 NOT NULL,
image_v432x230 character varying(255)
image_v432x230 character varying(255),
namespace_id bigint
);
CREATE SEQUENCE design_management_designs_versions_id_seq
@ -32191,6 +32208,8 @@ CREATE INDEX index_design_management_designs_versions_on_design_id ON design_man
CREATE INDEX index_design_management_designs_versions_on_event ON design_management_designs_versions USING btree (event);
CREATE INDEX index_design_management_designs_versions_on_namespace_id ON design_management_designs_versions USING btree (namespace_id);
CREATE INDEX index_design_management_designs_versions_on_version_id ON design_management_designs_versions USING btree (version_id);
CREATE INDEX index_design_management_repositories_on_namespace_id ON design_management_repositories USING btree (namespace_id);
@ -37945,6 +37964,8 @@ CREATE TRIGGER trigger_f6c61cdddf31 BEFORE INSERT OR UPDATE ON ml_model_metadata
CREATE TRIGGER trigger_f6f59d8216b3 BEFORE INSERT OR UPDATE ON protected_environment_deploy_access_levels FOR EACH ROW EXECUTE FUNCTION trigger_f6f59d8216b3();
CREATE TRIGGER trigger_fac444e0cae6 BEFORE INSERT OR UPDATE ON design_management_designs_versions FOR EACH ROW EXECUTE FUNCTION trigger_fac444e0cae6();
CREATE TRIGGER trigger_fbd42ed69453 BEFORE INSERT OR UPDATE ON external_status_checks_protected_branches FOR EACH ROW EXECUTE FUNCTION trigger_fbd42ed69453();
CREATE TRIGGER trigger_fbd8825b3057 BEFORE INSERT OR UPDATE ON boards_epic_board_labels FOR EACH ROW EXECUTE FUNCTION trigger_fbd8825b3057();
@ -39266,6 +39287,9 @@ ALTER TABLE ONLY fork_network_members
ALTER TABLE ONLY ml_candidate_metadata
ADD CONSTRAINT fk_b044692715 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE;
ALTER TABLE ONLY design_management_designs_versions
ADD CONSTRAINT fk_b054e8aa82 FOREIGN KEY (namespace_id) REFERENCES namespaces(id) ON DELETE CASCADE;
ALTER TABLE ONLY project_deletion_schedules
ADD CONSTRAINT fk_b11f7e2219 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE;

View File

@ -27,8 +27,8 @@ On GitLab Self-Managed:
- `0` for public projects, so they do not consume compute minutes.
- `1` for internal and private projects.
[Trigger jobs](../../ci/yaml/index.md#trigger) do not execute on runners, so they do not
consume compute minutes, even when using [`strategy:depend`](../../ci/yaml/index.md#triggerstrategy)
[Trigger jobs](../../ci/yaml/_index.md#trigger) do not execute on runners, so they do not
consume compute minutes, even when using [`strategy:depend`](../../ci/yaml/_index.md#triggerstrategy)
to wait for the [downstream pipeline](../../ci/pipelines/downstream_pipelines.md) status.
The triggered downstream pipeline consumes compute minutes the same as other pipelines.

View File

@ -104,10 +104,10 @@ To disable artifacts site-wide:
GitLab Runner can upload an archive containing the job artifacts to GitLab. By default,
this is done when the job succeeds, but can also be done on failure, or always, with the
[`artifacts:when`](../../ci/yaml/index.md#artifactswhen) parameter.
[`artifacts:when`](../../ci/yaml/_index.md#artifactswhen) parameter.
Most artifacts are compressed by GitLab Runner before being sent to the coordinator. The exception to this is
[reports artifacts](../../ci/yaml/index.md#artifactsreports), which are compressed after uploading.
[reports artifacts](../../ci/yaml/_index.md#artifactsreports), which are compressed after uploading.
### Using local storage
@ -288,7 +288,7 @@ To migrate artifacts back to local storage:
## Expiring artifacts
If [`artifacts:expire_in`](../../ci/yaml/index.md#artifactsexpire_in) is used to set
If [`artifacts:expire_in`](../../ci/yaml/_index.md#artifactsexpire_in) is used to set
an expiry for the artifacts, they are marked for deletion right after that date passes.
Otherwise, they expire per the [default artifacts expiration setting](../settings/continuous_integration.md#default-artifacts-expiration).

Some files were not shown because too many files have changed in this diff Show More