Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
b4ddc24045
commit
1741eab29c
2
Gemfile
2
Gemfile
|
|
@ -119,7 +119,7 @@ gem 'fog-aws', '~> 3.7'
|
|||
# Locked until fog-google resolves https://github.com/fog/fog-google/issues/421.
|
||||
# Also see config/initializers/fog_core_patch.rb.
|
||||
gem 'fog-core', '= 2.1.0'
|
||||
gem 'fog-google', '~> 1.11'
|
||||
gem 'fog-google', '~> 1.12'
|
||||
gem 'fog-local', '~> 0.6'
|
||||
gem 'fog-openstack', '~> 1.0'
|
||||
gem 'fog-rackspace', '~> 0.1.1'
|
||||
|
|
|
|||
17
Gemfile.lock
17
Gemfile.lock
|
|
@ -222,7 +222,7 @@ GEM
|
|||
debugger-ruby_core_source (1.3.8)
|
||||
deckar01-task_list (2.3.1)
|
||||
html-pipeline
|
||||
declarative (0.0.10)
|
||||
declarative (0.0.20)
|
||||
declarative-option (0.1.0)
|
||||
default_value_for (3.3.0)
|
||||
activerecord (>= 3.2.0, < 6.1)
|
||||
|
|
@ -373,11 +373,11 @@ GEM
|
|||
excon (~> 0.58)
|
||||
formatador (~> 0.2)
|
||||
mime-types
|
||||
fog-google (1.11.0)
|
||||
fog-google (1.12.0)
|
||||
fog-core (<= 2.1.0)
|
||||
fog-json (~> 1.2)
|
||||
fog-xml (~> 0.1.0)
|
||||
google-api-client (>= 0.32, < 0.34)
|
||||
google-api-client (>= 0.44.2, < 0.51)
|
||||
google-cloud-env (~> 1.2)
|
||||
fog-json (1.2.0)
|
||||
fog-core
|
||||
|
|
@ -473,20 +473,21 @@ GEM
|
|||
actionpack (>= 3.0)
|
||||
multi_json
|
||||
request_store (>= 1.0)
|
||||
google-api-client (0.33.2)
|
||||
google-api-client (0.50.0)
|
||||
addressable (~> 2.5, >= 2.5.1)
|
||||
googleauth (~> 0.9)
|
||||
httpclient (>= 2.8.1, < 3.0)
|
||||
mini_mime (~> 1.0)
|
||||
representable (~> 3.0)
|
||||
retriable (>= 2.0, < 4.0)
|
||||
rexml
|
||||
signet (~> 0.12)
|
||||
google-cloud-env (1.4.0)
|
||||
faraday (>= 0.17.3, < 2.0)
|
||||
google-protobuf (3.12.4)
|
||||
googleapis-common-protos-types (1.0.5)
|
||||
google-protobuf (~> 3.11)
|
||||
googleauth (0.12.0)
|
||||
googleauth (0.14.0)
|
||||
faraday (>= 0.17.3, < 2.0)
|
||||
jwt (>= 1.4, < 3.0)
|
||||
memoist (~> 0.16)
|
||||
|
|
@ -696,7 +697,7 @@ GEM
|
|||
marginalia (1.9.0)
|
||||
actionpack (>= 2.3)
|
||||
activerecord (>= 2.3)
|
||||
memoist (0.16.0)
|
||||
memoist (0.16.2)
|
||||
memoizable (0.4.2)
|
||||
thread_safe (~> 0.3, >= 0.3.1)
|
||||
memory_profiler (0.9.14)
|
||||
|
|
@ -837,7 +838,7 @@ GEM
|
|||
org-ruby (0.9.12)
|
||||
rubypants (~> 0.2)
|
||||
orm_adapter (0.5.0)
|
||||
os (1.0.0)
|
||||
os (1.1.1)
|
||||
parallel (1.19.2)
|
||||
parser (2.7.2.0)
|
||||
ast (~> 2.4.1)
|
||||
|
|
@ -1338,7 +1339,7 @@ DEPENDENCIES
|
|||
fog-aliyun (~> 0.3)
|
||||
fog-aws (~> 3.7)
|
||||
fog-core (= 2.1.0)
|
||||
fog-google (~> 1.11)
|
||||
fog-google (~> 1.12)
|
||||
fog-local (~> 0.6)
|
||||
fog-openstack (~> 1.0)
|
||||
fog-rackspace (~> 0.1.1)
|
||||
|
|
|
|||
|
|
@ -2,15 +2,12 @@
|
|||
// This component is being replaced in favor of './board_column_new.vue' for GraphQL boards
|
||||
import Sortable from 'sortablejs';
|
||||
import BoardListHeader from 'ee_else_ce/boards/components/board_list_header.vue';
|
||||
import EmptyComponent from '~/vue_shared/components/empty_component';
|
||||
import BoardList from './board_list.vue';
|
||||
import boardsStore from '../stores/boards_store';
|
||||
import { getBoardSortableDefaultOptions, sortableEnd } from '../mixins/sortable_default_options';
|
||||
import { ListType } from '../constants';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
BoardPromotionState: EmptyComponent,
|
||||
BoardListHeader,
|
||||
BoardList,
|
||||
},
|
||||
|
|
@ -42,9 +39,6 @@ export default {
|
|||
};
|
||||
},
|
||||
computed: {
|
||||
showBoardListAndBoardInfo() {
|
||||
return this.list.type !== ListType.promotion;
|
||||
},
|
||||
listIssues() {
|
||||
return this.list.issues;
|
||||
},
|
||||
|
|
@ -105,16 +99,7 @@ export default {
|
|||
class="board-inner gl-display-flex gl-flex-direction-column gl-relative gl-h-full gl-rounded-base"
|
||||
>
|
||||
<board-list-header :can-admin-list="canAdminList" :list="list" :disabled="disabled" />
|
||||
<board-list
|
||||
v-if="showBoardListAndBoardInfo"
|
||||
ref="board-list"
|
||||
:disabled="disabled"
|
||||
:issues="listIssues"
|
||||
:list="list"
|
||||
/>
|
||||
|
||||
<!-- Will be only available in EE -->
|
||||
<board-promotion-state v-if="list.id === 'promotion'" />
|
||||
<board-list ref="board-list" :disabled="disabled" :issues="listIssues" :list="list" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
|
|
|||
|
|
@ -1,13 +1,11 @@
|
|||
<script>
|
||||
import { mapGetters, mapActions, mapState } from 'vuex';
|
||||
import BoardListHeader from 'ee_else_ce/boards/components/board_list_header_new.vue';
|
||||
import BoardPromotionState from 'ee_else_ce/boards/components/board_promotion_state';
|
||||
import BoardList from './board_list_new.vue';
|
||||
import { ListType } from '../constants';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
BoardPromotionState,
|
||||
BoardListHeader,
|
||||
BoardList,
|
||||
},
|
||||
|
|
@ -35,9 +33,6 @@ export default {
|
|||
computed: {
|
||||
...mapState(['filterParams']),
|
||||
...mapGetters(['getIssuesByList']),
|
||||
showBoardListAndBoardInfo() {
|
||||
return this.list.type !== ListType.promotion;
|
||||
},
|
||||
listIssues() {
|
||||
return this.getIssuesByList(this.list.id);
|
||||
},
|
||||
|
|
@ -80,16 +75,12 @@ export default {
|
|||
>
|
||||
<board-list-header :can-admin-list="canAdminList" :list="list" :disabled="disabled" />
|
||||
<board-list
|
||||
v-if="showBoardListAndBoardInfo"
|
||||
ref="board-list"
|
||||
:disabled="disabled"
|
||||
:issues="listIssues"
|
||||
:list="list"
|
||||
:can-admin-list="canAdminList"
|
||||
/>
|
||||
|
||||
<!-- Will be only available in EE -->
|
||||
<board-promotion-state v-if="list.id === 'promotion'" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ import Draggable from 'vuedraggable';
|
|||
import { mapState, mapGetters, mapActions } from 'vuex';
|
||||
import { sortBy } from 'lodash';
|
||||
import { GlAlert } from '@gitlab/ui';
|
||||
import BoardColumn from 'ee_else_ce/boards/components/board_column.vue';
|
||||
import BoardColumn from './board_column.vue';
|
||||
import BoardColumnNew from './board_column_new.vue';
|
||||
import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
|
||||
import defaultSortableConfig from '~/sortable/sortable_config';
|
||||
|
|
@ -59,13 +59,8 @@ export default {
|
|||
return this.canDragColumns ? options : {};
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
if (this.glFeatures.graphqlBoardLists) {
|
||||
this.showPromotionList();
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
...mapActions(['moveList', 'showPromotionList']),
|
||||
...mapActions(['moveList']),
|
||||
handleDragOnStart() {
|
||||
sortableStart();
|
||||
},
|
||||
|
|
|
|||
|
|
@ -73,10 +73,7 @@ export default {
|
|||
},
|
||||
showListHeaderButton() {
|
||||
return (
|
||||
!this.disabled &&
|
||||
this.listType !== ListType.closed &&
|
||||
this.listType !== ListType.blank &&
|
||||
this.listType !== ListType.promotion
|
||||
!this.disabled && this.listType !== ListType.closed && this.listType !== ListType.blank
|
||||
);
|
||||
},
|
||||
showMilestoneListDetails() {
|
||||
|
|
@ -110,7 +107,7 @@ export default {
|
|||
);
|
||||
},
|
||||
showBoardListAndBoardInfo() {
|
||||
return this.listType !== ListType.blank && this.listType !== ListType.promotion;
|
||||
return this.listType !== ListType.blank;
|
||||
},
|
||||
uniqueKey() {
|
||||
// eslint-disable-next-line @gitlab/require-i18n-strings
|
||||
|
|
|
|||
|
|
@ -76,10 +76,7 @@ export default {
|
|||
},
|
||||
showListHeaderButton() {
|
||||
return (
|
||||
!this.disabled &&
|
||||
this.listType !== ListType.closed &&
|
||||
this.listType !== ListType.blank &&
|
||||
this.listType !== ListType.promotion
|
||||
!this.disabled && this.listType !== ListType.closed && this.listType !== ListType.blank
|
||||
);
|
||||
},
|
||||
showMilestoneListDetails() {
|
||||
|
|
@ -115,7 +112,7 @@ export default {
|
|||
);
|
||||
},
|
||||
showBoardListAndBoardInfo() {
|
||||
return this.listType !== ListType.blank && this.listType !== ListType.promotion;
|
||||
return this.listType !== ListType.blank;
|
||||
},
|
||||
uniqueKey() {
|
||||
// eslint-disable-next-line @gitlab/require-i18n-strings
|
||||
|
|
|
|||
|
|
@ -1 +0,0 @@
|
|||
export default {};
|
||||
|
|
@ -9,7 +9,6 @@ export const ListType = {
|
|||
backlog: 'backlog',
|
||||
closed: 'closed',
|
||||
label: 'label',
|
||||
promotion: 'promotion',
|
||||
blank: 'blank',
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
export const setPromotionState = () => {};
|
||||
|
||||
export const setWeightFetchingState = () => {};
|
||||
export const setEpicFetchingState = () => {};
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ import boardConfigToggle from 'ee_else_ce/boards/config_toggle';
|
|||
import toggleLabels from 'ee_else_ce/boards/toggle_labels';
|
||||
import toggleEpicsSwimlanes from 'ee_else_ce/boards/toggle_epics_swimlanes';
|
||||
import {
|
||||
setPromotionState,
|
||||
setWeightFetchingState,
|
||||
setEpicFetchingState,
|
||||
getMilestoneTitle,
|
||||
|
|
@ -131,7 +130,6 @@ export default () => {
|
|||
...endpoints,
|
||||
boardType: this.parent,
|
||||
disabled: this.disabled,
|
||||
showPromotion: parseBoolean($boardApp.getAttribute('data-show-promotion')),
|
||||
});
|
||||
boardsStore.setEndpoints(endpoints);
|
||||
boardsStore.rootPath = this.boardsEndpoint;
|
||||
|
|
@ -184,7 +182,6 @@ export default () => {
|
|||
.then(lists => {
|
||||
lists.forEach(list => boardsStore.addList(list));
|
||||
boardsStore.addBlankState();
|
||||
setPromotionState(boardsStore);
|
||||
this.loading = false;
|
||||
})
|
||||
.catch(() => {
|
||||
|
|
|
|||
|
|
@ -126,8 +126,6 @@ export default {
|
|||
);
|
||||
},
|
||||
|
||||
showPromotionList: () => {},
|
||||
|
||||
fetchLabels: ({ state, commit }, searchTerm) => {
|
||||
const { endpoints, boardType } = state;
|
||||
const { fullPath } = endpoints;
|
||||
|
|
|
|||
|
|
@ -172,13 +172,6 @@
|
|||
}
|
||||
}
|
||||
|
||||
.board-promotion-state {
|
||||
background-color: var(--white, $white);
|
||||
flex: 1;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
.board-list-component {
|
||||
min-height: 0; // firefox fix
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,8 +5,6 @@ module Ci
|
|||
class PipelinesForMergeRequestFinder
|
||||
include Gitlab::Utils::StrongMemoize
|
||||
|
||||
EVENT = 'merge_request_event'
|
||||
|
||||
def initialize(merge_request, current_user)
|
||||
@merge_request = merge_request
|
||||
@current_user = current_user
|
||||
|
|
@ -36,7 +34,11 @@ module Ci
|
|||
|
||||
pipelines =
|
||||
if merge_request.persisted?
|
||||
pipelines_using_cte
|
||||
if Feature.enabled?(:ci_pipelines_for_merge_request_finder_new_cte, target_project)
|
||||
pipelines_using_cte
|
||||
else
|
||||
pipelines_using_legacy_cte
|
||||
end
|
||||
else
|
||||
triggered_for_branch.for_sha(commit_shas)
|
||||
end
|
||||
|
|
@ -47,7 +49,7 @@ module Ci
|
|||
|
||||
private
|
||||
|
||||
def pipelines_using_cte
|
||||
def pipelines_using_legacy_cte
|
||||
cte = Gitlab::SQL::CTE.new(:shas, merge_request.all_commits.select(:sha))
|
||||
|
||||
source_sha_join = cte.table[:sha].eq(Ci::Pipeline.arel_table[:source_sha])
|
||||
|
|
@ -59,6 +61,16 @@ module Ci
|
|||
.from_union([merged_result_pipelines, detached_merge_request_pipelines, pipelines_for_branch])
|
||||
end
|
||||
|
||||
def pipelines_using_cte
|
||||
cte = Gitlab::SQL::CTE.new(:shas, merge_request.all_commits.select(:sha))
|
||||
|
||||
pipelines_for_merge_requests = triggered_by_merge_request
|
||||
pipelines_for_branch = filter_by_sha(triggered_for_branch, cte)
|
||||
|
||||
Ci::Pipeline.with(cte.to_arel) # rubocop: disable CodeReuse/ActiveRecord
|
||||
.from_union([pipelines_for_merge_requests, pipelines_for_branch])
|
||||
end
|
||||
|
||||
def filter_by_sha(pipelines, cte)
|
||||
hex = Arel::Nodes::SqlLiteral.new("'hex'")
|
||||
string_sha = Arel::Nodes::NamedFunction.new('encode', [cte.table[:sha], hex])
|
||||
|
|
@ -84,14 +96,7 @@ module Ci
|
|||
end
|
||||
|
||||
def triggered_for_branch
|
||||
source_project.ci_pipelines
|
||||
.where(source: branch_pipeline_sources, ref: source_branch, tag: false) # rubocop: disable CodeReuse/ActiveRecord
|
||||
end
|
||||
|
||||
def branch_pipeline_sources
|
||||
strong_memoize(:branch_pipeline_sources) do
|
||||
Ci::Pipeline.sources.reject { |source| source == EVENT }.values
|
||||
end
|
||||
source_project.all_pipelines.ci_branch_sources.for_branch(source_branch)
|
||||
end
|
||||
|
||||
def sort(pipelines)
|
||||
|
|
|
|||
|
|
@ -2,9 +2,7 @@
|
|||
|
||||
module Mutations
|
||||
module ContainerRepositories
|
||||
class Destroy < Mutations::BaseMutation
|
||||
include ::Mutations::PackageEventable
|
||||
|
||||
class Destroy < ::Mutations::ContainerRepositories::DestroyBase
|
||||
graphql_name 'DestroyContainerRepository'
|
||||
|
||||
authorize :destroy_container_image
|
||||
|
|
@ -31,15 +29,6 @@ module Mutations
|
|||
errors: []
|
||||
}
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def find_object(id:)
|
||||
# TODO: remove this line when the compatibility layer is removed
|
||||
# See: https://gitlab.com/gitlab-org/gitlab/-/issues/257883
|
||||
id = ::Types::GlobalIDType[::ContainerRepository].coerce_isolated_input(id)
|
||||
GitlabSchema.find_by_gid(id)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Mutations
|
||||
module ContainerRepositories
|
||||
class DestroyBase < Mutations::BaseMutation
|
||||
include ::Mutations::PackageEventable
|
||||
|
||||
private
|
||||
|
||||
def find_object(id:)
|
||||
# TODO: remove this line when the compatibility layer is removed
|
||||
# See: https://gitlab.com/gitlab-org/gitlab/-/issues/257883
|
||||
id = ::Types::GlobalIDType[::ContainerRepository].coerce_isolated_input(id)
|
||||
GitlabSchema.find_by_gid(id)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Mutations
|
||||
module ContainerRepositories
|
||||
class DestroyTags < ::Mutations::ContainerRepositories::DestroyBase
|
||||
LIMIT = 20.freeze
|
||||
|
||||
TOO_MANY_TAGS_ERROR_MESSAGE = "Number of tags is greater than #{LIMIT}"
|
||||
|
||||
graphql_name 'DestroyContainerRepositoryTags'
|
||||
|
||||
authorize :destroy_container_image
|
||||
|
||||
argument :id,
|
||||
::Types::GlobalIDType[::ContainerRepository],
|
||||
required: true,
|
||||
description: 'ID of the container repository.'
|
||||
|
||||
argument :tag_names,
|
||||
[GraphQL::STRING_TYPE],
|
||||
required: true,
|
||||
description: "Container repository tag(s) to delete. Total number can't be greater than #{LIMIT}",
|
||||
prepare: ->(tag_names, _) do
|
||||
raise Gitlab::Graphql::Errors::ArgumentError, TOO_MANY_TAGS_ERROR_MESSAGE if tag_names.size > LIMIT
|
||||
|
||||
tag_names
|
||||
end
|
||||
|
||||
field :deleted_tag_names,
|
||||
[GraphQL::STRING_TYPE],
|
||||
description: 'Deleted container repository tags',
|
||||
null: false
|
||||
|
||||
def resolve(id:, tag_names:)
|
||||
container_repository = authorized_find!(id: id)
|
||||
|
||||
result = ::Projects::ContainerRepository::DeleteTagsService
|
||||
.new(container_repository.project, current_user, tags: tag_names)
|
||||
.execute(container_repository)
|
||||
|
||||
track_event(:delete_tag_bulk, :tag) if result[:status] == :success
|
||||
|
||||
{
|
||||
errors: Array(result[:message]),
|
||||
deleted_tag_names: result[:deleted] || []
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Resolvers
|
||||
class UserDiscussionsCountResolver < BaseResolver
|
||||
include Gitlab::Graphql::Authorize::AuthorizeResource
|
||||
|
||||
type GraphQL::INT_TYPE, null: true
|
||||
|
||||
def resolve
|
||||
authorize!(object)
|
||||
|
||||
BatchLoader::GraphQL.for(object.id).batch(key: :issue_user_discussions_count) do |ids, loader, args|
|
||||
counts = Note.count_for_collection(ids, 'Issue', 'COUNT(DISTINCT discussion_id) as count').index_by(&:noteable_id)
|
||||
|
||||
ids.each do |id|
|
||||
loader.call(id, counts[id]&.count || 0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def authorized_resource?(object)
|
||||
context[:current_user].present? && Ability.allowed?(context[:current_user], :read_issue, object)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Resolvers
|
||||
class UserNotesCountResolver < BaseResolver
|
||||
include Gitlab::Graphql::Authorize::AuthorizeResource
|
||||
|
||||
type GraphQL::INT_TYPE, null: true
|
||||
|
||||
def resolve
|
||||
authorize!(object)
|
||||
|
||||
BatchLoader::GraphQL.for(object.id).batch(key: :issue_user_notes_count) do |ids, loader, args|
|
||||
counts = Note.count_for_collection(ids, 'Issue').index_by(&:noteable_id)
|
||||
|
||||
ids.each do |id|
|
||||
loader.call(id, counts[id]&.count || 0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def authorized_resource?(object)
|
||||
context[:current_user].present? && Ability.allowed?(context[:current_user], :read_issue, object)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -61,9 +61,11 @@ module Types
|
|||
field :downvotes, GraphQL::INT_TYPE, null: false,
|
||||
description: 'Number of downvotes the issue has received'
|
||||
field :user_notes_count, GraphQL::INT_TYPE, null: false,
|
||||
description: 'Number of user notes of the issue'
|
||||
description: 'Number of user notes of the issue',
|
||||
resolver: Resolvers::UserNotesCountResolver
|
||||
field :user_discussions_count, GraphQL::INT_TYPE, null: false,
|
||||
description: 'Number of user discussions in the issue'
|
||||
description: 'Number of user discussions in the issue',
|
||||
resolver: Resolvers::UserDiscussionsCountResolver
|
||||
field :web_path, GraphQL::STRING_TYPE, null: false, method: :issue_path,
|
||||
description: 'Web path of the issue'
|
||||
field :web_url, GraphQL::STRING_TYPE, null: false,
|
||||
|
|
@ -119,26 +121,6 @@ module Types
|
|||
field :moved_to, Types::IssueType, null: true,
|
||||
description: 'Updated Issue after it got moved to another project'
|
||||
|
||||
def user_notes_count
|
||||
BatchLoader::GraphQL.for(object.id).batch(key: :issue_user_notes_count) do |ids, loader, args|
|
||||
counts = Note.count_for_collection(ids, 'Issue').index_by(&:noteable_id)
|
||||
|
||||
ids.each do |id|
|
||||
loader.call(id, counts[id]&.count || 0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def user_discussions_count
|
||||
BatchLoader::GraphQL.for(object.id).batch(key: :issue_user_discussions_count) do |ids, loader, args|
|
||||
counts = Note.count_for_collection(ids, 'Issue', 'COUNT(DISTINCT discussion_id) as count').index_by(&:noteable_id)
|
||||
|
||||
ids.each do |id|
|
||||
loader.call(id, counts[id]&.count || 0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def author
|
||||
Gitlab::Graphql::Loaders::BatchModelLoader.new(User, object.author_id).find
|
||||
end
|
||||
|
|
|
|||
|
|
@ -87,6 +87,7 @@ module Types
|
|||
mount_mutation Mutations::DesignManagement::Move
|
||||
mount_mutation Mutations::ContainerExpirationPolicies::Update
|
||||
mount_mutation Mutations::ContainerRepositories::Destroy
|
||||
mount_mutation Mutations::ContainerRepositories::DestroyTags
|
||||
mount_mutation Mutations::Ci::PipelineCancel
|
||||
mount_mutation Mutations::Ci::PipelineDestroy
|
||||
mount_mutation Mutations::Ci::PipelineRetry
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ module Projects::AlertManagementHelper
|
|||
|
||||
def alert_management_enabled?(project)
|
||||
!!(
|
||||
project.alerts_service_activated? ||
|
||||
project.alert_management_alerts.any? ||
|
||||
project.prometheus_service_active? ||
|
||||
AlertManagement::HttpIntegrationsFinder.new(project, active: true).execute.any?
|
||||
)
|
||||
|
|
|
|||
|
|
@ -277,12 +277,14 @@ module Ci
|
|||
scope :internal, -> { where(source: internal_sources) }
|
||||
scope :no_child, -> { where.not(source: :parent_pipeline) }
|
||||
scope :ci_sources, -> { where(source: Enums::Ci::Pipeline.ci_sources.values) }
|
||||
scope :ci_branch_sources, -> { where(source: Enums::Ci::Pipeline.ci_branch_sources.values) }
|
||||
scope :ci_and_parent_sources, -> { where(source: Enums::Ci::Pipeline.ci_and_parent_sources.values) }
|
||||
scope :for_user, -> (user) { where(user: user) }
|
||||
scope :for_sha, -> (sha) { where(sha: sha) }
|
||||
scope :for_source_sha, -> (source_sha) { where(source_sha: source_sha) }
|
||||
scope :for_sha_or_source_sha, -> (sha) { for_sha(sha).or(for_source_sha(sha)) }
|
||||
scope :for_ref, -> (ref) { where(ref: ref) }
|
||||
scope :for_branch, -> (branch) { for_ref(branch).where(tag: false) }
|
||||
scope :for_id, -> (id) { where(id: id) }
|
||||
scope :for_iid, -> (iid) { where(iid: iid) }
|
||||
scope :for_project, -> (project) { where(project: project) }
|
||||
|
|
@ -310,9 +312,9 @@ module Ci
|
|||
# In general, please use `Ci::PipelinesForMergeRequestFinder` instead,
|
||||
# for checking permission of the actor.
|
||||
scope :triggered_by_merge_request, -> (merge_request) do
|
||||
ci_sources.where(source: :merge_request_event,
|
||||
merge_request: merge_request,
|
||||
project: [merge_request.source_project, merge_request.target_project])
|
||||
where(source: :merge_request_event,
|
||||
merge_request: merge_request,
|
||||
project: [merge_request.source_project, merge_request.target_project])
|
||||
end
|
||||
|
||||
# Returns the pipelines in descending order (= newest first), optionally
|
||||
|
|
|
|||
|
|
@ -54,6 +54,10 @@ module Enums
|
|||
sources.except(*dangling_sources.keys)
|
||||
end
|
||||
|
||||
def self.ci_branch_sources
|
||||
ci_sources.except(:merge_request_event)
|
||||
end
|
||||
|
||||
def self.ci_and_parent_sources
|
||||
ci_sources.merge(sources.slice(:parent_pipeline))
|
||||
end
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@
|
|||
- content_for :page_specific_javascripts do
|
||||
|
||||
%script#js-board-modal-filter{ type: "text/x-template" }= render "shared/issuable/search_bar", type: :boards_modal, show_sorting_dropdown: false
|
||||
%script#js-board-promotion{ type: "text/x-template" }= render_if_exists "shared/promotions/promote_issue_board"
|
||||
|
||||
= render 'shared/issuable/search_bar', type: :boards, board: board
|
||||
#board-app.boards-app.position-relative{ "v-cloak" => "true", data: board_data, ":class" => "{ 'is-compact': detailIssueVisible }" }
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Add GraphQL API to delete container repository tags
|
||||
merge_request: 48617
|
||||
author:
|
||||
type: added
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
title: Add `project_id` column into the `vulnerability_remediations` table to scope
|
||||
the records with projects
|
||||
merge_request: 49219
|
||||
author:
|
||||
type: added
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Removed boards promotion
|
||||
merge_request: 47972
|
||||
author:
|
||||
type: changed
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Move IssueType notes and discussions count logic to resolvers
|
||||
merge_request: 49160
|
||||
author:
|
||||
type: changed
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Update fog-google to v1.12
|
||||
merge_request: 49196
|
||||
author:
|
||||
type: fixed
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
title: Allow alert list to be visible when alerts exist, even if alerting integrations
|
||||
are disabled
|
||||
merge_request: 49257
|
||||
author:
|
||||
type: changed
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
name: ci_pipelines_for_merge_request_finder_new_cte
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/49083
|
||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/291006
|
||||
milestone: '13.7'
|
||||
type: development
|
||||
group: group::continuous integration
|
||||
default_enabled: false
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddProjectIdIntoVulnerabilityRemediations < ActiveRecord::Migration[6.0]
|
||||
include Gitlab::Database::MigrationHelpers
|
||||
|
||||
DOWNTIME = false
|
||||
|
||||
def up
|
||||
connection.execute('DELETE FROM vulnerability_remediations')
|
||||
|
||||
add_column :vulnerability_remediations, :project_id, :bigint, null: false # rubocop:disable Rails/NotNullColumn
|
||||
end
|
||||
|
||||
def down
|
||||
with_lock_retries do
|
||||
remove_column :vulnerability_remediations, :project_id
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddCompoundIndexToVulnerabilityRemediationsTable < ActiveRecord::Migration[6.0]
|
||||
include Gitlab::Database::MigrationHelpers
|
||||
|
||||
DOWNTIME = false
|
||||
NEW_INDEX_NAME = 'index_vulnerability_remediations_on_project_id_and_checksum'
|
||||
OLD_INDEX_NAME = 'index_vulnerability_remediations_on_checksum'
|
||||
|
||||
disable_ddl_transaction!
|
||||
|
||||
def up
|
||||
add_concurrent_index :vulnerability_remediations, [:project_id, :checksum], unique: true, name: NEW_INDEX_NAME
|
||||
add_concurrent_foreign_key :vulnerability_remediations, :projects, column: :project_id
|
||||
|
||||
remove_concurrent_index_by_name :vulnerability_remediations, OLD_INDEX_NAME
|
||||
end
|
||||
|
||||
def down
|
||||
add_concurrent_index :vulnerability_remediations, :checksum, unique: true, name: OLD_INDEX_NAME
|
||||
|
||||
remove_concurrent_index_by_name :vulnerability_remediations, NEW_INDEX_NAME
|
||||
|
||||
with_lock_retries do
|
||||
remove_foreign_key_if_exists :vulnerability_remediations, column: :project_id
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1 @@
|
|||
a1d8228731066fb6dfe436b4d8d034353421d1f45f3896e963f3c7f15fb09fbc
|
||||
|
|
@ -0,0 +1 @@
|
|||
01712e32d95578fe701738529abfa0e051ef68ed646f7a9c7f775f8a8d108578
|
||||
|
|
@ -17584,6 +17584,7 @@ CREATE TABLE vulnerability_remediations (
|
|||
summary text NOT NULL,
|
||||
file text NOT NULL,
|
||||
checksum bytea NOT NULL,
|
||||
project_id bigint NOT NULL,
|
||||
CONSTRAINT check_ac0ccabff3 CHECK ((char_length(summary) <= 200)),
|
||||
CONSTRAINT check_fe3325e3ba CHECK ((char_length(file) <= 255))
|
||||
);
|
||||
|
|
@ -22669,7 +22670,7 @@ CREATE UNIQUE INDEX index_vulnerability_occurrences_on_uuid ON vulnerability_occ
|
|||
|
||||
CREATE INDEX index_vulnerability_occurrences_on_vulnerability_id ON vulnerability_occurrences USING btree (vulnerability_id);
|
||||
|
||||
CREATE UNIQUE INDEX index_vulnerability_remediations_on_checksum ON vulnerability_remediations USING btree (checksum);
|
||||
CREATE UNIQUE INDEX index_vulnerability_remediations_on_project_id_and_checksum ON vulnerability_remediations USING btree (project_id, checksum);
|
||||
|
||||
CREATE UNIQUE INDEX index_vulnerability_scanners_on_project_id_and_external_id ON vulnerability_scanners USING btree (project_id, external_id);
|
||||
|
||||
|
|
@ -23698,6 +23699,9 @@ ALTER TABLE ONLY ci_stages
|
|||
ALTER TABLE ONLY system_note_metadata
|
||||
ADD CONSTRAINT fk_fbd87415c9 FOREIGN KEY (description_version_id) REFERENCES description_versions(id) ON DELETE SET NULL;
|
||||
|
||||
ALTER TABLE ONLY vulnerability_remediations
|
||||
ADD CONSTRAINT fk_fc61a535a0 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE;
|
||||
|
||||
ALTER TABLE ONLY merge_requests
|
||||
ADD CONSTRAINT fk_fd82eae0b9 FOREIGN KEY (head_pipeline_id) REFERENCES ci_pipelines(id) ON DELETE SET NULL;
|
||||
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ The steps below cover:
|
|||
'Entire domain (GitLab)' or 'Selected organizational units' for both 'Verify user
|
||||
credentials' and 'Read user information'. Select 'Add LDAP Client'
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
If you plan to use GitLab [LDAP Group Sync](index.md#group-sync)
|
||||
, turn on 'Read group information'.
|
||||
|
||||
|
|
|
|||
|
|
@ -168,7 +168,7 @@ follow these steps to avoid unnecessary data loss:
|
|||
that has not been replicated to the **secondary** node. This data should be treated
|
||||
as lost if you proceed.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
If you plan to [update the **primary** domain DNS record](../index.md#step-4-optional-updating-the-primary-domain-dns-record),
|
||||
you may wish to lower the TTL now to speed up propagation.
|
||||
|
||||
|
|
|
|||
|
|
@ -156,7 +156,7 @@ follow these steps to avoid unnecessary data loss:
|
|||
that has not been replicated to the **secondary** node. This data should be treated
|
||||
as lost if you proceed.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
If you plan to [update the **primary** domain DNS record](../index.md#step-4-optional-updating-the-primary-domain-dns-record),
|
||||
you may wish to lower the TTL now to speed up propagation.
|
||||
|
||||
|
|
|
|||
|
|
@ -466,7 +466,7 @@ to start again from scratch, there are a few steps that can help you:
|
|||
chown git:git /var/opt/gitlab/git-data/repositories
|
||||
```
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
You may want to remove the `/var/opt/gitlab/git-data/repositories.old` in the future
|
||||
as soon as you confirmed that you don't need it anymore, to save disk space.
|
||||
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ Gmail, Google Apps, Yahoo! Mail, Outlook.com, and iCloud, as well as the
|
|||
Microsoft Exchange Server [does not support sub-addressing](#microsoft-exchange-server),
|
||||
and Microsoft Office 365 [does not support sub-addressing by default](#microsoft-office-365)
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
If your provider or server supports email sub-addressing, we recommend using it.
|
||||
A dedicated email address only supports Reply by Email functionality.
|
||||
A catch-all mailbox supports the same features as sub-addressing as of GitLab 11.7,
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ is installed on.
|
|||
The default pattern can be located in [`gitlab.yml.example`](https://gitlab.com/gitlab-org/gitlab/blob/master/config/gitlab.yml.example)
|
||||
under the "Automatic issue closing" section.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
You are advised to use <https://rubular.com> to test the issue closing pattern.
|
||||
Because Rubular doesn't understand `%{issue_ref}`, you can replace this by
|
||||
`#\d+` when testing your patterns, which matches only local issue references like `#123`.
|
||||
|
|
|
|||
|
|
@ -468,7 +468,7 @@ you can pull from the Container Registry, but you cannot push.
|
|||
sudo aws --endpoint-url https://your-object-storage-backend.com s3 sync registry s3://mybucket
|
||||
```
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
If you have a lot of data, you may be able to improve performance by
|
||||
[running parallel sync operations](https://aws.amazon.com/premiumsupport/knowledge-center/s3-improve-transfer-sync-command/).
|
||||
|
||||
|
|
@ -1139,7 +1139,7 @@ and a simple solution would be to enable relative URLs in the Registry.
|
|||
|
||||
You can use the Container Registry debug server to diagnose problems. The debug endpoint can monitor metrics and health, as well as do profiling.
|
||||
|
||||
CAUTION: **Warning:**
|
||||
WARNING:
|
||||
Sensitive information may be available from the debug endpoint.
|
||||
Access to the debug endpoint must be locked down in a production environment.
|
||||
|
||||
|
|
|
|||
|
|
@ -1750,7 +1750,7 @@ To configure the Sidekiq nodes, on each one:
|
|||
|
||||
1. [Reconfigure GitLab](../restart_gitlab.md#omnibus-gitlab-reconfigure) for the changes to take effect.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
You can also run [multiple Sidekiq processes](../operations/extra_sidekiq_processes.md).
|
||||
|
||||
<div align="right">
|
||||
|
|
|
|||
|
|
@ -1750,7 +1750,7 @@ To configure the Sidekiq nodes, on each one:
|
|||
|
||||
1. [Reconfigure GitLab](../restart_gitlab.md#omnibus-gitlab-reconfigure) for the changes to take effect.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
You can also run [multiple Sidekiq processes](../operations/extra_sidekiq_processes.md).
|
||||
|
||||
<div align="right">
|
||||
|
|
|
|||
|
|
@ -1466,7 +1466,7 @@ To configure the Sidekiq nodes, one each one:
|
|||
run: sidekiq: (pid 30142) 77351s; run: log: (pid 29638) 77386s
|
||||
```
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
You can also run [multiple Sidekiq processes](../operations/extra_sidekiq_processes.md).
|
||||
|
||||
<div align="right">
|
||||
|
|
|
|||
|
|
@ -1750,7 +1750,7 @@ To configure the Sidekiq nodes, on each one:
|
|||
|
||||
1. [Reconfigure GitLab](../restart_gitlab.md#omnibus-gitlab-reconfigure) for the changes to take effect.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
You can also run [multiple Sidekiq processes](../operations/extra_sidekiq_processes.md).
|
||||
|
||||
<div align="right">
|
||||
|
|
|
|||
|
|
@ -1466,7 +1466,7 @@ To configure the Sidekiq nodes, one each one:
|
|||
run: sidekiq: (pid 30142) 77351s; run: log: (pid 29638) 77386s
|
||||
```
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
You can also run [multiple Sidekiq processes](../operations/extra_sidekiq_processes.md).
|
||||
|
||||
<div align="right">
|
||||
|
|
|
|||
|
|
@ -129,7 +129,7 @@ Quoting from issue [#1](https://gitlab.com/gitlab-org/gitlab/-/issues/30528):
|
|||
|
||||
> "If a deadlock is hit, and we resolve it through aborting the transaction after a short period, then the retry mechanisms we already have will make the deadlocked piece of work try again, and it's unlikely we'll deadlock multiple times in a row."
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
In Support, our general approach to reconfiguring timeouts (applies also to the
|
||||
HTTP stack) is that it's acceptable to do it temporarily as a workaround. If it
|
||||
makes GitLab usable for the customer, then it buys time to understand the
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ type: reference, api
|
|||
|
||||
This API operates on [repository branches](../user/project/repository/branches/index.md).
|
||||
|
||||
TIP: **Tip:**
|
||||
See also [Protected branches API](protected_branches.md).
|
||||
|
||||
## List repository branches
|
||||
|
|
|
|||
|
|
@ -6615,6 +6615,46 @@ type DestroyContainerRepositoryPayload {
|
|||
errors: [String!]!
|
||||
}
|
||||
|
||||
"""
|
||||
Autogenerated input type of DestroyContainerRepositoryTags
|
||||
"""
|
||||
input DestroyContainerRepositoryTagsInput {
|
||||
"""
|
||||
A unique identifier for the client performing the mutation.
|
||||
"""
|
||||
clientMutationId: String
|
||||
|
||||
"""
|
||||
ID of the container repository.
|
||||
"""
|
||||
id: ContainerRepositoryID!
|
||||
|
||||
"""
|
||||
Container repository tag(s) to delete. Total number can't be greater than 20
|
||||
"""
|
||||
tagNames: [String!]!
|
||||
}
|
||||
|
||||
"""
|
||||
Autogenerated return type of DestroyContainerRepositoryTags
|
||||
"""
|
||||
type DestroyContainerRepositoryTagsPayload {
|
||||
"""
|
||||
A unique identifier for the client performing the mutation.
|
||||
"""
|
||||
clientMutationId: String
|
||||
|
||||
"""
|
||||
Deleted container repository tags
|
||||
"""
|
||||
deletedTagNames: [String!]!
|
||||
|
||||
"""
|
||||
Errors encountered during execution of the mutation.
|
||||
"""
|
||||
errors: [String!]!
|
||||
}
|
||||
|
||||
"""
|
||||
Autogenerated input type of DestroyNote
|
||||
"""
|
||||
|
|
@ -14284,6 +14324,7 @@ type Mutation {
|
|||
destroyBoardList(input: DestroyBoardListInput!): DestroyBoardListPayload
|
||||
destroyComplianceFramework(input: DestroyComplianceFrameworkInput!): DestroyComplianceFrameworkPayload
|
||||
destroyContainerRepository(input: DestroyContainerRepositoryInput!): DestroyContainerRepositoryPayload
|
||||
destroyContainerRepositoryTags(input: DestroyContainerRepositoryTagsInput!): DestroyContainerRepositoryTagsPayload
|
||||
destroyNote(input: DestroyNoteInput!): DestroyNotePayload
|
||||
destroySnippet(input: DestroySnippetInput!): DestroySnippetPayload
|
||||
|
||||
|
|
|
|||
|
|
@ -18334,6 +18334,142 @@
|
|||
"enumValues": null,
|
||||
"possibleTypes": null
|
||||
},
|
||||
{
|
||||
"kind": "INPUT_OBJECT",
|
||||
"name": "DestroyContainerRepositoryTagsInput",
|
||||
"description": "Autogenerated input type of DestroyContainerRepositoryTags",
|
||||
"fields": null,
|
||||
"inputFields": [
|
||||
{
|
||||
"name": "id",
|
||||
"description": "ID of the container repository.",
|
||||
"type": {
|
||||
"kind": "NON_NULL",
|
||||
"name": null,
|
||||
"ofType": {
|
||||
"kind": "SCALAR",
|
||||
"name": "ContainerRepositoryID",
|
||||
"ofType": null
|
||||
}
|
||||
},
|
||||
"defaultValue": null
|
||||
},
|
||||
{
|
||||
"name": "tagNames",
|
||||
"description": "Container repository tag(s) to delete. Total number can't be greater than 20",
|
||||
"type": {
|
||||
"kind": "NON_NULL",
|
||||
"name": null,
|
||||
"ofType": {
|
||||
"kind": "LIST",
|
||||
"name": null,
|
||||
"ofType": {
|
||||
"kind": "NON_NULL",
|
||||
"name": null,
|
||||
"ofType": {
|
||||
"kind": "SCALAR",
|
||||
"name": "String",
|
||||
"ofType": null
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"defaultValue": null
|
||||
},
|
||||
{
|
||||
"name": "clientMutationId",
|
||||
"description": "A unique identifier for the client performing the mutation.",
|
||||
"type": {
|
||||
"kind": "SCALAR",
|
||||
"name": "String",
|
||||
"ofType": null
|
||||
},
|
||||
"defaultValue": null
|
||||
}
|
||||
],
|
||||
"interfaces": null,
|
||||
"enumValues": null,
|
||||
"possibleTypes": null
|
||||
},
|
||||
{
|
||||
"kind": "OBJECT",
|
||||
"name": "DestroyContainerRepositoryTagsPayload",
|
||||
"description": "Autogenerated return type of DestroyContainerRepositoryTags",
|
||||
"fields": [
|
||||
{
|
||||
"name": "clientMutationId",
|
||||
"description": "A unique identifier for the client performing the mutation.",
|
||||
"args": [
|
||||
|
||||
],
|
||||
"type": {
|
||||
"kind": "SCALAR",
|
||||
"name": "String",
|
||||
"ofType": null
|
||||
},
|
||||
"isDeprecated": false,
|
||||
"deprecationReason": null
|
||||
},
|
||||
{
|
||||
"name": "deletedTagNames",
|
||||
"description": "Deleted container repository tags",
|
||||
"args": [
|
||||
|
||||
],
|
||||
"type": {
|
||||
"kind": "NON_NULL",
|
||||
"name": null,
|
||||
"ofType": {
|
||||
"kind": "LIST",
|
||||
"name": null,
|
||||
"ofType": {
|
||||
"kind": "NON_NULL",
|
||||
"name": null,
|
||||
"ofType": {
|
||||
"kind": "SCALAR",
|
||||
"name": "String",
|
||||
"ofType": null
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"isDeprecated": false,
|
||||
"deprecationReason": null
|
||||
},
|
||||
{
|
||||
"name": "errors",
|
||||
"description": "Errors encountered during execution of the mutation.",
|
||||
"args": [
|
||||
|
||||
],
|
||||
"type": {
|
||||
"kind": "NON_NULL",
|
||||
"name": null,
|
||||
"ofType": {
|
||||
"kind": "LIST",
|
||||
"name": null,
|
||||
"ofType": {
|
||||
"kind": "NON_NULL",
|
||||
"name": null,
|
||||
"ofType": {
|
||||
"kind": "SCALAR",
|
||||
"name": "String",
|
||||
"ofType": null
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"isDeprecated": false,
|
||||
"deprecationReason": null
|
||||
}
|
||||
],
|
||||
"inputFields": null,
|
||||
"interfaces": [
|
||||
|
||||
],
|
||||
"enumValues": null,
|
||||
"possibleTypes": null
|
||||
},
|
||||
{
|
||||
"kind": "INPUT_OBJECT",
|
||||
"name": "DestroyNoteInput",
|
||||
|
|
@ -40741,6 +40877,33 @@
|
|||
"isDeprecated": false,
|
||||
"deprecationReason": null
|
||||
},
|
||||
{
|
||||
"name": "destroyContainerRepositoryTags",
|
||||
"description": null,
|
||||
"args": [
|
||||
{
|
||||
"name": "input",
|
||||
"description": null,
|
||||
"type": {
|
||||
"kind": "NON_NULL",
|
||||
"name": null,
|
||||
"ofType": {
|
||||
"kind": "INPUT_OBJECT",
|
||||
"name": "DestroyContainerRepositoryTagsInput",
|
||||
"ofType": null
|
||||
}
|
||||
},
|
||||
"defaultValue": null
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
"kind": "OBJECT",
|
||||
"name": "DestroyContainerRepositoryTagsPayload",
|
||||
"ofType": null
|
||||
},
|
||||
"isDeprecated": false,
|
||||
"deprecationReason": null
|
||||
},
|
||||
{
|
||||
"name": "destroyNote",
|
||||
"description": null,
|
||||
|
|
|
|||
|
|
@ -1118,6 +1118,16 @@ Autogenerated return type of DestroyContainerRepository.
|
|||
| `containerRepository` | ContainerRepository! | The container repository policy after scheduling the deletion. |
|
||||
| `errors` | String! => Array | Errors encountered during execution of the mutation. |
|
||||
|
||||
### DestroyContainerRepositoryTagsPayload
|
||||
|
||||
Autogenerated return type of DestroyContainerRepositoryTags.
|
||||
|
||||
| Field | Type | Description |
|
||||
| ----- | ---- | ----------- |
|
||||
| `clientMutationId` | String | A unique identifier for the client performing the mutation. |
|
||||
| `deletedTagNames` | String! => Array | Deleted container repository tags |
|
||||
| `errors` | String! => Array | Errors encountered during execution of the mutation. |
|
||||
|
||||
### DestroyNotePayload
|
||||
|
||||
Autogenerated return type of DestroyNote.
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ through the [continuous methodologies](introduction/index.md#introduction-to-cic
|
|||
- Continuous Delivery (CD)
|
||||
- Continuous Deployment (CD)
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
Out-of-the-box management systems can decrease hours spent on maintaining toolchains by 10% or more.
|
||||
Watch our ["Mastering continuous software development"](https://about.gitlab.com/webcast/mastering-ci-cd/)
|
||||
webcast to learn about continuous methods and how GitLab’s built-in CI can help you simplify and scale software development.
|
||||
|
|
|
|||
|
|
@ -92,7 +92,7 @@ cache, when declaring `cache` in your jobs, use one or a mix of the following:
|
|||
different caches on each branch). For that, you can take advantage of the
|
||||
[CI/CD predefined variables](../variables/README.md#predefined-environment-variables).
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
Using the same runner for your pipeline, is the most simple and efficient way to
|
||||
cache files in one stage or pipeline, and pass this cache to subsequent stages
|
||||
or pipelines in a guaranteed manner.
|
||||
|
|
@ -108,7 +108,7 @@ of the following must be true:
|
|||
share a common network-mounted directory (using NFS or something similar)
|
||||
where the cache is stored.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
Read about the [availability of the cache](#availability-of-the-cache)
|
||||
to learn more about the internals and get a better idea how cache works.
|
||||
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ during jobs, each with their own tradeoffs.
|
|||
An alternative to using `docker build` is to [use kaniko](using_kaniko.md).
|
||||
This avoids having to execute a runner in privileged mode.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
To see how Docker and GitLab Runner are configured for shared runners on
|
||||
GitLab.com, see [GitLab.com shared
|
||||
runners](../../user/gitlab_com/index.md#shared-runners).
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ This document presents an overview of the concepts of Continuous Integration,
|
|||
Continuous Delivery, and Continuous Deployment, as well as an introduction to
|
||||
GitLab CI/CD.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
Out-of-the-box management systems can decrease hours spent on maintaining toolchains by 10% or more.
|
||||
Watch our ["Mastering continuous software development"](https://about.gitlab.com/webcast/mastering-ci-cd/)
|
||||
webcast to learn about continuous methods and how GitLab’s built-in CI can help you simplify and scale software development.
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ type: reference
|
|||
|
||||
> Introduced in GitLab 8.8.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
Watch the
|
||||
["Mastering continuous software development"](https://about.gitlab.com/webcast/mastering-ci-cd/)
|
||||
webcast to see a comprehensive demo of a GitLab CI/CD pipeline.
|
||||
|
|
|
|||
|
|
@ -165,7 +165,7 @@ Create a new [variable](../variables/README.md#gitlab-cicd-environment-variables
|
|||
If you need to connect to multiple servers, all the server host keys
|
||||
need to be collected in the **Value** of the variable, one key per line.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
By using a variable instead of `ssh-keyscan` directly inside
|
||||
`.gitlab-ci.yml`, it has the benefit that you don't have to change `.gitlab-ci.yml`
|
||||
if the host domain name changes for some reason. Also, the values are predefined
|
||||
|
|
|
|||
|
|
@ -375,7 +375,7 @@ The files defined by `include` are:
|
|||
- Always evaluated first and merged with the content of `.gitlab-ci.yml`,
|
||||
regardless of the position of the `include` keyword.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
Use merging to customize and override included CI/CD configurations with local
|
||||
definitions. Local definitions in `.gitlab-ci.yml` override included definitions.
|
||||
|
||||
|
|
@ -1583,7 +1583,7 @@ that begin with `issue-`, but you can use `/issue-.*/`.
|
|||
|
||||
Regular expression flags must be appended after the closing `/`.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
Use anchors `^` and `$` to avoid the regular expression
|
||||
matching only a substring of the tag name or branch name.
|
||||
For example, `/^issue-.*$/` is equivalent to `/^issue-/`,
|
||||
|
|
|
|||
|
|
@ -47,14 +47,14 @@ Adding a new service follows the same [merge request workflow](contributing/merg
|
|||
|
||||
The first iteration should be to add the ability to connect and use the service as an externally installed component. Often this involves providing settings in GitLab to connect to the service, or allow connections from it. And then shipping documentation on how to install and configure the service with GitLab.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
[Elasticsearch](../integration/elasticsearch.md#installing-elasticsearch) is an example of a service that has been integrated this way. And many of the other services, including internal projects like Gitaly, started off as separately installed alternatives.
|
||||
|
||||
**For services that depend on the existing GitLab codebase:**
|
||||
|
||||
The first iteration should be opt-in, either through the `gitlab.yml` configuration or through [feature flags](feature_flags/index.md). For these types of services it is often necessary to [bundle the service and its dependencies with GitLab](#bundling-a-service-with-gitlab) as part of the initial integration.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
[ActionCable](https://docs.gitlab.com/omnibus/settings/actioncable.html) is an example of a service that has been added this way.
|
||||
|
||||
## Bundling a service with GitLab
|
||||
|
|
|
|||
|
|
@ -9,45 +9,45 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
|||
You can run `kas` and `agentk` locally to test the [Kubernetes Agent](index.md) yourself.
|
||||
|
||||
1. Create a `cfg.yaml` file from the contents of
|
||||
[`kas_config_example.yaml`](https://gitlab.com/gitlab-org/cluster-integration/gitlab-agent/-/blob/master/doc/kas_config_example.yaml), or this example:
|
||||
[`config_example.yaml`](https://gitlab.com/gitlab-org/cluster-integration/gitlab-agent/-/blob/master/pkg/kascfg/config_example.yaml), or this example:
|
||||
|
||||
```yaml
|
||||
listen_agent:
|
||||
network: tcp
|
||||
address: 127.0.0.1:8150
|
||||
websocket: false
|
||||
gitlab:
|
||||
address: http://localhost:3000
|
||||
authentication_secret_file: /Users/tkuah/code/ee-gdk/gitlab/.gitlab_kas_secret
|
||||
agent:
|
||||
gitops:
|
||||
poll_period: "10s"
|
||||
```
|
||||
```yaml
|
||||
agent:
|
||||
listen:
|
||||
network: tcp
|
||||
address: 127.0.0.1:8150
|
||||
websocket: false
|
||||
gitops:
|
||||
poll_period: "10s"
|
||||
gitlab:
|
||||
address: http://localhost:3000
|
||||
authentication_secret_file: /Users/tkuah/code/ee-gdk/gitlab/.gitlab_kas_secret
|
||||
```
|
||||
|
||||
1. Create a `token.txt`. This is the token for
|
||||
[the agent you created](../../user/clusters/agent/index.md#create-an-agent-record-in-gitlab). This file must not contain a newline character. You can create the file with this command:
|
||||
[the agent you created](../../user/clusters/agent/index.md#create-an-agent-record-in-gitlab). This file must not contain a newline character. You can create the file with this command:
|
||||
|
||||
```shell
|
||||
echo -n "<TOKEN>" > token.txt
|
||||
```
|
||||
```shell
|
||||
echo -n "<TOKEN>" > token.txt
|
||||
```
|
||||
|
||||
1. Start the binaries with the following commands:
|
||||
|
||||
```shell
|
||||
# Need GitLab to start
|
||||
gdk start
|
||||
# Stop GDK's version of kas
|
||||
gdk stop gitlab-k8s-agent
|
||||
|
||||
# Start kas
|
||||
bazel run //cmd/kas -- --configuration-file="$(pwd)/cfg.yaml"
|
||||
```
|
||||
```shell
|
||||
# Need GitLab to start
|
||||
gdk start
|
||||
# Stop GDK's version of kas
|
||||
gdk stop gitlab-k8s-agent
|
||||
|
||||
# Start kas
|
||||
bazel run //cmd/kas -- --configuration-file="$(pwd)/cfg.yaml"
|
||||
```
|
||||
|
||||
1. In a new terminal window, run this command to start agentk:
|
||||
|
||||
```shell
|
||||
bazel run //cmd/agentk -- --kas-address=grpc://127.0.0.1:8150 --token-file="$(pwd)/token.txt"
|
||||
```
|
||||
```shell
|
||||
bazel run //cmd/agentk -- --kas-address=grpc://127.0.0.1:8150 --token-file="$(pwd)/token.txt"
|
||||
```
|
||||
|
||||
You can also inspect the
|
||||
[Makefile](https://gitlab.com/gitlab-org/cluster-integration/gitlab-agent/-/blob/master/Makefile)
|
||||
|
|
|
|||
|
|
@ -179,7 +179,7 @@ end
|
|||
|
||||
### Connection types
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
For specifics on implementation, see [Pagination implementation](#pagination-implementation).
|
||||
|
||||
GraphQL uses [cursor based
|
||||
|
|
@ -647,7 +647,7 @@ If the:
|
|||
|
||||
Also see [authorizing resources in a mutation](#authorizing-resources).
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
Try to load only what the currently authenticated user is allowed to
|
||||
view with our existing finders first, without relying on authorization
|
||||
to filter the records. This minimizes database queries and unnecessary
|
||||
|
|
|
|||
|
|
@ -215,6 +215,6 @@ not set.
|
|||
|
||||
By default, the Jaeger search UI is available at <http://localhost:16686/search>.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
Don't forget that you must generate traces by using the application before
|
||||
they appear in the Jaeger UI.
|
||||
|
|
|
|||
|
|
@ -418,7 +418,7 @@ working on. If you don't, the remote docs branch isn't removed either,
|
|||
and the server where the Review Apps are hosted can eventually run out of
|
||||
disk space.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
Someone with no merge rights to the GitLab projects (think of forks from
|
||||
contributors) cannot run the manual job. In that case, you can
|
||||
ask someone from the GitLab team who has the permissions to do that for you.
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ To add a new charts version:
|
|||
version mapping. Note that only the `major.minor` version is needed.
|
||||
1. Create a new merge request and merge it.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
It can be handy to create the future mappings since they are pretty much known.
|
||||
In that case, when a new GitLab version is released, you don't have to repeat
|
||||
this first step.
|
||||
|
|
@ -138,7 +138,7 @@ versions (stable branches `X.Y` of the `gitlab-docs` project):
|
|||
to check that their pipelines pass, and once all are merged, proceed to the
|
||||
following and final step.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
In case a pipeline fails, see [troubleshooting](#troubleshooting).
|
||||
|
||||
## 5. Merge the release merge request
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ To update GitLab documentation:
|
|||
- The [Markdown Guide](https://about.gitlab.com/handbook/markdown-guide/).
|
||||
1. Follow GitLab's [Merge Request Guidelines](../contributing/merge_request_workflow.md#merge-request-guidelines).
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
Work in a fork if you do not have Developer access to the GitLab project.
|
||||
|
||||
Request help from the Technical Writing team if you:
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@ Previously, GitLab encouraged the use of
|
|||
manually generated webpack bundles. However under this new system you should
|
||||
not ever need to manually add an entry point to the `webpack.config.js` file.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
If you are unsure what controller and action corresponds to a given page, you
|
||||
can find this out by inspecting `document.body.dataset.page` within your
|
||||
browser's developer console while on any page within GitLab.
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ linter to manage most of our JavaScript style guidelines.
|
|||
In addition to the style guidelines set by Airbnb, we also have a few specific rules
|
||||
listed below.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
You can run eslint locally by running `yarn eslint`
|
||||
|
||||
## Avoid forEach
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@ Each feature flag is defined in a separate YAML file consisting of a number of f
|
|||
| `rollout_issue_url` | no | The URL to the Issue covering the feature flag rollout. |
|
||||
| `group` | no | The [group](https://about.gitlab.com/handbook/product/categories/#devops-stages) that owns the feature flag. |
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
All validations are skipped when running in `RAILS_ENV=production`.
|
||||
|
||||
## Create a new feature flag
|
||||
|
|
@ -131,7 +131,7 @@ type: development
|
|||
default_enabled: false
|
||||
```
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
To create a feature flag that is only used in EE, add the `--ee` flag: `bin/feature-flag --ee`
|
||||
|
||||
## Delete a feature flag
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ For working with internationalization (i18n),
|
|||
used tool for this task and there are a lot of applications that help us
|
||||
work with it.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
All `rake` commands described on this page must be run on a GitLab instance, usually GDK.
|
||||
|
||||
## Setting up GitLab Development Kit (GDK)
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ requests that read the most data from the cache, we can just sort by
|
|||
|
||||
### The slow log
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
There is a [video showing how to see the slow log](https://youtu.be/BBI68QuYRH8) (GitLab internal)
|
||||
on GitLab.com
|
||||
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ shell check:
|
|||
- shellcheck scripts/**/*.sh # path to your shell scripts
|
||||
```
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
By default, ShellCheck uses the [shell detection](https://github.com/koalaman/shellcheck/wiki/SC2148#rationale)
|
||||
to determine the shell dialect in use. If the shell file is out of your control and ShellCheck cannot
|
||||
detect the dialect, use `-s` flag to specify it: `-s sh` or `-s bash`.
|
||||
|
|
@ -100,7 +100,7 @@ shfmt:
|
|||
- shfmt -i 2 -ci -d scripts # path to your shell scripts
|
||||
```
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
By default, shfmt uses the [shell detection](https://github.com/mvdan/sh#shfmt) similar to one of ShellCheck
|
||||
and ignore files starting with a period. To override this, use `-ln` flag to specify the shell dialect:
|
||||
`-ln posix` or `-ln bash`.
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ must be configured to run the specs. The end-to-end tests:
|
|||
- Create [resources](resources.md) (such as project, issue, user) on an ad-hoc basis.
|
||||
- Test the UI and API interfaces, and use the API to efficiently set up the UI tests.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
For more information, see [End-to-end testing Best Practices](best_practices.md).
|
||||
|
||||
## Determine if end-to-end tests are needed
|
||||
|
|
|
|||
|
|
@ -99,7 +99,7 @@ Available Enterprise templates include:
|
|||
|
||||
- HIPAA Audit Protocol template ([introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/13756) in GitLab 12.10)
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
You can improve the existing built-in templates or contribute new ones in the
|
||||
[`project-templates`](https://gitlab.com/gitlab-org/project-templates) and
|
||||
[`pages`](https://gitlab.com/pages) groups by following [these steps](https://gitlab.com/gitlab-org/project-templates/contributing).
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ can download GitLab's [Git Cheat Sheet](https://about.gitlab.com/images/press/gi
|
|||
> - <i class="fa fa-youtube-play youtube" aria-hidden="true"></i> Watch the [GitLab Source Code Management Walkthrough](https://www.youtube.com/watch?v=wTQ3aXJswtM) video.
|
||||
> - Learn how GitLab became the backbone of [Worldline](https://about.gitlab.com/customers/worldline/)’s development environment.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
To help you visualize what you're doing locally, there are
|
||||
[Git GUI apps](https://git-scm.com/download/gui/) you can install.
|
||||
|
||||
|
|
@ -234,7 +234,7 @@ To clone `https://gitlab.com/gitlab-tests/sample-project/` via HTTPS:
|
|||
git clone https://gitlab.com/gitlab-tests/sample-project.git
|
||||
```
|
||||
|
||||
TIP: **Troubleshooting:**
|
||||
NOTE:
|
||||
On Windows, if you entered incorrect passwords multiple times and GitLab is responding `Access denied`,
|
||||
you may have to add your namespace (user name or group name) to clone through HTTPS:
|
||||
`git clone https://namespace@gitlab.com/gitlab-org/gitlab.git`.
|
||||
|
|
|
|||
|
|
@ -399,7 +399,7 @@ a bug that [prevents Sidekiq from processing jobs](https://gitlab.com/gitlab-org
|
|||
|
||||
Since our GitLab instances will be in private subnets, we need a way to connect to these instances via SSH to make configuration changes, perform upgrades, etc. One way of doing this is via a [bastion host](https://en.wikipedia.org/wiki/Bastion_host), sometimes also referred to as a jump box.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
If you do not want to maintain bastion hosts, you can set up [AWS Systems Manager Session Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html) for access to instances. This is beyond the scope of this document.
|
||||
|
||||
### Create Bastion Host A
|
||||
|
|
|
|||
|
|
@ -317,7 +317,7 @@ buffered and caught up once unpaused.
|
|||
|
||||
### Setup
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
If your index was created with GitLab 13.0 or greater, you can directly
|
||||
[trigger the reindex](#trigger-the-reindex-via-the-advanced-search-administration).
|
||||
|
||||
|
|
@ -404,7 +404,7 @@ To trigger the re-index from `primary` index:
|
|||
curl $CLUSTER_URL/$SECONDARY_INDEX/_count => 123123
|
||||
```
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
Comparing the document count is more accurate than using the index size, as improvements to the storage might cause the new index to be smaller than the original one.
|
||||
|
||||
1. After you are confident your `secondary` index is valid, you can process to
|
||||
|
|
@ -681,7 +681,7 @@ Sidekiq processes](../administration/operations/extra_sidekiq_processes.md).
|
|||
Where `ID_FROM` and `ID_TO` are project IDs. Both parameters are optional.
|
||||
The above example will index all projects from ID `1001` up to (and including) ID `2000`.
|
||||
|
||||
TIP: **Troubleshooting:**
|
||||
NOTE:
|
||||
Sometimes the project indexing jobs queued by `gitlab:elastic:index_projects`
|
||||
can get interrupted. This may happen for many reasons, but it's always safe
|
||||
to run the indexing task again. It will skip repositories that have
|
||||
|
|
|
|||
|
|
@ -73,7 +73,7 @@ When configuring Jira DVCS Connector:
|
|||
|
||||
#### GitLab account configuration for DVCS
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
To ensure that regular user account maintenance doesn't impact your integration,
|
||||
create and use a single-purpose `jira` user in GitLab.
|
||||
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@ can be a nested JSON object. For example:
|
|||
{ "foo": { "bar": { "baz": 42 } } }
|
||||
```
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
Ensure your requests are smaller than the
|
||||
[payload application limits](../../administration/instance_limits.md#generic-alert-json-payloads).
|
||||
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ The alert list displays the following information:
|
|||
- **Acknowledged**: Someone is actively investigating the problem.
|
||||
- **Resolved**: No further work is required.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
Check out a live example available from the
|
||||
[`tanuki-inc` project page](https://gitlab-examples-ops-incident-setup-everyone-tanuki-inc.34.69.64.147.nip.io/)
|
||||
in GitLab to examine alerts in action.
|
||||
|
|
@ -67,7 +67,7 @@ Navigate to the Alert details view by visiting the [Alert list](alerts.md)
|
|||
and selecting an alert from the list. You need least Developer [permissions](../../user/permissions.md)
|
||||
to access alerts.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
To review live examples of GitLab alerts, visit the
|
||||
[alert list](https://gitlab.com/gitlab-examples/ops/incident-setup/everyone/tanuki-inc/-/alert_management)
|
||||
for this demo project. Select any alert in the list to examine its alert details
|
||||
|
|
|
|||
|
|
@ -121,7 +121,7 @@ display an arrow next to the column name.
|
|||
|
||||
Incidents share the [Issues API](../../user/project/issues/index.md).
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
For a live example of the incident list in action, visit this
|
||||
[demo project](https://gitlab.com/gitlab-examples/ops/incident-setup/everyone/tanuki-inc/-/incidents).
|
||||
|
||||
|
|
|
|||
|
|
@ -100,7 +100,7 @@ The following options are available.
|
|||
| Prohibited file names | **Starter** 7.10 | Any committed filenames that match this regular expression and do not already exist in the repository are not allowed to be pushed. Leave empty to allow any filenames. See [common examples](#prohibited-file-names). |
|
||||
| Maximum file size | **Starter** 7.12 | Pushes that contain added or updated files that exceed this file size (in MB) are rejected. Set to 0 to allow files of any size. Files tracked by Git LFS are exempted. |
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
GitLab uses [RE2 syntax](https://github.com/google/re2/wiki/Syntax) for regular expressions in push rules, and you can test them at the [regex101 regex tester](https://regex101.com/).
|
||||
|
||||
## Prevent pushing secrets to the repository
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ GitLab supports the use of RSA, DSA, ECDSA, and ED25519 keys.
|
|||
- GitLab has [deprecated](https://about.gitlab.com/releases/2018/06/22/gitlab-11-0-released/#support-for-dsa-ssh-keys) DSA keys in GitLab 11.0.
|
||||
- As noted in [Practical Cryptography With Go](https://leanpub.com/gocrypto/read#leanpub-auto-ecdsa), the security issues related to DSA also apply to ECDSA.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
Available documentation suggests that ED25519 is more secure. If you use an RSA key, the US National Institute of Science and Technology in [Publication 800-57 Part 3 (PDF)](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-57Pt3r1.pdf) recommends a key size of at least 2048 bits.
|
||||
|
||||
Therefore, our documentation focuses on the use of ED25519 and RSA keys.
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ Every occupied seat is counted in the subscription, with the following exception
|
|||
|
||||
- Members with Guest permissions on a Gold subscription.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
To support the open source community and encourage the development of open
|
||||
source projects, GitLab grants access to **Gold** features for all GitLab.com
|
||||
**public** projects, regardless of the subscription.
|
||||
|
|
@ -88,7 +88,7 @@ To subscribe to GitLab.com:
|
|||
1. Select the namespace from the drop-down list to associate the subscription.
|
||||
1. Proceed to checkout.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
You can also go to the [**My Account**](https://customers.gitlab.com/customers/edit)
|
||||
page to add or change the GitLab.com account link.
|
||||
|
||||
|
|
@ -132,7 +132,7 @@ log in and verify or update:
|
|||
- The invoice contact details on the **Account details** page.
|
||||
- The credit card on file on the **Payment Methods** page.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
Contact our [support team](https://support.gitlab.com/hc/en-us/requests/new?ticket_form_id=360000071293)
|
||||
if you need assistance accessing the Customers Portal or if you need to change
|
||||
the contact person who manages your subscription.
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ To subscribe to GitLab through a self-managed installation:
|
|||
1. After purchase, a license file is sent to the email address associated to the Customers Portal account,
|
||||
which must be [uploaded to your GitLab instance](../../user/admin_area/license.md#uploading-your-license).
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
If you're purchasing a subscription for an existing **Core** self-managed
|
||||
instance, ensure you're purchasing enough seats to
|
||||
[cover your users](../../user/admin_area/index.md#administering-users).
|
||||
|
|
@ -109,7 +109,7 @@ log in and verify or update:
|
|||
- The invoice contact details on the **Account details** page.
|
||||
- The credit card on file on the **Payment Methods** page.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
Contact our [support team](https://support.gitlab.com/hc/en-us/requests/new?ticket_form_id=360000071293)
|
||||
if you need assistance accessing the Customers Portal or if you need to change
|
||||
the contact person who manages your subscription.
|
||||
|
|
@ -158,13 +158,13 @@ We recommend following these steps during renewal:
|
|||
1. Determine if you have a need for user growth in the upcoming subscription.
|
||||
1. Log in to the [Customers Portal](https://customers.gitlab.com/customers/sign_in) and select the **Renew** button beneath your existing subscription.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
If you need to change your [GitLab tier](https://about.gitlab.com/pricing/), contact our sales team via `renewals@gitlab.com` for assistance as this can't be done in the Customers Portal.
|
||||
|
||||
1. In the first box, enter the total number of user licenses you’ll need for the upcoming year. Be sure this number is at least **equal to, or greater than** the number of billable users in the system at the time of performing the renewal.
|
||||
1. Enter the number of [users over license](#users-over-license) in the second box for the user overage incurred in your previous subscription term.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
You can find the _users over license_ in your instance's **Admin** dashboard by clicking on the **Admin Area** in the top bar, or navigating to `/admin`.
|
||||
|
||||
The following table describes details of your admin dashboard and renewal terms:
|
||||
|
|
|
|||
|
|
@ -355,7 +355,7 @@ applications.
|
|||
| `ROLLOUT_STATUS_DISABLED` | From GitLab 12.0, used to disable rollout status check because it does not support all resource types, for example, `cronjob`. |
|
||||
| `STAGING_ENABLED` | From GitLab 10.8, used to define a [deploy policy for staging and production environments](#deploy-policy-for-staging-and-production-environments). |
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
After you set up your replica variables using a
|
||||
[project variable](../../ci/variables/README.md#gitlab-cicd-environment-variables),
|
||||
you can scale your application by redeploying it.
|
||||
|
|
@ -538,7 +538,7 @@ service:
|
|||
|
||||
> [Introduced](https://gitlab.com/gitlab-org/gitlab-ci-yml/-/merge_requests/160) in GitLab 10.8.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
You can also set this inside your [project's settings](index.md#deployment-strategy).
|
||||
|
||||
The normal behavior of Auto DevOps is to use continuous deployment, pushing
|
||||
|
|
@ -567,7 +567,7 @@ If you define `CANARY_ENABLED` with a non-empty value, then two manual jobs are
|
|||
|
||||
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/5415) in GitLab 10.8.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
You can also set this inside your [project's settings](index.md#deployment-strategy).
|
||||
|
||||
When you're ready to deploy a new version of your app to production, you may want
|
||||
|
|
@ -615,7 +615,7 @@ With `INCREMENTAL_ROLLOUT_MODE` set to `manual` and with `STAGING_ENABLED`
|
|||
|
||||

|
||||
|
||||
WARNING: **Deprecation:**
|
||||
WARNING:
|
||||
Before GitLab 11.4, the presence of the `INCREMENTAL_ROLLOUT_ENABLED` environment
|
||||
variable enabled this feature. This configuration is deprecated, and is scheduled to be
|
||||
removed in the future.
|
||||
|
|
@ -624,7 +624,7 @@ removed in the future.
|
|||
|
||||
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/7545) in GitLab 11.4.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
You can also set this inside your [project's settings](index.md#deployment-strategy).
|
||||
|
||||
This configuration is based on
|
||||
|
|
|
|||
|
|
@ -151,7 +151,7 @@ as other environment [variables](../../ci/variables/README.md#priority-of-enviro
|
|||
If the CI/CD variable is not set and the cluster setting is left blank, the instance-wide **Auto DevOps domain**
|
||||
setting is used if set.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
If you use the [GitLab managed app for Ingress](../../user/clusters/applications.md#ingress),
|
||||
the URL endpoint should be automatically configured for you. All you must do
|
||||
is use its value for the `KUBE_INGRESS_BASE_DOMAIN` variable.
|
||||
|
|
@ -257,7 +257,7 @@ are available:
|
|||
- `master` branch is directly deployed to staging.
|
||||
- Manual actions are provided for incremental rollout to production.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
Use the [blue-green deployment](../../ci/environments/incremental_rollouts.md#blue-green-deployment) technique
|
||||
to minimize downtime and risk.
|
||||
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ or Google Drive, or create a new one.
|
|||
1. Ensure you've created a [billing account](https://cloud.google.com/billing/docs/how-to/manage-billing-account)
|
||||
with Google Cloud Platform.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
Every new Google Cloud Platform (GCP) account receives [$300 in credit](https://console.cloud.google.com/freetrial),
|
||||
and in partnership with Google, GitLab is able to offer an additional $200 for new
|
||||
GCP accounts to get started with GitLab's Google Kubernetes Engine Integration.
|
||||
|
|
@ -221,7 +221,7 @@ Kubernetes cluster, color-coded to show their status. Hovering over a square on
|
|||
the deploy board displays the state of the deployment, and clicking the square
|
||||
takes you to the pod's logs page.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
The example shows only one pod hosting the application at the moment, but you can add
|
||||
more pods by defining the [`REPLICAS` variable](customize.md#environment-variables)
|
||||
in **Settings > CI/CD > Environment variables**.
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ language:
|
|||
For the requirements of other languages and frameworks, read the
|
||||
[Heroku buildpacks documentation](https://devcenter.heroku.com/articles/buildpacks#officially-supported-buildpacks).
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
If Auto Build fails despite the project meeting the buildpack requirements, set
|
||||
a project variable `TRACE=true` to enable verbose logging, which may help you
|
||||
troubleshoot.
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ involves:
|
|||
any existing channel 1 database. For more information, see
|
||||
[Detected an existing PostgreSQL database](index.md#detected-an-existing-postgresql-database).
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
If you have configured Auto DevOps to have staging,
|
||||
consider trying out the backup and restore steps on staging first, or
|
||||
trying this out on a review app.
|
||||
|
|
@ -173,7 +173,7 @@ Using the newer version of PostgreSQL deletes
|
|||
the older 0.7.1 PostgreSQL. To prevent the underlying data from being
|
||||
deleted, you can choose to retain the [persistent volume](#retain-persistent-volumes).
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
You can also
|
||||
[scope](../../ci/environments/index.md#scoping-environments-with-specs) the
|
||||
`AUTO_DEVOPS_POSTGRES_CHANNEL`, `AUTO_DEVOPS_POSTGRES_DELETE_V1` and
|
||||
|
|
|
|||
|
|
@ -129,7 +129,7 @@ message, squash (join multiple commits into one), edit, or delete
|
|||
commits. It is handy for changing past commit messages,
|
||||
as well as for organizing the commit history of your branch to keep it clean.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
If you want to keep the default branch commit history clean, you don't need to
|
||||
manually squash all your commits before merging every merge request;
|
||||
with [Squash and Merge](../../user/project/merge_requests/squash_and_merge.md)
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ Google account (for example, one that you use to access Gmail, Drive, etc.) or c
|
|||
1. To enable the required APIs and related services, follow the steps in the ["Before you begin" section of the Kubernetes Engine docs](https://cloud.google.com/kubernetes-engine/docs/quickstart#before-you-begin).
|
||||
1. Make sure you have created a [billing account](https://cloud.google.com/billing/docs/how-to/manage-billing-account).
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
Every new Google Cloud Platform (GCP) account receives [$300 in credit](https://console.cloud.google.com/freetrial),
|
||||
and in partnership with Google, GitLab is able to offer an additional $200 for new GCP accounts to get started with GitLab's
|
||||
Google Kubernetes Engine integration. All you have to do is [follow this link](https://cloud.google.com/partners/partnercredit/?PCN=a0n60000006Vpz4AAC) and apply for credit.
|
||||
|
|
|
|||
|
|
@ -65,5 +65,5 @@ NOTE:
|
|||
Activating a user changes the user's state to active and consumes a
|
||||
[seat](../../subscriptions/self_managed/index.md#billable-users).
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
A deactivated user can also activate their account themselves by simply logging back in via the UI.
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ To edit a broadcast message:
|
|||
1. From the list of broadcast messages, click the appropriate button to edit the message.
|
||||
1. After making the required changes, click the **Update broadcast message** button.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
Expired messages can be made active again by changing their end date.
|
||||
|
||||
## Deleting a broadcast message
|
||||
|
|
|
|||
|
|
@ -178,7 +178,7 @@ to determine the external endpoint and it should be available within a few minut
|
|||
|
||||
After you install Ingress, the external endpoint should be available within a few minutes.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
This endpoint can be used for the
|
||||
[Auto DevOps base domain](../../topics/autodevops/index.md#auto-devops-base-domain)
|
||||
using the `KUBE_INGRESS_BASE_DOMAIN` environment variable.
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ Threads created this way will only appear in the original merge request
|
|||
and not when navigating to that commit under your project's
|
||||
**Repository > Commits** page.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
When a link of a commit reference is found in a thread inside a merge
|
||||
request, it will be automatically converted to a link in the context of the
|
||||
current merge request.
|
||||
|
|
|
|||
|
|
@ -105,35 +105,18 @@ steps to create, move, reorder, or delete child epics.
|
|||
|
||||
To set a **Start date** and **Due date** for an epic, select one of the following:
|
||||
|
||||
- **Fixed**: Enter a fixed value.
|
||||
- **From milestones**: Inherit a dynamic value from the milestones that are assigned to the epic's issues.
|
||||
Note that GitLab 12.5 replaced this option with **Inherited**.
|
||||
- **Inherited**: Inherit a dynamic value from the epic's issues, child epics, and milestones ([Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/7332) in GitLab 12.5 to replace **From milestones**).
|
||||
|
||||
### From milestones
|
||||
|
||||
> [Replaced](https://gitlab.com/gitlab-org/gitlab/-/issues/7332) in GitLab 12.5 by **Inherited**.
|
||||
|
||||
If you select **From milestones** for the start date, GitLab automatically sets the date to be earliest
|
||||
start date across all milestones that are assigned to the issues that belong to the epic.
|
||||
If you select **From milestones** for the due date, GitLab sets the date to be the latest due date across
|
||||
all milestones that are assigned to those issues.
|
||||
|
||||
These are dynamic dates which are recalculated if any of the following occur:
|
||||
|
||||
- Milestones are re-assigned to the issues.
|
||||
- Milestone dates change.
|
||||
- Issues are added or removed from the epic.
|
||||
- **Fixed**: enter a fixed value.
|
||||
- **Inherited**: inherit a dynamic value from the epic's issues, child epics, and milestones.
|
||||
|
||||
### Inherited
|
||||
|
||||
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/7332) in GitLab 12.5 to replace **From milestones**.
|
||||
|
||||
If you select:
|
||||
If you select **Inherited**:
|
||||
|
||||
- **Inherited** for the start date, GitLab scans all child epics and issues assigned to the epic,
|
||||
- For the **start date**: GitLab scans all child epics and issues assigned to the epic,
|
||||
and sets the start date to match the earliest found start date or milestone.
|
||||
- **Inherited** for the due date, GitLab sets the due date to match the latest due date or
|
||||
- For the **due date**: GitLab sets the due date to match the latest due date or
|
||||
milestone found among its child epics and issues.
|
||||
|
||||
These are dynamic dates and recalculated if any of the following occur:
|
||||
|
|
|
|||
|
|
@ -487,7 +487,7 @@ It is currently not possible to rename a namespace if it contains a
|
|||
project with [Container Registry](../packages/container_registry/index.md) tags,
|
||||
because the project cannot be moved.
|
||||
|
||||
TIP: **Tip:**
|
||||
NOTE:
|
||||
If you want to retain ownership over the original namespace and
|
||||
protect the URL redirects, then instead of changing a group's path or renaming a
|
||||
username, you can create a new group and transfer projects to it.
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue