Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
e28e280b79
commit
4edee7ef8b
|
|
@ -124,7 +124,10 @@ workflow:
|
|||
PIPELINE_NAME: 'Scheduled Ruby $RUBY_VERSION $CI_COMMIT_BRANCH branch'
|
||||
# This work around https://gitlab.com/gitlab-org/gitlab/-/issues/332411 which prevents usage of dependency proxy
|
||||
# when pipeline is triggered by a project access token.
|
||||
- if: '$GITLAB_USER_LOGIN =~ /project_\d+_bot\d*/'
|
||||
# Example of project bot usernames (the format changed over time):
|
||||
# - project_278964_bot2
|
||||
# - project_278964_bot_7fb4d1cca8242cb399a0b8f483783120
|
||||
- if: '$GITLAB_USER_LOGIN =~ /project_\d+_bot/'
|
||||
variables:
|
||||
<<: [*default-ruby-variables, *default-branch-pipeline-failure-variables]
|
||||
GITLAB_DEPENDENCY_PROXY_ADDRESS: ""
|
||||
|
|
|
|||
|
|
@ -67,9 +67,9 @@ start-as-if-foss:
|
|||
variables:
|
||||
START_AS_IF_FOSS: $START_AS_IF_FOSS
|
||||
RUBY_VERSION: $RUBY_VERSION
|
||||
# Fake merge request variables to make `detect-tests` work from FOSS
|
||||
CI_MERGE_REQUEST_PROJECT_PATH: $CI_MERGE_REQUEST_PROJECT_PATH
|
||||
CI_MERGE_REQUEST_IID: $CI_MERGE_REQUEST_IID
|
||||
# Variables for `detect-tests` to work in FOSS
|
||||
FIND_CHANGES_MERGE_REQUEST_PROJECT_PATH: $FIND_CHANGES_MERGE_REQUEST_PROJECT_PATH
|
||||
FIND_CHANGES_MERGE_REQUEST_IID: $FIND_CHANGES_MERGE_REQUEST_IID
|
||||
# Enabling each individual jobs
|
||||
ENABLE_RSPEC: $ENABLE_RSPEC
|
||||
ENABLE_RSPEC_FAST_SPEC_HELPER: $ENABLE_RSPEC_FAST_SPEC_HELPER
|
||||
|
|
|
|||
|
|
@ -2421,6 +2421,11 @@
|
|||
.static-analysis:rules:rubocop:
|
||||
rules:
|
||||
- if: '$ENABLE_RUBOCOP == "true"'
|
||||
# Do not run full rubocop if the merge request isn't approved
|
||||
- <<: *if-merge-request-not-approved
|
||||
changes: *rubocop-patterns
|
||||
variables:
|
||||
RUN_ALL_RUBOCOP: "false"
|
||||
- <<: *if-default-refs
|
||||
changes: *rubocop-patterns
|
||||
variables:
|
||||
|
|
|
|||
|
|
@ -152,7 +152,8 @@ detect-tests:
|
|||
- retrieve_tests_mapping
|
||||
- retrieve_frontend_fixtures_mapping
|
||||
- |
|
||||
if [ -n "$CI_MERGE_REQUEST_IID" ]; then
|
||||
# $FIND_CHANGES_MERGE_REQUEST_IID is defined in as-if-foss.gitlab-ci.yml
|
||||
if [ -n "$CI_MERGE_REQUEST_IID" ] || [ -n "$FIND_CHANGES_MERGE_REQUEST_IID" ]; then
|
||||
mkdir -p $(dirname "$RSPEC_CHANGED_FILES_PATH")
|
||||
|
||||
tooling/bin/predictive_tests
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
v16.11.0
|
||||
v17.0.0-rc1
|
||||
|
|
|
|||
|
|
@ -924,7 +924,7 @@ export default {
|
|||
<work-item-detail
|
||||
:key="activeIssuable.iid"
|
||||
:work-item-iid="activeIssuable.iid"
|
||||
class="gl-pt-0!"
|
||||
class="gl-pt-0! work-item-drawer"
|
||||
@work-item-updated="updateIssuablesCache"
|
||||
@work-item-emoji-updated="updateIssuableEmojis"
|
||||
@addChild="refetchIssuables"
|
||||
|
|
|
|||
|
|
@ -98,24 +98,28 @@ export default {
|
|||
/>
|
||||
</template>
|
||||
<template #left-primary>
|
||||
<div class="gl-display-flex gl-align-items-center gl-mr-3 gl-min-w-0">
|
||||
<div
|
||||
class="gl-display-flex gl-align-items-center gl-gap-3 gl-mr-5 gl-min-w-0"
|
||||
data-testid="package-name"
|
||||
>
|
||||
<gl-link
|
||||
v-if="containsWebPathLink"
|
||||
class="gl-text-body gl-min-w-0"
|
||||
class="gl-text-body gl-min-w-0 gl-word-break-all"
|
||||
:class="errorPackageStyle"
|
||||
:href="packageLink"
|
||||
>
|
||||
<gl-truncate :text="packageEntity.name" />
|
||||
{{ packageEntity.name }}
|
||||
</gl-link>
|
||||
<gl-truncate v-else :class="errorPackageStyle" :text="packageEntity.name" />
|
||||
<span v-else :class="errorPackageStyle">
|
||||
{{ packageEntity.name }}
|
||||
</span>
|
||||
|
||||
<package-tags
|
||||
<div
|
||||
v-if="packageEntity.tags.nodes && packageEntity.tags.nodes.length"
|
||||
class="gl-ml-3"
|
||||
:tags="packageEntity.tags.nodes"
|
||||
hide-label
|
||||
:tag-display-limit="1"
|
||||
/>
|
||||
class="gl-display-flex gl-gap-2"
|
||||
>
|
||||
<package-tags :tags="packageEntity.tags.nodes" hide-label :tag-display-limit="1" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<template #left-secondary>
|
||||
|
|
|
|||
|
|
@ -144,35 +144,40 @@ export default {
|
|||
/>
|
||||
</template>
|
||||
<template #left-primary>
|
||||
<div class="gl-display-flex gl-align-items-center gl-mr-3 gl-min-w-0">
|
||||
<div
|
||||
class="gl-display-flex gl-align-items-center gl-gap-3 gl-mr-5 gl-min-w-0"
|
||||
data-testid="package-name"
|
||||
>
|
||||
<router-link
|
||||
v-if="containsWebPathLink"
|
||||
:class="errorPackageStyle"
|
||||
class="gl-text-body gl-min-w-0"
|
||||
class="gl-text-body gl-min-w-0 gl-word-break-all"
|
||||
data-testid="details-link"
|
||||
:to="{ name: 'details', params: { id: packageId } }"
|
||||
>
|
||||
<gl-truncate :text="packageEntity.name" />
|
||||
{{ packageEntity.name }}
|
||||
</router-link>
|
||||
<gl-truncate v-else :class="errorPackageStyle" :text="packageEntity.name" />
|
||||
<span v-else :class="errorPackageStyle">
|
||||
{{ packageEntity.name }}
|
||||
</span>
|
||||
|
||||
<package-tags
|
||||
v-if="showTags"
|
||||
class="gl-ml-3"
|
||||
:tags="packageEntity.tags.nodes"
|
||||
hide-label
|
||||
:tag-display-limit="1"
|
||||
/>
|
||||
<div v-if="showTags || showBadgeProtected" class="gl-display-flex gl-gap-2">
|
||||
<package-tags
|
||||
v-if="showTags"
|
||||
:tags="packageEntity.tags.nodes"
|
||||
hide-label
|
||||
:tag-display-limit="1"
|
||||
/>
|
||||
|
||||
<gl-badge
|
||||
v-if="showBadgeProtected"
|
||||
v-gl-tooltip="{ title: $options.i18n.badgeProtectedTooltipText }"
|
||||
class="gl-ml-3"
|
||||
icon-size="sm"
|
||||
size="sm"
|
||||
variant="neutral"
|
||||
>{{ __('protected') }}</gl-badge
|
||||
>
|
||||
<gl-badge
|
||||
v-if="showBadgeProtected"
|
||||
v-gl-tooltip="{ title: $options.i18n.badgeProtectedTooltipText }"
|
||||
icon-size="sm"
|
||||
size="sm"
|
||||
variant="neutral"
|
||||
>{{ __('protected') }}</gl-badge
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<template #left-secondary>
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ export default {
|
|||
v-if="
|
||||
$slots['left-primary'] /* eslint-disable-line @gitlab/vue-prefer-dollar-scopedslots */
|
||||
"
|
||||
class="gl-display-flex gl-align-items-center gl-text-body gl-font-weight-bold gl-min-h-6 gl-min-w-0"
|
||||
class="gl-display-flex gl-align-items-center gl-text-body gl-font-weight-semibold gl-min-h-6 gl-min-w-0"
|
||||
>
|
||||
<slot name="left-primary"></slot>
|
||||
<gl-button
|
||||
|
|
@ -101,13 +101,13 @@ export default {
|
|||
'left-secondary'
|
||||
]
|
||||
"
|
||||
class="gl-display-flex gl-align-items-center gl-text-gray-500 gl-min-h-6 gl-min-w-0 gl-flex-grow-1"
|
||||
class="gl-display-flex gl-align-items-center gl-text-secondary gl-font-sm gl-min-h-6 gl-min-w-0 gl-flex-grow-1"
|
||||
>
|
||||
<slot name="left-secondary"></slot>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="gl-display-flex gl-flex-direction-column gl-sm-align-items-flex-end gl-justify-content-space-between gl-text-gray-500 gl-flex-shrink-0"
|
||||
class="gl-display-flex gl-flex-direction-column gl-sm-align-items-flex-end gl-justify-content-space-between gl-text-secondary gl-flex-shrink-0"
|
||||
>
|
||||
<div
|
||||
v-if="
|
||||
|
|
@ -115,7 +115,7 @@ export default {
|
|||
'right-primary'
|
||||
]
|
||||
"
|
||||
class="gl-display-flex gl-align-items-center gl-sm-text-body gl-sm-font-weight-bold gl-min-h-6"
|
||||
class="gl-display-flex gl-align-items-center gl-sm-text-body gl-sm-font-weight-semibold gl-min-h-6"
|
||||
>
|
||||
<slot name="right-primary"></slot>
|
||||
</div>
|
||||
|
|
@ -125,7 +125,7 @@ export default {
|
|||
'right-secondary'
|
||||
]
|
||||
"
|
||||
class="gl-display-flex gl-align-items-center gl-min-h-6"
|
||||
class="gl-display-flex gl-align-items-center gl-font-sm gl-min-h-6"
|
||||
>
|
||||
<slot name="right-secondary"></slot>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -417,7 +417,7 @@ export default {
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<section>
|
||||
<section class="work-item-view">
|
||||
<section v-if="updateError" class="flash-container flash-container-page sticky">
|
||||
<gl-alert class="gl-mb-3" variant="danger" @dismiss="updateError = undefined">
|
||||
{{ updateError }}
|
||||
|
|
|
|||
|
|
@ -431,3 +431,14 @@ $disclosure-hierarchy-chevron-dimension: 1.2rem;
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
.work-item-view.work-item-drawer {
|
||||
container-name: view;
|
||||
container-type: inline-size;
|
||||
}
|
||||
|
||||
@container view (max-width: 40vw) {
|
||||
.work-item-overview {
|
||||
display: block !important;
|
||||
}
|
||||
}
|
||||
|
|
@ -38,7 +38,7 @@ class Admin::GroupsController < Admin::ApplicationController
|
|||
end
|
||||
|
||||
def create
|
||||
response = ::Groups::CreateService.new(current_user, group_params).execute
|
||||
response = ::Groups::CreateService.new(current_user, group_params.with_defaults(organization_id: Current.organization_id)).execute
|
||||
@group = response[:group]
|
||||
|
||||
if response.success?
|
||||
|
|
@ -103,6 +103,7 @@ class Admin::GroupsController < Admin::ApplicationController
|
|||
:enabled_git_access_protocol,
|
||||
:project_creation_level,
|
||||
:subgroup_creation_level,
|
||||
:organization_id,
|
||||
admin_note_attributes: [
|
||||
:note
|
||||
]
|
||||
|
|
|
|||
|
|
@ -84,7 +84,10 @@ class GroupsController < Groups::ApplicationController
|
|||
end
|
||||
|
||||
def create
|
||||
response = Groups::CreateService.new(current_user, group_params).execute
|
||||
response = Groups::CreateService.new(
|
||||
current_user,
|
||||
group_params.merge(organization_id: Current.organization_id)
|
||||
).execute
|
||||
@group = response[:group]
|
||||
|
||||
if response.success?
|
||||
|
|
|
|||
|
|
@ -5,11 +5,11 @@ module Projects
|
|||
require 'json'
|
||||
include ActionView::Helpers::NumberHelper
|
||||
|
||||
def experiment_as_data(experiment)
|
||||
def experiment_as_data(project, experiment)
|
||||
data = {
|
||||
name: experiment.name,
|
||||
metadata: experiment.metadata,
|
||||
path: link_to_experiment(experiment.project, experiment)
|
||||
path: link_to_experiment(project, experiment)
|
||||
}
|
||||
|
||||
Gitlab::Json.generate(data)
|
||||
|
|
|
|||
|
|
@ -21,6 +21,10 @@ class Current < ActiveSupport::CurrentAttributes # rubocop:disable Gitlab/Namesp
|
|||
super(value)
|
||||
end
|
||||
|
||||
def organization_id
|
||||
organization&.id
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# No unlock.
|
||||
|
|
|
|||
|
|
@ -52,7 +52,8 @@ module Groups
|
|||
|
||||
set_visibility_level
|
||||
|
||||
@group = Group.new(params.except(*::NamespaceSetting.allowed_namespace_settings_params))
|
||||
except_keys = ::NamespaceSetting.allowed_namespace_settings_params + [:organization_id]
|
||||
@group = Group.new(params.except(*except_keys))
|
||||
|
||||
set_organization
|
||||
|
||||
|
|
@ -180,7 +181,7 @@ module Groups
|
|||
|
||||
def set_organization
|
||||
if params[:organization_id]
|
||||
nil # nothing to do, already assigned from params
|
||||
@group.organization_id = params[:organization_id]
|
||||
elsif @group.parent_id
|
||||
@group.organization = @group.parent.organization
|
||||
# Rely on middleware setting of the organization, but sometimes it won't be set, so we need to guard it here.
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
- page_title @experiment.name
|
||||
- add_page_specific_style 'page_bundles/ml_experiment_tracking'
|
||||
|
||||
- experiment = experiment_as_data(@experiment)
|
||||
- experiment = experiment_as_data(@project, @experiment)
|
||||
- items = candidates_table_items(@candidates, current_user)
|
||||
- metrics = unique_logged_names(@candidates, &:latest_metrics)
|
||||
- params = unique_logged_names(@candidates, &:params)
|
||||
|
|
|
|||
|
|
@ -83,7 +83,6 @@
|
|||
- integrations
|
||||
- internationalization
|
||||
- logging
|
||||
- measurement_and_locking
|
||||
- merge_trains
|
||||
- metrics
|
||||
- mlops
|
||||
|
|
|
|||
|
|
@ -1,24 +0,0 @@
|
|||
- title: "CiRunnerUpgradeStatusType GraphQL type renamed to CiRunnerUpgradeStatus" # (required) Clearly explain the change, or planned change. For example, "The `confidential` field for a `Note` is deprecated" or "CI/CD job names will be limited to 250 characters."
|
||||
removal_milestone: "17.0" # (required) The milestone when this feature is planned to be removed
|
||||
announcement_milestone: "16.0" # (required) The milestone when this feature was first announced as deprecated.
|
||||
breaking_change: true # (required) Change to false if this is not a breaking change.
|
||||
reporter: pedropombeiro # (required) GitLab username of the person reporting the change
|
||||
stage: Verify # (required) String value of the stage that the feature was created in. e.g., Growth
|
||||
issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/409332 # (required) Link to the deprecation issue in GitLab
|
||||
body: | # (required) Do not modify this line, instead modify the lines below.
|
||||
The `CiRunnerUpgradeStatusType` GraphQL type has been renamed to `CiRunnerUpgradeStatus`. In GitLab 17.0,
|
||||
the aliasing for the `CiRunnerUpgradeStatusType` type will be removed.
|
||||
#
|
||||
# OPTIONAL END OF SUPPORT FIELDS
|
||||
#
|
||||
# If an End of Support period applies, the announcement should be shared with GitLab Support
|
||||
# in the `#spt_managers` channel in Slack, and mention `@gitlab-com/support` in this MR.
|
||||
#
|
||||
end_of_support_milestone: # (optional) Use "XX.YY" format. The milestone when support for this feature will end.
|
||||
#
|
||||
# OTHER OPTIONAL FIELDS
|
||||
#
|
||||
tiers: # (optional - may be required in the future) An array of tiers that the feature is available in currently. e.g., [Free, Silver, Gold, Core, Premium, Ultimate]
|
||||
documentation_url: https://docs.gitlab.com/ee/api/graphql/reference/index.html#cirunnerupgradestatus # (optional) This is a link to the current documentation page
|
||||
image_url: # (optional) This is a link to a thumbnail image depicting the feature
|
||||
video_url: # (optional) Use the youtube thumbnail URL with the structure of https://img.youtube.com/vi/UNIQUEID/hqdefault.jpg
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class SyncIndexForPipelinesIdBigintRelated < Gitlab::Database::Migration[2.2]
|
||||
milestone '17.0'
|
||||
disable_ddl_transaction!
|
||||
|
||||
TABLE = :ci_pipelines
|
||||
INDEXES = [
|
||||
{
|
||||
name: :idx_ci_pipelines_artifacts_locked_bigint,
|
||||
columns: [:ci_ref_id, :id_convert_to_bigint],
|
||||
options: { where: 'locked = 1' }
|
||||
},
|
||||
{
|
||||
name: :index_ci_pipelines_for_ondemand_dast_scans_bigint,
|
||||
columns: [:id_convert_to_bigint],
|
||||
options: { where: 'source = 13' }
|
||||
},
|
||||
{
|
||||
name: :index_ci_pipelines_on_ci_ref_id_and_more_bigint,
|
||||
columns: [:ci_ref_id, :id_convert_to_bigint, :source, :status],
|
||||
options: { order: { id_convert_to_bigint: :desc }, where: 'ci_ref_id IS NOT NULL' }
|
||||
},
|
||||
{
|
||||
name: :index_ci_pipelines_on_pipeline_schedule_id_and_id_bigint,
|
||||
columns: [:pipeline_schedule_id, :id_convert_to_bigint]
|
||||
},
|
||||
{
|
||||
name: :index_ci_pipelines_on_project_id_and_id_desc_bigint,
|
||||
columns: [:project_id, :id_convert_to_bigint],
|
||||
options: { order: { id_convert_to_bigint: :desc } }
|
||||
},
|
||||
{
|
||||
name: :idx_ci_pipelines_on_project_id_and_ref_and_status_and_id_bigint,
|
||||
columns: [:project_id, :ref, :status, :id_convert_to_bigint]
|
||||
},
|
||||
{
|
||||
name: :index_ci_pipelines_on_project_id_and_ref_and_id_desc_bigint,
|
||||
columns: [:project_id, :ref, :id_convert_to_bigint],
|
||||
options: { order: { id_convert_to_bigint: :desc } }
|
||||
},
|
||||
{
|
||||
name: :index_ci_pipelines_on_status_and_id_bigint,
|
||||
columns: [:status, :id_convert_to_bigint]
|
||||
},
|
||||
{
|
||||
name: :idx_ci_pipelines_on_user_id_and_id_and_cancelable_status_bigint,
|
||||
columns: [:user_id, :id_convert_to_bigint],
|
||||
options: { where: "((status)::text = ANY (ARRAY[('running'::character varying)::text, ('waiting_for_resource'::character varying)::text, ('preparing'::character varying)::text, ('pending'::character varying)::text, ('created'::character varying)::text, ('scheduled'::character varying)::text]))" } # rubocop:disable Layout/LineLength -- Just too long
|
||||
},
|
||||
{
|
||||
name: :idx_ci_pipelines_on_user_id_and_user_not_verified_bigint,
|
||||
columns: [:user_id, :id_convert_to_bigint],
|
||||
options: { order: { id_convert_to_bigint: :desc }, where: "failure_reason = 3" }
|
||||
}
|
||||
]
|
||||
|
||||
def up
|
||||
INDEXES.each do |index|
|
||||
add_concurrent_index(TABLE, index[:columns], name: index[:name], **(index[:options] || {}))
|
||||
end
|
||||
end
|
||||
|
||||
def down
|
||||
INDEXES.each do |index|
|
||||
remove_concurrent_index_by_name(TABLE, index[:name])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,177 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class ValidateFkIdBigint4CiPipelinesPCiBuildsCiPipelinesConfigPCiStages < Gitlab::Database::Migration[2.2]
|
||||
include ::Gitlab::Database::PartitioningMigrationHelpers
|
||||
|
||||
milestone '17.0'
|
||||
disable_ddl_transaction!
|
||||
|
||||
TABLE = :ci_pipelines
|
||||
FOREIGN_KEYS = [
|
||||
{
|
||||
source_table: :ci_pipelines,
|
||||
options: {
|
||||
name: :fk_262d4c2d19_tmp,
|
||||
column: [:auto_canceled_by_id],
|
||||
on_delete: :nullify
|
||||
}
|
||||
},
|
||||
{
|
||||
source_table: :ci_pipeline_chat_data,
|
||||
options: {
|
||||
name: :fk_64ebfab6b3_tmp,
|
||||
column: [:pipeline_id],
|
||||
on_delete: :cascade
|
||||
}
|
||||
},
|
||||
{
|
||||
source_table: :ci_sources_pipelines,
|
||||
options: {
|
||||
name: :fk_d4e29af7d7_tmp,
|
||||
column: [:source_pipeline_id],
|
||||
on_delete: :cascade
|
||||
}
|
||||
},
|
||||
{
|
||||
source_table: :ci_sources_pipelines,
|
||||
options: {
|
||||
name: :fk_e1bad85861_tmp,
|
||||
column: [:pipeline_id],
|
||||
on_delete: :cascade
|
||||
}
|
||||
},
|
||||
{
|
||||
source_table: :ci_sources_projects,
|
||||
options: {
|
||||
name: :fk_rails_10a1eb379a_tmp,
|
||||
column: [:pipeline_id],
|
||||
on_delete: :cascade
|
||||
}
|
||||
},
|
||||
{
|
||||
source_table: :ci_pipeline_metadata,
|
||||
options: {
|
||||
name: :fk_rails_50c1e9ea10_tmp,
|
||||
column: [:pipeline_id],
|
||||
on_delete: :cascade
|
||||
}
|
||||
},
|
||||
{
|
||||
source_table: :ci_pipeline_messages,
|
||||
options: {
|
||||
name: :fk_rails_8d3b04e3e1_tmp,
|
||||
column: [:pipeline_id],
|
||||
on_delete: :cascade
|
||||
}
|
||||
},
|
||||
{
|
||||
source_table: :ci_pipelines_config,
|
||||
options: {
|
||||
name: :fk_rails_906c9a2533_tmp,
|
||||
column: [:pipeline_id],
|
||||
on_delete: :cascade
|
||||
}
|
||||
},
|
||||
{
|
||||
source_table: :ci_pipeline_artifacts,
|
||||
options: {
|
||||
name: :fk_rails_a9e811a466_tmp,
|
||||
column: [:pipeline_id],
|
||||
on_delete: :cascade
|
||||
}
|
||||
},
|
||||
{
|
||||
source_table: :ci_daily_build_group_report_results,
|
||||
options: {
|
||||
name: :fk_rails_ee072d13b3_tmp,
|
||||
column: [:last_pipeline_id],
|
||||
on_delete: :cascade
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
P_FOREIGN_KEYS = [
|
||||
{
|
||||
source_table: :p_ci_builds,
|
||||
options: {
|
||||
name: :fk_87f4cefcda_tmp,
|
||||
column: [:upstream_pipeline_id],
|
||||
on_delete: :cascade
|
||||
}
|
||||
},
|
||||
{
|
||||
source_table: :p_ci_builds,
|
||||
options: {
|
||||
name: :fk_d3130c9a7f_tmp,
|
||||
column: [:commit_id],
|
||||
on_delete: :cascade
|
||||
}
|
||||
},
|
||||
{
|
||||
source_table: :p_ci_builds,
|
||||
options: {
|
||||
name: :fk_a2141b1522_tmp,
|
||||
column: [:auto_canceled_by_id],
|
||||
on_delete: :nullify
|
||||
}
|
||||
},
|
||||
{
|
||||
source_table: :p_ci_pipeline_variables,
|
||||
options: {
|
||||
name: :fk_f29c5f4380_tmp,
|
||||
column: [:pipeline_id],
|
||||
on_delete: :cascade
|
||||
}
|
||||
},
|
||||
{
|
||||
source_table: :p_ci_stages,
|
||||
options: {
|
||||
name: :fk_fb57e6cc56_tmp,
|
||||
column: [:pipeline_id],
|
||||
on_delete: :cascade
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
def up
|
||||
FOREIGN_KEYS.each do |fk|
|
||||
validate_foreign_key(fk[:source_table], fk[:options][:column], name: fk[:options][:name])
|
||||
end
|
||||
|
||||
P_FOREIGN_KEYS.each do |fk|
|
||||
add_concurrent_partitioned_foreign_key(fk[:source_table], TABLE, **default_options.merge(fk[:options]))
|
||||
end
|
||||
end
|
||||
|
||||
def down
|
||||
FOREIGN_KEYS.each do |fk|
|
||||
with_lock_retries do
|
||||
remove_foreign_key_if_exists(
|
||||
fk[:source_table], TABLE,
|
||||
name: fk[:options][:name], reverse_lock_order: true
|
||||
)
|
||||
end
|
||||
|
||||
add_concurrent_foreign_key(fk[:source_table], TABLE, **default_options.merge(fk[:options]), validate: false)
|
||||
end
|
||||
|
||||
P_FOREIGN_KEYS.each do |fk|
|
||||
with_lock_retries do
|
||||
remove_foreign_key_if_exists(
|
||||
fk[:source_table], TABLE,
|
||||
name: fk[:options][:name], reverse_lock_order: true
|
||||
)
|
||||
end
|
||||
|
||||
add_concurrent_partitioned_foreign_key(
|
||||
fk[:source_table], TABLE, **default_options.merge(fk[:options]), validate: false
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def default_options
|
||||
{ target_column: [:id_convert_to_bigint], reverse_lock_order: true, validate: true }
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1 @@
|
|||
c0755bd5c74f74b2d27546dcd5965ed6b4aa18e96c0ab066ef6a9d6b1b690f49
|
||||
|
|
@ -0,0 +1 @@
|
|||
9b614c01c7ff4d314637846c1472308669a1952bf251ac798ed157e89e932e60
|
||||
|
|
@ -23916,6 +23916,14 @@ CREATE UNIQUE INDEX idx_ci_job_artifacts_on_job_id_file_type_and_partition_id_un
|
|||
|
||||
CREATE INDEX idx_ci_pipelines_artifacts_locked ON ci_pipelines USING btree (ci_ref_id, id) WHERE (locked = 1);
|
||||
|
||||
CREATE INDEX idx_ci_pipelines_artifacts_locked_bigint ON ci_pipelines USING btree (ci_ref_id, id_convert_to_bigint) WHERE (locked = 1);
|
||||
|
||||
CREATE INDEX idx_ci_pipelines_on_project_id_and_ref_and_status_and_id_bigint ON ci_pipelines USING btree (project_id, ref, status, id_convert_to_bigint);
|
||||
|
||||
CREATE INDEX idx_ci_pipelines_on_user_id_and_id_and_cancelable_status_bigint ON ci_pipelines USING btree (user_id, id_convert_to_bigint) WHERE ((status)::text = ANY (ARRAY[('running'::character varying)::text, ('waiting_for_resource'::character varying)::text, ('preparing'::character varying)::text, ('pending'::character varying)::text, ('created'::character varying)::text, ('scheduled'::character varying)::text]));
|
||||
|
||||
CREATE INDEX idx_ci_pipelines_on_user_id_and_user_not_verified_bigint ON ci_pipelines USING btree (user_id, id_convert_to_bigint DESC) WHERE (failure_reason = 3);
|
||||
|
||||
CREATE INDEX idx_compliance_security_policies_on_policy_configuration_id ON compliance_framework_security_policies USING btree (policy_configuration_id);
|
||||
|
||||
CREATE UNIQUE INDEX idx_component_usages_on_component_used_by_project_and_used_date ON ONLY p_catalog_resource_component_usages USING btree (component_id, used_by_project_id, used_date);
|
||||
|
|
@ -24766,10 +24774,14 @@ CREATE INDEX index_ci_pipelines_config_on_pipeline_id ON ci_pipelines_config USI
|
|||
|
||||
CREATE INDEX index_ci_pipelines_for_ondemand_dast_scans ON ci_pipelines USING btree (id) WHERE (source = 13);
|
||||
|
||||
CREATE INDEX index_ci_pipelines_for_ondemand_dast_scans_bigint ON ci_pipelines USING btree (id_convert_to_bigint) WHERE (source = 13);
|
||||
|
||||
CREATE INDEX index_ci_pipelines_on_auto_canceled_by_id ON ci_pipelines USING btree (auto_canceled_by_id);
|
||||
|
||||
CREATE INDEX index_ci_pipelines_on_ci_ref_id_and_more ON ci_pipelines USING btree (ci_ref_id, id DESC, source, status) WHERE (ci_ref_id IS NOT NULL);
|
||||
|
||||
CREATE INDEX index_ci_pipelines_on_ci_ref_id_and_more_bigint ON ci_pipelines USING btree (ci_ref_id, id_convert_to_bigint DESC, source, status) WHERE (ci_ref_id IS NOT NULL);
|
||||
|
||||
CREATE INDEX index_ci_pipelines_on_external_pull_request_id ON ci_pipelines USING btree (external_pull_request_id) WHERE (external_pull_request_id IS NOT NULL);
|
||||
|
||||
CREATE UNIQUE INDEX index_ci_pipelines_on_id_convert_to_bigint ON ci_pipelines USING btree (id_convert_to_bigint);
|
||||
|
|
@ -24778,10 +24790,16 @@ CREATE INDEX index_ci_pipelines_on_merge_request_id ON ci_pipelines USING btree
|
|||
|
||||
CREATE INDEX index_ci_pipelines_on_pipeline_schedule_id_and_id ON ci_pipelines USING btree (pipeline_schedule_id, id);
|
||||
|
||||
CREATE INDEX index_ci_pipelines_on_pipeline_schedule_id_and_id_bigint ON ci_pipelines USING btree (pipeline_schedule_id, id_convert_to_bigint);
|
||||
|
||||
CREATE INDEX index_ci_pipelines_on_project_id_and_id_desc ON ci_pipelines USING btree (project_id, id DESC);
|
||||
|
||||
CREATE INDEX index_ci_pipelines_on_project_id_and_id_desc_bigint ON ci_pipelines USING btree (project_id, id_convert_to_bigint DESC);
|
||||
|
||||
CREATE UNIQUE INDEX index_ci_pipelines_on_project_id_and_iid ON ci_pipelines USING btree (project_id, iid) WHERE (iid IS NOT NULL);
|
||||
|
||||
CREATE INDEX index_ci_pipelines_on_project_id_and_ref_and_id_desc_bigint ON ci_pipelines USING btree (project_id, ref, id_convert_to_bigint DESC);
|
||||
|
||||
CREATE INDEX index_ci_pipelines_on_project_id_and_ref_and_status_and_id ON ci_pipelines USING btree (project_id, ref, status, id);
|
||||
|
||||
CREATE INDEX index_ci_pipelines_on_project_id_and_sha ON ci_pipelines USING btree (project_id, sha);
|
||||
|
|
@ -24800,6 +24818,8 @@ CREATE INDEX index_ci_pipelines_on_project_idandrefandiddesc ON ci_pipelines USI
|
|||
|
||||
CREATE INDEX index_ci_pipelines_on_status_and_id ON ci_pipelines USING btree (status, id);
|
||||
|
||||
CREATE INDEX index_ci_pipelines_on_status_and_id_bigint ON ci_pipelines USING btree (status, id_convert_to_bigint);
|
||||
|
||||
CREATE INDEX index_ci_pipelines_on_user_id_and_created_at_and_config_source ON ci_pipelines USING btree (user_id, created_at, config_source);
|
||||
|
||||
CREATE INDEX index_ci_pipelines_on_user_id_and_created_at_and_source ON ci_pipelines USING btree (user_id, created_at, source);
|
||||
|
|
@ -29893,7 +29913,7 @@ ALTER TABLE ONLY ci_pipelines
|
|||
ADD CONSTRAINT fk_262d4c2d19 FOREIGN KEY (auto_canceled_by_id) REFERENCES ci_pipelines(id) ON DELETE SET NULL;
|
||||
|
||||
ALTER TABLE ONLY ci_pipelines
|
||||
ADD CONSTRAINT fk_262d4c2d19_tmp FOREIGN KEY (auto_canceled_by_id) REFERENCES ci_pipelines(id_convert_to_bigint) ON DELETE SET NULL NOT VALID;
|
||||
ADD CONSTRAINT fk_262d4c2d19_tmp FOREIGN KEY (auto_canceled_by_id) REFERENCES ci_pipelines(id_convert_to_bigint) ON DELETE SET NULL;
|
||||
|
||||
ALTER TABLE ONLY geo_event_log
|
||||
ADD CONSTRAINT fk_27548c6db3 FOREIGN KEY (hashed_storage_migrated_event_id) REFERENCES geo_hashed_storage_migrated_events(id) ON DELETE CASCADE;
|
||||
|
|
@ -30163,7 +30183,7 @@ ALTER TABLE ONLY ci_pipeline_chat_data
|
|||
ADD CONSTRAINT fk_64ebfab6b3 FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY ci_pipeline_chat_data
|
||||
ADD CONSTRAINT fk_64ebfab6b3_tmp FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id_convert_to_bigint) ON DELETE CASCADE NOT VALID;
|
||||
ADD CONSTRAINT fk_64ebfab6b3_tmp FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id_convert_to_bigint) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY cluster_agent_tokens
|
||||
ADD CONSTRAINT fk_64f741f626 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE;
|
||||
|
|
@ -30309,8 +30329,8 @@ ALTER TABLE ONLY packages_package_files
|
|||
ALTER TABLE p_ci_builds
|
||||
ADD CONSTRAINT fk_87f4cefcda FOREIGN KEY (upstream_pipeline_id) REFERENCES ci_pipelines(id) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY ci_builds
|
||||
ADD CONSTRAINT fk_87f4cefcda_tmp FOREIGN KEY (upstream_pipeline_id) REFERENCES ci_pipelines(id_convert_to_bigint) ON DELETE CASCADE NOT VALID;
|
||||
ALTER TABLE p_ci_builds
|
||||
ADD CONSTRAINT fk_87f4cefcda_tmp FOREIGN KEY (upstream_pipeline_id) REFERENCES ci_pipelines(id_convert_to_bigint) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY approval_group_rules_users
|
||||
ADD CONSTRAINT fk_888a0df3b7 FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
|
||||
|
|
@ -30435,8 +30455,8 @@ ALTER TABLE ONLY subscription_add_on_purchases
|
|||
ALTER TABLE p_ci_builds
|
||||
ADD CONSTRAINT fk_a2141b1522 FOREIGN KEY (auto_canceled_by_id) REFERENCES ci_pipelines(id) ON DELETE SET NULL;
|
||||
|
||||
ALTER TABLE ONLY ci_builds
|
||||
ADD CONSTRAINT fk_a2141b1522_tmp FOREIGN KEY (auto_canceled_by_id) REFERENCES ci_pipelines(id_convert_to_bigint) ON DELETE SET NULL NOT VALID;
|
||||
ALTER TABLE p_ci_builds
|
||||
ADD CONSTRAINT fk_a2141b1522_tmp FOREIGN KEY (auto_canceled_by_id) REFERENCES ci_pipelines(id_convert_to_bigint) ON DELETE SET NULL;
|
||||
|
||||
ALTER TABLE ONLY bulk_import_entities
|
||||
ADD CONSTRAINT fk_a44ff95be5 FOREIGN KEY (parent_id) REFERENCES bulk_import_entities(id) ON DELETE CASCADE;
|
||||
|
|
@ -30687,14 +30707,14 @@ ALTER TABLE ONLY environments
|
|||
ALTER TABLE p_ci_builds
|
||||
ADD CONSTRAINT fk_d3130c9a7f FOREIGN KEY (commit_id) REFERENCES ci_pipelines(id) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY ci_builds
|
||||
ADD CONSTRAINT fk_d3130c9a7f_tmp FOREIGN KEY (commit_id) REFERENCES ci_pipelines(id_convert_to_bigint) ON DELETE CASCADE NOT VALID;
|
||||
ALTER TABLE p_ci_builds
|
||||
ADD CONSTRAINT fk_d3130c9a7f_tmp FOREIGN KEY (commit_id) REFERENCES ci_pipelines(id_convert_to_bigint) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY ci_sources_pipelines
|
||||
ADD CONSTRAINT fk_d4e29af7d7 FOREIGN KEY (source_pipeline_id) REFERENCES ci_pipelines(id) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY ci_sources_pipelines
|
||||
ADD CONSTRAINT fk_d4e29af7d7_tmp FOREIGN KEY (source_pipeline_id) REFERENCES ci_pipelines(id_convert_to_bigint) ON DELETE CASCADE NOT VALID;
|
||||
ADD CONSTRAINT fk_d4e29af7d7_tmp FOREIGN KEY (source_pipeline_id) REFERENCES ci_pipelines(id_convert_to_bigint) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY incident_management_timeline_events
|
||||
ADD CONSTRAINT fk_d606a2a890 FOREIGN KEY (promoted_from_note_id) REFERENCES notes(id) ON DELETE SET NULL;
|
||||
|
|
@ -30769,7 +30789,7 @@ ALTER TABLE ONLY ci_sources_pipelines
|
|||
ADD CONSTRAINT fk_e1bad85861 FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY ci_sources_pipelines
|
||||
ADD CONSTRAINT fk_e1bad85861_tmp FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id_convert_to_bigint) ON DELETE CASCADE NOT VALID;
|
||||
ADD CONSTRAINT fk_e1bad85861_tmp FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id_convert_to_bigint) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE p_ci_builds_metadata
|
||||
ADD CONSTRAINT fk_e20479742e_p FOREIGN KEY (partition_id, build_id) REFERENCES p_ci_builds(partition_id, id) ON UPDATE CASCADE ON DELETE CASCADE;
|
||||
|
|
@ -30864,8 +30884,8 @@ ALTER TABLE ONLY boards
|
|||
ALTER TABLE p_ci_pipeline_variables
|
||||
ADD CONSTRAINT fk_f29c5f4380 FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY ci_pipeline_variables
|
||||
ADD CONSTRAINT fk_f29c5f4380_tmp FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id_convert_to_bigint) ON DELETE CASCADE NOT VALID;
|
||||
ALTER TABLE p_ci_pipeline_variables
|
||||
ADD CONSTRAINT fk_f29c5f4380_tmp FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id_convert_to_bigint) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY zoekt_indices
|
||||
ADD CONSTRAINT fk_f34800a202 FOREIGN KEY (zoekt_node_id) REFERENCES zoekt_nodes(id) ON DELETE CASCADE;
|
||||
|
|
@ -30903,8 +30923,8 @@ ALTER TABLE ONLY application_settings
|
|||
ALTER TABLE p_ci_stages
|
||||
ADD CONSTRAINT fk_fb57e6cc56 FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY ci_stages
|
||||
ADD CONSTRAINT fk_fb57e6cc56_tmp FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id_convert_to_bigint) ON DELETE CASCADE NOT VALID;
|
||||
ALTER TABLE p_ci_stages
|
||||
ADD CONSTRAINT fk_fb57e6cc56_tmp FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id_convert_to_bigint) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY agent_group_authorizations
|
||||
ADD CONSTRAINT fk_fb70782616 FOREIGN KEY (agent_id) REFERENCES cluster_agents(id) ON DELETE CASCADE;
|
||||
|
|
@ -31066,7 +31086,7 @@ ALTER TABLE ONLY ci_sources_projects
|
|||
ADD CONSTRAINT fk_rails_10a1eb379a FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY ci_sources_projects
|
||||
ADD CONSTRAINT fk_rails_10a1eb379a_tmp FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id_convert_to_bigint) ON DELETE CASCADE NOT VALID;
|
||||
ADD CONSTRAINT fk_rails_10a1eb379a_tmp FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id_convert_to_bigint) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY zoom_meetings
|
||||
ADD CONSTRAINT fk_rails_1190f0e0fa FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE;
|
||||
|
|
@ -31528,7 +31548,7 @@ ALTER TABLE ONLY ci_pipeline_metadata
|
|||
ADD CONSTRAINT fk_rails_50c1e9ea10 FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY ci_pipeline_metadata
|
||||
ADD CONSTRAINT fk_rails_50c1e9ea10_tmp FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id_convert_to_bigint) ON DELETE CASCADE NOT VALID;
|
||||
ADD CONSTRAINT fk_rails_50c1e9ea10_tmp FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id_convert_to_bigint) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY project_repository_storage_moves
|
||||
ADD CONSTRAINT fk_rails_5106dbd44a FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE;
|
||||
|
|
@ -31978,7 +31998,7 @@ ALTER TABLE ONLY ci_pipeline_messages
|
|||
ADD CONSTRAINT fk_rails_8d3b04e3e1 FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY ci_pipeline_messages
|
||||
ADD CONSTRAINT fk_rails_8d3b04e3e1_tmp FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id_convert_to_bigint) ON DELETE CASCADE NOT VALID;
|
||||
ADD CONSTRAINT fk_rails_8d3b04e3e1_tmp FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id_convert_to_bigint) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE incident_management_pending_alert_escalations
|
||||
ADD CONSTRAINT fk_rails_8d8de95da9 FOREIGN KEY (alert_id) REFERENCES alert_management_alerts(id) ON DELETE CASCADE;
|
||||
|
|
@ -32008,7 +32028,7 @@ ALTER TABLE ONLY ci_pipelines_config
|
|||
ADD CONSTRAINT fk_rails_906c9a2533 FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY ci_pipelines_config
|
||||
ADD CONSTRAINT fk_rails_906c9a2533_tmp FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id_convert_to_bigint) ON DELETE CASCADE NOT VALID;
|
||||
ADD CONSTRAINT fk_rails_906c9a2533_tmp FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id_convert_to_bigint) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY approval_project_rules_groups
|
||||
ADD CONSTRAINT fk_rails_9071e863d1 FOREIGN KEY (approval_project_rule_id) REFERENCES approval_project_rules(id) ON DELETE CASCADE;
|
||||
|
|
@ -32197,7 +32217,7 @@ ALTER TABLE ONLY ci_pipeline_artifacts
|
|||
ADD CONSTRAINT fk_rails_a9e811a466 FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY ci_pipeline_artifacts
|
||||
ADD CONSTRAINT fk_rails_a9e811a466_tmp FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id_convert_to_bigint) ON DELETE CASCADE NOT VALID;
|
||||
ADD CONSTRAINT fk_rails_a9e811a466_tmp FOREIGN KEY (pipeline_id) REFERENCES ci_pipelines(id_convert_to_bigint) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY merge_request_user_mentions
|
||||
ADD CONSTRAINT fk_rails_aa1b2961b1 FOREIGN KEY (merge_request_id) REFERENCES merge_requests(id) ON DELETE CASCADE;
|
||||
|
|
@ -32701,7 +32721,7 @@ ALTER TABLE ONLY ci_daily_build_group_report_results
|
|||
ADD CONSTRAINT fk_rails_ee072d13b3 FOREIGN KEY (last_pipeline_id) REFERENCES ci_pipelines(id) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY ci_daily_build_group_report_results
|
||||
ADD CONSTRAINT fk_rails_ee072d13b3_tmp FOREIGN KEY (last_pipeline_id) REFERENCES ci_pipelines(id_convert_to_bigint) ON DELETE CASCADE NOT VALID;
|
||||
ADD CONSTRAINT fk_rails_ee072d13b3_tmp FOREIGN KEY (last_pipeline_id) REFERENCES ci_pipelines(id_convert_to_bigint) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY import_source_users
|
||||
ADD CONSTRAINT fk_rails_ee30e569be FOREIGN KEY (namespace_id) REFERENCES namespaces(id) ON DELETE CASCADE;
|
||||
|
|
|
|||
|
|
@ -21,8 +21,6 @@ To see DevOps Reports:
|
|||
|
||||
## DevOps Score
|
||||
|
||||
> - [Renamed](https://gitlab.com/gitlab-org/gitlab/-/issues/20976) from Conversational Development Index in GitLab 12.6.
|
||||
|
||||
NOTE:
|
||||
To see the DevOps score, you must activate your GitLab instance's [Service Ping](../settings/usage_statistics.md#service-ping). DevOps Score is a comparative tool, so your score data must be centrally processed by GitLab Inc. first.
|
||||
|
||||
|
|
@ -47,14 +45,6 @@ DETAILS:
|
|||
**Tier:** Ultimate
|
||||
**Offering:** Self-managed
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/247112) in GitLab 13.7 as a [Beta feature](../../policy/experiment-beta-support.md#beta).
|
||||
> - The Overview tab [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/330401) in GitLab 14.1.
|
||||
> - DAST and SAST metrics [added](https://gitlab.com/gitlab-org/gitlab/-/issues/328033) in GitLab 14.1.
|
||||
> - Fuzz Testing metrics [added](https://gitlab.com/gitlab-org/gitlab/-/issues/330398) in GitLab 14.2.
|
||||
> - Dependency Scanning metrics [added](https://gitlab.com/gitlab-org/gitlab/-/issues/328034) in GitLab 14.2.
|
||||
> - Multi-select [added](https://gitlab.com/gitlab-org/gitlab/-/issues/333586) in GitLab 14.2.
|
||||
> - Overview table [added](https://gitlab.com/gitlab-org/gitlab/-/issues/335638) in GitLab 14.3.
|
||||
|
||||
DevOps Adoption shows feature adoption for development, security, and operations.
|
||||
|
||||
| Category | Feature |
|
||||
|
|
|
|||
|
|
@ -10,8 +10,6 @@ DETAILS:
|
|||
**Tier:** Free, Premium, Ultimate
|
||||
**Offering:** Self-managed
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/41416) in GitLab 11.2.
|
||||
|
||||
Instance-level analytics provide insights into the feature and data usage of your entire instance.
|
||||
|
||||
## View instance-level analytics
|
||||
|
|
|
|||
|
|
@ -10,9 +10,6 @@ DETAILS:
|
|||
**Tier:** Free, Premium, Ultimate
|
||||
**Offering:** Self-managed
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/235754) in GitLab 13.5 behind a feature flag, disabled by default.
|
||||
> - [Became enabled by default](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/46962) in GitLab 13.6.
|
||||
> - [Renamed](https://gitlab.com/gitlab-org/gitlab/-/issues/285220) from Instance Statistics to Usage Trends in GitLab 13.6.
|
||||
> - It's enabled on GitLab.com.
|
||||
> - It's recommended for production use.
|
||||
|
||||
|
|
|
|||
|
|
@ -431,7 +431,7 @@ control over how the Pages daemon runs and serves content in your environment.
|
|||
| `namespace_in_path` | (Experimental) Enable or disable namespace in the URL path. This requires `pages_nginx[enable] = true`. Sets `rewrite` configuration in NGINX to support [without wildcard DNS setup](#for-namespace-in-url-path-without-wildcard-dns). Default: `false` |
|
||||
| `propagate_correlation_id` | Set to true (false by default) to re-use existing Correlation ID from the incoming request header `X-Request-ID` if present. If a reverse proxy sets this header, the value is propagated in the request chain. |
|
||||
| `max_connections` | Limit on the number of concurrent connections to the HTTP, HTTPS or proxy listeners. |
|
||||
| `max_uri_length` | The maximum length of URIs accepted by GitLab Pages. Set to 0 for unlimited length. [Introduced](https://gitlab.com/gitlab-org/omnibus-gitlab/-/merge_requests/5729) in GitLab 14.5. |
|
||||
| `max_uri_length` | The maximum length of URIs accepted by GitLab Pages. Set to 0 for unlimited length. |
|
||||
| `metrics_address` | The address to listen on for metrics requests. |
|
||||
| `redirect_http` | Redirect pages from HTTP to HTTPS, true/false. |
|
||||
| `redirects_max_config_size` | The maximum size of the `_redirects` file, in bytes (default: 65536). |
|
||||
|
|
@ -575,8 +575,6 @@ verification requirement:
|
|||
|
||||
### Let's Encrypt integration
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/28996) in GitLab 12.1.
|
||||
|
||||
[GitLab Pages' Let's Encrypt integration](../../user/project/pages/custom_domains_ssl_tls_certification/lets_encrypt_integration.md)
|
||||
allows users to add Let's Encrypt SSL certificates for GitLab Pages
|
||||
sites served under a custom domain.
|
||||
|
|
@ -623,8 +621,6 @@ all the App nodes and Sidekiq nodes.
|
|||
|
||||
#### Using Pages with reduced authentication scope
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab-pages/-/merge_requests/423) in GitLab 13.10.
|
||||
|
||||
By default, the Pages daemon uses the `api` scope to authenticate. You can configure this. For
|
||||
example, this reduces the scope to `read_api` in `/etc/gitlab/gitlab.rb`:
|
||||
|
||||
|
|
@ -646,8 +642,6 @@ this:
|
|||
|
||||
#### Disable public access to all Pages sites
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/32095) in GitLab 12.7.
|
||||
|
||||
You can enforce [Access Control](#access-control) for all GitLab Pages websites hosted
|
||||
on your GitLab instance. By doing so, only authenticated users have access to them.
|
||||
This setting overrides Access Control set by users in individual projects.
|
||||
|
|
@ -694,8 +688,6 @@ Authority (CA) in the system certificate store.
|
|||
|
||||
### ZIP serving and cache configuration
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab-pages/-/merge_requests/392) in GitLab 13.7.
|
||||
|
||||
WARNING:
|
||||
These instructions deal with some advanced settings of your GitLab instance. The recommended default values are set inside GitLab Pages. You should
|
||||
change these settings only if absolutely necessary. Use extreme caution.
|
||||
|
|
@ -787,8 +779,6 @@ Follow the steps below to configure verbose logging of GitLab Pages daemon.
|
|||
|
||||
## Propagating the correlation ID
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab-pages/-/merge_requests/438) in GitLab 13.10.
|
||||
|
||||
Setting the `propagate_correlation_id` to true allows installations behind a reverse proxy to generate
|
||||
and set a correlation ID to requests sent to GitLab Pages. When a reverse proxy sets the header value `X-Request-ID`,
|
||||
the value propagates in the request chain.
|
||||
|
|
@ -1015,24 +1005,16 @@ Pages server.
|
|||
When GitLab Pages daemon serves pages requests it firstly needs to identify which project should be used to
|
||||
serve the requested URL and how its content is stored.
|
||||
|
||||
Before GitLab 13.3, all pages content was extracted to the special shared directory,
|
||||
and each project had a special configuration file.
|
||||
The Pages daemon was reading these configuration files and storing their content in memory.
|
||||
|
||||
This approach had several disadvantages and was replaced with GitLab Pages using the internal GitLab API
|
||||
every time a new domain is requested.
|
||||
By default, GitLab Pages uses the internal GitLab API every time a new domain is requested.
|
||||
Pages fails to start if it can't connect to the API.
|
||||
The domain information is also cached by the Pages daemon to speed up subsequent requests.
|
||||
|
||||
Starting from [GitLab 14.0](https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/5993) GitLab Pages uses API
|
||||
by default and fails to start if it can't connect to it.
|
||||
For common issues, see [troubleshooting](troubleshooting.md#failed-to-connect-to-the-internal-gitlab-api).
|
||||
|
||||
For more details see this [blog post](https://about.gitlab.com/blog/2020/08/03/how-gitlab-pages-uses-the-gitlab-api-to-serve-content/).
|
||||
|
||||
### GitLab API cache configuration
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab-pages/-/issues/520) in GitLab 13.10.
|
||||
|
||||
API-based configuration uses a caching mechanism to improve performance and reliability of serving Pages.
|
||||
The cache behavior can be modified by changing the cache settings, however, the recommended values are set for you and should only be modified if needed.
|
||||
Incorrect configuration of these values may result in intermittent
|
||||
|
|
@ -1077,72 +1059,14 @@ The following [object storage](../object_storage.md) settings are:
|
|||
|
||||
NOTE:
|
||||
If you want to stop using and disconnect the NFS server, you need to
|
||||
[explicitly disable local storage](#disable-pages-local-storage), and it's only possible after upgrading to GitLab 13.11.
|
||||
[explicitly disable local storage](#disable-pages-local-storage).
|
||||
|
||||
### S3-compatible connection settings
|
||||
|
||||
In GitLab 13.2 and later, you should use the
|
||||
[consolidated object storage settings](../object_storage.md#configure-a-single-storage-connection-for-all-object-types-consolidated-form).
|
||||
This section describes the earlier configuration format.
|
||||
You should use the [consolidated object storage settings](../object_storage.md#configure-a-single-storage-connection-for-all-object-types-consolidated-form).
|
||||
|
||||
See [the available connection settings for different providers](../object_storage.md#configure-the-connection-settings).
|
||||
|
||||
::Tabs
|
||||
|
||||
:::TabTitle Linux package (Omnibus)
|
||||
|
||||
1. Add the following lines to `/etc/gitlab/gitlab.rb` and replace the values with the ones you want:
|
||||
|
||||
```ruby
|
||||
gitlab_rails['pages_object_store_enabled'] = true
|
||||
gitlab_rails['pages_object_store_remote_directory'] = "pages"
|
||||
gitlab_rails['pages_object_store_connection'] = {
|
||||
'provider' => 'AWS',
|
||||
'region' => 'eu-central-1',
|
||||
'aws_access_key_id' => 'AWS_ACCESS_KEY_ID',
|
||||
'aws_secret_access_key' => 'AWS_SECRET_ACCESS_KEY'
|
||||
}
|
||||
```
|
||||
|
||||
If you use AWS IAM profiles, be sure to omit the AWS access key and secret access key/value
|
||||
pairs:
|
||||
|
||||
```ruby
|
||||
gitlab_rails['pages_object_store_connection'] = {
|
||||
'provider' => 'AWS',
|
||||
'region' => 'eu-central-1',
|
||||
'use_iam_profile' => true
|
||||
}
|
||||
```
|
||||
|
||||
1. Save the file and [reconfigure GitLab](../restart_gitlab.md#reconfigure-a-linux-package-installation)
|
||||
for the changes to take effect.
|
||||
|
||||
1. [Migrate existing Pages deployments to object storage.](#migrate-pages-deployments-to-object-storage)
|
||||
|
||||
:::TabTitle Self-compiled (source)
|
||||
|
||||
1. Edit `/home/git/gitlab/config/gitlab.yml` and add or amend the following lines:
|
||||
|
||||
```yaml
|
||||
pages:
|
||||
object_store:
|
||||
enabled: true
|
||||
remote_directory: "pages" # The bucket name
|
||||
connection:
|
||||
provider: AWS # Only AWS supported at the moment
|
||||
aws_access_key_id: AWS_ACCESS_KEY_ID
|
||||
aws_secret_access_key: AWS_SECRET_ACCESS_KEY
|
||||
region: eu-central-1
|
||||
```
|
||||
|
||||
1. Save the file and [restart GitLab](../restart_gitlab.md#self-compiled-installations)
|
||||
for the changes to take effect.
|
||||
|
||||
1. [Migrate existing Pages deployments to object storage.](#migrate-pages-deployments-to-object-storage)
|
||||
|
||||
::EndTabs
|
||||
|
||||
### Migrate Pages deployments to object storage
|
||||
|
||||
Existing Pages deployment objects (zip archives) can be stored in either:
|
||||
|
|
@ -1159,8 +1083,7 @@ sudo gitlab-rake gitlab:pages:deployments:migrate_to_object_storage
|
|||
You can track progress and verify that all Pages deployments migrated successfully using the
|
||||
[PostgreSQL console](https://docs.gitlab.com/omnibus/settings/database.html#connecting-to-the-bundled-postgresql-database):
|
||||
|
||||
- `sudo gitlab-rails dbconsole` for Linux package installations running GitLab 14.1 and earlier.
|
||||
- `sudo gitlab-rails dbconsole --database main` for Linux package installations running 14.2 and later.
|
||||
- `sudo gitlab-rails dbconsole --database main` for Linux package installations.
|
||||
- `sudo -u git -H psql -d gitlabhq_production` for self-compiled installations.
|
||||
|
||||
Verify `objectstg` below (where `store=2`) has count of all Pages deployments:
|
||||
|
|
@ -1186,8 +1109,6 @@ sudo gitlab-rake gitlab:pages:deployments:migrate_to_local
|
|||
|
||||
### Disable Pages local storage
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/301159) in GitLab 13.11.
|
||||
|
||||
If you use [object storage](#object-storage-settings), you can disable local storage to avoid unnecessary disk usage/writes:
|
||||
|
||||
1. Edit `/etc/gitlab/gitlab.rb`:
|
||||
|
|
@ -1221,12 +1142,11 @@ mounted on your primary server, in case you must migrate back to a single-node e
|
|||
|
||||
## ZIP storage
|
||||
|
||||
In GitLab 14.0 the underlying storage format of GitLab Pages changed from
|
||||
files stored directly in disk to a single ZIP archive per project.
|
||||
The underlying storage format of GitLab Pages is a single ZIP archive per project.
|
||||
|
||||
These ZIP archives can be stored either locally on disk storage or on [object storage](#object-storage-settings) if it is configured.
|
||||
|
||||
[Starting from GitLab 13.5](https://gitlab.com/gitlab-org/gitlab/-/issues/245308) ZIP archives are stored every time pages site is updated.
|
||||
The ZIP archives are stored every time pages site is updated.
|
||||
|
||||
## Backup
|
||||
|
||||
|
|
@ -1268,8 +1188,6 @@ An IPv6 address receives a large prefix in the 128-bit address space. The prefix
|
|||
|
||||
#### Enable HTTP requests rate limits by source-IP
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab-pages/-/issues/631) in GitLab 14.5.
|
||||
|
||||
1. Set rate limits in `/etc/gitlab/gitlab.rb`:
|
||||
|
||||
```ruby
|
||||
|
|
@ -1281,8 +1199,6 @@ An IPv6 address receives a large prefix in the 128-bit address space. The prefix
|
|||
|
||||
#### Enable HTTP requests rate limits by domain
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab-pages/-/issues/630) in GitLab 14.7.
|
||||
|
||||
1. Set rate limits in `/etc/gitlab/gitlab.rb`:
|
||||
|
||||
```ruby
|
||||
|
|
@ -1294,8 +1210,6 @@ An IPv6 address receives a large prefix in the 128-bit address space. The prefix
|
|||
|
||||
#### Enable TLS connections rate limits by source-IP
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab-pages/-/issues/632) in GitLab 14.9.
|
||||
|
||||
1. Set rate limits in `/etc/gitlab/gitlab.rb`:
|
||||
|
||||
```ruby
|
||||
|
|
@ -1307,8 +1221,6 @@ An IPv6 address receives a large prefix in the 128-bit address space. The prefix
|
|||
|
||||
#### Enable TLS connections rate limits by domain
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab-pages/-/issues/632) in GitLab 14.9.
|
||||
|
||||
1. Set rate limits in `/etc/gitlab/gitlab.rb`:
|
||||
|
||||
```ruby
|
||||
|
|
|
|||
|
|
@ -428,7 +428,6 @@ Each request to view a resource in a private site is authenticated by Pages
|
|||
using that token. For each request it receives, it makes a request to the GitLab
|
||||
API to check that the user is authorized to read that site.
|
||||
|
||||
From [GitLab 12.8](https://gitlab.com/gitlab-org/omnibus-gitlab/-/merge_requests/3689) onward,
|
||||
Access Control parameters for Pages are set in a configuration file, which
|
||||
by convention is named `gitlab-pages-config`. The configuration file is passed to
|
||||
pages using the `-config flag` or `CONFIG` environment variable.
|
||||
|
|
|
|||
|
|
@ -124,8 +124,7 @@ ERRO[0010] Failed to connect to the internal GitLab API after 0.50s error="fail
|
|||
|
||||
If you are [Running GitLab Pages on a separate server](index.md#running-gitlab-pages-on-a-separate-server)
|
||||
you must copy the `/etc/gitlab/gitlab-secrets.json` file
|
||||
from the **GitLab server** to the **Pages server** after upgrading to GitLab 13.3,
|
||||
as described in that section.
|
||||
from the **GitLab server** to the **Pages server**.
|
||||
|
||||
Other reasons may include network connectivity issues between your
|
||||
**GitLab server** and your **Pages server** such as firewall configurations or closed ports.
|
||||
|
|
@ -262,29 +261,6 @@ In that case, it's highly recommended you to configure
|
|||
Alternatively, you can mount the GitLab Pages shared directory to the same path on
|
||||
both servers.
|
||||
|
||||
## GitLab Pages doesn't work after upgrading to GitLab 14.0 or above
|
||||
|
||||
GitLab 14.0 introduces a number of changes to GitLab Pages which may require manual intervention.
|
||||
|
||||
1. Firstly [follow the migration guide](https://archives.docs.gitlab.com/14.10/ee/administration/pages/#prepare-gitlab-pages-for-140).
|
||||
1. Try to upgrade to GitLab 14.3 or above. Some of the issues were fixed in GitLab 14.1, 14.2 and 14.3.
|
||||
1. If it doesn't work, see [GitLab Pages logs](#how-to-see-gitlab-pages-logs), and if you see any errors there then search them on this page.
|
||||
|
||||
WARNING:
|
||||
In GitLab 14.0-14.2 you can temporarily enable legacy storage and configuration mechanisms.
|
||||
|
||||
To do that:
|
||||
|
||||
1. Describe the issue you're seeing in the [migration feedback issue](https://gitlab.com/gitlab-org/gitlab/-/issues/331699).
|
||||
|
||||
1. Edit `/etc/gitlab/gitlab.rb`:
|
||||
|
||||
```ruby
|
||||
gitlab_pages['use_legacy_storage'] = true
|
||||
```
|
||||
|
||||
1. [Reconfigure GitLab](../restart_gitlab.md#reconfigure-a-linux-package-installation).
|
||||
|
||||
## GitLab Pages deploy job fails with error "is not a recognized provider"
|
||||
|
||||
If the **pages** job succeeds but the **deploy** job gives the error "is not a recognized provider":
|
||||
|
|
|
|||
|
|
@ -14,8 +14,6 @@ Adjust the wiki settings of your GitLab instance.
|
|||
|
||||
## Wiki page content size limit
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/31176) in GitLab 13.2.
|
||||
|
||||
You can set a maximum content size limit for wiki pages. This limit can prevent
|
||||
abuse of the feature. The default value is **52428800 Bytes** (50 MB).
|
||||
|
||||
|
|
|
|||
|
|
@ -10,10 +10,6 @@ DETAILS:
|
|||
**Tier:** Ultimate
|
||||
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/279039) in GitLab 13.10.
|
||||
> - The legacy key/value pair `{ "<date>" => "<value>" }` was removed from the payload in GitLab 14.0.
|
||||
> - `time_to_restore_service` metric was introduced in GitLab 14.9.
|
||||
|
||||
You can also retrieve [DORA metrics](../../user/analytics/dora_metrics.md) with the [GraphQL API](../../api/graphql/reference/index.md).
|
||||
|
||||
All methods require at least the Reporter role.
|
||||
|
|
@ -58,8 +54,6 @@ Example response:
|
|||
|
||||
## Get group-level DORA metrics
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/279039) in GitLab 13.10.
|
||||
|
||||
Get group-level DORA metrics.
|
||||
|
||||
```plaintext
|
||||
|
|
|
|||
|
|
@ -10,8 +10,6 @@ DETAILS:
|
|||
**Tier:** Premium, Ultimate
|
||||
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/26460) in GitLab 12.9.
|
||||
|
||||
## Get count of recently created issues for group
|
||||
|
||||
```plaintext
|
||||
|
|
|
|||
|
|
@ -10,11 +10,6 @@ DETAILS:
|
|||
**Tier:** Premium, Ultimate
|
||||
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/212199) in GitLab 13.5.
|
||||
> - The `encoding` field was [added](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/81150) in GitLab 14.9.
|
||||
> - The `render_html` attribute was [added](https://gitlab.com/gitlab-org/gitlab/-/issues/336792) in GitLab 14.9.
|
||||
> - The `version` attribute was [added](https://gitlab.com/gitlab-org/gitlab/-/issues/336792) in GitLab 14.9.
|
||||
|
||||
The [group wikis](../user/project/wiki/group.md) API is available only in APIv4.
|
||||
An API for [project wikis](wikis.md) is also available.
|
||||
|
||||
|
|
|
|||
|
|
@ -10,10 +10,6 @@ DETAILS:
|
|||
**Tier:** Free, Premium, Ultimate
|
||||
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
|
||||
|
||||
> - The `encoding` field was [added](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/81150) in GitLab 14.9.
|
||||
> - The `render_html` attribute was [added](https://gitlab.com/gitlab-org/gitlab/-/issues/336792) in GitLab 14.9.
|
||||
> - The `version` attribute was [added](https://gitlab.com/gitlab-org/gitlab/-/issues/336792) in GitLab 14.9.
|
||||
|
||||
The project [wikis](../user/project/wiki/index.md) API is available only in APIv4.
|
||||
An API for [group wikis](group_wikis.md) is also available.
|
||||
|
||||
|
|
|
|||
|
|
@ -243,3 +243,5 @@ In progress.
|
|||
- 2023-06-30: The second largest table partitioned: `ci_builds`.
|
||||
- 2023-12-12: `ci_builds` and `ci_builds_metadata` growth is stopped by writing data to new partitions.
|
||||
- 2024-02-05: `ci_pipeline_variables` is partitioned.
|
||||
- 2024-03-26: `ci_job_artifacts` is partitioned.
|
||||
- 2024-04-26: `ci_stages` is partitioned.
|
||||
|
|
|
|||
|
|
@ -6,8 +6,6 @@ info: Any user with at least the Maintainer role can merge updates to this conte
|
|||
|
||||
# Aggregated Value Stream Analytics
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/335391) in GitLab 14.7.
|
||||
|
||||
DISCLAIMER:
|
||||
This page contains information related to upcoming products, features, and functionality.
|
||||
It is important to note that the information presented is for informational purposes only.
|
||||
|
|
@ -110,7 +108,7 @@ the service performs operations in batches and enforces strict application limit
|
|||
- Stop processing when a limit is reached, schedule a background job to continue the processing later.
|
||||
- Continue processing data from a specific point.
|
||||
|
||||
As of GitLab 14.7, the data loading is done manually. Once the feature is ready, the service is
|
||||
The data loading is done manually. Once the feature is ready, the service is
|
||||
invoked periodically by the system via a cron job (this part is not implemented yet).
|
||||
|
||||
#### Record iteration
|
||||
|
|
|
|||
|
|
@ -7,8 +7,6 @@ description: "GitLab's development guidelines for Wikis"
|
|||
|
||||
# Wikis development guidelines
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/227027) in GitLab 13.5.
|
||||
|
||||
The wiki functionality in GitLab is based on [Gollum 4.x](https://github.com/gollum/gollum/).
|
||||
It's used in the [Gitaly](gitaly.md) Ruby service, and accessed from the Rails app through Gitaly RPC calls.
|
||||
|
||||
|
|
@ -18,9 +16,6 @@ Wikis use Git repositories as storage backend, and can be accessed through:
|
|||
- The [REST API](../api/wikis.md)
|
||||
- [Git itself](../user/project/wiki/index.md#create-or-edit-wiki-pages-locally)
|
||||
|
||||
[Introduced](https://gitlab.com/groups/gitlab-org/-/epics/2214) in GitLab 13.5, wikis are also available
|
||||
for groups, in addition to projects.
|
||||
|
||||
## Involved Gems
|
||||
|
||||
Some notable gems that are used for wikis are:
|
||||
|
|
|
|||
|
|
@ -629,21 +629,6 @@ If you rely on the order of the returned projects to be `id_asc`, change your sc
|
|||
|
||||
<div class="deprecation breaking-change" data-milestone="17.0">
|
||||
|
||||
### CiRunnerUpgradeStatusType GraphQL type renamed to CiRunnerUpgradeStatus
|
||||
|
||||
<div class="deprecation-notes">
|
||||
- Announced in GitLab <span class="milestone">16.0</span>
|
||||
- Removal in GitLab <span class="milestone">17.0</span> ([breaking change](https://docs.gitlab.com/ee/update/terminology.html#breaking-change))
|
||||
- To discuss this change or learn more, see the [deprecation issue](https://gitlab.com/gitlab-org/gitlab/-/issues/409332).
|
||||
</div>
|
||||
|
||||
The `CiRunnerUpgradeStatusType` GraphQL type has been renamed to `CiRunnerUpgradeStatus`. In GitLab 17.0,
|
||||
the aliasing for the `CiRunnerUpgradeStatusType` type will be removed.
|
||||
|
||||
</div>
|
||||
|
||||
<div class="deprecation breaking-change" data-milestone="17.0">
|
||||
|
||||
### Compliance framework in general settings
|
||||
|
||||
<div class="deprecation-notes">
|
||||
|
|
|
|||
|
|
@ -10,9 +10,6 @@ DETAILS:
|
|||
**Tier:** Ultimate
|
||||
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/275991) in GitLab 13.7.
|
||||
> - Lead time for changes [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/291746) in GitLab 13.10.
|
||||
|
||||
The [DevOps Research and Assessment (DORA)](https://cloud.google.com/blog/products/devops-sre/using-the-four-keys-to-measure-your-devops-performance)
|
||||
team has identified four metrics that measure DevOps performance.
|
||||
Using these metrics helps improve DevOps efficiency and communicate performance to business stakeholders, which can accelerate business results.
|
||||
|
|
@ -225,14 +222,16 @@ and use it to automatically:
|
|||
|
||||
GitLab supports the following DORA metrics:
|
||||
|
||||
| Metric | Level | API | UI chart | Comments |
|
||||
|---------------------------|-------------------|-----------------------------------------------------|------------------------|----------|
|
||||
| `deployment_frequency` | Project | [GitLab 13.7 and later](../../api/dora/metrics.md) | GitLab 14.8 and later | The previous API endpoint was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/323713) in 13.10. |
|
||||
| `deployment_frequency` | Group | [GitLab 13.10 and later](../../api/dora/metrics.md) | GitLab 13.12 and later | |
|
||||
| `lead_time_for_changes` | Project | [GitLab 13.10 and later](../../api/dora/metrics.md) | GitLab 13.11 and later | Unit in seconds. Aggregation method is median. |
|
||||
| `lead_time_for_changes` | Group | [GitLab 13.10 and later](../../api/dora/metrics.md) | GitLab 14.0 and later | Unit in seconds. Aggregation method is median. |
|
||||
| `time_to_restore_service` | Project and group | [GitLab 14.9 and later](../../api/dora/metrics.md) | GitLab 15.1 and later | Unit in days. Aggregation method is median. |
|
||||
| `change_failure_rate` | Project and group | [GitLab 14.10 and later](../../api/dora/metrics.md) | GitLab 15.2 and later | Percentage of deployments. |
|
||||
| Metric | Level | Comments |
|
||||
|---------------------------|-------------------|----------|
|
||||
| `deployment_frequency` | Project | |
|
||||
| `deployment_frequency` | Group | |
|
||||
| `lead_time_for_changes` | Project | Unit in seconds. Aggregation method is median. |
|
||||
| `lead_time_for_changes` | Group | Unit in seconds. Aggregation method is median. |
|
||||
| `time_to_restore_service` | Project and group | Unit in days. Aggregation method is median. (Available in UI chart in GitLab 15.1 and later) |
|
||||
| `change_failure_rate` | Project and group | Percentage of deployments. (Available in UI chart in GitLab 15.2 and later) |
|
||||
|
||||
All metrics are available for the [(DORA) key metrics API](../../api/dora/metrics.md).
|
||||
|
||||
### DORA metrics charts
|
||||
|
||||
|
|
|
|||
|
|
@ -11,9 +11,6 @@ DETAILS:
|
|||
**Tier:** Premium, Ultimate
|
||||
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/229045) in GitLab 13.3.
|
||||
> - Moved to GitLab Premium in 13.9.
|
||||
|
||||
Use merge request analytics to view:
|
||||
|
||||
- The number of merge requests your organization merged per month.
|
||||
|
|
@ -38,9 +35,6 @@ To view merge request analytics:
|
|||
|
||||
## View the number of merge requests in a date range
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/232651) in GitLab 13.3.
|
||||
> - Filtering [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/229266) in GitLab 13.4
|
||||
|
||||
To view the number of merge requests merged during a specific date range:
|
||||
|
||||
1. On the left sidebar, select **Search or go to** and find your project.
|
||||
|
|
@ -70,8 +64,6 @@ the following information about each merge request:
|
|||
|
||||
## View average time between merge request creation and merge
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/229389) in GitLab 13.9.
|
||||
|
||||
The number in **Mean time to merge** shows the average time between when a merge request is
|
||||
created and when it's merged. Closed and not yet merged merge requests are not included.
|
||||
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ DETAILS:
|
|||
Use repository analytics to view information about a project's Git repository:
|
||||
|
||||
- Programming languages used in the repository's default branch.
|
||||
- Code coverage history from last 3 months ([Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/33743) in GitLab 13.1).
|
||||
- Code coverage history from last 3 months.
|
||||
- Commit statistics (last month).
|
||||
- Commits per day of month.
|
||||
- Commits per weekday.
|
||||
|
|
|
|||
|
|
@ -9,8 +9,6 @@ DETAILS:
|
|||
**Tier:** Premium, Ultimate
|
||||
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/3090) in GitLab 12.2 for subgroups.
|
||||
|
||||
Contribution analytics provide an overview of the
|
||||
[contribution events](../../profile/contributions_calendar.md#user-contribution-events) made by your group's members.
|
||||
|
||||
|
|
|
|||
|
|
@ -10,16 +10,6 @@ DETAILS:
|
|||
**Tier:** Ultimate
|
||||
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/321083) in GitLab 13.11 as a [Beta feature](../../../policy/experiment-beta-support.md#beta).
|
||||
> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/333556) in GitLab 14.1.
|
||||
> - The Overview tab [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/330401) in GitLab 14.1.
|
||||
> - DAST and SAST metrics [added](https://gitlab.com/gitlab-org/gitlab/-/issues/328033) in GitLab 14.1.
|
||||
> - Fuzz Testing metrics [added](https://gitlab.com/gitlab-org/gitlab/-/issues/330398) in GitLab 14.2.
|
||||
> - Dependency Scanning metrics [added](https://gitlab.com/gitlab-org/gitlab/-/issues/328034) in GitLab 14.2.
|
||||
> - Multi-select [added](https://gitlab.com/gitlab-org/gitlab/-/issues/333586) in GitLab 14.2.
|
||||
> - Overview table [added](https://gitlab.com/gitlab-org/gitlab/-/issues/335638) in GitLab 14.3.
|
||||
> - Adoption over time chart [added](https://gitlab.com/gitlab-org/gitlab/-/issues/337561) in GitLab 14.4.
|
||||
|
||||
DevOps Adoption shows you how groups in your organization adopt and use the most essential features of GitLab.
|
||||
|
||||
You can use Group DevOps Adoption to:
|
||||
|
|
|
|||
|
|
@ -10,9 +10,6 @@ DETAILS:
|
|||
**Tier:** Premium, Ultimate
|
||||
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
|
||||
|
||||
> - Issue analytics for groups [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/7478) in GitLab 11.5.
|
||||
> - Issue analytics for projects [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/196561) in GitLab 12.9.
|
||||
|
||||
Issue analytics is a bar graph which illustrates the number of issues created each month.
|
||||
The default time span is 13 months, which includes the current month, and the 12 months prior.
|
||||
Issue analytics is available for projects and groups.
|
||||
|
|
@ -59,8 +56,6 @@ You can use this metric to improve the overall turn-around time and value delive
|
|||
|
||||
## Drill into the information
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/196547) in GitLab 13.1.
|
||||
|
||||
You can examine details of individual issues by browsing the table
|
||||
located below the chart.
|
||||
|
||||
|
|
|
|||
|
|
@ -110,10 +110,6 @@ DETAILS:
|
|||
**Tier:** Premium, Ultimate
|
||||
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/335391) in GitLab 14.5.
|
||||
> - Filter by stop date toggle [added](https://gitlab.com/gitlab-org/gitlab/-/issues/352428) in GitLab 14.9
|
||||
> - Data refresh badge [added](https://gitlab.com/gitlab-org/gitlab/-/issues/341739) in GitLab 14.9
|
||||
> - Filter by stop date toggle [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/84356) in GitLab 14.9
|
||||
> - Enable filtering by stop date [added](https://gitlab.com/gitlab-org/gitlab/-/issues/355000) in GitLab 15.0
|
||||
|
||||
Value stream analytics uses a backend process to collect and aggregate stage-level data, which
|
||||
|
|
@ -279,8 +275,6 @@ You can change the name of a project environment in your GitLab CI/CD configurat
|
|||
|
||||
## View value stream analytics
|
||||
|
||||
> - Filtering [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/13216) in GitLab 13.3
|
||||
> - Horizontal stage path [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/12196) in 13.0 and [feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/323982) in 13.12
|
||||
> - Predefined date ranges dropdown list [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/408656/) in GitLab 16.5 [with a flag](../../../administration/feature_flags.md) named `vsa_predefined_date_ranges`. Disabled by default.
|
||||
> - Predefined date ranges dropdown list [enabled on self-managed and GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/433149) in GitLab 16.7.
|
||||
> - Predefined date ranges dropdown list [generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/438051) in GitLab 16.9. Feature flag `vsa_predefined_date_ranges` removed.
|
||||
|
|
@ -331,9 +325,6 @@ For the "Tasks by type" chart, only the Date range and Project selector filters
|
|||
|
||||
## Value stream analytics metrics
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/210315) in GitLab 13.0.
|
||||
> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/323982) in GitLab 13.12.
|
||||
|
||||
The **Overview** page in value stream analytics displays key metrics of the DevSecOps lifecycle performance for projects and groups.
|
||||
|
||||
### Lifecycle metrics
|
||||
|
|
@ -353,8 +344,6 @@ DETAILS:
|
|||
**Tier:** Ultimate
|
||||
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/340150) lead time for changes DORA metric in GitLab 14.5.
|
||||
> - DORA API-based deployment metrics for value stream analytics for groups were [moved](https://gitlab.com/gitlab-org/gitlab/-/issues/337256) from GitLab Ultimate to GitLab Premium in GitLab 14.3.
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/355304) time to restore service tile in GitLab 15.0.
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/357071) change failure rate tile in GitLab 15.0.
|
||||
|
||||
|
|
@ -373,10 +362,6 @@ If you have a GitLab Premium or Ultimate subscription:
|
|||
- The number of successful deployments is calculated with DORA data.
|
||||
- The data is filtered based on environment and environment tier.
|
||||
|
||||
NOTE:
|
||||
In GitLab 13.9 and later, deployment frequency metrics are calculated based on when the deployment was finished.
|
||||
In GitLab 13.8 and earlier, deployment frequency metrics are calculated based on when the deployment was created.
|
||||
|
||||
## View lifecycle and DORA metrics
|
||||
|
||||
Prerequisites:
|
||||
|
|
@ -408,9 +393,6 @@ To view the [Value Streams Dashboard](../../analytics/value_streams_dashboard.md
|
|||
|
||||
## View metrics for each development stage
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/210315) in GitLab 13.0.
|
||||
> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/323982) in GitLab 13.12.
|
||||
|
||||
Value stream analytics shows the median time spent by issues or merge requests in each development stage.
|
||||
|
||||
To view the median time spent in each stage by a group:
|
||||
|
|
@ -464,8 +446,6 @@ On self-managed GitLab, by default the **New value stream** feature is not avail
|
|||
|
||||
### Create a value stream with GitLab default stages
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/221202) in GitLab 13.3
|
||||
|
||||
When you create a value stream, you can use GitLab default stages and hide or re-order them. You can also
|
||||
create custom stages in addition to those provided in the default template.
|
||||
|
||||
|
|
@ -487,10 +467,6 @@ If you have recently upgraded to GitLab Premium, it can take up to 30 minutes fo
|
|||
|
||||
### Create a value stream with custom stages
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/50229) in GitLab 13.7.
|
||||
> - [Enabled by default](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/55572) in GitLab 13.10.
|
||||
> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/294190) in GitLab 13.11.
|
||||
|
||||
When you create a value stream, you can create and add custom stages that align with your own development workflows.
|
||||
|
||||
1. On the left sidebar, select **Search or go to** and find your project or group.
|
||||
|
|
@ -527,7 +503,6 @@ DETAILS:
|
|||
**Tier:** Premium, Ultimate
|
||||
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/267537) in GitLab 13.10.
|
||||
> - **Edit value stream** feature [changed](https://gitlab.com/gitlab-org/gitlab/-/issues/381002) from a dialog to a page in GitLab 16.11 [with a flag](../../../administration/feature_flags.md) named `vsa_standalone_settings_page`. Disabled by default.
|
||||
|
||||
FLAG:
|
||||
|
|
@ -554,8 +529,6 @@ DETAILS:
|
|||
**Tier:** Premium, Ultimate
|
||||
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/221205) in GitLab 13.4.
|
||||
|
||||
To delete a custom value stream:
|
||||
|
||||
1. On the left sidebar, select **Search or go to** and find your project or group.
|
||||
|
|
@ -571,9 +544,6 @@ DETAILS:
|
|||
**Tier:** Premium, Ultimate
|
||||
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
|
||||
|
||||
> - Chart median line [removed](https://gitlab.com/gitlab-org/gitlab/-/issues/235455) in GitLab 13.4.
|
||||
> - Totals [replaced](https://gitlab.com/gitlab-org/gitlab/-/issues/262070) with averages in GitLab 13.12.
|
||||
|
||||
The **Total time chart** shows the average number of days it takes for development cycles to complete.
|
||||
The chart shows data for the last 500 workflow items.
|
||||
|
||||
|
|
|
|||
|
|
@ -10,8 +10,6 @@ DETAILS:
|
|||
**Tier:** Ultimate
|
||||
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
|
||||
|
||||
> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/725) in GitLab 12.0.
|
||||
|
||||
Configure insights for your projects and groups to explore data such as:
|
||||
|
||||
- Issues created and closed during a specified period.
|
||||
|
|
|
|||
|
|
@ -11,8 +11,6 @@ DETAILS:
|
|||
**Tier:** Free, Premium, Ultimate
|
||||
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/28996) in GitLab 12.1.
|
||||
|
||||
The GitLab Pages integration with Let's Encrypt (LE) allows you
|
||||
to use LE certificates for your Pages website with custom domains
|
||||
without the hassle of having to issue and update them yourself;
|
||||
|
|
@ -70,8 +68,6 @@ associated Pages domain. GitLab also renews it automatically.
|
|||
|
||||
### Something went wrong while obtaining the Let's Encrypt certificate
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/30146) in GitLab 13.0.
|
||||
|
||||
If you get an error **Something went wrong while obtaining the Let's Encrypt certificate**, first, make sure that your pages site is set to "Everyone" in your project's **Settings > General > Visibility**. This allows the Let's Encrypt Servers reach your pages site. Once this is confirmed, you can try obtaining the certificate again by following these steps:
|
||||
|
||||
1. On the left sidebar, select **Search or go to** and find your project.
|
||||
|
|
|
|||
|
|
@ -10,9 +10,6 @@ DETAILS:
|
|||
**Tier:** Free, Premium, Ultimate
|
||||
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab-pages/-/issues/24) in GitLab Pages 1.25.0 and GitLab 13.4 behind a feature flag, disabled by default.
|
||||
> - [Became enabled by default](https://gitlab.com/gitlab-org/gitlab-pages/-/merge_requests/367) in GitLab 13.5.
|
||||
|
||||
In GitLab Pages, you can configure rules to forward one URL to another using
|
||||
[Netlify style](https://docs.netlify.com/routing/redirects/#syntax-for-the-redirects-file)
|
||||
HTTP redirects.
|
||||
|
|
@ -93,10 +90,6 @@ you can explicitly set your own. The following HTTP codes are supported:
|
|||
|
||||
## Redirects
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab-pages/-/merge_requests/458) in GitLab 14.3.
|
||||
> - Enabled on GitLab.com.
|
||||
> - Enabled on self-managed in [GitLab 14.6](https://gitlab.com/gitlab-org/gitlab-pages/-/issues/618).
|
||||
|
||||
To create a redirect, add a rule that includes a `from` path, a `to` path,
|
||||
and an [HTTP status code](#http-status-codes):
|
||||
|
||||
|
|
@ -110,7 +103,6 @@ and an [HTTP status code](#http-status-codes):
|
|||
|
||||
## Rewrites
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab-pages/-/merge_requests/458) in GitLab 14.3 [with a flag](../../../administration/pages/index.md#use-environment-variables) named `FF_ENABLE_PLACEHOLDERS`. Disabled by default.
|
||||
> - [Enabled on GitLab.com and self-managed](https://gitlab.com/gitlab-org/gitlab-pages/-/issues/619) in GitLab 15.2.
|
||||
|
||||
Provide a status code of `200` to serve the content of the `to` path when the
|
||||
|
|
@ -156,8 +148,6 @@ to dynamically rewrite the URL path.
|
|||
|
||||
## Splats
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab-pages/-/merge_requests/458) in GitLab 14.3.
|
||||
|
||||
A rule with an asterisk (`*`) in its `from` path, known as a splat, matches
|
||||
anything at the start, middle, or end of the requested path. This example
|
||||
matches anything after `/old/` and rewrites it to `/new/file.html`:
|
||||
|
|
@ -214,8 +204,6 @@ rule like:
|
|||
|
||||
## Placeholders
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab-pages/-/merge_requests/458) in GitLab 14.3.
|
||||
|
||||
Use placeholders in rules to match portions of the requested URL and use these
|
||||
matches when rewriting or redirecting to a new URL.
|
||||
|
||||
|
|
|
|||
|
|
@ -10,8 +10,6 @@ DETAILS:
|
|||
**Tier:** Premium, Ultimate
|
||||
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/13195) in GitLab 13.5.
|
||||
|
||||
If you use GitLab groups to manage multiple projects, some of your documentation
|
||||
might span multiple groups. You can create group wikis, instead of [project wikis](index.md),
|
||||
to ensure all group members have the correct access permissions to contribute.
|
||||
|
|
@ -38,8 +36,6 @@ To access a group wiki:
|
|||
|
||||
## Export a group wiki
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/53247) in GitLab 13.9.
|
||||
|
||||
Users with the Owner role in a group can
|
||||
[import or export a group wiki](../../project/settings/import_export.md#migrate-groups-by-uploading-an-export-file-deprecated) when they
|
||||
import or export a group.
|
||||
|
|
|
|||
|
|
@ -10,9 +10,6 @@ DETAILS:
|
|||
**Tier:** Free, Premium, Ultimate
|
||||
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
|
||||
|
||||
> - Page loading [changed](https://gitlab.com/gitlab-org/gitlab/-/issues/336792) to asynchronous in GitLab 14.9.
|
||||
> - Page slug encoding method [changed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/71753) to `ERB::Util.url_encode` in GitLab 14.9.
|
||||
|
||||
If you don't want to keep your documentation in your repository, but you want
|
||||
to keep it in the same project as your code, you can use the wiki GitLab provides
|
||||
in each GitLab project. Every wiki is a separate Git repository, so you can create
|
||||
|
|
@ -23,8 +20,7 @@ Wiki pages written in Markdown support all [Markdown features](../../markdown.md
|
|||
and also provide some [wiki-specific behavior](../../markdown.md#wiki-specific-markdown)
|
||||
for links.
|
||||
|
||||
In [GitLab 13.5 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/17673/),
|
||||
wiki pages display a sidebar, which you [can customize](#customize-sidebar). This
|
||||
Wiki pages display a sidebar, which you [can customize](#customize-sidebar). This
|
||||
sidebar contains a partial list of pages in the wiki, displayed as a nested tree,
|
||||
with sibling pages listed in alphabetical order. To view a list of all pages, select
|
||||
**View All Pages** in the sidebar:
|
||||
|
|
@ -46,8 +42,6 @@ has [disabled it](#enable-or-disable-a-project-wiki).
|
|||
|
||||
## Configure a default branch for your wiki
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/221159) in GitLab 14.1.
|
||||
|
||||
The default branch for your wiki repository depends on your version of GitLab:
|
||||
|
||||
- *GitLab versions 14.1 and later:* Wikis inherit the
|
||||
|
|
@ -126,8 +120,6 @@ Wiki pages are stored as files in a Git repository, so certain characters have a
|
|||
|
||||
### Length restrictions for file and directory names
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/24364) in GitLab 12.8.
|
||||
|
||||
Many common file systems have a [limit of 255 bytes](https://en.wikipedia.org/wiki/Comparison_of_file_systems#Limits)
|
||||
for file and directory names. Git and GitLab both support paths exceeding
|
||||
those limits. However, if your file system enforces these limits, you cannot check out a
|
||||
|
|
@ -263,8 +255,6 @@ To view the changes for a wiki page:
|
|||
|
||||
### View changes between page versions
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/15242) in GitLab 13.2.
|
||||
|
||||
You can see the changes made in a version of a wiki page, similar to versioned diff file views:
|
||||
|
||||
1. On the left sidebar, select **Search or go to** and find your project or group.
|
||||
|
|
@ -277,10 +267,6 @@ You can see the changes made in a version of a wiki page, similar to versioned d
|
|||
|
||||
## Track wiki events
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/14902) in GitLab 12.10.
|
||||
> - Git events were [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/216014) in GitLab 13.0.
|
||||
> - [Feature flag for Git events was removed](https://gitlab.com/gitlab-org/gitlab/-/issues/258665) in GitLab 13.5.
|
||||
|
||||
GitLab tracks wiki creation, deletion, and update events. These events are displayed on these pages:
|
||||
|
||||
- [User profile](../../profile/index.md#access-your-user-profile).
|
||||
|
|
@ -292,7 +278,7 @@ Commits to wikis are not counted in [repository analytics](../../analytics/repos
|
|||
|
||||
## Customize sidebar
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/23109) in GitLab 13.8, the sidebar can be customized by selecting the **Edit sidebar** button.
|
||||
You can manually edit the contents of the sidebar navigation.
|
||||
|
||||
Prerequisites:
|
||||
|
||||
|
|
@ -379,9 +365,6 @@ to disable the wiki but toggle it on (in blue).
|
|||
|
||||
## Rich text editor
|
||||
|
||||
> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/5643) in GitLab 14.0.
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/345398) switching between editing experiences in GitLab 14.7 [with a flag](../../../administration/feature_flags.md) named `wiki_switch_between_content_editor_raw_markdown`. Enabled by default.
|
||||
> - Switching between editing experiences generally available in GitLab 14.10. [Feature flag `wiki_switch_between_content_editor_raw_markdown`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/83760) removed.
|
||||
> - [Renamed](https://gitlab.com/gitlab-org/gitlab/-/issues/398152) from content editor to rich text editor in GitLab 16.2.
|
||||
|
||||
GitLab provides a WYSIWYG editing experience for GitLab Flavored Markdown in wikis.
|
||||
|
|
@ -431,7 +414,7 @@ For the status of the ongoing development for CommonMark and GitLab Flavored Mar
|
|||
|
||||
### Page slug rendering with Apache reverse proxy
|
||||
|
||||
In GitLab 14.9 and later, page slugs are now encoded using the
|
||||
Page slugs are encoded using the
|
||||
[`ERB::Util.url_encode`](https://www.rubydoc.info/stdlib/erb/ERB%2FUtil.url_encode) method.
|
||||
If you use an Apache reverse proxy, you can add a `nocanon` argument to the `ProxyPass`
|
||||
line of your Apache configuration to ensure your page slugs render correctly.
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ DETAILS:
|
|||
**Tier:** Free, Premium, Ultimate
|
||||
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
|
||||
|
||||
> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/5643) for [wikis](project/wiki/index.md#rich-text-editor) in GitLab 14.0.
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/371931) for editing issue descriptions in GitLab 15.5 [with a flag](../administration/feature_flags.md) named `content_editor_on_issues`. Disabled by default.
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/382636) for [discussions](discussions/index.md), and creating and editing issues and merge requests in GitLab 15.11 with the same flag.
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/407507) for epics in GitLab 16.1 with the same flag.
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ WARNING:
|
|||
This feature is in [Beta](../../policy/experiment-beta-support.md#beta) and subject to change without notice.
|
||||
For more information, see [epic 9404](https://gitlab.com/groups/gitlab-org/-/epics/9404).
|
||||
|
||||
With exact code search, you can use regular expressions and exact strings to search for code in a project.
|
||||
With exact code search, you can use regular expressions and exact strings to search for code in one or more projects.
|
||||
You can use backslashes to escape special characters and double quotes to search for exact strings.
|
||||
|
||||
Exact code search is powered by [Zoekt](https://github.com/sourcegraph/zoekt)
|
||||
|
|
|
|||
|
|
@ -10,13 +10,15 @@ DETAILS:
|
|||
**Tier:** Free, Premium, Ultimate
|
||||
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
|
||||
|
||||
GitLab has three types of search: basic search, [advanced search](advanced_search.md), and [exact code search](exact_code_search.md).
|
||||
GitLab has three types of search: **basic search**, [**advanced search**](advanced_search.md),
|
||||
and [**exact code search**](exact_code_search.md).
|
||||
|
||||
All three types are available for code search. GitLab uses these types in this order of priority:
|
||||
All three types are available for code search.
|
||||
GitLab uses these types in this order of priority:
|
||||
|
||||
- Exact code search: regular expressions and exact strings are supported.
|
||||
- Advanced search: when exact code search is not available.
|
||||
- Basic search: when exact code search and advanced search are not available
|
||||
- **Exact code search:** regular expressions and exact strings are supported.
|
||||
- **Advanced search:** when exact code search is not available.
|
||||
- **Basic search:** when exact code search and advanced search are not available
|
||||
or when you search against a non-default branch.
|
||||
This type does not support group or global search.
|
||||
|
||||
|
|
|
|||
|
|
@ -507,7 +507,7 @@ environment variable is set correctly. Otherwise, your private SSH key might not
|
|||
Alternative tools include:
|
||||
|
||||
- [Cygwin](https://www.cygwin.com)
|
||||
- [PuttyGen](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html)
|
||||
- [PuTTYgen](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html) 0.81 and later (earlier versions are [vulnerable to disclosure attacks](https://www.openwall.com/lists/oss-security/2024/04/15/6))
|
||||
|
||||
## Overriding SSH settings on the GitLab server
|
||||
|
||||
|
|
|
|||
|
|
@ -227,7 +227,8 @@ module API
|
|||
requires :name, type: String, desc: 'The name of the group'
|
||||
requires :path, type: String, desc: 'The path of the group'
|
||||
optional :parent_id, type: Integer, desc: 'The parent group id for creating nested group'
|
||||
optional :organization_id, type: Integer, desc: 'The organization id for the group'
|
||||
optional :organization_id, type: Integer, default: -> { Current.organization_id },
|
||||
desc: 'The organization id for the group'
|
||||
|
||||
use :optional_params
|
||||
end
|
||||
|
|
|
|||
|
|
@ -37,16 +37,18 @@ module Gitlab
|
|||
|
||||
@source = source
|
||||
|
||||
@config = self.logger.instrument(:config_expand, once: true) do
|
||||
expand_config(config)
|
||||
end
|
||||
Gitlab::Ci::YamlProcessor::FeatureFlags.with_actor(project) do
|
||||
@config = self.logger.instrument(:config_expand, once: true) do
|
||||
expand_config(config)
|
||||
end
|
||||
|
||||
@root = self.logger.instrument(:config_root, once: true) do
|
||||
Entry::Root.new(@config, project: project, user: user, logger: self.logger)
|
||||
end
|
||||
@root = self.logger.instrument(:config_root, once: true) do
|
||||
Entry::Root.new(@config, project: project, user: user, logger: self.logger)
|
||||
end
|
||||
|
||||
self.logger.instrument(:config_root_compose, once: true) do
|
||||
@root.compose!
|
||||
self.logger.instrument(:config_root_compose, once: true) do
|
||||
@root.compose!
|
||||
end
|
||||
end
|
||||
rescue *rescue_errors => e
|
||||
raise Config::ConfigError, e.message
|
||||
|
|
|
|||
|
|
@ -18,14 +18,6 @@ module Gitlab
|
|||
end
|
||||
|
||||
def execute
|
||||
Gitlab::Ci::YamlProcessor::FeatureFlags.with_actor(project) do
|
||||
parse_config
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def parse_config
|
||||
if @config_content.blank?
|
||||
return Result.new(errors: ['Please provide content of .gitlab-ci.yml'])
|
||||
end
|
||||
|
|
@ -47,6 +39,8 @@ module Gitlab
|
|||
Result.new(ci_config: @ci_config, errors: [e.message], warnings: @ci_config&.warnings)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def project
|
||||
@opts[:project]
|
||||
end
|
||||
|
|
|
|||
|
|
@ -8,13 +8,10 @@ module Gitlab
|
|||
#
|
||||
# DEPRECATIONS = [
|
||||
# Gitlab::Graphql::DeprecationsBase::NameDeprecation.new(
|
||||
# old_name: 'CiRunnerUpgradeStatusType', new_name: 'CiRunnerUpgradeStatus', milestone: '15.3'
|
||||
# old_name: 'RunnerMembershipFilter', new_name: 'CiRunnerMembershipFilter', milestone: '15.4'
|
||||
# )
|
||||
# ].freeze
|
||||
DEPRECATIONS = [
|
||||
Gitlab::Graphql::DeprecationsBase::NameDeprecation.new(
|
||||
old_name: 'CiRunnerUpgradeStatusType', new_name: 'CiRunnerUpgradeStatus', milestone: '15.3'
|
||||
),
|
||||
Gitlab::Graphql::DeprecationsBase::NameDeprecation.new(
|
||||
old_name: 'RunnerMembershipFilter', new_name: 'CiRunnerMembershipFilter', milestone: '15.4'
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# This module is used to define quick actions for issues and merge requests.
|
||||
#
|
||||
|
||||
module Gitlab
|
||||
module QuickActions
|
||||
module IssueAndMergeRequestActions
|
||||
|
|
@ -7,7 +10,10 @@ module Gitlab
|
|||
include Gitlab::QuickActions::Dsl
|
||||
|
||||
included do
|
||||
# Issue, MergeRequest: quick actions definitions
|
||||
########################################################################
|
||||
#
|
||||
# /assign
|
||||
#
|
||||
desc { _('Assign') }
|
||||
explanation do |users|
|
||||
_('Assigns %{assignee_users_sentence}.') % { assignee_users_sentence: assignee_users_sentence(users) }
|
||||
|
|
@ -42,6 +48,10 @@ module Gitlab
|
|||
end
|
||||
end
|
||||
|
||||
########################################################################
|
||||
#
|
||||
# /unassign
|
||||
#
|
||||
desc do
|
||||
if quick_action_target.allows_multiple_assignees?
|
||||
_('Remove all or specific assignees')
|
||||
|
|
@ -81,6 +91,10 @@ module Gitlab
|
|||
end
|
||||
end
|
||||
|
||||
########################################################################
|
||||
#
|
||||
# /milestone
|
||||
#
|
||||
desc { _('Set milestone') }
|
||||
explanation do |milestone|
|
||||
_("Sets the milestone to %{milestone_reference}.") % { milestone_reference: milestone.to_reference(full: true, absolute_path: true) } if milestone
|
||||
|
|
@ -103,6 +117,10 @@ module Gitlab
|
|||
@updates[:milestone_id] = milestone.id if milestone
|
||||
end
|
||||
|
||||
########################################################################
|
||||
#
|
||||
# /remove_milestone
|
||||
#
|
||||
desc { _('Remove milestone') }
|
||||
explanation do
|
||||
_("Removes %{milestone_reference} milestone.") % { milestone_reference: quick_action_target.milestone.to_reference(full: true, absolute_path: true) }
|
||||
|
|
@ -121,6 +139,10 @@ module Gitlab
|
|||
@updates[:milestone_id] = nil
|
||||
end
|
||||
|
||||
########################################################################
|
||||
#
|
||||
# /copy_metadata
|
||||
#
|
||||
desc { _('Copy labels and milestone from other issue or merge request in this project') }
|
||||
explanation do |source_issuable|
|
||||
_("Copy labels and milestone from %{source_issuable_reference}.") % { source_issuable_reference: source_issuable.to_reference }
|
||||
|
|
@ -143,6 +165,10 @@ module Gitlab
|
|||
end
|
||||
end
|
||||
|
||||
########################################################################
|
||||
#
|
||||
# /estimate
|
||||
#
|
||||
desc { _('Set time estimate') }
|
||||
explanation do |time_estimate|
|
||||
next unless time_estimate
|
||||
|
|
@ -173,6 +199,10 @@ module Gitlab
|
|||
@updates[:time_estimate] = time_estimate
|
||||
end
|
||||
|
||||
########################################################################
|
||||
#
|
||||
# /spend, /spent, /spend_time
|
||||
#
|
||||
desc { _('Add or subtract spent time') }
|
||||
explanation do |time_spent, time_spent_date|
|
||||
spend_time_message(time_spent, time_spent_date, false)
|
||||
|
|
@ -208,6 +238,10 @@ module Gitlab
|
|||
end
|
||||
end
|
||||
|
||||
########################################################################
|
||||
#
|
||||
# /remove_estimate, /remove_time_estimate
|
||||
#
|
||||
desc { _('Remove time estimate') }
|
||||
explanation { _('Removes time estimate.') }
|
||||
execution_message { _('Removed time estimate.') }
|
||||
|
|
@ -220,6 +254,10 @@ module Gitlab
|
|||
@updates[:time_estimate] = 0
|
||||
end
|
||||
|
||||
########################################################################
|
||||
#
|
||||
# /remove_time_spent
|
||||
#
|
||||
desc { _('Remove spent time') }
|
||||
explanation { _('Removes spent time.') }
|
||||
execution_message { _('Removed spent time.') }
|
||||
|
|
@ -232,6 +270,10 @@ module Gitlab
|
|||
@updates[:spend_time] = { duration: :reset, user_id: current_user.id }
|
||||
end
|
||||
|
||||
########################################################################
|
||||
#
|
||||
# /lock
|
||||
#
|
||||
desc { _("Lock the discussion") }
|
||||
explanation { _("Locks the discussion.") }
|
||||
execution_message { _("Locked the discussion.") }
|
||||
|
|
@ -245,6 +287,10 @@ module Gitlab
|
|||
@updates[:discussion_locked] = true
|
||||
end
|
||||
|
||||
########################################################################
|
||||
#
|
||||
# /unlock
|
||||
#
|
||||
desc { _("Unlock the discussion") }
|
||||
explanation { _("Unlocks the discussion.") }
|
||||
execution_message { _("Unlocked the discussion.") }
|
||||
|
|
|
|||
|
|
@ -38376,6 +38376,9 @@ msgstr ""
|
|||
msgid "Please try again"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please try again or reach out to %{support_link_start}GitLab Support%{support_link_end}."
|
||||
msgstr ""
|
||||
|
||||
msgid "Please try and refresh the page. If the problem persists please contact support."
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -57293,9 +57296,6 @@ msgstr ""
|
|||
msgid "We found your token in a public project and have automatically revoked it to protect your account."
|
||||
msgstr ""
|
||||
|
||||
msgid "We have found the following errors:"
|
||||
msgstr ""
|
||||
|
||||
msgid "We heard back from your device. You have been authenticated."
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -57338,6 +57338,12 @@ msgstr ""
|
|||
msgid "We're experiencing difficulties and this tab content is currently unavailable."
|
||||
msgstr ""
|
||||
|
||||
msgid "We're sorry, your GitLab Duo Pro trial could not be created because our system did not respond successfully."
|
||||
msgstr ""
|
||||
|
||||
msgid "We're sorry, your trial could not be created because our system did not respond successfully."
|
||||
msgstr ""
|
||||
|
||||
msgid "We've detected some unusual activity"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
|||
|
|
@ -50,8 +50,8 @@ class GenerateAsIfFossEnv
|
|||
{
|
||||
START_AS_IF_FOSS: 'true',
|
||||
RUBY_VERSION: ENV['RUBY_VERSION'],
|
||||
CI_MERGE_REQUEST_PROJECT_PATH: ENV['CI_MERGE_REQUEST_PROJECT_PATH'],
|
||||
CI_MERGE_REQUEST_IID: ENV['CI_MERGE_REQUEST_IID']
|
||||
FIND_CHANGES_MERGE_REQUEST_PROJECT_PATH: ENV['CI_MERGE_REQUEST_PROJECT_PATH'],
|
||||
FIND_CHANGES_MERGE_REQUEST_IID: ENV['CI_MERGE_REQUEST_IID']
|
||||
}.merge(rspec_variables).merge(other_jobs_variables)
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
require 'spec_helper'
|
||||
|
||||
RSpec.describe Admin::GroupsController do
|
||||
RSpec.describe Admin::GroupsController, feature_category: :groups_and_projects do
|
||||
let_it_be(:group) { create(:group) }
|
||||
let_it_be(:project) { create(:project, namespace: group) }
|
||||
let_it_be(:admin) { create(:admin) }
|
||||
|
|
@ -141,6 +141,24 @@ RSpec.describe Admin::GroupsController do
|
|||
|
||||
post :create, params: { group: { path: 'test', name: 'test' } }
|
||||
end
|
||||
|
||||
context 'when organization_id is not in params', :with_current_organization do
|
||||
it 'assigns Current.organization to newly created group' do
|
||||
post :create, params: { group: { path: 'test', name: 'test' } }
|
||||
|
||||
expect(Group.last.organization_id).to eq(Current.organization.id)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when organization_id is set' do
|
||||
let_it_be(:organization) { create(:organization) }
|
||||
|
||||
it 'assigns specified organization to newly created group' do
|
||||
post :create, params: { group: { organization_id: organization.id, path: 'test', name: 'test' } }
|
||||
|
||||
expect(Group.last.organization_id).to eq(organization.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'PUT #update' do
|
||||
|
|
|
|||
|
|
@ -6,7 +6,8 @@ RSpec.describe GroupsController, factory_default: :keep, feature_category: :code
|
|||
include ExternalAuthorizationServiceHelpers
|
||||
include AdminModeHelper
|
||||
|
||||
let_it_be_with_refind(:group) { create_default(:group, :public) }
|
||||
let_it_be(:group_organization) { create(:organization) }
|
||||
let_it_be_with_refind(:group) { create_default(:group, :public, organization: group_organization) }
|
||||
let_it_be_with_refind(:project) { create(:project, namespace: group) }
|
||||
let_it_be(:user) { create(:user) }
|
||||
let_it_be(:admin_with_admin_mode) { create(:admin) }
|
||||
|
|
@ -279,6 +280,7 @@ RSpec.describe GroupsController, factory_default: :keep, feature_category: :code
|
|||
|
||||
expect(response).to be_redirect
|
||||
expect(response.location).to eq("http://test.host/#{group.path}/subgroup")
|
||||
expect(Group.last.organization.id).to eq(group_organization.id)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -299,9 +301,10 @@ RSpec.describe GroupsController, factory_default: :keep, feature_category: :code
|
|||
end
|
||||
end
|
||||
|
||||
context 'when creating a top level group' do
|
||||
context 'when creating a top level group', :with_current_organization do
|
||||
before do
|
||||
sign_in(developer)
|
||||
Current.organization.users << developer
|
||||
end
|
||||
|
||||
context 'and can_create_group is enabled' do
|
||||
|
|
@ -313,9 +316,9 @@ RSpec.describe GroupsController, factory_default: :keep, feature_category: :code
|
|||
original_group_count = Group.count
|
||||
|
||||
post :create, params: { group: { path: 'subgroup' } }
|
||||
|
||||
expect(Group.count).to eq(original_group_count + 1)
|
||||
expect(response).to be_redirect
|
||||
expect(Group.last.organization.id).to eq(Current.organization.id)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
require 'spec_helper'
|
||||
|
||||
RSpec.describe 'Group', feature_category: :groups_and_projects do
|
||||
let(:user) { create(:user) }
|
||||
let_it_be(:user) { create(:user) }
|
||||
|
||||
before do
|
||||
sign_in(user)
|
||||
|
|
@ -37,7 +37,7 @@ RSpec.describe 'Group', feature_category: :groups_and_projects do
|
|||
end
|
||||
|
||||
context 'with current organization setting in middleware' do
|
||||
let_it_be(:another_organization) { create(:organization) }
|
||||
let_it_be(:another_organization) { create(:organization, users: [user]) }
|
||||
|
||||
before_all do
|
||||
create(:organization, :default)
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ exports[`packages_list_row renders 1`] = `
|
|||
class="gl-display-flex gl-flex-direction-column gl-flex-grow-1 gl-mb-3 gl-min-w-0 gl-sm-mb-0"
|
||||
>
|
||||
<div
|
||||
class="gl-align-items-center gl-display-flex gl-font-weight-bold gl-min-h-6 gl-min-w-0 gl-text-body"
|
||||
class="gl-align-items-center gl-display-flex gl-font-weight-semibold gl-min-h-6 gl-min-w-0 gl-text-body"
|
||||
>
|
||||
<div
|
||||
class="gl-align-items-center gl-display-flex gl-min-w-0 gl-mr-3"
|
||||
|
|
@ -33,7 +33,7 @@ exports[`packages_list_row renders 1`] = `
|
|||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="gl-align-items-center gl-display-flex gl-flex-grow-1 gl-min-h-6 gl-min-w-0 gl-text-gray-500"
|
||||
class="gl-align-items-center gl-display-flex gl-flex-grow-1 gl-font-sm gl-min-h-6 gl-min-w-0 gl-text-secondary"
|
||||
>
|
||||
<div
|
||||
class="gl-display-flex"
|
||||
|
|
@ -49,17 +49,17 @@ exports[`packages_list_row renders 1`] = `
|
|||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="gl-display-flex gl-flex-direction-column gl-flex-shrink-0 gl-justify-content-space-between gl-sm-align-items-flex-end gl-text-gray-500"
|
||||
class="gl-display-flex gl-flex-direction-column gl-flex-shrink-0 gl-justify-content-space-between gl-sm-align-items-flex-end gl-text-secondary"
|
||||
>
|
||||
<div
|
||||
class="gl-align-items-center gl-display-flex gl-min-h-6 gl-sm-font-weight-bold gl-sm-text-body"
|
||||
class="gl-align-items-center gl-display-flex gl-min-h-6 gl-sm-font-weight-semibold gl-sm-text-body"
|
||||
>
|
||||
<publish-method-stub
|
||||
packageentity="[object Object]"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="gl-align-items-center gl-display-flex gl-min-h-6"
|
||||
class="gl-align-items-center gl-display-flex gl-font-sm gl-min-h-6"
|
||||
>
|
||||
<span>
|
||||
Created
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ describe('VersionRow', () => {
|
|||
const findPackageTags = () => wrapper.findComponent(PackageTags);
|
||||
const findPublishMethod = () => wrapper.findComponent(PublishMethod);
|
||||
const findTimeAgoTooltip = () => wrapper.findComponent(TimeAgoTooltip);
|
||||
const findPackageName = () => wrapper.findComponent(GlTruncate);
|
||||
const findPackageName = () => wrapper.findByTestId('package-name');
|
||||
const findWarningIcon = () => wrapper.findComponent(GlIcon);
|
||||
const findBulkDeleteAction = () => wrapper.findComponent(GlFormCheckbox);
|
||||
const findDeleteDropdownItem = () => wrapper.findComponent(GlDisclosureDropdownItem);
|
||||
|
|
@ -162,7 +162,7 @@ describe('VersionRow', () => {
|
|||
});
|
||||
|
||||
it('lists the package name', () => {
|
||||
expect(findPackageName().props('text')).toBe('@gitlab-org/package-15');
|
||||
expect(findPackageName().text()).toBe('@gitlab-org/package-15');
|
||||
});
|
||||
|
||||
it('does not have a link to navigate to the details page', () => {
|
||||
|
|
@ -194,7 +194,7 @@ describe('VersionRow', () => {
|
|||
});
|
||||
|
||||
it('lists the package name', () => {
|
||||
expect(findPackageName().props('text')).toBe('@gitlab-org/package-15');
|
||||
expect(findPackageName().text()).toBe('@gitlab-org/package-15');
|
||||
});
|
||||
|
||||
it('does not have a link to navigate to the details page', () => {
|
||||
|
|
|
|||
|
|
@ -23,24 +23,22 @@ exports[`packages_list_row renders 1`] = `
|
|||
class="gl-display-flex gl-flex-direction-column gl-flex-grow-1 gl-mb-3 gl-min-w-0 gl-sm-mb-0"
|
||||
>
|
||||
<div
|
||||
class="gl-align-items-center gl-display-flex gl-font-weight-bold gl-min-h-6 gl-min-w-0 gl-text-body"
|
||||
class="gl-align-items-center gl-display-flex gl-font-weight-semibold gl-min-h-6 gl-min-w-0 gl-text-body"
|
||||
>
|
||||
<div
|
||||
class="gl-align-items-center gl-display-flex gl-min-w-0 gl-mr-3"
|
||||
class="gl-align-items-center gl-display-flex gl-gap-3 gl-min-w-0 gl-mr-5"
|
||||
data-testid="package-name"
|
||||
>
|
||||
<a
|
||||
class="gl-min-w-0 gl-text-body"
|
||||
class="gl-min-w-0 gl-text-body gl-word-break-all"
|
||||
data-testid="details-link"
|
||||
>
|
||||
<gl-truncate-stub
|
||||
position="end"
|
||||
text="@gitlab-org/package-15"
|
||||
/>
|
||||
@gitlab-org/package-15
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="gl-align-items-center gl-display-flex gl-flex-grow-1 gl-min-h-6 gl-min-w-0 gl-text-gray-500"
|
||||
class="gl-align-items-center gl-display-flex gl-flex-grow-1 gl-font-sm gl-min-h-6 gl-min-w-0 gl-text-secondary"
|
||||
>
|
||||
<div
|
||||
class="gl-align-items-center gl-display-flex"
|
||||
|
|
@ -62,15 +60,15 @@ exports[`packages_list_row renders 1`] = `
|
|||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="gl-display-flex gl-flex-direction-column gl-flex-shrink-0 gl-justify-content-space-between gl-sm-align-items-flex-end gl-text-gray-500"
|
||||
class="gl-display-flex gl-flex-direction-column gl-flex-shrink-0 gl-justify-content-space-between gl-sm-align-items-flex-end gl-text-secondary"
|
||||
>
|
||||
<div
|
||||
class="gl-align-items-center gl-display-flex gl-min-h-6 gl-sm-font-weight-bold gl-sm-text-body"
|
||||
class="gl-align-items-center gl-display-flex gl-min-h-6 gl-sm-font-weight-semibold gl-sm-text-body"
|
||||
>
|
||||
<publish-method-stub />
|
||||
</div>
|
||||
<div
|
||||
class="gl-align-items-center gl-display-flex gl-min-h-6"
|
||||
class="gl-align-items-center gl-display-flex gl-font-sm gl-min-h-6"
|
||||
>
|
||||
<span
|
||||
data-testid="right-secondary"
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ describe('packages_list_row', () => {
|
|||
const findRightSecondary = () => wrapper.findByTestId('right-secondary');
|
||||
const findListItem = () => wrapper.findComponent(ListItem);
|
||||
const findBulkDeleteAction = () => wrapper.findComponent(GlFormCheckbox);
|
||||
const findPackageName = () => wrapper.findComponent(GlTruncate);
|
||||
const findPackageName = () => wrapper.findByTestId('package-name');
|
||||
|
||||
const mountComponent = ({
|
||||
packageEntity = packageWithoutTags,
|
||||
|
|
@ -88,9 +88,7 @@ describe('packages_list_row', () => {
|
|||
it('lists the package name', () => {
|
||||
mountComponent();
|
||||
|
||||
expect(findPackageName().props()).toMatchObject({
|
||||
text: '@gitlab-org/package-15',
|
||||
});
|
||||
expect(findPackageName().text()).toBe('@gitlab-org/package-15');
|
||||
});
|
||||
|
||||
describe('tags', () => {
|
||||
|
|
@ -168,9 +166,7 @@ describe('packages_list_row', () => {
|
|||
});
|
||||
|
||||
it('lists the package name', () => {
|
||||
expect(findPackageName().props()).toMatchObject({
|
||||
text: '@gitlab-org/package-15',
|
||||
});
|
||||
expect(findPackageName().text()).toBe('@gitlab-org/package-15');
|
||||
});
|
||||
|
||||
it('does not have a link to navigate to the details page', () => {
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@ RSpec.describe Projects::Ml::ExperimentsHelper, feature_category: :mlops do
|
|||
end
|
||||
|
||||
describe '#experiment_as_data' do
|
||||
subject { Gitlab::Json.parse(helper.experiment_as_data(experiment)) }
|
||||
subject { Gitlab::Json.parse(helper.experiment_as_data(project, experiment)) }
|
||||
|
||||
it do
|
||||
is_expected.to eq({
|
||||
|
|
|
|||
|
|
@ -3,11 +3,11 @@
|
|||
require 'spec_helper'
|
||||
|
||||
RSpec.describe Current, feature_category: :cell do
|
||||
describe '#organization=' do
|
||||
after do
|
||||
described_class.reset
|
||||
end
|
||||
after do
|
||||
described_class.reset
|
||||
end
|
||||
|
||||
describe '.organization=' do
|
||||
context 'when organization has not been set yet' do
|
||||
where(:value) do
|
||||
[nil, '_value_']
|
||||
|
|
@ -57,4 +57,27 @@ RSpec.describe Current, feature_category: :cell do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '.organization_id' do
|
||||
let_it_be(:current_organization) { create(:organization) }
|
||||
|
||||
subject(:organization_id) { described_class.organization_id }
|
||||
|
||||
context 'when organization is set' do
|
||||
before do
|
||||
described_class.organization = current_organization
|
||||
end
|
||||
|
||||
it 'returns the id of the organization' do
|
||||
expect(organization_id).not_to be_nil
|
||||
expect(organization_id).to eq(current_organization.id)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when organization is not set' do
|
||||
it 'returns nil' do
|
||||
expect(organization_id).to be_nil
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -2152,28 +2152,45 @@ RSpec.describe API::Groups, feature_category: :groups_and_projects do
|
|||
end
|
||||
|
||||
context 'when group is within a provided organization' do
|
||||
let_it_be(:current_organization) { create(:organization, name: "Current Organization") }
|
||||
let_it_be(:organization) { create(:organization) }
|
||||
|
||||
before do
|
||||
allow(Current).to receive(:organization).and_return(current_organization)
|
||||
end
|
||||
|
||||
context 'when user is an organization user' do
|
||||
before_all do
|
||||
create(:organization_user, user: user3, organization: current_organization)
|
||||
create(:organization_user, user: user3, organization: organization)
|
||||
end
|
||||
|
||||
it 'creates group within organization' do
|
||||
post api('/groups', user3), params: attributes_for_group_api(organization_id: organization.id)
|
||||
context 'and organization_id is not passed' do
|
||||
it 'creates organization using current organization' do
|
||||
post api('/groups', user3), params: attributes_for_group_api
|
||||
|
||||
expect(response).to have_gitlab_http_status(:created)
|
||||
expect(json_response['organization_id']).to eq(organization.id)
|
||||
expect(response).to have_gitlab_http_status(:created)
|
||||
expect(json_response['organization_id']).to eq(Current.organization.id)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when parent_group is not part of the organization' do
|
||||
it 'does not create the group with not_found' do
|
||||
post(
|
||||
api('/groups', user3),
|
||||
params: attributes_for_group_api(parent_id: group2.id, organization_id: organization.id)
|
||||
)
|
||||
context 'and organization_id is passed' do
|
||||
it 'creates group within organization' do
|
||||
post api('/groups', user3), params: attributes_for_group_api(organization_id: organization.id)
|
||||
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
expect(response).to have_gitlab_http_status(:created)
|
||||
expect(json_response['organization_id']).to eq(organization.id)
|
||||
end
|
||||
|
||||
context 'when parent_group is not part of the organization' do
|
||||
it 'does not create the group with not_found' do
|
||||
post(
|
||||
api('/groups', user3),
|
||||
params: attributes_for_group_api(parent_id: group2.id, organization_id: organization.id)
|
||||
)
|
||||
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -201,8 +201,8 @@ RSpec.describe Projects::Ml::ExperimentsController, feature_category: :mlops do
|
|||
end
|
||||
end
|
||||
|
||||
it 'does not perform N+1 sql queries', quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/444689' do
|
||||
control_count = ActiveRecord::QueryRecorder.new(skip_cached: false) { show_experiment }
|
||||
it 'does not perform N+1 sql queries' do
|
||||
control_count = ActiveRecord::QueryRecorder.new(skip_cached: true) { show_experiment }
|
||||
|
||||
create_list(:ml_candidates, 2, :with_metrics_and_params, experiment: experiment)
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,10 @@ RSpec.describe GenerateAsIfFossEnv, feature_category: :tooling do
|
|||
subject(:generate) { described_class.new }
|
||||
|
||||
before do
|
||||
stub_env(RUBY_VERSION: '3.1')
|
||||
stub_env(
|
||||
'RUBY_VERSION' => '3.1',
|
||||
'CI_MERGE_REQUEST_PROJECT_PATH' => 'fake-mr-project-path',
|
||||
'CI_MERGE_REQUEST_IID' => 'fake-mr-iid')
|
||||
end
|
||||
|
||||
shared_context 'when there are all jobs' do
|
||||
|
|
@ -68,8 +71,8 @@ RSpec.describe GenerateAsIfFossEnv, feature_category: :tooling do
|
|||
expect(generate.variables).to eq({
|
||||
START_AS_IF_FOSS: 'true',
|
||||
RUBY_VERSION: ENV['RUBY_VERSION'],
|
||||
CI_MERGE_REQUEST_PROJECT_PATH: ENV['CI_MERGE_REQUEST_PROJECT_PATH'],
|
||||
CI_MERGE_REQUEST_IID: ENV['CI_MERGE_REQUEST_IID'],
|
||||
FIND_CHANGES_MERGE_REQUEST_PROJECT_PATH: ENV['CI_MERGE_REQUEST_PROJECT_PATH'],
|
||||
FIND_CHANGES_MERGE_REQUEST_IID: ENV['CI_MERGE_REQUEST_IID'],
|
||||
ENABLE_RSPEC: 'true',
|
||||
ENABLE_RSPEC_FAST_SPEC_HELPER: 'true',
|
||||
ENABLE_RSPEC_UNIT: 'true',
|
||||
|
|
@ -109,8 +112,8 @@ RSpec.describe GenerateAsIfFossEnv, feature_category: :tooling do
|
|||
expect { generate.display }.to output(<<~ENV).to_stdout
|
||||
START_AS_IF_FOSS=true
|
||||
RUBY_VERSION=#{ENV['RUBY_VERSION']}
|
||||
CI_MERGE_REQUEST_PROJECT_PATH=#{ENV['CI_MERGE_REQUEST_PROJECT_PATH']}
|
||||
CI_MERGE_REQUEST_IID=#{ENV['CI_MERGE_REQUEST_IID']}
|
||||
FIND_CHANGES_MERGE_REQUEST_PROJECT_PATH=#{ENV['CI_MERGE_REQUEST_PROJECT_PATH']}
|
||||
FIND_CHANGES_MERGE_REQUEST_IID=#{ENV['CI_MERGE_REQUEST_IID']}
|
||||
ENABLE_RSPEC=true
|
||||
ENABLE_RSPEC_FAST_SPEC_HELPER=true
|
||||
ENABLE_RSPEC_UNIT=true
|
||||
|
|
|
|||
|
|
@ -244,8 +244,6 @@ RSpec.describe Groups::CreateService, '#execute', feature_category: :groups_and_
|
|||
end
|
||||
|
||||
context 'when organization is not set by params', :with_current_organization do
|
||||
let_it_be(:default_organization) { create(:organization, :default) }
|
||||
|
||||
context 'and the parent of the group has an organization' do
|
||||
let_it_be(:parent_group) { create(:group, organization: other_organization) }
|
||||
|
||||
|
|
@ -263,6 +261,15 @@ RSpec.describe Groups::CreateService, '#execute', feature_category: :groups_and_
|
|||
end
|
||||
end
|
||||
|
||||
context 'when organization_id is set to nil' do
|
||||
let_it_be(:default_organization) { create(:organization, :default) }
|
||||
let(:extra_params) { { organization_id: nil } }
|
||||
|
||||
it 'creates group in default organization' do
|
||||
expect(created_group.organization).to eq(default_organization)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when organization is not set at all' do
|
||||
it 'creates group without an organization' do
|
||||
expect(created_group.organization).to eq(nil)
|
||||
|
|
|
|||
|
|
@ -27,6 +27,9 @@ RSpec.describe Tooling::FindChanges, feature_category: :tooling do
|
|||
let(:gitlab_client) { double('GitLab') } # rubocop:disable RSpec/VerifiedDoubles
|
||||
let(:file_filter) { ->(_) { true } }
|
||||
let(:only_new_paths) { false }
|
||||
let(:find_changes_api_token) { nil }
|
||||
let(:find_changes_mr_project_path) { nil }
|
||||
let(:find_changes_mr_iid) { nil }
|
||||
|
||||
around do |example|
|
||||
self.changed_files_file = Tempfile.new('changed_files_file')
|
||||
|
|
@ -52,7 +55,10 @@ RSpec.describe Tooling::FindChanges, feature_category: :tooling do
|
|||
'CI_API_V4_URL' => 'gitlab_api_url',
|
||||
'CI_MERGE_REQUEST_IID' => '1234',
|
||||
'CI_MERGE_REQUEST_PROJECT_PATH' => 'dummy-project',
|
||||
'PROJECT_TOKEN_FOR_CI_SCRIPTS_API_USAGE' => 'dummy-token'
|
||||
'PROJECT_TOKEN_FOR_CI_SCRIPTS_API_USAGE' => 'dummy-token',
|
||||
'FIND_CHANGES_API_TOKEN' => find_changes_api_token,
|
||||
'FIND_CHANGES_MERGE_REQUEST_PROJECT_PATH' => find_changes_mr_project_path,
|
||||
'FIND_CHANGES_MERGE_REQUEST_IID' => find_changes_mr_iid
|
||||
)
|
||||
end
|
||||
|
||||
|
|
@ -66,6 +72,56 @@ RSpec.describe Tooling::FindChanges, feature_category: :tooling do
|
|||
)
|
||||
end
|
||||
end
|
||||
|
||||
describe '#gitlab_token' do
|
||||
it 'sets to PROJECT_TOKEN_FOR_CI_SCRIPTS_API_USAGE' do
|
||||
expect(instance.__send__(:gitlab_token)).to eq('dummy-token')
|
||||
end
|
||||
|
||||
context 'when FIND_CHANGES_API_TOKEN is set' do
|
||||
let(:find_changes_api_token) { 'mummy-token' }
|
||||
|
||||
it 'sets to PROJECT_TOKEN_FOR_CI_SCRIPTS_API_USAGE' do
|
||||
expect(instance.__send__(:gitlab_token)).to eq('dummy-token')
|
||||
end
|
||||
|
||||
context 'when FIND_CHANGES_MERGE_REQUEST_PROJECT_PATH is set' do
|
||||
let(:find_changes_mr_project_path) { 'mummy-project' }
|
||||
|
||||
it 'sets to PROJECT_TOKEN_FOR_CI_SCRIPTS_API_USAGE' do
|
||||
expect(instance.__send__(:gitlab_token)).to eq('mummy-token')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#mr_project_path' do
|
||||
it 'sets to CI_MERGE_REQUEST_PROJECT_PATH' do
|
||||
expect(instance.__send__(:mr_project_path)).to eq('dummy-project')
|
||||
end
|
||||
|
||||
context 'when FIND_CHANGES_MERGE_REQUEST_PROJECT_PATH is set' do
|
||||
let(:find_changes_mr_project_path) { 'mummy-project' }
|
||||
|
||||
it 'sets to FIND_CHANGES_MERGE_REQUEST_PROJECT_PATH' do
|
||||
expect(instance.__send__(:mr_project_path)).to eq('mummy-project')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#mr_iid' do
|
||||
it 'sets to CI_MERGE_REQUEST_PROJECT_PATH' do
|
||||
expect(instance.__send__(:mr_iid)).to eq('1234')
|
||||
end
|
||||
|
||||
context 'when FIND_CHANGES_MERGE_REQUEST_PROJECT_PATH is set' do
|
||||
let(:find_changes_mr_iid) { '1357' }
|
||||
|
||||
it 'sets to FIND_CHANGES_MERGE_REQUEST_PROJECT_PATH' do
|
||||
expect(instance.__send__(:mr_iid)).to eq('1357')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#execute' do
|
||||
|
|
|
|||
|
|
@ -22,10 +22,24 @@ module Tooling
|
|||
raise ArgumentError, ':from can only be :api or :changed_files' unless
|
||||
%i[api changed_files].include?(from)
|
||||
|
||||
@gitlab_token = ENV['PROJECT_TOKEN_FOR_CI_SCRIPTS_API_USAGE'] || ''
|
||||
@gitlab_endpoint = ENV['CI_API_V4_URL']
|
||||
@mr_project_path = ENV['CI_MERGE_REQUEST_PROJECT_PATH']
|
||||
@mr_iid = ENV['CI_MERGE_REQUEST_IID']
|
||||
@gitlab_endpoint = ENV['CI_API_V4_URL']
|
||||
|
||||
@gitlab_token =
|
||||
if ENV['FIND_CHANGES_MERGE_REQUEST_PROJECT_PATH']
|
||||
# We set FIND_CHANGES_API_TOKEN in the security FOSS project so it
|
||||
# can request the security EE project to retrieve the changed files.
|
||||
ENV['FIND_CHANGES_API_TOKEN']
|
||||
else
|
||||
ENV['PROJECT_TOKEN_FOR_CI_SCRIPTS_API_USAGE']
|
||||
end || ''
|
||||
|
||||
@mr_project_path =
|
||||
ENV['FIND_CHANGES_MERGE_REQUEST_PROJECT_PATH'] ||
|
||||
ENV['CI_MERGE_REQUEST_PROJECT_PATH']
|
||||
@mr_iid =
|
||||
ENV['FIND_CHANGES_MERGE_REQUEST_IID'] ||
|
||||
ENV['CI_MERGE_REQUEST_IID']
|
||||
|
||||
@changed_files_pathname = changed_files_pathname
|
||||
@predictive_tests_pathname = predictive_tests_pathname
|
||||
@frontend_fixtures_mapping_pathname = frontend_fixtures_mapping_pathname
|
||||
|
|
|
|||
Loading…
Reference in New Issue