Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
c014b6b4e5
commit
35f525b5e4
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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),
|
||||
);
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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),
|
||||
}));
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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?
|
||||
|
|
|
@ -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|
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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?
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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;" }
|
||||
|
||||
|
|
|
@ -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;" }
|
||||
|
||||
|
@ -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;" }
|
||||
|
||||
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -203,6 +203,8 @@
|
|||
- 1
|
||||
- - google_cloud_create_cloudsql_instance
|
||||
- 1
|
||||
- - google_cloud_fetch_google_ip_list
|
||||
- 1
|
||||
- - group_destroy
|
||||
- 1
|
||||
- - group_export
|
||||
|
|
|
@ -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
|
|
@ -0,0 +1 @@
|
|||
59ea43b60e0fb009823d82e99494a7fcb31eeaddc0a6ccbf43009977cdd32526
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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**.
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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**
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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`
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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).
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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/`,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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**.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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**.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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)**.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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**.
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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:
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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. |
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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):
|
||||
|
||||
|
|
|
@ -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).
|
||||
|
|
|
@ -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**.
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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**.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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:
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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:
|
||||
|
||||
|
|
|
@ -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**.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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**.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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**.
|
||||
|
|
|
@ -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**.
|
||||
|
|
|
@ -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
|
||||
---
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
Loading…
Reference in New Issue