({
},
});
-export const formattedReleaseNotes = ({ includeTagNotes, release: { description }, tagNotes }) =>
- includeTagNotes && tagNotes
- ? `${description}\n\n### ${s__('Releases|Tag message')}\n\n${tagNotes}\n`
+export const formattedReleaseNotes = ({
+ includeTagNotes,
+ release: { description, tagMessage },
+ tagNotes,
+ showCreateFrom,
+}) => {
+ const notes = showCreateFrom ? tagMessage : tagNotes;
+ return includeTagNotes && notes
+ ? `${description}\n\n### ${s__('Releases|Tag message')}\n\n${notes}\n`
: description;
+};
export const releasedAtChanged = ({ originalReleasedAt, release }) =>
originalReleasedAt !== release.releasedAt;
diff --git a/app/assets/javascripts/sidebar/components/date/sidebar_date_widget.vue b/app/assets/javascripts/sidebar/components/date/sidebar_date_widget.vue
index 3872869f73d..5a9545f3460 100644
--- a/app/assets/javascripts/sidebar/components/date/sidebar_date_widget.vue
+++ b/app/assets/javascripts/sidebar/components/date/sidebar_date_widget.vue
@@ -4,7 +4,6 @@ import { createAlert } from '~/alert';
import { TYPE_ISSUE } from '~/issues/constants';
import { dateInWords, formatDate, parsePikadayDate } from '~/lib/utils/datetime_utility';
import { __, sprintf } from '~/locale';
-import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
import { dateFields, dateTypes, dueDateQueries, startDateQueries, Tracking } from '../../constants';
import SidebarEditableItem from '../sidebar_editable_item.vue';
import SidebarFormattedDate from './sidebar_formatted_date.vue';
@@ -31,7 +30,6 @@ export default {
SidebarFormattedDate,
SidebarInheritDate,
},
- mixins: [glFeatureFlagsMixin()],
inject: ['canUpdate'],
props: {
iid: {
@@ -182,12 +180,7 @@ export default {
return this.issuable.id;
},
skipIssueDueDateSubscription() {
- return (
- this.issuableType !== TYPE_ISSUE ||
- !this.issuableId ||
- this.isLoading ||
- !this.glFeatures?.realTimeIssueDueDate
- );
+ return this.issuableType !== TYPE_ISSUE || !this.issuableId || this.isLoading;
},
},
methods: {
diff --git a/app/assets/javascripts/super_sidebar/components/frequent_items_list.vue b/app/assets/javascripts/super_sidebar/components/frequent_items_list.vue
index 5269c7f8d5e..56143a29f52 100644
--- a/app/assets/javascripts/super_sidebar/components/frequent_items_list.vue
+++ b/app/assets/javascripts/super_sidebar/components/frequent_items_list.vue
@@ -1,13 +1,20 @@
@@ -61,14 +93,32 @@ export default {
- {{ title }}
+ {{ title }}
+
+
+
{{ pristineText }}
-
+
diff --git a/app/assets/javascripts/super_sidebar/components/items_list.vue b/app/assets/javascripts/super_sidebar/components/items_list.vue
index 0a72105fcc4..8ee7d57c47c 100644
--- a/app/assets/javascripts/super_sidebar/components/items_list.vue
+++ b/app/assets/javascripts/super_sidebar/components/items_list.vue
@@ -1,18 +1,29 @@
@@ -34,6 +45,21 @@ export default {
aria-hidden="true"
/>
+
+
+
+
+
diff --git a/app/assets/javascripts/super_sidebar/components/nav_item.vue b/app/assets/javascripts/super_sidebar/components/nav_item.vue
index c2e5fb9b004..c3bd3b9b5d1 100644
--- a/app/assets/javascripts/super_sidebar/components/nav_item.vue
+++ b/app/assets/javascripts/super_sidebar/components/nav_item.vue
@@ -132,6 +132,7 @@ export default {
{{ item.subtitle }}
+
{{ pillData }}
diff --git a/app/assets/javascripts/tracking/constants.js b/app/assets/javascripts/tracking/constants.js
index 2593fbe6ed1..7f4c7a91b20 100644
--- a/app/assets/javascripts/tracking/constants.js
+++ b/app/assets/javascripts/tracking/constants.js
@@ -5,14 +5,11 @@ export const DEFAULT_SNOWPLOW_OPTIONS = {
hostname: window.location.hostname,
cookieDomain: window.location.hostname,
appId: '',
- userFingerprint: false,
respectDoNotTrack: true,
- forceSecureTracker: true,
eventMethod: 'post',
contexts: { webPage: true, performanceTiming: true },
formTracking: false,
linkClickTracking: false,
- pageUnloadTimer: 10,
formTrackingConfig: {
forms: { allow: [] },
fields: { allow: [] },
diff --git a/app/assets/javascripts/tracking/dispatch_snowplow_event.js b/app/assets/javascripts/tracking/dispatch_snowplow_event.js
index 5daeaf1d85b..89d90cf89be 100644
--- a/app/assets/javascripts/tracking/dispatch_snowplow_event.js
+++ b/app/assets/javascripts/tracking/dispatch_snowplow_event.js
@@ -26,7 +26,14 @@ export function dispatchSnowplowEvent(
}
try {
- window.snowplow('trackStructEvent', category, action, label, property, value, contexts);
+ window.snowplow('trackStructEvent', {
+ category,
+ action,
+ label,
+ property,
+ value,
+ context: contexts,
+ });
return true;
} catch (error) {
Sentry.captureException(error);
diff --git a/app/assets/javascripts/tracking/index.js b/app/assets/javascripts/tracking/index.js
index d60eb37a9a2..472ce3c5bbf 100644
--- a/app/assets/javascripts/tracking/index.js
+++ b/app/assets/javascripts/tracking/index.js
@@ -7,7 +7,7 @@ export { Tracking as default };
/**
* Tracker initialization as defined in:
- * https://docs.snowplowanalytics.com/docs/collecting-data/collecting-from-own-applications/javascript-trackers/javascript-tracker/javascript-tracker-v2/tracker-setup/initializing-a-tracker-2/.
+ * https://docs.snowplow.io/docs/collecting-data/collecting-from-own-applications/javascript-trackers/javascript-tracker/javascript-tracker-v3/tracker-setup/initialization-options/.
* It also dispatches any event emitted before its execution.
*
* @returns {undefined}
@@ -42,13 +42,19 @@ export function initDefaultTrackers() {
// must be before initializing the trackers
Tracking.setAnonymousUrls();
- window.snowplow('enableActivityTracking', 30, 30);
+ window.snowplow('enableActivityTracking', {
+ minimumVisitLength: 30,
+ heartbeatDelay: 30,
+ });
// must be after enableActivityTracking
const standardContext = getStandardContext();
const experimentContexts = getAllExperimentContexts();
// To not expose personal identifying information, the page title is hardcoded as `GitLab`
// See: https://gitlab.com/gitlab-org/gitlab/-/issues/345243
- window.snowplow('trackPageView', 'GitLab', [standardContext, ...experimentContexts]);
+ window.snowplow('trackPageView', {
+ title: 'GitLab',
+ context: [standardContext, ...experimentContexts],
+ });
window.snowplow('setDocumentTitle', 'GitLab');
if (window.snowplowOptions.formTracking) {
diff --git a/app/assets/javascripts/tracking/tracker.js b/app/assets/javascripts/tracking/tracker.js
index 85f4979e752..b69b1714952 100644
--- a/app/assets/javascripts/tracking/tracker.js
+++ b/app/assets/javascripts/tracking/tracker.js
@@ -207,14 +207,18 @@ export const Tracker = {
const mappedConfig = {};
if (config.forms) {
- mappedConfig.forms = renameKey(config.forms, 'allow', 'whitelist');
+ mappedConfig.forms = renameKey(config.forms, 'allow', 'allowlist');
}
if (config.fields) {
- mappedConfig.fields = renameKey(config.fields, 'allow', 'whitelist');
+ mappedConfig.fields = renameKey(config.fields, 'allow', 'allowlist');
}
- const enabler = () => window.snowplow('enableFormTracking', mappedConfig, userProvidedContexts);
+ const enabler = () =>
+ window.snowplow('enableFormTracking', {
+ options: mappedConfig,
+ context: userProvidedContexts,
+ });
if (document.readyState === 'complete') {
enabler();
diff --git a/app/assets/stylesheets/highlight/white_base.scss b/app/assets/stylesheets/highlight/white_base.scss
index ccb5d96e966..969a6665634 100644
--- a/app/assets/stylesheets/highlight/white_base.scss
+++ b/app/assets/stylesheets/highlight/white_base.scss
@@ -192,8 +192,8 @@ pre.code,
}
&.hll {
- --highlight-border-color: #{$orange-200};
- background-color: $orange-50;
+ --highlight-border-color: #{$blue-300};
+ background-color: $blue-50;
}
}
@@ -247,8 +247,8 @@ pre.code,
}
&.hll {
- --highlight-border-color: #{$orange-200};
- background-color: $orange-50;
+ --highlight-border-color: #{$blue-300};
+ background-color: $blue-50;
}
}
@@ -269,8 +269,8 @@ pre.code,
}
&.hll {
- --highlight-border-color: #{$orange-200};
- background-color: $orange-50;
+ --highlight-border-color: #{$blue-300};
+ background-color: $blue-50;
}
}
}
diff --git a/app/assets/stylesheets/page_bundles/merge_requests.scss b/app/assets/stylesheets/page_bundles/merge_requests.scss
index e11b6c92455..c3f90abe018 100644
--- a/app/assets/stylesheets/page_bundles/merge_requests.scss
+++ b/app/assets/stylesheets/page_bundles/merge_requests.scss
@@ -180,6 +180,10 @@ $tabs-holder-z-index: 250;
.content + .content {
@include gl-border-t;
}
+
+ .notes-content {
+ border: 0;
+ }
}
&.inline-diff-view {
diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb
index 5cb7c75fbc9..efe88d17cab 100644
--- a/app/controllers/projects/issues_controller.rb
+++ b/app/controllers/projects/issues_controller.rb
@@ -67,7 +67,6 @@ class Projects::IssuesController < Projects::ApplicationController
push_force_frontend_feature_flag(:work_items_mvc, project&.work_items_mvc_feature_flag_enabled?)
push_force_frontend_feature_flag(:work_items_mvc_2, project&.work_items_mvc_2_feature_flag_enabled?)
push_frontend_feature_flag(:epic_widget_edit_confirmation, project)
- push_frontend_feature_flag(:real_time_issue_due_date, project)
end
around_action :allow_gitaly_ref_name_caching, only: [:discussions]
diff --git a/app/graphql/gitlab_schema.rb b/app/graphql/gitlab_schema.rb
index 37adf4c2d3b..eed7959a2f1 100644
--- a/app/graphql/gitlab_schema.rb
+++ b/app/graphql/gitlab_schema.rb
@@ -20,7 +20,7 @@ class GitlabSchema < GraphQL::Schema
use Gitlab::Graphql::GenericTracing
use Gitlab::Graphql::Tracers::TimerTracer
- use GraphQL::Subscriptions::ActionCableSubscriptions
+ use Gitlab::Graphql::Subscriptions::ActionCableWithLoadBalancing
use BatchLoader::GraphQL
use Gitlab::Graphql::Pagination::Connections
use Gitlab::Graphql::Timeout, max_seconds: Gitlab.config.gitlab.graphql_timeout
diff --git a/config/feature_flags/development/real_time_issue_due_date.yml b/config/feature_flags/development/ci_includable_files_interpolation.yml
similarity index 66%
rename from config/feature_flags/development/real_time_issue_due_date.yml
rename to config/feature_flags/development/ci_includable_files_interpolation.yml
index efe67398be1..bffafcd9f0e 100644
--- a/config/feature_flags/development/real_time_issue_due_date.yml
+++ b/config/feature_flags/development/ci_includable_files_interpolation.yml
@@ -1,8 +1,8 @@
---
-name: real_time_issue_due_date
-introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/114927
-rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/397720
+name: ci_includable_files_interpolation
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/113211
+rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/399146
milestone: '15.11'
type: development
-group: group::application performance
+group: group::pipeline authoring
default_enabled: false
diff --git a/config/metrics/counts_28d/20210216175101_merge_requests_users.yml b/config/metrics/counts_28d/20210216175101_merge_requests_users.yml
index 3029047f4ad..08dc431f26d 100644
--- a/config/metrics/counts_28d/20210216175101_merge_requests_users.yml
+++ b/config/metrics/counts_28d/20210216175101_merge_requests_users.yml
@@ -7,7 +7,7 @@ product_stage: create
product_group: code_review
product_category: code_review
value_type: number
-status: active
+status: removed
time_frame: 28d
data_source: redis_hll
distribution:
@@ -19,3 +19,5 @@ tier:
- ultimate
performance_indicator_type: []
milestone: "<13.9"
+milestone_removed: "15.10"
+removed_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/115037
diff --git a/doc/administration/logs/index.md b/doc/administration/logs/index.md
index 1a2fa7bbafa..c03971ab4c1 100644
--- a/doc/administration/logs/index.md
+++ b/doc/administration/logs/index.md
@@ -725,7 +725,7 @@ Depending on your installation method, this file is located at:
- Omnibus GitLab: `/var/log/gitlab/gitlab-rails/importer.log`
- Installations from source: `/home/git/gitlab/log/importer.log`
-It logs the progress of the import process.
+This file logs the progress of [project imports and migrations](../../user/project/import/index.md).
## `exporter.log`
@@ -821,6 +821,8 @@ Depending on your installation method, this file is located at:
- Omnibus GitLab: `/var/log/gitlab/gitlab-rails/migrations.log`
- Installations from source: `/home/git/gitlab/log/migrations.log`
+This file logs the progress of [database migrations](../raketasks/maintenance.md#display-status-of-database-migrations).
+
## `mail_room_json.log` (default)
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/19186) in GitLab 12.6.
diff --git a/doc/administration/logs/log_parsing.md b/doc/administration/logs/log_parsing.md
index 84c517e6120..40d6059d246 100644
--- a/doc/administration/logs/log_parsing.md
+++ b/doc/administration/logs/log_parsing.md
@@ -158,7 +158,7 @@ CT: 297 ROUTE: /api/:version/projects/:id/repository/tags DURS: 731.39,
CT: 190 ROUTE: /api/:version/projects/:id/repository/commits DURS: 1079.02, 979.68, 958.21
```
-### Print top API user agents
+#### Print top API user agents
```shell
jq --raw-output '[.route, .ua] | @tsv' api_json.log | sort | uniq -c | sort -n
@@ -180,9 +180,20 @@ if the output contains many:
You can also [use `fast-stats top`](#parsing-gitlab-logs-with-jq) to extract performance statistics.
+### Parsing `gitlab-rails/importer.log`
+
+To troubleshoot [project imports](../../administration/raketasks/project_import_export.md) or
+[migrations](../../user/project/import/index.md), run this command:
+
+```shell
+jq 'select(.project_path == "/").error_messages' importer.log
+```
+
+For common issues, see [troubleshooting](../../administration/raketasks/project_import_export.md#troubleshooting).
+
### Parsing `gitlab-workhorse/current`
-### Print top Workhorse user agents
+#### Print top Workhorse user agents
```shell
jq --raw-output '[.uri, .user_agent] | @tsv' current | sort | uniq -c | sort -n
diff --git a/doc/administration/package_information/defaults.md b/doc/administration/package_information/defaults.md
index 3b52b6bca82..932342a6a92 100644
--- a/doc/administration/package_information/defaults.md
+++ b/doc/administration/package_information/defaults.md
@@ -30,7 +30,7 @@ by default:
| PgBouncer exporter | No | Port | X | 9188 |
| GitLab Exporter | Yes | Port | X | 9168 |
| Sidekiq exporter | Yes | Port | X | 8082 |
-| Sidekiq health check | No | Port | X | 8092[^Sidekiq-health] |
+| Sidekiq health check | Yes | Port | X | 8092[^Sidekiq-health] |
| Web exporter | No | Port | X | 8083 |
| Geo PostgreSQL | No | Socket | Port (5431) | X |
| Redis Sentinel | No | Port | X | 26379 |
diff --git a/doc/api/bulk_imports.md b/doc/api/bulk_imports.md
index 6a33bd1bc95..4816a5d5066 100644
--- a/doc/api/bulk_imports.md
+++ b/doc/api/bulk_imports.md
@@ -11,6 +11,11 @@ info: To determine the technical writer assigned to the Stage/Group associated w
With the group migration by direct transfer API, you can start and view the progress of migrations initiated with
[group migration by direct transfer](../user/group/import/index.md#migrate-groups-by-direct-transfer-recommended).
+## Prerequisites
+
+For information on prerequisites for group migration by direct transfer API, see
+prerequisites for [migrating groups by direct transfer](../user/group/import/index.md#prerequisites).
+
## Start a new group migration
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66353) in GitLab 14.2.
diff --git a/doc/api/graphql/getting_started.md b/doc/api/graphql/getting_started.md
index df1b1cdca7c..d45228c34c8 100644
--- a/doc/api/graphql/getting_started.md
+++ b/doc/api/graphql/getting_started.md
@@ -286,6 +286,24 @@ We've asked for the note details, but it doesn't exist anymore, so we get `null`
More about mutations:
[GraphQL Documentation](https://graphql.org/learn/queries/#mutations).
+### Update project settings
+
+You can update multiple project settings in a single GraphQL mutation.
+This example is a workaround for [the major change](../../update/deprecations.md#default-cicd-job-token-ci_job_token-scope-changed)
+in `CI_JOB_TOKEN` scoping behavior.
+
+```graphql
+mutation DisableCI_JOB_TOKENscope {
+ projectCiCdSettingsUpdate(input:{fullPath: "/", inboundJobTokenScopeEnabled: false, jobTokenScopeEnabled: false}) {
+ ciCdSettings {
+ inboundJobTokenScopeEnabled
+ jobTokenScopeEnabled
+ }
+ errors
+ }
+}
+```
+
### Introspective queries
Clients can query the GraphQL endpoint for information about its own schema.
diff --git a/doc/api/group_import_export.md b/doc/api/group_import_export.md
index 5dd0e4e3d52..a9ec3e8547c 100644
--- a/doc/api/group_import_export.md
+++ b/doc/api/group_import_export.md
@@ -6,8 +6,6 @@ info: To determine the technical writer assigned to the Stage/Group associated w
# Group import and export API **(FREE)**
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/20353) in GitLab 12.8.
-
Use the group import and export API to export a group structure and import it to a new location.
When you use the group import and export API with the [project import and export API](project_import_export.md), you can preserve connections with
group-level relationships, such as connections between project issues and group epics.
@@ -29,6 +27,11 @@ If you import groups into a parent group, the subgroups inherit by default a sim
To preserve the member list and their respective permissions on imported groups, review the users in these groups. Make sure these users exist before importing the desired groups.
+## Prerequisites
+
+For information on prerequisites for group import and export API, see prerequisites for
+[migrating groups by uploading an export file](../user/group/import/index.md#preparation).
+
## Schedule new export
Start a new group export.
diff --git a/doc/api/import.md b/doc/api/import.md
index 87bbb56869d..133abb6b2f6 100644
--- a/doc/api/import.md
+++ b/doc/api/import.md
@@ -10,16 +10,16 @@ Use the Import API to import repositories from GitHub or Bitbucket Server.
Related APIs include:
-- [Group migration by direct transfer API](bulk_imports.md)
-- [Group import and export API](group_import_export.md)
-- [Project import and export API](project_import_export.md)
+- [Group migration by direct transfer API](bulk_imports.md).
+- [Group import and export API](group_import_export.md).
+- [Project import and export API](project_import_export.md).
## Prerequisites
For information on prerequisites for using the Import API, see:
-- [Prerequisites for GitHub importer](../user/project/import/github.md#prerequisites)
-- [Prerequisites for Bitbucket Server importer](../user/project/import/bitbucket_server.md#import-your-bitbucket-repositories)
+- [Prerequisites for GitHub importer](../user/project/import/github.md#prerequisites).
+- [Prerequisites for Bitbucket Server importer](../user/project/import/bitbucket_server.md#import-your-bitbucket-repositories).
## Import repository from GitHub
diff --git a/doc/api/packages/debian_group_distributions.md b/doc/api/packages/debian_group_distributions.md
index 23bc85bf0a0..0c7f4cdfeb8 100644
--- a/doc/api/packages/debian_group_distributions.md
+++ b/doc/api/packages/debian_group_distributions.md
@@ -45,7 +45,7 @@ GET /groups/:id/-/debian_distributions
| `suite` | string | no | Filter with specific `suite`. |
```shell
-curl --header "PRIVATE-TOKEN: " "https://gitlab.example.com/api/v4/groups/5/debian_distributions"
+curl --header "PRIVATE-TOKEN: " "https://gitlab.example.com/api/v4/groups/5/-/debian_distributions"
```
Example response:
@@ -86,7 +86,7 @@ GET /groups/:id/-/debian_distributions/:codename
| `codename` | integer | yes | The `codename` of a distribution. |
```shell
-curl --header "PRIVATE-TOKEN: " "https://gitlab.example.com/api/v4/groups/5/debian_distributions/unstable"
+curl --header "PRIVATE-TOKEN: " "https://gitlab.example.com/api/v4/groups/5/-/debian_distributions/unstable"
```
Example response:
@@ -125,7 +125,7 @@ GET /groups/:id/-/debian_distributions/:codename/key.asc
| `codename` | integer | yes | The `codename` of a distribution. |
```shell
-curl --header "PRIVATE-TOKEN: " "https://gitlab.example.com/api/v4/groups/5/debian_distributions/unstable/key.asc"
+curl --header "PRIVATE-TOKEN: " "https://gitlab.example.com/api/v4/groups/5/-/debian_distributions/unstable/key.asc"
```
Example response:
@@ -170,7 +170,7 @@ POST /groups/:id/-/debian_distributions
| `architectures` | architectures | no | The new Debian distribution's list of architectures. |
```shell
-curl --request POST --header "PRIVATE-TOKEN: " "https://gitlab.example.com/api/v4/groups/5/debian_distributions?codename=sid"
+curl --request POST --header "PRIVATE-TOKEN: " "https://gitlab.example.com/api/v4/groups/5/-/debian_distributions?codename=sid"
```
Example response:
@@ -217,7 +217,7 @@ PUT /groups/:id/-/debian_distributions/:codename
| `architectures` | architectures | no | The Debian distribution's new list of architectures. |
```shell
-curl --request PUT --header "PRIVATE-TOKEN: " "https://gitlab.example.com/api/v4/groups/5/debian_distributions/unstable?suite=new-suite&valid_time_duration_seconds=604800"
+curl --request PUT --header "PRIVATE-TOKEN: " "https://gitlab.example.com/api/v4/groups/5/-/debian_distributions/unstable?suite=new-suite&valid_time_duration_seconds=604800"
```
Example response:
@@ -256,5 +256,5 @@ DELETE /groups/:id/-/debian_distributions/:codename
| `codename` | integer | yes | The codename of the Debian distribution. |
```shell
-curl --request DELETE --header "PRIVATE-TOKEN: " "https://gitlab.example.com/api/v4/groups/5/debian_distributions/unstable"
+curl --request DELETE --header "PRIVATE-TOKEN: " "https://gitlab.example.com/api/v4/groups/5/-/debian_distributions/unstable"
```
diff --git a/doc/api/project_import_export.md b/doc/api/project_import_export.md
index 587b998cf4d..f09e4d2785a 100644
--- a/doc/api/project_import_export.md
+++ b/doc/api/project_import_export.md
@@ -8,14 +8,16 @@ info: To determine the technical writer assigned to the Stage/Group associated w
Use the project import and export API to import and export projects using file transfers.
-For more information, see:
-
-- [Migrating projects using file exports](../user/project/settings/import_export.md)
-- [Project import and export Rake tasks](../administration/raketasks/project_import_export.md)
-
Before using the project import and export API, you might want to use the
[group import and export API](group_import_export.md).
+## Prerequisites
+
+For information on prerequisites for project import and export API, see:
+
+- Prerequisites for [project export](../user/project/settings/import_export.md#export-a-project-and-its-data).
+- Prerequisites for [project import](../user/project/settings/import_export.md#import-a-project-and-its-data).
+
## Schedule an export
Start a new export.
@@ -444,3 +446,8 @@ GitHub and how many were already imported:
}
}
```
+
+## Related topics
+
+- [Migrating projects using file exports](../user/project/settings/import_export.md).
+- [Project import and export Rake tasks](../administration/raketasks/project_import_export.md).
diff --git a/doc/ci/jobs/ci_job_token.md b/doc/ci/jobs/ci_job_token.md
index 78db064e4fd..40c6a0c1435 100644
--- a/doc/ci/jobs/ci_job_token.md
+++ b/doc/ci/jobs/ci_job_token.md
@@ -238,6 +238,8 @@ CI job token failures are usually shown as responses like `404 Not Found` or sim
While troubleshooting CI/CD job token authentication issues, be aware that:
+- A [GraphQL example mutation](../../api/graphql/getting_started.md#update-project-settings)
+ is available to toggle the inbound outbound scope settings per project.
- When the [CI/CD job token scopes](#configure-cicd-job-token-access) are enabled,
and the job token is being used to access a different project:
- The user that executes the job must be a member of the project that is being accessed.
diff --git a/doc/development/documentation/topic_types/index.md b/doc/development/documentation/topic_types/index.md
index 2cb638926e7..511c8cdb345 100644
--- a/doc/development/documentation/topic_types/index.md
+++ b/doc/development/documentation/topic_types/index.md
@@ -30,6 +30,9 @@ In addition to the four primary topic types, we also have:
If inline links are not sufficient, you can create a topic called **Related topics**
and include an unordered list of related topics. This topic should be above the Troubleshooting section.
+Links in this section should be brief and scannable. They are usually not
+full sentences, and so should not end in a period.
+
```markdown
## Related topics
diff --git a/doc/integration/saml.md b/doc/integration/saml.md
index d8d01b8b562..16c69a65a8c 100644
--- a/doc/integration/saml.md
+++ b/doc/integration/saml.md
@@ -2139,7 +2139,7 @@ instead of `email`, let GitLab know by setting it on your configuration:
By default, the local part of the email address in the SAML response is used to
generate the user's GitLab username.
-Configure `nickname` in `attribute_statements` to specify one or more attributes that contain a user's desired username:
+Configure [`username` or `nickname`](omniauth.md#per-provider-configuration) in `attribute_statements` to specify one or more attributes that contain a user's desired username:
::Tabs
diff --git a/doc/raketasks/restore_gitlab.md b/doc/raketasks/restore_gitlab.md
index 13422817503..30395c36c91 100644
--- a/doc/raketasks/restore_gitlab.md
+++ b/doc/raketasks/restore_gitlab.md
@@ -30,14 +30,21 @@ is usually not allowed to create or delete the SQL database needed to import
data into (`gitlabhq_production`). All existing data is either erased
(SQL) or moved to a separate directory (such as repositories and uploads).
-To restore a backup, you must restore `/etc/gitlab/gitlab-secrets.json`
-(for Omnibus packages) or `/home/git/gitlab/.secret` (for installations from
-source). This file contains the database encryption key,
-[CI/CD variables](../ci/variables/index.md), and
+To restore a backup, **you must also restore the GitLab secrets**.
+
+These include the database encryption key, [CI/CD variables](../ci/variables/index.md), and
variables used for [two-factor authentication](../user/profile/account/two_factor_authentication.md).
-If you fail to restore this encryption key file along with the application data
-backup, users with two-factor authentication enabled and GitLab Runner
-loses access to your GitLab server.
+
+Without the keys, [multiple issues occur](backup_restore.md#when-the-secrets-file-is-lost),
+including loss of access by users with [two-factor authentication enabled](../user/profile/account/two_factor_authentication.md),
+and GitLab Runners cannot log in.
+
+Restore:
+
+- `/etc/gitlab/gitlab-secrets.json` (Linux package)
+- `/home/git/gitlab/.secret` (self-compiled installations)
+- Rails secret (cloud-native GitLab)
+ - [This can be converted to the Linux package format](https://docs.gitlab.com/charts/installation/migration/helm_to_package.html), if required.
You may also want to restore your previous `/etc/gitlab/gitlab.rb` (for Omnibus packages)
or `/home/git/gitlab/config/gitlab.yml` (for installations from source) and
@@ -155,9 +162,34 @@ the restore target directories are empty.
For both these installation types, the backup tarball has to be available in
the backup location (default location is `/var/opt/gitlab/backups`).
-If you use Docker Swarm, [first disable the health check](#restore-gitlab-from-backup-using-docker-swarm).
+### Restore for Helm chart installations
-For Docker installations, the restore task can be run from host:
+The GitLab Helm chart uses the process documented in
+[restoring a GitLab Helm chart installation](https://docs.gitlab.com/charts/backup-restore/restore.html#restoring-a-gitlab-installation)
+
+### Restore for Docker image installations
+
+If you're using [Docker Swarm](../install/docker.md#install-gitlab-using-docker-swarm-mode),
+the container might restart during the restore process because Puma is shut down,
+and so the container health check fails. To work around this problem,
+temporarily disable the health check mechanism.
+
+1. Edit `docker-compose.yml`:
+
+ ```yaml
+ healthcheck:
+ disable: true
+ ```
+
+1. Deploy the stack:
+
+ ```shell
+ docker stack deploy --compose-file docker-compose.yml mystack
+ ```
+
+For more information, see [issue 6846](https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/6846 "GitLab restore can fail owing to `gitlab-healthcheck`").
+
+The restore task can be run from the host:
```shell
# Stop the processes that are connected to the database
@@ -177,31 +209,6 @@ docker restart
docker exec -it gitlab-rake gitlab:check SANITIZE=true
```
-Users of GitLab 12.1 and earlier should use the command `gitlab-rake gitlab:backup:create` instead.
-
-WARNING:
-`gitlab-rake gitlab:backup:restore` doesn't set the correct file system
-permissions on your Registry directory. This is a [known issue](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/62759).
-In GitLab 12.2 or later, you can use `gitlab-backup restore` to avoid this
-issue.
-
-The GitLab Helm chart uses a different process, documented in
-[restoring a GitLab Helm chart installation](https://gitlab.com/gitlab-org/charts/gitlab/blob/master/doc/backup-restore/restore.md).
-
-### Restore GitLab from backup using Docker Swarm
-
-Docker Swarm might restart the container during the restore process because Puma is shut down,
-and so the container health check fails. To work around this problem, disable the health check
-mechanism in Docker compose file:
-
-```yaml
-healthcheck:
- disable: true
-```
-
-Read more in issue #6846,
-[GitLab restore can fail owing to `gitlab-healthcheck`](https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/6846).
-
## Restore for installation from source
First, ensure your backup tar file is in the backup directory described in the
diff --git a/doc/subscriptions/self_managed/index.md b/doc/subscriptions/self_managed/index.md
index 37d12948809..0eb6a2fe495 100644
--- a/doc/subscriptions/self_managed/index.md
+++ b/doc/subscriptions/self_managed/index.md
@@ -67,7 +67,8 @@ billable user, with the following exceptions:
[blocked users](../../user/admin_area/moderate_users.md#block-a-user) don't count as billable users in the current subscription. When they are either deactivated or blocked they release a _billable user_ seat. However, they may
count toward overages in the subscribed seat count.
- Users who are [pending approval](../../user/admin_area/moderate_users.md#users-pending-approval).
-- Members with the [Guest role on an Ultimate subscription](#free-guest-users).
+- Users with only the [Minimal Access role](../../user/permissions.md#users-with-minimal-access) on self-managed Ultimate subscriptions or any GitLab.com subscriptions.
+- Users with only the [Guest or Minimal Access roles on an Ultimate subscription](#free-guest-users).
- Users without project or group memberships on an Ultimate subscription.
- GitLab-created service accounts:
- [Ghost User](../../user/profile/account/delete_account.md#associated-records).
diff --git a/doc/tutorials/index.md b/doc/tutorials/index.md
index fe295d13c09..fc73a6240cb 100644
--- a/doc/tutorials/index.md
+++ b/doc/tutorials/index.md
@@ -45,7 +45,7 @@ issues, epics, and more.
| [Create a project from a template](https://gitlab.com/projects/new#create_from_template) | Choose a project template and create a project with files to get you started. | |
| [Migrate to GitLab](../user/project/import/index.md) | If you are coming to GitLab from another platform, you can import or convert your projects. | |
| [Run an agile iteration](agile_sprint.md) | Use group, projects, and iterations to run an agile development iteration. |
-| [Epics and Issue Boards](https://www.youtube.com/watch?v=I1bFIAQBHB8) | Find out how to use epics and issue boards for project management. | |
+| [Epics and Issue Boards](https://www.youtube.com/watch?v=I1bFIAQBHB8) | Find out how to use epics and issue boards for project management. | |
## Use CI/CD pipelines
diff --git a/doc/user/application_security/dast/browser_based.md b/doc/user/application_security/dast/browser_based.md
index 88be88ad00e..e921c387053 100644
--- a/doc/user/application_security/dast/browser_based.md
+++ b/doc/user/application_security/dast/browser_based.md
@@ -173,7 +173,9 @@ For authentication CI/CD variables, see [Authentication](authentication.md).
| `DAST_BROWSER_ALLOWED_HOSTS` | List of strings | `site.com,another.com` | Hostnames included in this variable are considered in scope when crawled. By default the `DAST_WEBSITE` hostname is included in the allowed hosts list. Headers set using `DAST_REQUEST_HEADERS` are added to every request made to these hostnames. |
| `DAST_BROWSER_COOKIES` | dictionary | `abtesting_group:3,region:locked` | A cookie name and value to be added to every request. |
| `DAST_BROWSER_CRAWL_GRAPH` | boolean | `true` | Set to `true` to generate an SVG graph of navigation paths visited during crawl phase of the scan. You must also define `gl-dast-crawl-graph.svg` as a CI job artifact to be able to access the generated graph. |
-| `DAST_BROWSER_DEVTOOLS_LOG` | string | `Default:messageAndBody,truncate:2000` | Set to log protocol messages between DAST and the Chromium browser. | |
+| `DAST_BROWSER_CRAWL_TIMEOUT` | [Duration string](https://pkg.go.dev/time#ParseDuration) | `5m` | The maximum amount of time to wait for the crawl phase of the scan to complete. Defaults to `24h`. |
+| `DAST_BROWSER_DEVTOOLS_LOG` | string | `Default:messageAndBody,truncate:2000` | Set to log protocol messages between DAST and the Chromium browser. |
+| `DAST_BROWSER_DOM_READY_AFTER_TIMEOUT` | [Duration string](https://pkg.go.dev/time#ParseDuration) | `200ms` | Define how long to wait for updates to the DOM before checking a page is stable. Defaults to `500ms`. |
| `DAST_BROWSER_ELEMENT_TIMEOUT` | [Duration string](https://pkg.go.dev/time#ParseDuration) | `600ms` | The maximum amount of time to wait for an element before determining it is ready for analysis. |
| `DAST_BROWSER_EXCLUDED_ELEMENTS` | selector | `a[href='2.html'],css:.no-follow` | Comma-separated list of selectors that are ignored when scanning. |
| `DAST_BROWSER_EXCLUDED_HOSTS` | List of strings | `site.com,another.com` | Hostnames included in this variable are considered excluded and connections are forcibly dropped. |
@@ -192,6 +194,7 @@ For authentication CI/CD variables, see [Authentication](authentication.md).
| `DAST_BROWSER_NUMBER_OF_BROWSERS` | number | `3` | The maximum number of concurrent browser instances to use. For shared runners on GitLab.com, we recommended a maximum of three. Private runners with more resources may benefit from a higher number, but are likely to produce little benefit after five to seven instances. |
| `DAST_BROWSER_PAGE_LOADING_SELECTOR` | selector | `css:#page-is-loading` | Selector that when is no longer visible on the page, indicates to the analyzer that the page has finished loading and the scan can continue. Cannot be used with `DAST_BROWSER_PAGE_READY_SELECTOR`. |
| `DAST_BROWSER_PAGE_READY_SELECTOR` | selector | `css:#page-is-ready` | Selector that when detected as visible on the page, indicates to the analyzer that the page has finished loading and the scan can continue. Cannot be used with `DAST_BROWSER_PAGE_LOADING_SELECTOR`. |
+| `DAST_BROWSER_PASSIVE_CHECK_WORKERS` | int | `5` | Number of workers that passive scan in parallel. Recommend setting to the number of available CPUs. |
| `DAST_BROWSER_SCAN` | boolean | `true` | Required to be `true` to run a browser-based scan. |
| `DAST_BROWSER_SEARCH_ELEMENT_TIMEOUT` | [Duration string](https://pkg.go.dev/time#ParseDuration) | `3s` | The maximum amount of time to allow the browser to search for new elements or user actions. |
| `DAST_BROWSER_STABILITY_TIMEOUT` | [Duration string](https://pkg.go.dev/time#ParseDuration) | `7s` | The maximum amount of time to wait for a browser to consider a page loaded and ready for analysis. |
@@ -232,9 +235,14 @@ This can come at a cost of increased scan time.
You can manage the trade-off between coverage and scan time with the following measures:
+- Vertically scale the runner and use a higher number of browsers with the [variable](#available-cicd-variables) `DAST_BROWSER_NUMBER_OF_BROWSERS`. The default is `3`.
- Limit the number of actions executed by the browser with the [variable](#available-cicd-variables) `DAST_BROWSER_MAX_ACTIONS`. The default is `10,000`.
- Limit the page depth that the browser-based crawler checks coverage on with the [variable](#available-cicd-variables) `DAST_BROWSER_MAX_DEPTH`. The crawler uses a breadth-first search strategy, so pages with smaller depth are crawled first. The default is `10`.
-- Vertically scale the runner and use a higher number of browsers with [variable](#available-cicd-variables) `DAST_BROWSER_NUMBER_OF_BROWSERS`. The default is `3`.
+- Limit the time taken to crawl the target application with the [variable](#available-cicd-variables) `DAST_BROWSER_CRAWL_TIMEOUT`. The default is `24h`. Scans continue with passive and active checks when the crawler times out.
+- Build the crawl graph with the [variable](#available-cicd-variables) `DAST_BROWSER_CRAWL_GRAPH` to see what pages are being crawled.
+- Prevent pages from being crawled using the [variable](#available-cicd-variables) `DAST_EXCLUDE_URLS`.
+- Prevent elements being selected using the [variable](#available-cicd-variables) `DAST_BROWSER_EXCLUDED_ELEMENTS`. Use with caution, as defining this variable causes an extra lookup for each page crawled.
+- If the target application has minimal or fast rendering, consider reducing the [variable](#available-cicd-variables) `DAST_BROWSER_DOM_READY_AFTER_TIMEOUT` to a smaller value. The default is `500ms`.
## Timeouts
diff --git a/doc/user/group/epics/img/issue_list_v13_1.png b/doc/user/group/epics/img/issue_list_v13_1.png
deleted file mode 100644
index ed0b4842bfe..00000000000
Binary files a/doc/user/group/epics/img/issue_list_v13_1.png and /dev/null differ
diff --git a/doc/user/group/epics/img/issue_list_v15_11.png b/doc/user/group/epics/img/issue_list_v15_11.png
new file mode 100644
index 00000000000..601406a8a33
Binary files /dev/null and b/doc/user/group/epics/img/issue_list_v15_11.png differ
diff --git a/doc/user/group/epics/manage_epics.md b/doc/user/group/epics/manage_epics.md
index 3a0fc86e803..0dc87b7e4e4 100644
--- a/doc/user/group/epics/manage_epics.md
+++ b/doc/user/group/epics/manage_epics.md
@@ -421,7 +421,7 @@ To remove an issue from an epic:
The **Remove issue** warning appears.
1. Select **Remove**.
-
+
### Reorder issues assigned to an epic
diff --git a/doc/user/packages/debian_repository/index.md b/doc/user/packages/debian_repository/index.md
index 577667b7a16..5ce65bfd8aa 100644
--- a/doc/user/packages/debian_repository/index.md
+++ b/doc/user/packages/debian_repository/index.md
@@ -98,8 +98,11 @@ with one of the following:
## Create a Distribution
-On the project-level, Debian packages are published using *Debian Distributions*. To publish
-packages on the group level, create a distribution with the same `codename`.
+At the project level, Debian packages are published with **Debian distributions**. At the
+group level, Debian packages are aggregated from the projects in the group provided that:
+
+- The project visibility is set to `public`.
+- The Debian `codename` for the group matches the Debian `codename` for the project.
To create a project-level distribution using a personal access token:
diff --git a/doc/user/permissions.md b/doc/user/permissions.md
index d71e31561d6..ab08f5b4767 100644
--- a/doc/user/permissions.md
+++ b/doc/user/permissions.md
@@ -430,7 +430,7 @@ For more information, see
Owners can add members with a "minimal access" role to a root group. Such users do not:
-- Count as licensed seats.
+- Count as licensed seats on self-managed Ultimate subscriptions or any GitLab.com subscriptions.
- Automatically have access to projects and subgroups in that root group.
Owners must explicitly add these "minimal access" users to the specific subgroups and
diff --git a/doc/user/product_analytics/index.md b/doc/user/product_analytics/index.md
index 69fcf5f7629..fde104200a7 100644
--- a/doc/user/product_analytics/index.md
+++ b/doc/user/product_analytics/index.md
@@ -79,6 +79,7 @@ Prerequisite:
| Jitsu project ID | `g0maofw84gx5sjxgse2k` |
| Jitsu administrator email | `jitsu.admin@gitlab.com` |
| Jitsu administrator password | `` |
+ | Collector host | `https://collector.gitlab.com` |
| Clickhouse URL | `https://:@clickhouse.gitlab.com:8123` |
| Cube API URL | `https://cube.gitlab.com` |
| Cube API key | `25718201b3e9...ae6bbdc62dbb` |
diff --git a/doc/user/project/description_templates.md b/doc/user/project/description_templates.md
index eeaf5d799d2..48029da1213 100644
--- a/doc/user/project/description_templates.md
+++ b/doc/user/project/description_templates.md
@@ -156,7 +156,7 @@ To set a default description template for merge requests, either:
1. On the top bar, select **Main menu > Projects** and find your project.
1. On the left sidebar, select **Settings > Merge requests**.
- 1. In the **Merge commit message template** section, fill in **Default description template for merge requests**.
+ 1. In the **Default description template for merge requests** section, fill in the text area.
1. Select **Save changes**.
To set a default description template for issues, either:
@@ -167,9 +167,9 @@ To set a default description template for issues, either:
- Users on GitLab Premium and higher: set the default template in project settings:
1. On the top bar, select **Main menu > Projects** and find your project.
- 1. On the left sidebar, select **Settings**.
- 1. Expand **Default issue template**.
- 1. Fill in the **Default description template for issues** text area.
+ 1. On the left sidebar, select **Settings > General**.
+ 1. Expand **Default description template for issues**.
+ 1. Fill in the text area.
1. Select **Save changes**.
Because GitLab merge request and issues support [Markdown](../markdown.md), you can use it to format
diff --git a/doc/user/project/import/index.md b/doc/user/project/import/index.md
index 41ac5354656..f0d75895e6e 100644
--- a/doc/user/project/import/index.md
+++ b/doc/user/project/import/index.md
@@ -172,3 +172,14 @@ For more information, see:
including settings that need checking afterwards and other limitations.
For support, customers must enter into a paid engagement with GitLab Professional Services.
+
+## Troubleshooting
+
+### Imported repository is missing branches
+
+If an imported repository does not contain all branches of the source repository:
+
+1. Set the [environment variable](../../../administration/logs/index.md#override-default-log-level) `IMPORT_DEBUG=true`.
+1. Retry the import with a [different group, subgroup, or project name](https://about.gitlab.com/releases/2023/02/22/gitlab-15-9-released/#re-import-projects-from-external-providers).
+1. If some branches are still missing, inspect [`importer.log`](../../../administration/logs/index.md#importerlog)
+ (for example, with [`jq`](../../../administration/logs/log_parsing.md#parsing-gitlab-railsimporterlog)).
diff --git a/doc/user/project/merge_requests/conflicts.md b/doc/user/project/merge_requests/conflicts.md
index 932eec5e631..cc8f8cb2fe6 100644
--- a/doc/user/project/merge_requests/conflicts.md
+++ b/doc/user/project/merge_requests/conflicts.md
@@ -162,9 +162,8 @@ merge commit. Verify it contains no unintended changes and doesn't break your bu
## Related topics
-- [Introduction to Git rebase and force-push](../../../topics/git/git_rebase.md).
-- [Git GUI apps](https://git-scm.com/downloads/guis) to help you visualize the
- differences between branches and resolve them.
+- [Introduction to Git rebase and force-push](../../../topics/git/git_rebase.md)
+- [Git applications for visualizing the Git workflow](https://git-scm.com/downloads/guis)