Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2025-04-17 00:11:35 +00:00
parent 61066c990c
commit bb164cb4c7
36 changed files with 270 additions and 57 deletions

View File

@ -18,7 +18,7 @@ variables:
# Helm chart ref used by test-on-cng pipeline
GITLAB_HELM_CHART_REF: "074bb942c9c65613c2576ce418f59b8577fff37c"
# Specific ref for cng-mirror project to trigger builds for
GITLAB_CNG_MIRROR_REF: "01f587c24c52e4bbf8a67135ae4f6adafa19fa2b"
GITLAB_CNG_MIRROR_REF: "56b6a062b05d549e0b69f79b759107e4956151eb"
# Makes sure some of the common scripts from pipeline-common use bundler to execute commands
RUN_WITH_BUNDLE: "true"
# Makes sure reporting script defined in .gitlab-qa-report from pipeline-common is executed from correct folder

View File

@ -36,6 +36,8 @@ import {
I18N_WORK_ITEM_ERROR_CREATING,
sprintfWorkItem,
i18n,
NAME_TO_LOWERCASE_TEXT_MAP,
NAME_TO_TEXT_MAP,
WIDGET_TYPE_ASSIGNEES,
WIDGET_TYPE_COLOR,
NEW_WORK_ITEM_IID,
@ -52,8 +54,6 @@ import {
WIDGET_TYPE_MILESTONE,
DEFAULT_EPIC_COLORS,
WIDGET_TYPE_HIERARCHY,
WORK_ITEM_TYPE_NAME_LOWERCASE_MAP,
WORK_ITEM_TYPE_NAME_MAP,
WORK_ITEM_TYPE_NAME_INCIDENT,
WORK_ITEM_TYPE_NAME_EPIC,
WIDGET_TYPE_CUSTOM_FIELDS,
@ -322,7 +322,7 @@ export default {
return getDisplayReference(this.selectedProjectFullPath, this.relatedItem.reference);
},
relatedItemType() {
return WORK_ITEM_TYPE_NAME_LOWERCASE_MAP[this.relatedItem?.type];
return NAME_TO_LOWERCASE_TEXT_MAP[this.relatedItem?.type];
},
workItemAssignees() {
return findWidget(WIDGET_TYPE_ASSIGNEES, this.workItem);
@ -382,7 +382,7 @@ export default {
return workItemTypes.map((workItemType) => ({
value: workItemType.id,
text: WORK_ITEM_TYPE_NAME_MAP[workItemType.name],
text: NAME_TO_TEXT_MAP[workItemType.name],
}));
},
selectedWorkItemType() {

View File

@ -1,7 +1,7 @@
<script>
import { GlButton, GlModal } from '@gitlab/ui';
import { s__, sprintf } from '~/locale';
import { WORK_ITEM_TYPE_NAME_LOWERCASE_MAP } from '../constants';
import { NAME_TO_LOWERCASE_TEXT_MAP } from '../constants';
export default {
components: {
@ -22,7 +22,7 @@ export default {
cancelConfirmationText() {
return sprintf(
s__('WorkItem|Are you sure you want to cancel creating this %{workItemType}?'),
{ workItemType: WORK_ITEM_TYPE_NAME_LOWERCASE_MAP[this.workItemType] },
{ workItemType: NAME_TO_LOWERCASE_TEXT_MAP[this.workItemType] },
);
},
},

View File

@ -5,10 +5,10 @@ import { __, s__ } from '~/locale';
import { isMetaClick } from '~/lib/utils/common_utils';
import { convertTypeEnumToName, newWorkItemPath } from '~/work_items/utils';
import {
NAME_TO_LOWERCASE_TEXT_MAP,
sprintfWorkItem,
ROUTES,
RELATED_ITEM_ID_URL_QUERY_PARAM,
WORK_ITEM_TYPE_NAME_LOWERCASE_MAP,
WORK_ITEM_TYPE_ENUM_INCIDENT,
NAME_TO_ENUM_MAP,
} from '../constants';
@ -136,7 +136,7 @@ export default {
});
},
selectedWorkItemTypeLowercase() {
return WORK_ITEM_TYPE_NAME_LOWERCASE_MAP[this.selectedWorkItemTypeName];
return NAME_TO_LOWERCASE_TEXT_MAP[this.selectedWorkItemTypeName];
},
newWorkItemButtonText() {
return this.alwaysShowWorkItemTypeSelect && this.selectedWorkItemTypeName

View File

@ -6,13 +6,13 @@ import { __, s__, sprintf } from '~/locale';
import { findDesignsWidget, getParentGroupName, isMilestoneWidget } from '~/work_items/utils';
import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
import {
NAME_TO_TEXT_MAP,
ALLOWED_CONVERSION_TYPES,
sprintfWorkItem,
WIDGET_TYPE_DESIGNS,
WIDGET_TYPE_HIERARCHY,
WIDGET_TYPE_MILESTONE,
WORK_ITEM_TYPE_NAME_EPIC,
WORK_ITEM_TYPE_NAME_MAP,
WORK_ITEM_WIDGETS_NAME_MAP,
} from '../constants';
@ -151,16 +151,15 @@ export default {
);
},
selectOptions() {
return [
{
id: null,
name: __('Select type'),
},
...this.allowedConversionTypes,
].map((item) => ({
text: item.text || item.name,
const selectOptions = this.allowedConversionTypes.map((item) => ({
text: item.text || NAME_TO_TEXT_MAP[item.name],
value: item.id,
}));
selectOptions.unshift({
text: __('Select type'),
value: null,
});
return selectOptions;
},
workItemsAlphaEnabled() {
return this.glFeatures.workItemsAlpha;
@ -372,7 +371,7 @@ export default {
'WorkItem|%{workItemType} does not support the %{childItemType} child item types. Remove child items to change type.',
),
{
workItemType: WORK_ITEM_TYPE_NAME_MAP[this.selectedWorkItemType.name],
workItemType: NAME_TO_TEXT_MAP[this.selectedWorkItemType.name],
childItemType: this.allowedChildTypes?.[0]?.name?.toLocaleLowerCase(),
},
);

View File

@ -329,7 +329,7 @@ export const ALLOWED_CONVERSION_TYPES = [
WORK_ITEM_TYPE_NAME_ISSUE,
];
export const WORK_ITEM_TYPE_NAME_MAP = {
export const NAME_TO_TEXT_MAP = {
[WORK_ITEM_TYPE_NAME_EPIC]: s__('WorkItem|Epic'),
[WORK_ITEM_TYPE_NAME_INCIDENT]: s__('WorkItem|Incident'),
[WORK_ITEM_TYPE_NAME_ISSUE]: s__('WorkItem|Issue'),
@ -341,7 +341,7 @@ export const WORK_ITEM_TYPE_NAME_MAP = {
[WORK_ITEM_TYPE_NAME_TICKET]: s__('WorkItem|Ticket'),
};
export const WORK_ITEM_TYPE_NAME_LOWERCASE_MAP = {
export const NAME_TO_LOWERCASE_TEXT_MAP = {
[WORK_ITEM_TYPE_NAME_EPIC]: s__('WorkItem|epic'),
[WORK_ITEM_TYPE_NAME_INCIDENT]: s__('WorkItem|incident'),
[WORK_ITEM_TYPE_NAME_ISSUE]: s__('WorkItem|issue'),

View File

@ -14,7 +14,10 @@ module Glql
# failures within the time window trigger throttling.
def execute
start_time = Gitlab::Metrics::System.monotonic_time
super
::Gitlab::Database::LoadBalancing::SessionMap.use_replica_if_available do
super
end
rescue StandardError => error
# We catch all errors here so they are tracked by SLIs.
# But we only increment the rate limiter failure count for ActiveRecord::QueryAborted.

View File

@ -22,11 +22,11 @@ class Namespace < ApplicationRecord
include SafelyChangeColumnDefault
include Todoable
ignore_column :unlock_membership_to_ldap, remove_with: '16.7', remove_after: '2023-11-16'
ignore_column :unlock_membership_to_ldap, remove_with: '18.1', remove_after: '2025-05-20'
cross_database_ignore_tables %w[routes redirect_routes], url: 'https://gitlab.com/gitlab-org/gitlab/-/issues/424277'
ignore_column :emails_disabled, remove_with: '17.0', remove_after: '2024-04-24'
ignore_column :emails_disabled, remove_with: '18.1', remove_after: '2025-05-20'
columns_changing_default :organization_id

View File

@ -5,4 +5,4 @@ rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/360331
milestone: '15.2'
type: ops
group: group::database
default_enabled: false
default_enabled: true

View File

@ -1018,6 +1018,9 @@ Gitlab.ee do
Settings.cron_jobs['delete_expired_vulnerability_exports_worker'] ||= {}
Settings.cron_jobs['delete_expired_vulnerability_exports_worker']['cron'] ||= '0 4 * * *'
Settings.cron_jobs['delete_expired_vulnerability_exports_worker']['job_class'] = 'Vulnerabilities::DeleteExpiredExportsWorker'
Settings.cron_jobs['ai_duo_workflows_fail_stuck_workflows_worker'] ||= {}
Settings.cron_jobs['ai_duo_workflows_fail_stuck_workflows_worker']['cron'] ||= '*/30 * * * *'
Settings.cron_jobs['ai_duo_workflows_fail_stuck_workflows_worker']['job_class'] ||= 'Ai::DuoWorkflows::FailStuckWorkflowsWorker'
Gitlab.com do
Settings.cron_jobs['disable_legacy_open_source_license_for_inactive_projects'] ||= {}

View File

@ -9,17 +9,17 @@
stage: secure # (required) String value of the stage that the feature was created in. e.g., Growth
issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/471677 # (required) Link to the deprecation issue in GitLab
body: | # (required) Do not modify this line, instead modify the lines below.
In GitLab 18.0, we will remove CodeClimate-based Code Quality scanning.
In GitLab 19.0, we will remove CodeClimate-based Code Quality scanning.
In its place, you should use quality tools directly in your CI/CD pipeline and [provide the tool's report as an artifact](https://docs.gitlab.com/ci/testing/code_quality/#import-code-quality-results-from-a-cicd-job).
Many tools already support the required report format, and you can integrate them by following the [documented steps](https://docs.gitlab.com/ci/testing/code_quality/#integrate-common-tools-with-code-quality).
We expect to implement this change by:
1. Changing the [`Code-Quality.gitlab-ci.yml` CI/CD template](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Jobs/Code-Quality.gitlab-ci.yml) to no longer execute scans. Today, this template runs CodeClimate-based scans. (We plan to change the template rather than delete it to reduce the impact on any pipelines that still `include` the template after 18.0.)
1. Changing the [`Code-Quality.gitlab-ci.yml` CI/CD template](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Jobs/Code-Quality.gitlab-ci.yml) to no longer execute scans. Today, this template runs CodeClimate-based scans. (We plan to change the template rather than delete it to reduce the impact on any pipelines that still `include` the template after 19.0.)
1. No longer running CodeClimate-based scanning as part of Auto DevOps.
Effective immediately, CodeClimate-based scanning will receive only [limited updates](https://docs.gitlab.com/update/terminology/#deprecation).
After End of Support in GitLab 18.0, we won't provide further updates.
After End of Support in GitLab 19.0, we won't provide further updates.
However, we won't delete previously published container images or remove the ability to run them by using custom CI/CD pipeline job definitions.
For more details, see [Scan code for quality violations](https://docs.gitlab.com/ci/testing/code_quality/#scan-code-for-quality-violations).

View File

@ -7,6 +7,7 @@
stage: application security testing
issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/513685
impact: medium
check_impact: Refer to the [Understanding this change](https://gitlab.com/gitlab-org/gitlab/-/issues/513685#understanding-this-change) section for details.
scope: instance
resolution_role: Developer
manual_task: true

View File

@ -1,8 +1,8 @@
---
table_name: namespaces
classes:
- Group
- Namespace
- Group
- Namespaces::ProjectNamespace
- Namespaces::UserNamespace
feature_categories:

View File

@ -0,0 +1,15 @@
# frozen_string_literal: true
class RemoveNamespaceColumns < Gitlab::Database::Migration[2.2]
milestone '18.0'
def up
remove_column :namespaces, :unlock_membership_to_ldap
remove_column :namespaces, :emails_disabled
end
def down
add_column :namespaces, :unlock_membership_to_ldap, :boolean
add_column :namespaces, :emails_disabled, :boolean
end
end

View File

@ -0,0 +1,19 @@
# frozen_string_literal: true
# See https://docs.gitlab.com/ee/development/migration_style_guide.html
# for more information on how to write migrations for GitLab.
class IndexDuoWorkflowsWorkflowsStatusUpdatedAtId < Gitlab::Database::Migration[2.2]
disable_ddl_transaction!
milestone '18.0'
INDEX_NAME = 'idx_workflows_status_updated_at_id'
def up
add_concurrent_index :duo_workflows_workflows, [:status, :updated_at, :id], name: INDEX_NAME
end
def down
remove_concurrent_index_by_name :duo_workflows_workflows, INDEX_NAME
end
end

View File

@ -0,0 +1 @@
5fafe441c919ff606ae6d4c722ccd903961e7b00f83c5c8a1eb980a8c0c9910d

View File

@ -0,0 +1 @@
e512c30c9f9e54047be0f1d1d8a68bb1131766c68bb1c8d48cee8b92704f746e

View File

@ -231,12 +231,10 @@ CREATE TABLE namespaces (
last_ci_minutes_notification_at timestamp with time zone,
last_ci_minutes_usage_notification_level integer,
subgroup_creation_level integer DEFAULT 1,
emails_disabled boolean,
max_pages_size integer,
max_artifacts_size integer,
mentions_disabled boolean,
default_branch_protection smallint,
unlock_membership_to_ldap boolean,
max_personal_access_token_lifetime integer,
push_rule_id bigint,
shared_runners_enabled boolean DEFAULT true NOT NULL,
@ -33621,6 +33619,8 @@ CREATE UNIQUE INDEX idx_wi_type_custom_lifecycles_on_namespace_type_lifecycle ON
CREATE INDEX idx_wi_type_custom_lifecycles_on_work_item_type_id ON work_item_type_custom_lifecycles USING btree (work_item_type_id);
CREATE INDEX idx_workflows_status_updated_at_id ON duo_workflows_workflows USING btree (status, updated_at, id);
CREATE INDEX idx_zoekt_last_indexed_at_gt_used_storage_bytes_updated_at ON zoekt_indices USING btree (used_storage_bytes_updated_at) WHERE (last_indexed_at >= used_storage_bytes_updated_at);
CREATE INDEX idx_zoekt_repositories_on_zoekt_index_id_and_size_bytes ON zoekt_repositories USING btree (zoekt_index_id, size_bytes);

View File

@ -16,7 +16,7 @@ title: Configure CodeClimate-based Code Quality scanning (deprecated)
{{< alert type="warning" >}}
This feature was [deprecated](../../update/deprecations.md#codeclimate-based-code-quality-scanning-will-be-removed) in GitLab 17.3 and is planned for removal in 18.0.
This feature was [deprecated](../../update/deprecations.md#codeclimate-based-code-quality-scanning-will-be-removed) in GitLab 17.3 and is planned for removal in 19.0.
[Integrate the results from a supported tool directly](code_quality.md#import-code-quality-results-from-a-cicd-job) instead. This change is a breaking change.
{{< /alert >}}

View File

@ -203,7 +203,7 @@ These database indicators are checked to throttle a migration. Upon receiving a
stop signal, the migration is paused for a set time (10 minutes):
- WAL queue pending archival crossing the threshold.
- Active autovacuum on the tables on which the migration works on.
- Active autovacuum on the tables on which the migration works on (enabled by default as of GitLab 18.0).
- Patroni apdex SLI dropping below the SLO.
- WAL rate crossing the threshold.
@ -211,6 +211,20 @@ There is an ongoing effort to add more indicators to further enhance the
database health check framework. For more details, see
[epic 7594](https://gitlab.com/groups/gitlab-org/-/epics/7594).
#### How to disable/enable autovacuum indicator on tables
As of GitLab 18.0, this health indicator is enabled by default. To disable it, please run the following command on the rails console:
```ruby
Feature.disable(:batched_migrations_health_status_autovacuum)
```
Alternatively, if you want to enable it again, run the following command in rails console:
```ruby
Feature.enable(:batched_migrations_health_status_autovacuum)
```
### Isolation
Batched background migrations must be isolated and cannot use application code (for example,

View File

@ -5,9 +5,10 @@ info: Any user with at least the Maintainer role can merge updates to this conte
title: GitLab for Jira Cloud app development
---
Developers have two options for how set up a development environment for the GitLab for Jira Cloud app:
Developers have several options for how set up a development environment for the GitLab for Jira Cloud app:
1. A full environment [with Jira](#set-up-with-jira). Use this when you need to test interactions with Jira.
1. A full environment [with a Jira Connect proxy](#setting-up-a-jira-connect-proxy). Use this when you need to test multiple GitLab instances connecting to Jira through a Jira Connect proxy, or when testing changes to the Jira Connect proxy itself.
1. A local environment [without Jira](#setup-without-jira). You can use this quicker setup if you do not require Jira, for example when testing the GitLab frontend.
## Set up with Jira
@ -122,6 +123,90 @@ If the app installation fails, you might need to delete `jira_connect_installati
If you use Gitpod and you get an error about Jira not being able to access the descriptor file, you will need to [make GitPod port public](#setting-up-gitpod).
## Setting up a Jira Connect Proxy
When a self-managed instance [installs the GitLab for Jira app from the Atlassian Marketplace](../../administration/settings/jira_cloud_app.md#install-the-gitlab-for-jira-cloud-app-from-the-atlassian-marketplace), the self-managed instance must use GitLab.com as a Jira Connect proxy. You can emulate this setup if you need to develop or test features such as the [handling of Jira lifecycle events](../../administration/settings/jira_cloud_app.md#gitlabcom-handling-of-app-lifecycle-events) and [branch creation](../../administration/settings/jira_cloud_app.md#gitlabcom-handling-of-branch-creation).
To set up a development Jira Connect Proxy:
- A Jira Cloud instance. Atlassian provides [free instances for development and testing](https://developer.atlassian.com/platform/marketplace/getting-started/#free-developer-instances-to-build-and-test-your-app).
- Two GitLab instances available over the internet.
- One to serve as the **Jira Connect proxy** (simulating GitLab.com)
- One to serve as the **GitLab instance** that will connect to Jira through the Jira Connect proxy
- For the app to work, Jira Cloud should
be able to connect to the **Jira Connect proxy** instance through the internet. For this we
recommend using Gitpod or a similar cloud development environment. For more
information on using Gitpod with GDK, see the:
- [GDK with Gitpod](https://gitlab.com/gitlab-org/gitlab-development-kit/-/blob/main/doc/howto/gitpod.md)
documentation.
- [GDK in Gitpod](https://www.loom.com/share/9c9711d4876a40869b9294eecb24c54d)
video.
<!-- vale gitlab_base.Spelling = NO -->
GitLab team members **must not** use tunneling tools such as Serveo or `ngrok`. These are
security risks, and must not be run on GitLab developer laptops.
<!-- vale gitlab_base.Spelling = YES -->
Jira requires all connections to the app host to be over SSL. If you set up
your own environment, remember to enable SSL and an appropriate certificate.
### Setting up GitPod
If you are using [Gitpod](https://gitlab.com/gitlab-org/gitlab-development-kit/-/blob/main/doc/howto/gitpod.md)
you must [make port `3000` public](https://gitlab.com/gitlab-org/gitlab-development-kit/-/blob/main/doc/howto/gitpod.md#make-the-rails-web-server-publicly-accessible).
### Set up the Jira Connect proxy instance
1. For the **Jira Connect proxy** instance, follow the [GDK with Gitpod](https://gitlab.com/gitlab-org/gitlab-development-kit/-/blob/main/doc/howto/gitpod.md) instructions to start a new Gitpod workspace.
1. Set up OAuth authentication on the **Jira Connect proxy** by following the [Set up the GitLab OAuth authentication flow](#set-up-the-gitlab-oauth-authentication-flow) section.
1. Configure the **Jira Connect proxy** [to serve as a proxy](../../administration/settings/jira_cloud_app.md#configure-your-gitlab-instance-to-serve-as-a-proxy).
### Install the GitLab for Jira Cloud app in Jira
Follow the [Install the app in Jira](#install-the-app-in-jira) section, but use the URL of your **Jira Connect proxy** instance for the app descriptor:
```plaintext
https://JIRA_CONNECT_PROXY_INSTANCE/-/jira_connect/app_descriptor.json
```
If the _Installed and ready to go!_ dialog opens, select **Close** (don't select **Get started** yet).
### Set up the secondary GitLab instance
1. Set up a second GitLab instance using Gitpod, following the same [GDK with Gitpod](https://gitlab.com/gitlab-org/gitlab-development-kit/-/blob/main/doc/howto/gitpod.md) instructions as for the proxy instance
1. Set up OAuth authentication on this instance following the same steps as in [Set up the GitLab OAuth authentication flow](#set-up-the-gitlab-oauth-authentication-flow), but with a crucial difference:
- When setting the **Redirect URI**, use the URL of your **Jira Connect proxy** instance, not this secondary instance:
```plaintext
https://JIRA_CONNECT_PROXY_INSTANCE/-/jira_connect/oauth_callbacks
```
1. Configure this GitLab instance to use the proxy:
1. Go to **Admin > Settings > General**
1. Expand **GitLab for Jira App**
1. Paste the **Application ID** value into **Jira Connect Application ID**
1. In **Jira Connect Proxy URL**, enter `JIRA_CONNECT_PROXY_INSTANCE` (for example, `https://xxxx.gitpod.io`)
1. Select **Save changes**
### Complete the setup in Jira
1. In Jira, go to **Jira settings > Apps > Manage apps**.
1. Scroll to **User-installed apps**, find your GitLab for Jira Cloud app and expand it.
1. Select **Get started**.
1. To link the app to the secondary GitLab instance, select **Change GitLab version**.
1. Select all checkboxes, then select Next.
1. In **GitLab instance URL** ,enter `GITLAB_INSTANCE` (for example, `https://xxxx.gitpod.io`), then select Save.
1. Select **Sign in to GitLab**.
1. Select **Authorize**. A list of groups is now visible.
1. Select **Link groups**.
1. To link to a group, select **Link**.
## Setup without Jira
If you do not require Jira to test with, you can use the [Jira connect test tool](https://gitlab.com/gitlab-org/foundations/import-and-integrate/jira-connect-test-tool) and your local GDK.

View File

@ -397,6 +397,34 @@ Gitlab::Database::SharedModel.using_connection(connection) do
end
```
#### Run all background migrations synchronously
There may be cases where you want to force background migrations to run in the foreground during a maintenance window.
Note that this script may timeout/exit before all migrations are completed. You can run it again until all migrations are complete.
```ruby
# Start the rails console
databases = ActiveRecord::Tasks::DatabaseTasks.setup_initial_database_yaml
Gitlab::Database.database_base_models.each do |database_name, model|
Gitlab::Database::SharedModel.using_connection(model.connection) do
Gitlab::Database::BackgroundMigration::BatchedMigration.with_status([:paused, :active]).find_each(batch_size: 100) do |migration|
puts "#{database_name}: Finalizing migration #{migration.job_class_name} (ID: #{migration.id})... "
Gitlab::Database::BackgroundMigration::BatchedMigrationRunner.finalize(
migration.job_class_name,
migration.table_name,
migration.column_name,
Gitlab::Json.parse(migration.job_arguments),
connection: model.connection
)
puts("done!\n")
end
end
end
```
<!--- start_remove The following content will be removed on remove_date: '2025-05-10' -->
<!-- This page needs significant revision after 15.0 becomes unsupported -->
<!--- end_remove -->

View File

@ -32,7 +32,7 @@ This window takes place on April 21 - 23, 2025 from 09:00 UTC to 22:00 UTC.
| [Deprecation of `STORAGE` enum in `NamespaceProjectSortEnum` GraphQL API](deprecations.md#deprecation-of-storage-enum-in-namespaceprojectsortenum-graphql-api) | Low | Fulfillment | Group | |
| [DAST `dast_devtools_api_timeout` will have a lower default value](deprecations.md#dast-dast_devtools_api_timeout-will-have-a-lower-default-value) | Low | Application security testing | Project | |
| [API Discovery will use branch pipelines by default](deprecations.md#api-discovery-will-use-branch-pipelines-by-default) | Low | Application_security_testing | Project | |
| [GitLab Advanced SAST will be enabled by default](deprecations.md#gitlab-advanced-sast-will-be-enabled-by-default) | Medium | Application security testing | Instance | |
| [GitLab Advanced SAST will be enabled by default](deprecations.md#gitlab-advanced-sast-will-be-enabled-by-default) | Medium | Application security testing | Instance | Refer to the [Understanding this change](https://gitlab.com/gitlab-org/gitlab/-/issues/513685#understanding-this-change) section for details. |
| [Application Security Testing analyzers major version update](deprecations.md#application-security-testing-analyzers-major-version-update) | Low | Application security testing | Project | |
## Window 2

View File

@ -358,17 +358,17 @@ If your pipeline relies on forwarding protected variables, update your configura
</div>
In GitLab 18.0, we will remove CodeClimate-based Code Quality scanning.
In GitLab 19.0, we will remove CodeClimate-based Code Quality scanning.
In its place, you should use quality tools directly in your CI/CD pipeline and [provide the tool's report as an artifact](https://docs.gitlab.com/ci/testing/code_quality/#import-code-quality-results-from-a-cicd-job).
Many tools already support the required report format, and you can integrate them by following the [documented steps](https://docs.gitlab.com/ci/testing/code_quality/#integrate-common-tools-with-code-quality).
We expect to implement this change by:
1. Changing the [`Code-Quality.gitlab-ci.yml` CI/CD template](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Jobs/Code-Quality.gitlab-ci.yml) to no longer execute scans. Today, this template runs CodeClimate-based scans. (We plan to change the template rather than delete it to reduce the impact on any pipelines that still `include` the template after 18.0.)
1. Changing the [`Code-Quality.gitlab-ci.yml` CI/CD template](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Jobs/Code-Quality.gitlab-ci.yml) to no longer execute scans. Today, this template runs CodeClimate-based scans. (We plan to change the template rather than delete it to reduce the impact on any pipelines that still `include` the template after 19.0.)
1. No longer running CodeClimate-based scanning as part of Auto DevOps.
Effective immediately, CodeClimate-based scanning will receive only [limited updates](https://docs.gitlab.com/update/terminology/#deprecation).
After End of Support in GitLab 18.0, we won't provide further updates.
After End of Support in GitLab 19.0, we won't provide further updates.
However, we won't delete previously published container images or remove the ability to run them by using custom CI/CD pipeline job definitions.
For more details, see [Scan code for quality violations](https://docs.gitlab.com/ci/testing/code_quality/#scan-code-for-quality-violations).

View File

@ -2,7 +2,7 @@
stage: Security Risk Management
group: Security Insights
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
title: Vulnerability archive
title: Vulnerability archival
---
{{< details >}}

View File

@ -59,7 +59,7 @@ module Gitlab
def commit_message
<<~MARKDOWN.chomp
#{title}
#{truncated_title}
#{mr_description}
@ -79,6 +79,16 @@ module Gitlab
def valid?
@identifiers && @title && @description && @changed_files.present?
end
def truncated_title
truncate(title, 72)
end
def truncate(text, limit)
return text if text.length <= limit
text[0...limit]
end
end
end
end

View File

@ -152,7 +152,7 @@ module Gitlab
target_project_id:
)
request(:post, "/projects/#{source_project_id}/merge_requests", body: {
title: change.title,
title: change.truncated_title,
description: change.mr_description,
labels: Array(change.labels).join(','),
source_branch: source_branch,

View File

@ -174,4 +174,13 @@ RSpec.describe ::Gitlab::Housekeeper::Change do
expect(change).not_to be_valid
end
end
describe '#truncated_title' do
it 'truncates the title to 72 chars' do
change = create_change(title: 'some long title ' * 10)
expect(change.truncated_title).to eq('some long title some long title some long title some long title some lon')
expect(change.truncated_title.length).to eq(72)
end
end
end

View File

@ -67,7 +67,7 @@ module Keeps
def initialize_change(migration, migration_record, job_name, last_migration_file)
# Finalize the migration
change = ::Gitlab::Housekeeper::Change.new
change.title = "Finalize migration #{job_name}"
change.title = "Finalize BBM #{job_name}"
change.identifiers = [self.class.name.demodulize, job_name]
change.description = change_description(migration_record, job_name, last_migration_file)

View File

@ -28,6 +28,10 @@ module Gitlab
with_sessions(Gitlab::Database::LoadBalancing.base_models).ignore_writes(&)
end
def self.use_replica_if_available(&)
with_sessions(Gitlab::Database::LoadBalancing.base_models).use_replicas_for_read_queries(&)
end
def self.cached_instance
RequestStore[CACHE_KEY] ||= new
end

View File

@ -53023,6 +53023,9 @@ msgstr ""
msgid "ScanResultPolicy|Except"
msgstr ""
msgid "ScanResultPolicy|Exceptions that do not require approval"
msgstr ""
msgid "ScanResultPolicy|Exceptions that require approval"
msgstr ""
@ -54353,9 +54356,6 @@ msgstr ""
msgid "SecurityOrchestration|Add project full path after @ to following branches: %{branches}"
msgstr ""
msgid "SecurityOrchestration|Add project full path after @ to following exceptions: %{exceptions}"
msgstr ""
msgid "SecurityOrchestration|Add protected branches"
msgstr ""
@ -55180,7 +55180,7 @@ msgstr ""
msgid "SecurityOrchestration|Use default mode for scoping"
msgstr ""
msgid "SecurityOrchestration|Use the format %{schemaStart}path-to-package@package-version%{schemaEnd}. For multiple packages, separate paths with commas. For example: path/file1.yaml@1.1.1, path/file2.yaml@2.2.2"
msgid "SecurityOrchestration|Use the format %{schemaStart}path-to-package@package-version%{schemaEnd}. For multiple packages, separate paths with commas. For example: npm/lodash@4.17.21, maven/org.apache.commons/commons-lang3@3.12.0, pypi/requests"
msgstr ""
msgid "SecurityOrchestration|Users can skip pipelines"

View File

@ -2,7 +2,7 @@
source 'https://rubygems.org'
gem 'gitlab-qa', '~> 15', '>= 15.3.0', require: 'gitlab/qa'
gem 'gitlab-qa', '~> 15', '>= 15.4.0', require: 'gitlab/qa'
gem 'gitlab_quality-test_tooling', '~> 2.9.0', require: false
gem 'gitlab-utils', path: '../gems/gitlab-utils'
gem 'activesupport', '~> 7.0.8.7' # This should stay in sync with the root's Gemfile

View File

@ -118,7 +118,7 @@ GEM
gitlab (4.19.0)
httparty (~> 0.20)
terminal-table (>= 1.5.1)
gitlab-qa (15.3.0)
gitlab-qa (15.4.0)
activesupport (>= 6.1, < 7.2)
ffi (~> 1.17)
gitlab (~> 4.19)
@ -367,7 +367,7 @@ DEPENDENCIES
fog-core (= 2.1.0)
fog-google (~> 1.24, >= 1.24.1)
gitlab-orchestrator!
gitlab-qa (~> 15, >= 15.3.0)
gitlab-qa (~> 15, >= 15.4.0)
gitlab-utils!
gitlab_quality-test_tooling (~> 2.9.0)
googleauth (~> 1.9.0)

View File

@ -164,6 +164,15 @@ RSpec.describe Glql::BaseController, feature_category: :integrations do
expect(current_rate_limit_value(query_sha)).to be_nil
end
end
context 'when load balancing enabled', :db_load_balancing do
it 'uses the replica' do
expect(Gitlab::Database::LoadBalancing::SessionMap)
.to receive(:with_sessions).with(Gitlab::Database::LoadBalancing.base_models).and_call_original
execute_request
end
end
end
describe '#append_info_to_payload' do

View File

@ -36,7 +36,7 @@ RSpec.describe Keeps::OverdueFinalizeBackgroundMigration, feature_category: :too
it 'returns a Gitlab::Housekeeper::Change', :aggregate_failures do
expect(change).to be_a(::Gitlab::Housekeeper::Change)
expect(change.title).to eq("Finalize migration #{job_name}")
expect(change.title).to eq("Finalize BBM #{job_name}")
expect(change.identifiers).to eq(identifiers)
expect(change.labels).to eq(['maintenance::removal'])
expect(change.reviewers).to eq(['random-engineer'])

View File

@ -114,7 +114,7 @@ RSpec.describe Gitlab::Database::LoadBalancing::SessionMap, feature_category: :d
end
end
describe '.without_sticky_writes' do
context 'when wrapping queries with load balancing sessions' do
let(:dbs) { Gitlab::Database.database_base_models.values }
let(:names) { dbs.map { |m| m.load_balancer.name }.uniq }
@ -125,16 +125,28 @@ RSpec.describe Gitlab::Database::LoadBalancing::SessionMap, feature_category: :d
# This makes the spec more robust in single-db scenarios
allow(Gitlab::Database::LoadBalancing).to receive(:names).and_return([:main, :ci])
described_class.current(::ApplicationRecord.load_balancer)
allow(Gitlab::Database::LoadBalancing::ScopedSessions)
.to receive(:new).with(names, RequestStore[described_class::CACHE_KEY].session_map).and_return(scoped_session)
end
it 'initialises ScopedSessions with all valid lb names and calls ignore_writes' do
expect(Gitlab::Database::LoadBalancing::ScopedSessions)
.to receive(:new).with(names, RequestStore[described_class::CACHE_KEY].session_map).and_return(scoped_session)
describe '.without_sticky_writes' do
it 'initialises ScopedSessions with all valid lb names and calls ignore_writes' do
expect(scoped_session).to receive(:ignore_writes).and_yield
expect(scoped_session).to receive(:ignore_writes).and_yield
described_class.without_sticky_writes do
# exact logic for ignore_writes is tested in `.with_sessions` test suite
end
end
end
described_class.without_sticky_writes do
# exact logic for ignore_writes is tested in `.with_sessions` test suite
describe '.use_replica_if_available' do
it 'initialises ScopedSessions with all valid lb names and calls use_replicas_for_read_queries' do
expect(scoped_session).to receive(:use_replicas_for_read_queries).and_yield
described_class.use_replica_if_available do
# exact logic for use_replicas_for_read_queries is tested in `.with_sessions` test suite
end
end
end
end