Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2022-09-14 18:12:48 +00:00
parent c014b6b4e5
commit 35f525b5e4
206 changed files with 1612 additions and 591 deletions

View File

@ -4,9 +4,9 @@
* @gitlab-org/maintainers/rails-backend @gitlab-org/maintainers/frontend @gitlab-org/maintainers/database @gl-quality/qe-maintainers @gitlab-org/delivery @gitlab-org/maintainers/cicd-templates @kwiebers @nolith @jacobvosmaer-gitlab
CODEOWNERS @clefelhocz1 @timzallmann @cdu1 @whaber @dsatcher @sgoldstein @jeromezng @stanhu @susantacker @dianalogan @kpaizee @sselhorn
docs/CODEOWNERS @clefelhocz1 @timzallmann @cdu1 @whaber @dsatcher @sgoldstein @jeromezng @stanhu @susantacker @dianalogan @kpaizee @sselhorn
.gitlab/CODEOWNERS @clefelhocz1 @timzallmann @cdu1 @whaber @dsatcher @sgoldstein @jeromezng @stanhu @susantacker @dianalogan @kpaizee @sselhorn
CODEOWNERS @clefelhocz1 @timzallmann @cdu1 @wayne @dsatcher @sgoldstein @jeromezng @stanhu @susantacker @dianalogan @kpaizee @sselhorn
docs/CODEOWNERS @clefelhocz1 @timzallmann @cdu1 @wayne @dsatcher @sgoldstein @jeromezng @stanhu @susantacker @dianalogan @kpaizee @sselhorn
.gitlab/CODEOWNERS @clefelhocz1 @timzallmann @cdu1 @wayne @dsatcher @sgoldstein @jeromezng @stanhu @susantacker @dianalogan @kpaizee @sselhorn
## Allows release tooling to update the Gitaly Version
GITALY_SERVER_VERSION @project_278964_bot6 @gitlab-org/maintainers/rails-backend @gitlab-org/delivery

View File

@ -7,18 +7,27 @@
* feature development should use the Feature Request template.
-->
If you are a community contributor:
If you are a community contributor, **do not work on the issue if it is not assigned to you yet**.
1. To work on an issue, type `@gl-docsteam I would like to work on this issue.`
in a comment. A technical writer
will assign the issue to you. Do not work on the issue before it is assigned to you.
If someone has already chosen the issue, pick another or view docs [in the docs directory](https://gitlab.com/gitlab-org/gitlab/-/tree/master/doc)
Additionally, please review these points before working on this issue:
1. If you would like to work on the issue, type `@gl-docsteam I would like to work on this issue.`
in a comment. A technical writer will assign the issue to you. If someone has already chosen this issue,
pick another issue, or view docs [in the docs directory](https://gitlab.com/gitlab-org/gitlab/-/tree/master/doc)
and open a merge request for any page you feel can be improved.
1. Create a merge request for the issue. If this is for a Hackathon, do not create the merge request
before the Hackathon has started or it will not be counted towards the Hackathon. If you were not
assigned the issue, do not create a merge request. It will not be accepted.
1. Copy the link to this issue and add it to the merge request's description, which will link
the merge request and the issue together.
1. Carefully review the [merge request guidelines for contributors](https://docs.gitlab.com/ee/development/contributing/merge_request_workflow.html#merge-request-guidelines-for-contributors).
1. Carefully review the [commit message guidelines](https://docs.gitlab.com/ee/development/contributing/merge_request_workflow.html#commit-messages-guidelines).
1. Create a merge request for the issue:
- If you were not assigned the issue, do not create a merge request. It will not be accepted.
- If this is for a Hackathon, do not create the merge request before the Hackathon has started
or it will not be counted towards the Hackathon.
- Unless otherwise stated below, we expect one merge request per issue, so combine
all changes together. If there is too much work for you to handle in one merge request,
you can create more, but try to keep the number of merge requests as small as possible.
- Select the **Documentation** merge request description template, and fill it out
with the details of your work.
- Copy the link to this issue and add it to the merge request's description,
which links the merge request and the issue together.
1. After your merge request is accepted and merged, close this issue.
If you notice things you'd like to fix that are not part of the issue, open separate merge requests for those issues.
@ -37,6 +46,9 @@ Thank you again for contributing to the GitLab documentation!
* several moderate changes on one page, a few intermediate changes across five pages, or several very small
* changes for up to 10 pages. Larger items should be broken out into other issues to better distribute
* the opportunities for contributors.
*
* If you expect the work to take more than one MR to resolve, explain approximately
* how many MRs you expect to receive for the issue.
-->
## Additional information

View File

@ -5,26 +5,6 @@ Layout/FirstArrayElementIndentation:
- 'ee/lib/ee/api/helpers/award_emoji.rb'
- 'ee/spec/graphql/mutations/incident_management/escalation_policy/create_spec.rb'
- 'ee/spec/lib/gitlab/graphql/loaders/bulk_epic_aggregate_loader_spec.rb'
- 'ee/spec/lib/gitlab/usage/metrics/instrumentations/count_ci_builds_metric_spec.rb'
- 'ee/spec/lib/gitlab/usage/metrics/instrumentations/count_users_creating_ci_builds_metric_spec.rb'
- 'ee/spec/lib/gitlab/vulnerabilities/parser_spec.rb'
- 'ee/spec/models/analytics/cycle_analytics/group_value_stream_spec.rb'
- 'ee/spec/models/application_setting_spec.rb'
- 'ee/spec/models/approval_state_spec.rb'
- 'ee/spec/models/burndown_spec.rb'
- 'ee/spec/models/concerns/ee/noteable_spec.rb'
- 'ee/spec/models/concerns/geo/verification_state_spec.rb'
- 'ee/spec/models/ee/iterations/cadence_spec.rb'
- 'ee/spec/models/ee/namespace_spec.rb'
- 'ee/spec/models/ee/release_spec.rb'
- 'ee/spec/models/group_wiki_repository_spec.rb'
- 'ee/spec/models/namespace_setting_spec.rb'
- 'ee/spec/models/project_spec.rb'
- 'ee/spec/models/requirements_management/test_report_spec.rb'
- 'ee/spec/models/security/orchestration_policy_configuration_spec.rb'
- 'ee/spec/models/security/orchestration_policy_rule_schedule_spec.rb'
- 'ee/spec/models/security/scan_spec.rb'
- 'ee/spec/models/security/training_provider_spec.rb'
- 'ee/spec/models/snippet_repository_spec.rb'
- 'ee/spec/policies/project_policy_spec.rb'
- 'ee/spec/requests/admin/user_permission_exports_controller_spec.rb'

View File

@ -2,6 +2,7 @@
import { GlSkeletonLoader, GlButton } from '@gitlab/ui';
import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
import { sprintf, __ } from '~/locale';
import { joinPaths } from '~/lib/utils/url_utility';
import getRefMixin from '../../mixins/get_ref';
import projectPathQuery from '../../queries/project_path.query.graphql';
import TableHeader from './header.vue';
@ -108,7 +109,9 @@ export default {
return {};
}
return this.commits.find((commitEntry) => commitEntry.fileName === fileName);
return this.commits.find(
(commitEntry) => commitEntry.filePath === joinPaths(this.path, fileName),
);
},
},
};

View File

@ -1,6 +1,7 @@
import produce from 'immer';
import { normalizeData } from 'ee_else_ce/repository/utils/commit';
import axios from '~/lib/utils/axios_utils';
import { joinPaths } from '~/lib/utils/url_utility';
import commitsQuery from './queries/commits.query.graphql';
import projectPathQuery from './queries/project_path.query.graphql';
import refQuery from './queries/ref.query.graphql';
@ -16,7 +17,7 @@ function setNextOffset(offset) {
}
export function resolveCommit(commits, path, { resolve, entry }) {
const commit = commits.find((c) => c.filePath === `${path}/${entry.name}`);
const commit = commits.find((c) => c.filePath === joinPaths(path, entry.name));
if (commit) {
resolve(commit);

View File

@ -1,3 +1,5 @@
import { joinPaths } from '~/lib/utils/url_utility';
export function normalizeData(data, path, extra = () => {}) {
return data.map((d) => ({
sha: d.commit.id,
@ -6,7 +8,7 @@ export function normalizeData(data, path, extra = () => {}) {
committedDate: d.commit.committed_date,
commitPath: d.commit_path,
fileName: d.file_name,
filePath: `${path}/${d.file_name}`,
filePath: joinPaths(path, d.file_name),
__typename: 'LogTreeCommit',
...extra(d),
}));

View File

@ -11,6 +11,7 @@ module Projects
def download
package_file = project.package_files.find(params[:id])
package_file.package.touch_last_downloaded_at
send_upload(package_file.file, attachment: package_file.file_name)
end
end

View File

@ -26,6 +26,8 @@ module Types
field :pypi_setup_url, GraphQL::Types::String, null: true, description: 'Url of the PyPi project setup endpoint.'
field :pypi_url, GraphQL::Types::String, null: true, description: 'Url of the PyPi project endpoint.'
field :last_downloaded_at, Types::TimeType, null: true, description: 'Last time that a file of this package was downloaded.'
def versions
object.versions
end

View File

@ -21,15 +21,14 @@ module NotifyHelper
(source.description || default_description).truncate(200, separator: ' ')
end
def merge_request_approved_description(merge_request, approved_by)
s_('Notify|%{mr_highlight}Merge request%{highlight_end} %{mr_link} %{approved_highlight}was approved by%{highlight_end} %{approver_avatar} %{approver_link}')
.html_safe % {
mr_highlight: '<span style="font-weight: 600;color:#333333;">'.html_safe,
highlight_end: '</span>'.html_safe,
mr_link: link_to(merge_request.to_reference, merge_request_url(merge_request), style: "font-weight: 600;color:#3777b0;text-decoration:none").html_safe,
approved_highlight: '<span>'.html_safe,
approver_avatar: content_tag(:img, nil, height: "24", src: avatar_icon_for_user(approved_by, 24, only_path: false), style: "border-radius:12px;margin:-7px 0 -7px 3px;", width: "24", alt: "Avatar", class: "avatar").html_safe,
approver_link: link_to(approved_by.name, user_url(approved_by), style: "color:#333333;text-decoration:none;", class: "muted").html_safe
}
def merge_request_hash_param(merge_request, reviewer)
{
mr_highlight: '<span style="font-weight: 600;color:#333333;">'.html_safe,
highlight_end: '</span>'.html_safe,
mr_link: link_to(merge_request.to_reference, merge_request_url(merge_request), style: "font-weight: 600;color:#3777b0;text-decoration:none").html_safe,
reviewer_highlight: '<span>'.html_safe,
reviewer_avatar: content_tag(:img, nil, height: "24", src: avatar_icon_for_user(reviewer, 24, only_path: false), style: "border-radius:12px;margin:-7px 0 -7px 3px;", width: "24", alt: "Avatar", class: "avatar").html_safe,
reviewer_link: link_to(reviewer.name, user_url(reviewer), style: "color:#333333;text-decoration:none;", class: "muted").html_safe
}
end
end

View File

@ -94,6 +94,7 @@ module UsersHelper
[].tap do |badges|
badges << blocked_user_badge(user) if user.blocked?
badges << { text: s_('AdminUsers|Admin'), variant: 'success' } if user.admin?
badges << { text: s_('AdminUsers|Bot'), variant: 'muted' } if user.bot?
badges << { text: s_('AdminUsers|External'), variant: 'secondary' } if user.external?
badges << { text: s_("AdminUsers|It's you!"), variant: 'muted' } if current_user == user
badges << { text: s_("AdminUsers|Locked"), variant: 'warning' } if user.access_locked?

View File

@ -11,7 +11,7 @@ module Ci
include Presentable
include Importable
include Ci::HasRef
include HasDeploymentName
include Ci::TrackEnvironmentUsage
extend ::Gitlab::Utils::Override
@ -1099,18 +1099,6 @@ module Ci
.include?(exit_code)
end
def track_deployment_usage
Gitlab::Utils::UsageData.track_usage_event('ci_users_executing_deployment_job', user_id) if user_id.present? && count_user_deployment?
end
def track_verify_usage
Gitlab::Utils::UsageData.track_usage_event('ci_users_executing_verify_environment_job', user_id) if user_id.present? && count_user_verification?
end
def count_user_verification?
has_environment? && environment_action == 'verify'
end
def each_report(report_types)
job_artifacts_for_types(report_types).each do |report_artifact|
report_artifact.each_blob do |blob|

View File

@ -2,6 +2,7 @@
module Ci
class Pipeline < Ci::ApplicationRecord
include Ci::Partitionable
include Ci::HasStatus
include Importable
include AfterCommitQueue
@ -31,7 +32,7 @@ module Ci
sha_attribute :source_sha
sha_attribute :target_sha
partitionable scope: ->(_) { Ci::Pipeline.current_partition_value }
# Ci::CreatePipelineService returns Ci::Pipeline so this is the only place
# where we can pass additional information from the service. This accessor
# is used for storing the processed metadata for linting purposes.
@ -482,6 +483,10 @@ module Ci
@auto_devops_pipelines_completed_total ||= Gitlab::Metrics.counter(:auto_devops_pipelines_completed_total, 'Number of completed auto devops pipelines')
end
def self.current_partition_value
100
end
def uses_needs?
processables.where(scheduling_type: :dag).any?
end

View File

@ -3,6 +3,7 @@
module Ci
class Processable < ::CommitStatus
include Gitlab::Utils::StrongMemoize
include FromUnion
extend ::Gitlab::Utils::Override
has_one :resource, class_name: 'Ci::Resource', foreign_key: 'build_id', inverse_of: :processable

View File

@ -2,11 +2,14 @@
module Ci
class Stage < Ci::ApplicationRecord
include Ci::Partitionable
include Importable
include Ci::HasStatus
include Gitlab::OptimisticLocking
include Presentable
partitionable scope: :pipeline
enum status: Ci::HasStatus::STATUSES_ENUM
belongs_to :project

View File

@ -1,6 +1,7 @@
# frozen_string_literal: true
class CommitStatus < Ci::ApplicationRecord
include Ci::Partitionable
include Ci::HasStatus
include Importable
include AfterCommitQueue
@ -11,6 +12,7 @@ class CommitStatus < Ci::ApplicationRecord
include IgnorableColumns
self.table_name = 'ci_builds'
partitionable scope: :pipeline
ignore_column :trace, remove_with: '15.6', remove_after: '2022-10-22'
belongs_to :user

View File

@ -1,15 +0,0 @@
# frozen_string_literal: true
module Ci
module HasDeploymentName
extend ActiveSupport::Concern
def count_user_deployment?
deployment_name?
end
def deployment_name?
self.class::DEPLOYMENT_NAMES.any? { |n| name.downcase.include?(n) }
end
end
end

View File

@ -11,6 +11,9 @@ module Ci
#
# belongs_to :pipeline
# partitionable scope: :pipeline
# # Or
# partitionable scope: ->(record) { record.partition_value }
#
#
module Partitionable
extend ActiveSupport::Concern
@ -21,9 +24,10 @@ module Ci
validates :partition_id, presence: true
def set_partition_id
return unless partition_scope_record
return if partition_id_changed? && partition_id.present?
return unless partition_scope_value
self.partition_id = partition_scope_record.partition_id
self.partition_id = partition_scope_value
end
end
@ -31,9 +35,10 @@ module Ci
private
def partitionable(scope:)
define_method(:partition_scope_record) do
strong_memoize(:partition_scope_record) do
scope.to_proc.call(self)
define_method(:partition_scope_value) do
strong_memoize(:partition_scope_value) do
record = scope.to_proc.call(self)
record.respond_to?(:partition_id) ? record.partition_id : record
end
end
end

View File

@ -0,0 +1,31 @@
# frozen_string_literal: true
module Ci
module TrackEnvironmentUsage
extend ActiveSupport::Concern
def track_deployment_usage
return unless user_id.present? && count_user_deployment?
Gitlab::Utils::UsageData.track_usage_event('ci_users_executing_deployment_job', user_id)
end
def track_verify_environment_usage
return unless user_id.present? && verifies_environment?
Gitlab::Utils::UsageData.track_usage_event('ci_users_executing_verify_environment_job', user_id)
end
def verifies_environment?
has_environment? && environment_action == 'verify'
end
def count_user_deployment?
deployment_name?
end
def deployment_name?
self.class::DEPLOYMENT_NAMES.any? { |n| name.downcase.include?(n) }
end
end
end

View File

@ -333,6 +333,12 @@ class Packages::Package < ApplicationRecord
name.gsub(/#{Gitlab::Regex::Packages::PYPI_NORMALIZED_NAME_REGEX_STRING}/o, '-').downcase
end
def touch_last_downloaded_at
::Gitlab::Database::LoadBalancing::Session.without_sticky_writes do
update_column(:last_downloaded_at, Time.zone.now)
end
end
private
def composer_tag_version?

View File

@ -21,9 +21,16 @@ module Ci
@processable.pipeline.reset_source_bridge!(current_user)
end
# rubocop: disable CodeReuse/ActiveRecord
def dependent_jobs
return legacy_dependent_jobs unless ::Feature.enabled?(:ci_requeue_with_dag_object_hierarchy, project)
ordered_by_dag(
stage_dependent_jobs.or(needs_dependent_jobs).ordered_by_stage
::Ci::Processable
.from_union(needs_dependent_jobs, stage_dependent_jobs)
.skipped
.ordered_by_stage
.preload(:needs)
)
end
@ -34,22 +41,37 @@ module Ci
end
def stage_dependent_jobs
skipped_jobs.after_stage(@processable.stage_idx)
@processable.pipeline.processables.after_stage(@processable.stage_idx)
end
def needs_dependent_jobs
skipped_jobs.scheduling_type_dag.with_needs([@processable.name])
::Gitlab::Ci::ProcessableObjectHierarchy.new(
::Ci::Processable.where(id: @processable.id)
).descendants
end
def skipped_jobs
@skipped_jobs ||= @processable.pipeline.processables.skipped
def legacy_skipped_jobs
@legacy_skipped_jobs ||= @processable.pipeline.processables.skipped
end
def legacy_dependent_jobs
ordered_by_dag(
legacy_stage_dependent_jobs.or(legacy_needs_dependent_jobs).ordered_by_stage.preload(:needs)
)
end
def legacy_stage_dependent_jobs
legacy_skipped_jobs.after_stage(@processable.stage_idx)
end
def legacy_needs_dependent_jobs
legacy_skipped_jobs.scheduling_type_dag.with_needs([@processable.name])
end
# rubocop: disable CodeReuse/ActiveRecord
def ordered_by_dag(jobs)
sorted_job_names = sort_jobs(jobs).each_with_index.to_h
jobs.preload(:needs).group_by(&:stage_idx).flat_map do |_, stage_jobs|
jobs.group_by(&:stage_idx).flat_map do |_, stage_jobs|
stage_jobs.sort_by { |job| sorted_job_names.fetch(job.name) }
end
end

View File

@ -0,0 +1,89 @@
# frozen_string_literal: true
module GoogleCloud
class FetchGoogleIpListService
include BaseServiceUtility
GOOGLE_IP_RANGES_URL = 'https://www.gstatic.com/ipranges/cloud.json'
RESPONSE_BODY_LIMIT = 1.megabyte
EXPECTED_CONTENT_TYPE = 'application/json'
IpListNotRetrievedError = Class.new(StandardError)
def execute
# Prevent too many workers from hitting the same HTTP endpoint
if ::Gitlab::ApplicationRateLimiter.throttled?(:fetch_google_ip_list, scope: nil)
return error("#{self.class} was rate limited")
end
subnets = fetch_and_update_cache!
Gitlab::AppJsonLogger.info(class: self.class.name,
message: 'Successfully retrieved Google IP list',
subnet_count: subnets.count)
success({ subnets: subnets })
rescue IpListNotRetrievedError => err
Gitlab::ErrorTracking.log_exception(err)
error('Google IP list not retrieved')
end
private
# Attempts to retrieve and parse the list of IPs from Google. Updates
# the internal cache so that the data is accessible.
#
# Returns an array of IPAddr objects consisting of subnets.
def fetch_and_update_cache!
parsed_response = fetch_google_ip_list
parse_google_prefixes(parsed_response).tap do |subnets|
::ObjectStorage::CDN::GoogleIpCache.update!(subnets)
end
end
def fetch_google_ip_list
response = Gitlab::HTTP.get(GOOGLE_IP_RANGES_URL, follow_redirects: false, allow_local_requests: false)
validate_response!(response)
response.parsed_response
end
def validate_response!(response)
raise IpListNotRetrievedError, "response was #{response.code}" unless response.code == 200
raise IpListNotRetrievedError, "response was nil" unless response.body
parsed_response = response.parsed_response
unless response.content_type == EXPECTED_CONTENT_TYPE && parsed_response.is_a?(Hash)
raise IpListNotRetrievedError, "response was not JSON"
end
if response.body&.bytesize.to_i > RESPONSE_BODY_LIMIT
raise IpListNotRetrievedError, "response was too large: #{response.body.bytesize}"
end
prefixes = parsed_response['prefixes']
raise IpListNotRetrievedError, "JSON was type #{prefixes.class}, expected Array" unless prefixes.is_a?(Array)
raise IpListNotRetrievedError, "#{GOOGLE_IP_RANGES_URL} did not return any IP ranges" if prefixes.empty?
response.parsed_response
end
def parse_google_prefixes(parsed_response)
ranges = parsed_response['prefixes'].map do |prefix|
ip_range = prefix['ipv4Prefix'] || prefix['ipv6Prefix']
next unless ip_range
IPAddr.new(ip_range)
end.compact
raise IpListNotRetrievedError, "#{GOOGLE_IP_RANGES_URL} did not return any IP ranges" if ranges.empty?
ranges
end
end
end

View File

@ -6,18 +6,12 @@ module ObjectStorage
class GoogleCDN
include Gitlab::Utils::StrongMemoize
IpListNotRetrievedError = Class.new(StandardError)
GOOGLE_CDN_LIST_KEY = 'google_cdn_ip_list'
GOOGLE_IP_RANGES_URL = 'https://www.gstatic.com/ipranges/cloud.json'
EXPECTED_CONTENT_TYPE = 'application/json'
RESPONSE_BODY_LIMIT = 1.megabyte
CACHE_EXPIRATION_TIME = 1.day
attr_reader :options
def initialize(options)
@options = HashWithIndifferentAccess.new(options.to_h)
GoogleIpCache.async_refresh unless GoogleIpCache.ready?
end
def use_cdn?(request_ip)
@ -26,9 +20,8 @@ module ObjectStorage
ip = IPAddr.new(request_ip)
return false if ip.private?
return false unless google_ip_ranges.present?
!google_ip?(request_ip)
!GoogleIpCache.google_ip?(request_ip)
end
def signed_url(path, expiry: 10.minutes)
@ -71,69 +64,6 @@ module ObjectStorage
options['url']
end
end
def google_ip?(request_ip)
google_ip_ranges.any? { |range| range.include?(request_ip) }
end
def google_ip_ranges
strong_memoize(:google_ip_ranges) do
cache_value(GOOGLE_CDN_LIST_KEY) { fetch_google_ip_list }
end
rescue IpListNotRetrievedError => err
Gitlab::ErrorTracking.log_exception(err)
[]
end
def cache_value(key, expires_in: CACHE_EXPIRATION_TIME, &block)
l1_cache.fetch(key, expires_in: expires_in) do
l2_cache.fetch(key, expires_in: expires_in) { yield }
end
end
def l1_cache
Gitlab::ProcessMemoryCache.cache_backend
end
def l2_cache
Rails.cache
end
def fetch_google_ip_list
response = Gitlab::HTTP.get(GOOGLE_IP_RANGES_URL)
raise IpListNotRetrievedError, "response was #{response.code}" unless response.code == 200
if response.body&.bytesize.to_i > RESPONSE_BODY_LIMIT
raise IpListNotRetrievedError, "response was too large: #{response.body.bytesize}"
end
parsed_response = response.parsed_response
unless response.content_type == EXPECTED_CONTENT_TYPE && parsed_response.is_a?(Hash)
raise IpListNotRetrievedError, "response was not JSON"
end
parse_google_prefixes(parsed_response)
end
def parse_google_prefixes(parsed_response)
prefixes = parsed_response['prefixes']
raise IpListNotRetrievedError, "JSON was type #{prefixes.class}, expected Array" unless prefixes.is_a?(Array)
ranges = prefixes.map do |prefix|
ip_range = prefix['ipv4Prefix'] || prefix['ipv6Prefix']
next unless ip_range
IPAddr.new(ip_range)
end.compact
raise IpListNotRetrievedError, "#{GOOGLE_IP_RANGES_URL} did not return any IP ranges" if ranges.empty?
ranges
end
end
end
end

View File

@ -0,0 +1,60 @@
# rubocop:disable Naming/FileName
# frozen_string_literal: true
module ObjectStorage
module CDN
class GoogleIpCache
GOOGLE_CDN_LIST_KEY = 'google_cdn_ip_list'
CACHE_EXPIRATION_TIME = 1.day
class << self
def update!(subnets)
caches.each { |cache| cache.write(GOOGLE_CDN_LIST_KEY, subnets) }
end
def ready?
caches.any? { |cache| cache.exist?(GOOGLE_CDN_LIST_KEY) }
end
def google_ip?(request_ip)
google_ip_ranges = cached_value(GOOGLE_CDN_LIST_KEY)
return false unless google_ip_ranges
google_ip_ranges.any? { |range| range.include?(request_ip) }
end
def async_refresh
::GoogleCloud::FetchGoogleIpListWorker.perform_async
end
private
def caches
[l1_cache, l2_cache]
end
def l1_cache
Gitlab::ProcessMemoryCache.cache_backend
end
def l2_cache
Rails.cache
end
def cached_value(key)
l1_cache.fetch(key) do
result = l2_cache.fetch(key)
# Don't populate the L1 cache if we can't find the entry
break unless result
result
end
end
end
end
end
end
# rubocop:enable Naming/FileName

View File

@ -93,7 +93,7 @@
%tr{ style: 'width:100%;' }
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;text-align:center;" }
%img{ src: image_url('mailers/approval/icon-merge-request-gray.gif'), style: "height:18px;width:18px;margin-bottom:-4px;", alt: "Merge request icon" }
= merge_request_approved_description(@merge_request, @approved_by)
= s_('Notify|%{mr_highlight}Merge request%{highlight_end} %{mr_link} %{reviewer_highlight}was approved by%{highlight_end} %{reviewer_avatar} %{reviewer_link}').html_safe % merge_request_hash_param(@merge_request, @approved_by)
%tr.spacer
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;height:18px;font-size:18px;line-height:18px;" }
&nbsp;

View File

@ -79,9 +79,11 @@
%img{ alt: "✗", height: "13", src: image_url('mailers/approval/icon-x-orange-inverted.gif'), style: "display:block;", width: "13" }/
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;vertical-align:middle;color:#ffffff;text-align:center;" }
- if @merge_request.respond_to? :approvals_required
%span Merge request was unapproved (#{@merge_request.approvals.count}/#{@merge_request.approvals_required})
%span
= s_('Notify|Merge request was unapproved (%{approvals_count}/%{approvals_required})') % {approvals_count: @merge_request.approvals.count, approvals_required: @merge_request.approvals_required}
- else
%span Merge request was unapproved
%span
= s_('Notify|Merge request was unapproved')
%tr.spacer
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;height:18px;font-size:18px;line-height:18px;" }
&nbsp;
@ -92,12 +94,7 @@
%tr{ style: 'width:100%;' }
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;text-align:center;" }
%img{ src: image_url('mailers/approval/icon-merge-request-gray.gif'), style: "height:18px;width:18px;margin-bottom:-4px;", alt: "Merge request icon" }
%span{ style: "font-weight: 600;color:#333333;" } Merge request
%a{ href: merge_request_url(@merge_request), style: "font-weight: 600;color:#3777b0;text-decoration:none" }= @merge_request.to_reference
%span was unapproved by
%img.avatar{ height: "24", src: avatar_icon_for_user(@unapproved_by, 24), style: "border-radius:12px;margin:-7px 0 -7px 3px;", width: "24", alt: "Avatar" }/
%a.muted{ href: user_url(@unapproved_by), style: "color:#333333;text-decoration:none;" }
= @unapproved_by.name
= s_('Notify|%{mr_highlight}Merge request%{highlight_end} %{mr_link} %{reviewer_highlight}was unapproved by%{highlight_end} %{reviewer_avatar} %{reviewer_link}').html_safe % merge_request_hash_param(@merge_request, @unapproved_by)
%tr.spacer
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;height:18px;font-size:18px;line-height:18px;" }
&nbsp;
@ -106,7 +103,8 @@
%table.info{ border: "0", cellpadding: "0", cellspacing: "0", style: "width:100%;" }
%tbody
%tr
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;" } Project
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;" }
= _('Project')
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;color:#333333;font-weight:400;width:75%;padding-left:5px;" }
- namespace_name = @project.group ? @project.group.name : @project.namespace.owner.name
- namespace_url = @project.group ? group_url(@project.group) : user_url(@project.namespace.owner)
@ -116,7 +114,8 @@
%a.muted{ href: project_url(@project), style: "color:#333333;text-decoration:none;" }
= @project.name
%tr
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;border-top:1px solid #ededed;" } Branch
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;border-top:1px solid #ededed;" }
= _('Branch')
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;color:#333333;font-weight:400;width:75%;padding-left:5px;border-top:1px solid #ededed;" }
%table.img{ border: "0", cellpadding: "0", cellspacing: "0", style: "border-collapse:collapse;" }
%tbody
@ -127,7 +126,8 @@
%span.muted{ style: "color:#333333;text-decoration:none;" }
= @merge_request.source_branch
%tr
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;border-top:1px solid #ededed;" } Author
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;border-top:1px solid #ededed;" }
= _('Author')
%td{ style: "font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.4;color:#8c8c8c;font-weight:300;padding:14px 0;margin:0;color:#333333;font-weight:400;width:75%;padding-left:5px;border-top:1px solid #ededed;" }
%table.img{ border: "0", cellpadding: "0", cellspacing: "0", style: "border-collapse:collapse;" }
%tbody

View File

@ -2433,6 +2433,15 @@
:weight: 1
:idempotent: true
:tags: []
- :name: google_cloud_fetch_google_ip_list
:worker_name: GoogleCloud::FetchGoogleIpListWorker
:feature_category: :build_artifacts
:has_external_dependencies: false
:urgency: :low
:resource_boundary: :unknown
:weight: 1
:idempotent: true
:tags: []
- :name: group_destroy
:worker_name: GroupDestroyWorker
:feature_category: :subgroups

View File

@ -39,7 +39,7 @@ module Ci
build.execute_hooks
ChatNotificationWorker.perform_async(build.id) if build.pipeline.chat?
build.track_deployment_usage
build.track_verify_usage
build.track_verify_environment_usage
if build.failed? && !build.auto_retry_expected?
::Ci::MergeRequests::AddTodoWhenBuildFailsWorker.perform_async(build.id)

View File

@ -0,0 +1,17 @@
# frozen_string_literal: true
module GoogleCloud
class FetchGoogleIpListWorker
include ApplicationWorker
data_consistency :delayed
feature_category :build_artifacts
urgency :low
deduplicate :until_executing
idempotent!
def perform
GoogleCloud::FetchGoogleIpListService.new.execute
end
end
end

View File

@ -0,0 +1,8 @@
---
name: ci_requeue_with_dag_object_hierarchy
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/97156
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/373148
milestone: '15.4'
type: development
group: group::pipeline authoring
default_enabled: false

View File

@ -5,4 +5,4 @@ rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/368387
milestone: '15.2'
type: development
group: group::authentication and authorization
default_enabled: false
default_enabled: true

View File

@ -203,6 +203,8 @@
- 1
- - google_cloud_create_cloudsql_instance
- 1
- - google_cloud_fetch_google_ip_list
- 1
- - group_destroy
- 1
- - group_export

View File

@ -0,0 +1,7 @@
# frozen_string_literal: true
class AddLastDownloadedAtToPackages < Gitlab::Database::Migration[2.0]
def change
add_column :packages_packages, :last_downloaded_at, :datetime_with_timezone
end
end

View File

@ -0,0 +1 @@
59ea43b60e0fb009823d82e99494a7fcb31eeaddc0a6ccbf43009977cdd32526

View File

@ -18899,7 +18899,8 @@ CREATE TABLE packages_packages (
version character varying,
package_type smallint NOT NULL,
creator_id integer,
status smallint DEFAULT 0 NOT NULL
status smallint DEFAULT 0 NOT NULL,
last_downloaded_at timestamp with time zone
);
CREATE SEQUENCE packages_packages_id_seq

View File

@ -39,7 +39,7 @@ Streaming destinations receive **all** audit event data, which could include sen
Users with the Owner role for a group can add streaming destinations for it:
1. On the top bar, select **Menu > Groups** and find your group.
1. On the top bar, select **Main menu > Groups** and find your group.
1. On the left sidebar, select **Security & Compliance > Audit events**.
1. On the main area, select **Streams** tab.
1. Select **Add streaming destination** to show the section for adding destinations.
@ -161,7 +161,7 @@ Users with the Owner role for a group can update streaming destinations.
To update a streaming destinations custom HTTP headers:
1. On the top bar, select **Menu > Groups** and find your group.
1. On the top bar, select **Main menu > Groups** and find your group.
1. On the left sidebar, select **Security & Compliance > Audit events**.
1. On the main area, select **Streams** tab.
1. To the right of the item, select **Edit** (**{pencil}**).
@ -279,7 +279,7 @@ the destination's value when [listing streaming destinations](#list-streaming-de
Users with the Owner role for a group can list streaming destinations and see the verification tokens:
1. On the top bar, select **Menu > Groups** and find your group.
1. On the top bar, select **Main menu > Groups** and find your group.
1. On the left sidebar, select **Security & Compliance > Audit events**.
1. On the main area, select the **Streams**.
1. View the verification token on the right side of each item.

View File

@ -309,7 +309,7 @@ audit events.
To export the audit events to CSV:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Monitoring > Audit Events**.
1. Select the available search [filters](#search).
1. Select **Export as CSV**.

View File

@ -160,7 +160,7 @@ For each application and Sidekiq node on the **secondary** site:
To verify Container Registry replication is working, on the **secondary** site:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Geo > Nodes**.
The initial replication, or "backfill", is probably still in progress.

View File

@ -36,7 +36,7 @@ to do that.
To remove the **primary** site:
1. [Remove all secondary Geo sites](remove_geo_site.md)
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Geo > Nodes**.
1. Select **Remove** for the **primary** node.
1. Confirm by selecting **Remove** when the prompt appears.

View File

@ -41,7 +41,7 @@ whether they are stored on the local file system or in object storage.
To enable GitLab replication:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Geo > Nodes**.
1. Select **Edit** on the **secondary** site.
1. In the **Synchronization Settings** section, find the **Allow this secondary node to replicate content on Object Storage**

View File

@ -9,7 +9,7 @@ type: howto
**Secondary** sites can be removed from the Geo cluster using the Geo administration page of the **primary** site. To remove a **secondary** site:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Geo > Nodes**.
1. Select the **Remove** button for the **secondary** site you want to remove.
1. Confirm by selecting **Remove** when the prompt appears.

View File

@ -26,7 +26,7 @@ Before attempting more advanced troubleshooting:
On the **primary** site:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Geo > Sites**.
We perform the following health checks on each **secondary** site
@ -275,7 +275,7 @@ sudo gitlab-rake gitlab:geo:check
Checking Geo ... Finished
```
Ensure you have added the secondary site in the **Menu > Admin > Geo > Sites** on the web interface for the **primary** site.
Ensure you have added the secondary site in the **Main menu > Admin > Geo > Sites** on the web interface for the **primary** site.
Also ensure you entered the `gitlab_rails['geo_node_name']`
when adding the secondary site in the Admin Area of the **primary** site.
In GitLab 12.3 and earlier, edit the secondary site in the Admin Area of the **primary**
@ -668,7 +668,7 @@ to start again from scratch, there are a few steps that can help you:
### Design repository failures on mirrored projects and project imports
On the top bar, under **Menu > Admin > Geo > Sites**,
On the top bar, under **Main menu > Admin > Geo > Sites**,
if the Design repositories progress bar shows
`Synced` and `Failed` greater than 100%, and negative `Queued`, the instance
is likely affected by
@ -1004,7 +1004,7 @@ site's URL matches its external URL.
On the **primary** site:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Geo > Sites**.
1. Find the affected **secondary** site and select **Edit**.
1. Ensure the **URL** field matches the value found in `/etc/gitlab/gitlab.rb`

View File

@ -14,7 +14,7 @@ in the background.
On the **primary** site:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Geo > Sites**.
1. Select **Edit** of the secondary site you want to tune.
1. Under **Tuning settings**, there are several variables that can be tuned to

View File

@ -1115,7 +1115,7 @@ Particular attention should be shown to:
1. Check that the Praefect storage is configured to store new repositories:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Settings > Repository**.
1. Expand the **Repository storage** section.

View File

@ -20,7 +20,7 @@ and our advice on [parsing the `gitaly/current` file](../logs/log_parsing.md#par
When using standalone Gitaly servers, you must make sure they are the same version
as GitLab to ensure full compatibility:
1. On the top bar, select **Menu > Admin** on your GitLab instance.
1. On the top bar, select **Main menu > Admin** on your GitLab instance.
1. On the left sidebar, select **Overview > Gitaly Servers**.
1. Confirm all Gitaly servers indicate that they are up to date.

View File

@ -27,7 +27,7 @@ GitLab automatically runs `git gc` and `git repack` on repositories after Git pu
You can change how often this happens or turn it off:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Settings > Repository**.
1. Expand **Repository maintenance**.
1. In the **Housekeeping** section, configure the [housekeeping options](#housekeeping-options).

View File

@ -56,7 +56,7 @@ read the [Kroki installation](https://docs.kroki.io/kroki/setup/install/#_images
You need to enable Kroki integration from Settings under Admin Area.
To do that, log in with an administrator account and follow these steps:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. Go to **Settings > General**.
1. Expand the **Kroki** section.
1. Select **Enable Kroki** checkbox.

View File

@ -43,7 +43,7 @@ After configuring your Mailgun domain for the webhook endpoints,
you're ready to enable the Mailgun integration:
1. Sign in to GitLab as an [Administrator](../../user/permissions.md) user.
1. On the top bar, select **Menu >** **{admin}** **Admin**.
1. On the top bar, select **Main menu >** **{admin}** **Admin**.
1. On the left sidebar, go to **Settings > General** and expand the **Mailgun** section.
1. Select the **Enable Mailgun** check box.
1. Enter the Mailgun HTTP webhook signing key as described in

View File

@ -211,7 +211,7 @@ stop;
After configuring your local PlantUML server, you're ready to enable the PlantUML integration:
1. Sign in to GitLab as an [Administrator](../../user/permissions.md) user.
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, go to **Settings > General** and expand the **PlantUML** section.
1. Select the **Enable PlantUML** checkbox.
1. Set the PlantUML instance as `https://gitlab.example.com/-/plantuml/`,

View File

@ -21,7 +21,7 @@ Maintenance Mode allows most external actions that do not change internal state.
There are three ways to enable Maintenance Mode as an administrator:
- **Web UI**:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Settings > General**.
1. Expand **Maintenance Mode**, and toggle **Enable Maintenance Mode**.
You can optionally add a message for the banner as well.
@ -45,7 +45,7 @@ There are three ways to enable Maintenance Mode as an administrator:
There are three ways to disable Maintenance Mode:
- **Web UI**:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Settings > General**.
1. Expand **Maintenance Mode**, and toggle **Enable Maintenance Mode**.
You can optionally add a message for the banner as well.
@ -173,7 +173,7 @@ it is recommended that you disable all cron jobs except for those related to Geo
To monitor queues and disable jobs:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Monitoring > Background Jobs**.
### Incident management

View File

@ -38,12 +38,12 @@ This project can be used to:
## Create the self monitoring project
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Settings > Metrics and profiling** and expand **Self monitoring**.
1. Toggle **Self monitoring** on.
1. After your GitLab instance creates the project, GitLab displays a link to the
project in the text above the **Self monitoring** toggle. You can also find it
from the top bar by selecting **Menu > Project**, then selecting **Your projects**.
from the top bar by selecting **Main menu > Project**, then selecting **Your projects**.
## Delete the self monitoring project
@ -51,7 +51,7 @@ WARNING:
Deleting the self monitoring project removes any changes made to the project. If
you create the project again, it's created in its default state.
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, go to **Settings > Metrics and profiling** and expand **Self monitoring**.
1. Toggle **Self monitoring** off.
1. In the confirmation dialog that opens, select **Delete self monitoring project**.

View File

@ -9,7 +9,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
GitLab Performance Monitoring is disabled by default. To enable it and change any of its
settings:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Settings > Metrics and profiling**
(`/admin/application_settings/metrics_and_profiling`).
1. Add the necessary configuration changes.

View File

@ -62,7 +62,7 @@ repository.
After setting up Grafana, you can enable a link to access it easily from the
GitLab sidebar:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Settings > Metrics and profiling**
and expand **Metrics - Grafana**.
1. Select the **Add a link to Grafana** checkbox.
@ -72,14 +72,14 @@ GitLab sidebar:
- *Otherwise,* enter the full URL of the Grafana instance.
1. Select **Save changes**.
GitLab displays your link in the **Menu > Admin > Monitoring > Metrics Dashboard**.
GitLab displays your link in the **Main menu > Admin > Monitoring > Metrics Dashboard**.
## Required Scopes
> [Introduced](https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/5822) in GitLab 13.10.
When setting up Grafana through the process above, no scope shows in the screen at
**Menu > Admin > Applications > GitLab Grafana**. However, the `read_user` scope is
**Main menu > Admin > Applications > GitLab Grafana**. However, the `read_user` scope is
required and is provided to the application automatically. Setting any scope other than
`read_user` without also including `read_user` leads to this error when you try to log in using
GitLab as the OAuth provider:

View File

@ -108,7 +108,7 @@ The performance bar is disabled by default for non-administrators. To enable it
for a given group:
1. Sign in as a user with administrator access.
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Settings > Metrics and profiling**
(`admin/application_settings/metrics_and_profiling`), and expand
**Profiling - Performance bar**.

View File

@ -9,7 +9,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
To enable the GitLab Prometheus metrics:
1. Log in to GitLab as a user with administrator access.
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Settings > Metrics and profiling**.
1. Find the **Metrics - Prometheus** section, and select **Add link to Prometheus**.
1. [Restart GitLab](../../restart_gitlab.md#omnibus-gitlab-restart) for the changes to take effect.

View File

@ -106,7 +106,7 @@ users as long as a large file exists.
To disable writes to the `authorized_keys` file:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Settings > Network**.
1. Expand **Performance optimization**.
1. Clear the **Use authorized_keys file to authenticate SSH keys** checkbox.
@ -125,7 +125,7 @@ This overview is brief. Refer to the above instructions for more context.
1. [Rebuild the `authorized_keys` file](../raketasks/maintenance.md#rebuild-authorized_keys-file).
1. Enable writes to the `authorized_keys` file.
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Settings > Network**.
1. Expand **Performance optimization**.
1. Select the **Use authorized_keys file to authenticate SSH keys** checkbox.

View File

@ -322,7 +322,7 @@ the Container Registry by themselves, follow the steps below.
In GitLab, tokens for the Container Registry expire every five minutes.
To increase the token duration:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Settings > CI/CD**.
1. Expand **Container Registry**.
1. For the **Authorization token duration (minutes)**, update the value.

View File

@ -403,7 +403,7 @@ domain as a custom domain to their project.
If your user base is private or otherwise trusted, you can disable the
verification requirement:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Settings > Preferences**.
1. Expand **Pages**.
1. Clear the **Require users to prove ownership of custom domains** checkbox.
@ -420,7 +420,7 @@ sites served under a custom domain.
To enable it:
1. Choose an email address on which you want to receive notifications about expiring domains.
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Settings > Preferences**.
1. Expand **Pages**.
1. Enter the email address for receiving notifications and accept Let's Encrypt's Terms of Service.
@ -473,7 +473,7 @@ pre-existing applications must modify the GitLab Pages OAuth application. Follow
this:
1. Enable [access control](#access-control).
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Settings > Applications**.
1. Expand **GitLab Pages**.
1. Clear the `api` scope's checkbox and select the desired scope's checkbox (for example,
@ -492,7 +492,7 @@ This can be helpful to restrict information published with Pages websites to the
of your instance only.
To do that:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Settings > Preferences**.
1. Expand **Pages**.
1. Select the **Disable public access to Pages sites** checkbox.
@ -705,7 +705,7 @@ Prerequisites:
To set the global maximum pages size for a project:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Settings > Preferences**.
1. Expand **Pages**.
1. Enter a value under **Maximum size of pages**.
@ -719,7 +719,7 @@ Prerequisites:
To set the maximum size of each GitLab Pages site in a group, overriding the inherited setting:
1. On the top bar, select **Menu > Groups** and find your group.
1. On the top bar, select **Main menu > Groups** and find your group.
1. On the left sidebar, select **Settings > General**.
1. Expand **Pages**.
1. Enter a value under **Maximum size** in MB.
@ -733,7 +733,7 @@ Prerequisites:
To set the maximum size of GitLab Pages site in a project, overriding the inherited setting:
1. On the top bar, select **Menu > Projects** and find your project.
1. On the top bar, select **Main menu > Projects** and find your project.
1. On the left sidebar, select **Settings > Pages**.
1. Enter a value under **Maximum size of pages** in MB.
1. Select **Save changes**.
@ -746,7 +746,7 @@ Prerequisite:
To set the maximum number of GitLab Pages custom domains for a project:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Settings > Preferences**, and expand **Pages**.
1. Enter a value for **Maximum number of custom domains per project**. Use `0` for unlimited domains.
1. Select **Save changes**.
@ -1398,7 +1398,7 @@ Upgrading to an [officially supported operating system](https://about.gitlab.com
This problem comes from the permissions of the GitLab Pages OAuth application. To fix it:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Applications > GitLab Pages**.
1. Edit the application.
1. Under **Scopes**, ensure that the `api` scope is selected.

View File

@ -485,7 +485,7 @@ The default for the maximum size of unpacked archives per project is 100 MB.
To change this value:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Settings > Preferences**.
1. Expand **Pages**.
1. Update the value for **Maximum size of pages (MB)**.

View File

@ -45,7 +45,7 @@ Note the following:
compatible as described in the [Version history](../../user/project/settings/import_export.md#version-history).
- The project import option must be enabled:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Settings > General**.
1. Expand **Visibility and access controls**.
1. Under **Import sources**, check the "Project export enabled" option.

View File

@ -109,7 +109,7 @@ sudo gitlab-rake gitlab:storage:migrate_to_hashed ID_FROM=50 ID_TO=100
To monitor the progress in GitLab:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Monitoring > Background Jobs**.
1. Watch how long the `hashed_storage:hashed_storage_project_migrate` queue
takes to finish. After it reaches zero, you can confirm every project

View File

@ -20,7 +20,7 @@ committed to a repository. GitLab administrators can:
To check a project's repository using GitLab UI:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Overview > Projects**.
1. Select the project to check.
1. In the **Repository check** section, select **Trigger repository check**.
@ -81,7 +81,7 @@ If a repository check fails, locate the error in the [`repocheck.log` file](logs
If periodic repository checks cause false alarms, you can clear all repository check states:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Settings > Repository** (`/admin/application_settings/repository`).
1. Expand the **Repository maintenance** section.
1. Select **Clear all repository checks**.

View File

@ -79,7 +79,7 @@ Administrators can look up a project's hashed path from its name or ID using:
To look up a project's hash path in the Admin Area:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Overview > Projects** and select the project.
The **Gitaly relative path** is displayed there and looks similar to:

View File

@ -95,7 +95,7 @@ To start multiple processes:
To view the Sidekiq processes in GitLab:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Monitoring > Background Jobs**.
## Negate settings

View File

@ -16,7 +16,7 @@ storage such as a content delivery network (CDN).
To configure external storage for static objects:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Settings > Repository**.
1. Expand the **External storage for repository static objects** section.
1. Enter the base URL and an arbitrary token. When you [set up external storage](#set-up-external-storage),

View File

@ -31,7 +31,7 @@ To access the **What's new** feature:
You can configure **What's new** to display features based on the tier,
or you can hide it. To configure it:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Settings > Preferences**.
1. Expand **What's new**, and choose one of the following options:

View File

@ -13934,6 +13934,7 @@ Represents the merge access level of a branch protection.
| <a id="mergerequestsquashonmerge"></a>`squashOnMerge` | [`Boolean!`](#boolean) | Indicates if squash on merge is enabled. |
| <a id="mergerequeststate"></a>`state` | [`MergeRequestState!`](#mergerequeststate) | State of the merge request. |
| <a id="mergerequestsubscribed"></a>`subscribed` | [`Boolean!`](#boolean) | Indicates if the currently logged in user is subscribed to this merge request. |
| <a id="mergerequestsuggestedreviewers"></a>`suggestedReviewers` **{warning-solid}** | [`SuggestedReviewersType`](#suggestedreviewerstype) | **Introduced** in 15.4. This feature is in Alpha. It can be changed or removed at any time. Suggested reviewers for merge request. Returns `null` if `suggested_reviewers` feature flag is disabled. This flag is disabled by default and only available on GitLab.com because the feature is experimental and is subject to change without notice. |
| <a id="mergerequesttargetbranch"></a>`targetBranch` | [`String!`](#string) | Target branch of the merge request. |
| <a id="mergerequesttargetbranchexists"></a>`targetBranchExists` | [`Boolean!`](#boolean) | Indicates if the target branch of the merge request exists. |
| <a id="mergerequesttargetproject"></a>`targetProject` | [`Project!`](#project) | Target project of the merge request. |
@ -15414,6 +15415,7 @@ Represents a package details in the Package Registry.
| <a id="packagedetailstypecreatedat"></a>`createdAt` | [`Time!`](#time) | Date of creation. |
| <a id="packagedetailstypedependencylinks"></a>`dependencyLinks` | [`PackageDependencyLinkConnection`](#packagedependencylinkconnection) | Dependency link. (see [Connections](#connections)) |
| <a id="packagedetailstypeid"></a>`id` | [`PackagesPackageID!`](#packagespackageid) | ID of the package. |
| <a id="packagedetailstypelastdownloadedat"></a>`lastDownloadedAt` | [`Time`](#time) | Last time that a file of this package was downloaded. |
| <a id="packagedetailstypemavenurl"></a>`mavenUrl` | [`String`](#string) | Url of the Maven project endpoint. |
| <a id="packagedetailstypemetadata"></a>`metadata` | [`PackageMetadata`](#packagemetadata) | Package metadata. |
| <a id="packagedetailstypename"></a>`name` | [`String!`](#string) | Name of the package. |
@ -18044,6 +18046,18 @@ Represents an entry from the future subscriptions.
| <a id="subscriptionfutureentrytype"></a>`type` | [`String!`](#string) | Type of license the subscription will yield. |
| <a id="subscriptionfutureentryusersinlicensecount"></a>`usersInLicenseCount` | [`Int`](#int) | Number of paid user seats. |
### `SuggestedReviewersType`
Represents a Suggested Reviewers result set.
#### Fields
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="suggestedreviewerstypereviewers"></a>`reviewers` | [`[String!]!`](#string) | List of reviewers. |
| <a id="suggestedreviewerstypetopn"></a>`topN` | [`Int`](#int) | Number of reviewers returned. |
| <a id="suggestedreviewerstypeversion"></a>`version` | [`String`](#string) | Suggested reviewer version. |
### `TaskCompletionStatus`
Completion status of tasks.

View File

@ -17,10 +17,10 @@ GET /projects/:id/merge_requests/:merge_request_iid/context_commits
Parameters:
| Attribute | Type | Required | Description |
|---------------------|---------|----------|-----------------------------------------------------------------------------------------------------------------|
| `id` | integer | yes | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding) owned by the authenticated user |
| `merge_request_iid` | integer | yes | The internal ID of the merge request |
| Attribute | Type | Required | Description |
|---------------------|---------|----------|-------------|
| `id` | integer | **{check-circle}** Yes | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding) owned by the authenticated user. |
| `merge_request_iid` | integer | **{check-circle}** Yes | The internal ID of the merge request. |
```json
[
@ -51,18 +51,18 @@ POST /projects/:id/merge_requests/:merge_request_iid/context_commits
Parameters:
| Attribute | Type | Required | Description |
|---------------------|---------|----------|-----------------------------------------------------------------------------------------------------------------|
| `id` | integer | yes | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding) owned by the authenticated user |
| `merge_request_iid` | integer | yes | The internal ID of the merge request |
| Attribute | Type | Required | Description |
|---------------------|---------|----------|-------------|
| `id` | integer | **{check-circle}** Yes | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding) owned by the authenticated user |
| `merge_request_iid` | integer | **{check-circle}** Yes | The internal ID of the merge request. |
```plaintext
POST /projects/:id/merge_requests/
```
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `commits` | string array | yes | The context commits' SHA |
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `commits` | string array | **{check-circle}** Yes | The context commits' SHA. |
```json
[
@ -92,8 +92,8 @@ DELETE /projects/:id/merge_requests/:merge_request_iid/context_commits
Parameters:
| Attribute | Type | Required | Description |
|---------------------|--------------|----------|-----------------------------------------------------------------------------------------------------------------|
| `id` | integer | yes | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding) owned by the authenticated user |
| `merge_request_iid` | integer | yes | The internal ID of the merge request |
| `commits` | string array | yes | The context commits' SHA |
| Attribute | Type | Required | Description |
|---------------------|--------------|----------|--------------|
| `commits` | string array | **{check-circle}** Yes | The context commits' SHA. |
| `id` | integer | **{check-circle}** Yes | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding) owned by the authenticated user. |
| `merge_request_iid` | integer | **{check-circle}** Yes | The internal ID of the merge request. |

View File

@ -213,6 +213,7 @@ Example response:
"delete_api_path": "/namespace1/project1/-/packages/1"
},
"created_at": "2019-11-27T03:37:38.711Z",
"last_downloaded_at": "2022-09-07T07:51:50.504Z"
"pipelines": [
{
"id": 123,

View File

@ -30,8 +30,8 @@ GET /projects/:id/templates/:type
| Attribute | Type | Required | Description |
| ---------- | ------ | -------- | ----------- |
| `id` | integer or string | yes | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding) |
| `type` | string | yes | The type of the template. Accepted values are: `dockerfiles`, `gitignores`, `gitlab_ci_ymls`, `licenses`, `issues`, `merge_requests` |
| `id` | integer or string | **{check-circle}** Yes | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding). |
| `type` | string | **{check-circle}** Yes | The type of the template. Accepted values are: `dockerfiles`, `gitignores`, `gitlab_ci_ymls`, `licenses`, `issues`, or `merge_requests`. |
Example response (licenses):
@ -96,12 +96,12 @@ GET /projects/:id/templates/:type/:name
| Attribute | Type | Required | Description |
| ---------- | ------ | -------- | ----------- |
| `id` | integer or string | yes | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding) |
| `type` | string | yes| The type of the template. One of: `dockerfiles`, `gitignores`, `gitlab_ci_ymls`, `licenses`, `issues`, or `merge_requests`. |
| `name` | string | yes | The key of the template, as obtained from the collection endpoint |
| `source_template_project_id` | integer | no | The project ID where a given template is being stored. This is useful when multiple templates from different projects have the same name. If multiple templates have the same name, the match from `closest ancestor` is returned if `source_template_project_id` is not specified |
| `project` | string | no | The project name to use when expanding placeholders in the template. Only affects licenses |
| `fullname` | string | no | The full name of the copyright holder to use when expanding placeholders in the template. Only affects licenses |
| `id` | integer or string | **{check-circle}** Yes | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding). |
| `name` | string | **{check-circle}** Yes | The key of the template, as obtained from the collection endpoint. |
| `type` | string | **{check-circle}** Yes | The type of the template. One of: `dockerfiles`, `gitignores`, `gitlab_ci_ymls`, `licenses`, `issues`, or `merge_requests`. |
| `fullname` | string | **{dotted-circle}** No | The full name of the copyright holder to use when expanding placeholders in the template. Affects only licenses. |
| `project` | string | **{dotted-circle}** No | The project name to use when expanding placeholders in the template. Affects only licenses. |
| `source_template_project_id` | integer | **{dotted-circle}** No | The project ID where a given template is being stored. Helpful when multiple templates from different projects have the same name. If multiple templates have the same name, the match from `closest ancestor` is returned if `source_template_project_id` is not specified, |
Example response (Dockerfile):

View File

@ -10,7 +10,7 @@ All methods require administrator authorization.
You can configure the URL endpoint of the system hooks from the GitLab user interface:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. Select **System Hooks** (`/admin/hooks`).
Read more about [system hooks](../administration/system_hooks.md).

View File

@ -471,7 +471,7 @@ and should only be disabled in an environment where all users with Developer rol
To use the same cache for all branches:
1. On the top bar, select **Menu > Projects** and find your project.
1. On the top bar, select **Main menu > Projects** and find your project.
1. On the left sidebar, select **Settings > CI/CD**.
1. Expand **General pipelines**.
1. Clear the **Use separate caches for protected branches** checkbox.
@ -568,7 +568,7 @@ The next time the pipeline runs, the cache is stored in a different location.
You can clear the cache in the GitLab UI:
1. On the top bar, select **Menu > Projects** and find your project.
1. On the top bar, select **Main menu > Projects** and find your project.
1. On the left sidebar, select **CI/CD > Pipelines**.
1. In the top right, select **Clear runner caches**.

View File

@ -24,7 +24,7 @@ snippets disabled. These features
To connect to an external repository:
1. On the top bar, select **Menu > Projects > Create new project**.
1. On the top bar, select **Main menu > Projects > Create new project**.
1. Select **Run CI/CD for external repository**.
1. Select **GitHub** or **Repository by URL**.
1. Complete the fields.

View File

@ -30,7 +30,7 @@ When you disable GitLab CI/CD:
To disable GitLab CI/CD in your project:
1. On the top bar, select **Menu > Projects** and find your project.
1. On the top bar, select **Main menu > Projects** and find your project.
1. On the left sidebar, select **Settings > General**.
1. Expand **Visibility, project features, permissions**.
1. In the **Repository** section, turn off **CI/CD**.
@ -40,7 +40,7 @@ To disable GitLab CI/CD in your project:
To enable GitLab CI/CD in your project:
1. On the top bar, select **Menu > Projects** and find your project.
1. On the top bar, select **Main menu > Projects** and find your project.
1. On the left sidebar, select **Settings > General**.
1. Expand **Visibility, project features, permissions**.
1. In the **Repository** section, turn on **CI/CD**.

View File

@ -137,7 +137,7 @@ Prerequisites:
To approve or reject a deployment to a protected environment using the UI:
1. On the top bar, select **Menu > Projects** and find your project.
1. On the top bar, select **Main menu > Projects** and find your project.
1. On the left sidebar, select **Deployments > Environments**.
1. Select the environment's name.
1. In the deployment's row, select **Approval options** (**{thumb-up}**).
@ -169,7 +169,7 @@ curl --data "status=approved&comment=Looks good to me" \
### Using the UI
1. On the top bar, select **Menu > Projects** and find your project.
1. On the top bar, select **Main menu > Projects** and find your project.
1. On the left sidebar, select **Deployments > Environments**.
1. Select the environment being deployed to.
1. Look for the `blocked` label.

View File

@ -21,7 +21,7 @@ diagnose if there is a block at a particular point, or if there's
a more systemic problem you need to investigate.
You can access the dashboard on the top bar by selecting
**Menu > Environments**.
**Main menu > Environments**.
![Environments Dashboard with projects](img/environments_dashboard_v12_5.png)

View File

@ -24,7 +24,7 @@ configuration added with the [`includes` keyword](yaml/index.md#include).
To check CI/CD configuration with the CI lint tool:
1. On the top bar, select **Menu > Projects** and find your project.
1. On the top bar, select **Main menu > Projects** and find your project.
1. On the left sidebar, select **CI/CD > Pipelines**.
1. In the top right, select **CI lint**.
1. Paste a copy of the CI/CD configuration you want to check into the text box.
@ -45,7 +45,7 @@ Prerequisites:
To simulate a pipeline:
1. On the top bar, select **Menu > Projects** and find your project.
1. On the top bar, select **Main menu > Projects** and find your project.
1. On the left sidebar, select **CI/CD > Pipelines**.
1. In the top right, select **CI lint**.
1. Paste a copy of the CI/CD configuration you want to check into the text box.

View File

@ -42,7 +42,7 @@ run only the jobs that match the type of contribution. If your contribution cont
**only** documentation changes, then only documentation-related jobs run, and
the pipeline completes much faster than a code contribution.
If you are submitting documentation-only changes to Omnibus or Charts,
If you are submitting documentation-only changes to Omnibus, Charts, or Operator,
the fast pipeline is not determined automatically. Instead, create branches for
docs-only merge requests using the following guide:

View File

@ -8,6 +8,8 @@ info: "See the Technical Writers assigned to Development Guidelines: https://abo
# Internal users
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/97584) in GitLab 15.4, bots are indicated with a badge in user listings.
GitLab uses internal users (sometimes referred to as "bots") to perform
actions or functions that cannot be attributed to a regular user.

View File

@ -248,7 +248,7 @@ in this section whenever you need to update GitLab.
To determine the version of GitLab you're currently running:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Overview > Dashboard**.
1. Find the version under the **Components** table.

View File

@ -16,7 +16,7 @@ reports in the Admin Area.
To receive notifications of new abuse reports by email:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Settings > Reporting**.
1. Expand the **Abuse reports** section.
1. Provide an email address and select **Save changes**.
@ -33,7 +33,7 @@ To find out more about reporting abuse, see
To access abuse reports:
1. On the top bar, select **Menu > Admin**.
1. On the top bar, select **Main menu > Admin**.
1. On the left sidebar, select **Abuse Reports**.
There are 3 ways to resolve an abuse report, with a button for each method:

View File

@ -32,7 +32,7 @@ View pipeline duration history:
To view CI/CD analytics:
1. On the top bar, select **Menu > Projects** and find your project.
1. On the top bar, select **Main menu > Projects** and find your project.
1. On the left sidebar, select **Analytics > CI/CD Analytics**.
## View deployment frequency chart **(ULTIMATE)**
@ -50,7 +50,7 @@ The deployment frequency chart is available for groups and projects.
To view the deployment frequency chart:
1. On the top bar, select **Menu > Projects** and find your project.
1. On the top bar, select **Main menu > Projects** and find your project.
1. On the left sidebar, select **Analytics > CI/CD Analytics**.
1. Select the **Deployment frequency** tab.
@ -72,7 +72,7 @@ merge requests to be deployed to a production environment. This chart is availab
To view the lead time for changes chart:
1. On the top bar, select **Menu > Projects** and find your project.
1. On the top bar, select **Main menu > Projects** and find your project.
1. On the left sidebar, select **Analytics > CI/CD Analytics**.
1. Select the **Lead time** tab.
@ -88,7 +88,7 @@ Time to restore service is one of the four [DORA metrics](index.md#devops-resear
To view the time to restore service chart:
1. On the top bar, select **Menu > Projects** and find your project.
1. On the top bar, select **Main menu > Projects** and find your project.
1. On the left sidebar, select **Analytics > CI/CD Analytics**.
1. Select the **Time to restore service** tab.
@ -104,6 +104,6 @@ Change failure rate is one of the four [DORA metrics](index.md#devops-research-a
To view the change failure rate chart:
1. On the top bar, select **Menu > Projects** and find your project.
1. On the top bar, select **Main menu > Projects** and find your project.
1. On the left sidebar, select **Analytics > CI/CD Analytics**.
1. Select the **Change failure rate** tab.

View File

@ -32,6 +32,6 @@ Prerequisite:
To view code review analytics:
1. On the top bar, select **Menu > Projects** and find your project.
1. On the top bar, select **Main menu > Projects** and find your project.
1. On the left sidebar, select **Analytics > Code Review**.
1. Filter merge requests by milestone and label.

View File

@ -15,7 +15,7 @@ prior.
To access the chart:
1. On the top bar, select **Menu > Projects** and find your project.
1. On the top bar, select **Main menu > Projects** and find your project.
1. On the left sidebar, select **Analytics > Issue**.
Hover over each bar to see the total number of issues.

View File

@ -28,7 +28,7 @@ You must have at least the Reporter role to view merge request analytics.
To view merge request analytics:
1. On the top bar, select **Menu > Projects** and find your project.
1. On the top bar, select **Main menu > Projects** and find your project.
1. On the left sidebar, select **Analytics > Merge request**.
## View the number of merge requests in a date range
@ -38,7 +38,7 @@ To view merge request analytics:
To view the number of merge requests merged during a specific date range:
1. On the top bar, select **Menu > Projects** and find your project.
1. On the top bar, select **Main menu > Projects** and find your project.
1. On the left sidebar, select **Analytics > Merge request**.
1. Optional. Filter results:
1. Select the filter bar.
@ -63,6 +63,6 @@ created and when it's merged. Closed and un-merged merge requests are not includ
To view **Mean time to merge**:
1. On the top bar, select **Menu > Projects** and find your project.
1. On the top bar, select **Main menu > Projects** and find your project.
1. On the left sidebar, select **Analytics > Merge request**. The **Mean time to merge** number
is shown on the dashboard.

View File

@ -26,7 +26,7 @@ Prerequisite:
- You must have at least the Reporter role for the group.
1. On the top bar, select **Menu > Groups** and find your group.
1. On the top bar, select **Main menu > Groups** and find your group.
1. On the left sidebar, select **Analytics > Productivity**.
1. Optional. Filter results:
1. Select a project from the dropdown list.
@ -44,7 +44,7 @@ Use the following charts in productivity analytics to view the velocity of your
merge requests to merge after they were created.
- **Trendline**: number of merge requests that were merged in a specific time period.
1. On the top bar, select **Menu > Groups** and find your group.
1. On the top bar, select **Main menu > Groups** and find your group.
1. On the left sidebar, select **Analytics > Productivity**.
To filter time metrics:
@ -56,7 +56,7 @@ To filter time metrics:
To view commit statistics for your group:
1. On the top bar, select **Menu > Groups** and find your group.
1. On the top bar, select **Main menu > Groups** and find your group.
1. On the left sidebar, select **Analytics > Productivity**.
1. Under the **Trendline** scatterplot, view the commit statistics:
- The left histogram shows the number of hours between commits, comments, and merges.

View File

@ -30,7 +30,7 @@ Commits in a project's [wiki](../project/wiki/index.md#track-wiki-events) are no
To review repository analytics for a project:
1. On the top bar, select **Menu > Projects** and find your project.
1. On the top bar, select **Main menu > Projects** and find your project.
1. On the left sidebar, select **Analytics > Repository**.
## How repository analytics chart data is updated

View File

@ -32,7 +32,7 @@ Value stream analytics is also available for [groups](../group/value_stream_anal
To view value stream analytics for your project:
1. On the top bar, select **Menu > Projects** and find your project.
1. On the top bar, select **Main menu > Projects** and find your project.
1. On the left sidebar, select **Analytics > Value stream**.
1. To view metrics for a particular stage, select a stage below the **Filter results** text box.
1. Optional. Filter the results:
@ -61,7 +61,7 @@ Value stream analytics shows the median time spent by issues or merge requests i
To view the median time spent in each stage:
1. On the top bar, select **Menu > Projects** and find your project.
1. On the top bar, select **Main menu > Projects** and find your project.
1. On the left sidebar, select **Analytics > Value stream**.
1. Optional. Filter the results:
1. Select the **Filter results** text box.
@ -81,7 +81,7 @@ Value stream analytics shows the lead time and cycle time for issues in your pro
To view the lead time and cycle time for issues:
1. On the top bar, select **Menu > Projects** and find your project.
1. On the top bar, select **Main menu > Projects** and find your project.
1. On the left sidebar, select **Analytics > Value stream**.
1. Optional. Filter the results:
1. Select the **Filter results** text box.
@ -101,7 +101,7 @@ Lead time for changes is the median duration between when a merge request is mer
To view the lead time for changes for merge requests in your project:
1. On the top bar, select **Menu > Projects** and find your project.
1. On the top bar, select **Main menu > Projects** and find your project.
1. On the left sidebar, select **Analytics > Value stream**.
1. Optional. Filter the results:
1. Select the **Filter results** text box.
@ -132,7 +132,7 @@ If you have a GitLab Premium or Ultimate subscription:
To view deployment metrics for your project:
1. On the top bar, select **Menu > Projects** and find your project.
1. On the top bar, select **Main menu > Projects** and find your project.
1. On the left sidebar, select **Analytics > Value stream**.
1. Optional. Filter the results:
1. Select the **Filter results** text box.

View File

@ -62,7 +62,7 @@ Authorization configuration can take one or two minutes to propagate.
To authorize the agent to access the GitLab project where you keep Kubernetes manifests:
1. On the top bar, select **Menu > Projects** and find the project that contains the [agent configuration file](install/index.md#create-an-agent-configuration-file) (`config.yaml`).
1. On the top bar, select **Main menu > Projects** and find the project that contains the [agent configuration file](install/index.md#create-an-agent-configuration-file) (`config.yaml`).
1. Edit the `config.yaml` file. Under the `ci_access` keyword, add the `projects` attribute.
1. For the `id`, add the path:
@ -85,7 +85,7 @@ Choose the context to run `kubectl` commands from your CI/CD scripts.
To authorize the agent to access all of the GitLab projects in a group or subgroup:
1. On the top bar, select **Menu > Projects** and find the project that contains the [agent configuration file](install/index.md#create-an-agent-configuration-file) (`config.yaml`).
1. On the top bar, select **Main menu > Projects** and find the project that contains the [agent configuration file](install/index.md#create-an-agent-configuration-file) (`config.yaml`).
1. Edit the `config.yaml` file. Under the `ci_access` keyword, add the `groups` attribute.
1. For the `id`, add the path:

View File

@ -81,7 +81,7 @@ Prerequisites:
You must register an agent before you can install the agent in your cluster. To register an agent:
1. On the top bar, select **Menu > Projects** and find your project.
1. On the top bar, select **Main menu > Projects** and find your project.
If you have an [agent configuration file](#create-an-agent-configuration-file),
it must be in this project. Your cluster manifest files should also be in this project.
1. From the left sidebar, select **Infrastructure > Kubernetes clusters**.

View File

@ -60,7 +60,7 @@ Prerequisite:
To view vulnerability information in GitLab:
1. On the top bar, select **Menu > Projects** and find the project that contains the agent configuration file.
1. On the top bar, select **Main menu > Projects** and find the project that contains the agent configuration file.
1. On the left sidebar, select **Infrastructure > Kubernetes clusters**.
1. Select the **Agent** tab.
1. Select an agent to view the cluster vulnerabilities.

View File

@ -18,7 +18,7 @@ Prerequisite:
To view the list of agents:
1. On the top bar, select **Menu > Projects** and find the project that contains your agent configuration file.
1. On the top bar, select **Main menu > Projects** and find the project that contains your agent configuration file.
1. On the left sidebar, select **Infrastructure > Kubernetes clusters**.
1. Select **Agent** tab to view clusters connected to GitLab through the agent.
@ -37,7 +37,7 @@ The activity logs help you to identify problems and get the information
you need for troubleshooting. You can see events from a week before the
current date. To view an agent's activity:
1. On the top bar, select **Menu > Projects** and find the project that contains your agent configuration file.
1. On the top bar, select **Main menu > Projects** and find the project that contains your agent configuration file.
1. On the left sidebar, select **Infrastructure > Kubernetes clusters**.
1. Select the agent you want to see activity for.
@ -94,7 +94,7 @@ For more information about debugging, see [troubleshooting documentation](troubl
To reset the agent token without downtime:
1. Create a new token:
1. On the top bar, select **Menu > Projects** and find your project.
1. On the top bar, select **Main menu > Projects** and find your project.
1. On the left sidebar, select **Infrastructure > Kubernetes clusters**.
1. Select the agent you want to create a token for.
1. On the **Access tokens** tab, select **Create token**.
@ -116,7 +116,7 @@ clean up those resources manually.
To remove an agent from the UI:
1. On the top bar, select **Menu > Projects** and find the project that contains the agent configuration file.
1. On the top bar, select **Main menu > Projects** and find the project that contains the agent configuration file.
1. From the left sidebar, select **Infrastructure > Kubernetes clusters**.
1. In the table, in the row for your agent, in the **Options** column, select the vertical ellipsis (**{ellipsis_v}**).
1. Select **Delete agent**.

View File

@ -61,7 +61,7 @@ To associate a cluster management project with your cluster:
**Infrastructure > Kubernetes clusters** page.
- [Group-level cluster](../group/clusters/index.md), go to your group's **Kubernetes**
page.
- [Instance-level cluster](../instance/clusters/index.md), on the top bar, select **Menu > Admin > Kubernetes**.
- [Instance-level cluster](../instance/clusters/index.md), on the top bar, select **Main menu > Admin > Kubernetes**.
1. Expand **Advanced settings**.
1. From the **Cluster management project** dropdown, select the cluster management project
you created in the previous step.

View File

@ -45,7 +45,7 @@ If you have already configured the agent and connected a cluster with GitLab:
To create a project from the cluster management project template:
1. On the top bar, select **Menu > Projects > Create new project**.
1. On the top bar, select **Main menu > Projects > Create new project**.
1. Select **Create from template**.
1. From the list of templates, next to **GitLab Cluster Management**, select **Use template**.
1. Enter the project details.

View File

@ -31,7 +31,7 @@ Prerequisites:
To view the compliance report:
1. On the top bar, select **Menu > Groups** and find your group.
1. On the top bar, select **Main menu > Groups** and find your group.
1. On the left sidebar, select **Security & Compliance > Compliance report**.
### Severity levels scale
@ -105,7 +105,7 @@ Depending on the merge strategy, the merge commit SHA can be a merge commit, squ
To generate the Chain of Custody report:
1. On the top bar, select **Menu > Groups** and find your group.
1. On the top bar, select **Main menu > Groups** and find your group.
1. On the left sidebar, select **Security & Compliance > Compliance report**.
1. Select **List of all merge commits**.
@ -122,7 +122,7 @@ Authenticated group owners can generate a commit-specific Chain of Custody repor
- Using the GitLab UI:
1. On the top bar, select **Menu > Groups** and find your group.
1. On the top bar, select **Main menu > Groups** and find your group.
1. On the left sidebar, select **Security & Compliance > Compliance report**.
1. At the top of the compliance report, to the right of **List of all merge commits**, select the down arrow (**{chevron-lg-down}**).
1. Enter the merge commit SHA, and then select **Export commit custody report**.

View File

@ -765,7 +765,7 @@ license.
You can enable `License-Check` one of two ways:
1. On the top bar, select **Menu > Projects** and find your project.
1. On the top bar, select **Main menu > Projects** and find your project.
1. On the left sidebar, select **Settings > General**.
1. Expand **Merge request approvals**.
1. Select **Enable** or **Edit**.

View File

@ -1,6 +1,6 @@
---
stage: Plan
group: Product Planning
group: Certify
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---

View File

@ -19,7 +19,7 @@ group.
To view Contribution Analytics:
1. On the top bar, select **Menu > Groups** and find your group.
1. On the top bar, select **Main menu > Groups** and find your group.
1. On the left sidebar, select **Analytics > Contribution**.
## Using Contribution Analytics

View File

@ -15,7 +15,7 @@ labels.
To view an epic board:
1. On the top bar, select **Menu > Groups** and find your group.
1. On the top bar, select **Main menu > Groups** and find your group.
1. On the left sidebar, select **Epics > Boards**.
![GitLab epic board - Premium](img/epic_board_v14_1.png)
@ -28,7 +28,7 @@ Prerequisites:
To create a new epic board:
1. On the top bar, select **Menu > Groups** and find your group.
1. On the top bar, select **Main menu > Groups** and find your group.
1. On the left sidebar, select **Epics > Boards**.
1. In the upper left corner, select the dropdown with the current board name.
1. Select **Create new board**.
@ -77,7 +77,7 @@ Prerequisites:
To create a new list:
1. On the top bar, select **Menu > Groups** and find your group.
1. On the top bar, select **Main menu > Groups** and find your group.
1. On the left sidebar, select **Epics > Boards**.
1. In the upper-right corner, select **Create list**.
1. In the **New list** column expand the **Select a label** dropdown and select the label to use as

View File

@ -183,7 +183,7 @@ path. This causes a `404 Group Not Found` error. To solve this, the source group
- The GitLab UI:
1. On the top bar, select **Menu > Groups** and find your group.
1. On the top bar, select **Main menu > Groups** and find your group.
1. On the left sidebar, select **Settings > General**.
1. Expand **Advanced**.
1. Under **Change group URL**, change the group URL to include non-numeric characters.

View File

@ -19,7 +19,7 @@ requests to be merged, and much more.
To access your group's Insights:
1. On the top bar, select **Menu > Groups** and find your group.
1. On the top bar, select **Main menu > Groups** and find your group.
1. On the left sidebar, select **Analytics > Insights**.
## Configure your Insights
@ -29,7 +29,7 @@ If you want to customize it:
1. Create a new file [`.gitlab/insights.yml`](../../project/insights/index.md)
in a project that belongs to your group.
1. On the top bar, select **Menu > Groups** and find your group.
1. On the top bar, select **Main menu > Groups** and find your group.
1. On the left sidebar, select **Settings > General**.
1. Expand **Insights**.
1. Select the project that contains your `.gitlab/insights.yml` configuration file.

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