Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
17deb2a503
commit
d4b2ad25a5
|
|
@ -1,9 +1,19 @@
|
||||||
<script>
|
<script>
|
||||||
import { GlAlert, GlBadge, GlButton, GlLoadingIcon, GlTabs, GlTab } from '@gitlab/ui';
|
import {
|
||||||
|
GlAlert,
|
||||||
|
GlBadge,
|
||||||
|
GlButton,
|
||||||
|
GlLoadingIcon,
|
||||||
|
GlTabs,
|
||||||
|
GlTab,
|
||||||
|
GlSprintf,
|
||||||
|
GlLink,
|
||||||
|
} from '@gitlab/ui';
|
||||||
import { s__, sprintf } from '~/locale';
|
import { s__, sprintf } from '~/locale';
|
||||||
import { limitedCounterWithDelimiter } from '~/lib/utils/text_utility';
|
import { limitedCounterWithDelimiter } from '~/lib/utils/text_utility';
|
||||||
import { queryToObject } from '~/lib/utils/url_utility';
|
import { queryToObject } from '~/lib/utils/url_utility';
|
||||||
import deletePipelineScheduleMutation from '../graphql/mutations/delete_pipeline_schedule.mutation.graphql';
|
import deletePipelineScheduleMutation from '../graphql/mutations/delete_pipeline_schedule.mutation.graphql';
|
||||||
|
import playPipelineScheduleMutation from '../graphql/mutations/play_pipeline_schedule.mutation.graphql';
|
||||||
import takeOwnershipMutation from '../graphql/mutations/take_ownership.mutation.graphql';
|
import takeOwnershipMutation from '../graphql/mutations/take_ownership.mutation.graphql';
|
||||||
import getPipelineSchedulesQuery from '../graphql/queries/get_pipeline_schedules.query.graphql';
|
import getPipelineSchedulesQuery from '../graphql/queries/get_pipeline_schedules.query.graphql';
|
||||||
import PipelineSchedulesTable from './table/pipeline_schedules_table.vue';
|
import PipelineSchedulesTable from './table/pipeline_schedules_table.vue';
|
||||||
|
|
@ -16,11 +26,15 @@ export default {
|
||||||
scheduleDeleteError: s__(
|
scheduleDeleteError: s__(
|
||||||
'PipelineSchedules|There was a problem deleting the pipeline schedule.',
|
'PipelineSchedules|There was a problem deleting the pipeline schedule.',
|
||||||
),
|
),
|
||||||
|
schedulePlayError: s__('PipelineSchedules|There was a problem playing the pipeline schedule.'),
|
||||||
takeOwnershipError: s__(
|
takeOwnershipError: s__(
|
||||||
'PipelineSchedules|There was a problem taking ownership of the pipeline schedule.',
|
'PipelineSchedules|There was a problem taking ownership of the pipeline schedule.',
|
||||||
),
|
),
|
||||||
newSchedule: s__('PipelineSchedules|New schedule'),
|
newSchedule: s__('PipelineSchedules|New schedule'),
|
||||||
deleteSuccess: s__('PipelineSchedules|Pipeline schedule successfully deleted.'),
|
deleteSuccess: s__('PipelineSchedules|Pipeline schedule successfully deleted.'),
|
||||||
|
playSuccess: s__(
|
||||||
|
'PipelineSchedules|Successfully scheduled a pipeline to run. Go to the %{linkStart}Pipelines page%{linkEnd} for details. ',
|
||||||
|
),
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
DeletePipelineScheduleModal,
|
DeletePipelineScheduleModal,
|
||||||
|
|
@ -30,6 +44,8 @@ export default {
|
||||||
GlLoadingIcon,
|
GlLoadingIcon,
|
||||||
GlTabs,
|
GlTabs,
|
||||||
GlTab,
|
GlTab,
|
||||||
|
GlSprintf,
|
||||||
|
GlLink,
|
||||||
PipelineSchedulesTable,
|
PipelineSchedulesTable,
|
||||||
TakeOwnershipModal,
|
TakeOwnershipModal,
|
||||||
},
|
},
|
||||||
|
|
@ -37,6 +53,9 @@ export default {
|
||||||
fullPath: {
|
fullPath: {
|
||||||
default: '',
|
default: '',
|
||||||
},
|
},
|
||||||
|
pipelinesPath: {
|
||||||
|
default: '',
|
||||||
|
},
|
||||||
},
|
},
|
||||||
apollo: {
|
apollo: {
|
||||||
schedules: {
|
schedules: {
|
||||||
|
|
@ -68,6 +87,7 @@ export default {
|
||||||
},
|
},
|
||||||
scope,
|
scope,
|
||||||
hasError: false,
|
hasError: false,
|
||||||
|
playSuccess: false,
|
||||||
errorMessage: '',
|
errorMessage: '',
|
||||||
scheduleId: null,
|
scheduleId: null,
|
||||||
showDeleteModal: false,
|
showDeleteModal: false,
|
||||||
|
|
@ -185,6 +205,27 @@ export default {
|
||||||
this.reportError(this.$options.i18n.takeOwnershipError);
|
this.reportError(this.$options.i18n.takeOwnershipError);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
async playPipelineSchedule(id) {
|
||||||
|
try {
|
||||||
|
const {
|
||||||
|
data: {
|
||||||
|
pipelineSchedulePlay: { errors },
|
||||||
|
},
|
||||||
|
} = await this.$apollo.mutate({
|
||||||
|
mutation: playPipelineScheduleMutation,
|
||||||
|
variables: { id },
|
||||||
|
});
|
||||||
|
|
||||||
|
if (errors.length > 0) {
|
||||||
|
throw new Error();
|
||||||
|
} else {
|
||||||
|
this.playSuccess = true;
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
this.playSuccess = false;
|
||||||
|
this.reportError(this.$options.i18n.schedulePlayError);
|
||||||
|
}
|
||||||
|
},
|
||||||
fetchPipelineSchedulesByStatus(scope) {
|
fetchPipelineSchedulesByStatus(scope) {
|
||||||
this.scope = scope;
|
this.scope = scope;
|
||||||
this.$apollo.queries.schedules.refetch();
|
this.$apollo.queries.schedules.refetch();
|
||||||
|
|
@ -195,62 +236,69 @@ export default {
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<gl-alert v-if="hasError" class="gl-mb-2" variant="danger" @dismiss="hasError = false">
|
<gl-alert v-if="hasError" class="gl-my-3" variant="danger" @dismiss="hasError = false">
|
||||||
{{ errorMessage }}
|
{{ errorMessage }}
|
||||||
</gl-alert>
|
</gl-alert>
|
||||||
|
|
||||||
<template v-else>
|
<gl-alert v-if="playSuccess" class="gl-my-3" variant="info" @dismiss="playSuccess = false">
|
||||||
<gl-tabs
|
<gl-sprintf :message="$options.i18n.playSuccess">
|
||||||
sync-active-tab-with-query-params
|
<template #link="{ content }">
|
||||||
query-param-name="scope"
|
<gl-link :href="pipelinesPath" class="gl-text-decoration-none!">{{ content }}</gl-link>
|
||||||
nav-class="gl-flex-grow-1 gl-align-items-center"
|
|
||||||
>
|
|
||||||
<gl-tab
|
|
||||||
v-for="tab in tabs"
|
|
||||||
:key="tab.text"
|
|
||||||
:title-link-attributes="tab.attrs"
|
|
||||||
:query-param-value="tab.scope"
|
|
||||||
@click="fetchPipelineSchedulesByStatus(tab.scope)"
|
|
||||||
>
|
|
||||||
<template #title>
|
|
||||||
<span>{{ tab.text }}</span>
|
|
||||||
|
|
||||||
<template v-if="tab.showBadge">
|
|
||||||
<gl-loading-icon v-if="tab.scope === scope && isLoading" class="gl-ml-2" />
|
|
||||||
|
|
||||||
<gl-badge v-else-if="tab.count" size="sm" class="gl-tab-counter-badge">
|
|
||||||
{{ tab.count }}
|
|
||||||
</gl-badge>
|
|
||||||
</template>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<gl-loading-icon v-if="isLoading" size="lg" />
|
|
||||||
<pipeline-schedules-table
|
|
||||||
v-else
|
|
||||||
:schedules="schedules.list"
|
|
||||||
@showTakeOwnershipModal="setTakeOwnershipModal"
|
|
||||||
@showDeleteModal="setDeleteModal"
|
|
||||||
/>
|
|
||||||
</gl-tab>
|
|
||||||
|
|
||||||
<template #tabs-end>
|
|
||||||
<gl-button variant="confirm" class="gl-ml-auto" data-testid="new-schedule-button">
|
|
||||||
{{ $options.i18n.newSchedule }}
|
|
||||||
</gl-button>
|
|
||||||
</template>
|
</template>
|
||||||
</gl-tabs>
|
</gl-sprintf>
|
||||||
|
</gl-alert>
|
||||||
|
|
||||||
<take-ownership-modal
|
<gl-tabs
|
||||||
:visible="showTakeOwnershipModal"
|
sync-active-tab-with-query-params
|
||||||
@takeOwnership="takeOwnership"
|
query-param-name="scope"
|
||||||
@hideModal="hideModal"
|
nav-class="gl-flex-grow-1 gl-align-items-center"
|
||||||
/>
|
>
|
||||||
|
<gl-tab
|
||||||
|
v-for="tab in tabs"
|
||||||
|
:key="tab.text"
|
||||||
|
:title-link-attributes="tab.attrs"
|
||||||
|
:query-param-value="tab.scope"
|
||||||
|
@click="fetchPipelineSchedulesByStatus(tab.scope)"
|
||||||
|
>
|
||||||
|
<template #title>
|
||||||
|
<span>{{ tab.text }}</span>
|
||||||
|
|
||||||
<delete-pipeline-schedule-modal
|
<template v-if="tab.showBadge">
|
||||||
:visible="showDeleteModal"
|
<gl-loading-icon v-if="tab.scope === scope && isLoading" class="gl-ml-2" />
|
||||||
@deleteSchedule="deleteSchedule"
|
|
||||||
@hideModal="hideModal"
|
<gl-badge v-else-if="tab.count" size="sm" class="gl-tab-counter-badge">
|
||||||
/>
|
{{ tab.count }}
|
||||||
</template>
|
</gl-badge>
|
||||||
|
</template>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<gl-loading-icon v-if="isLoading" size="lg" />
|
||||||
|
<pipeline-schedules-table
|
||||||
|
v-else
|
||||||
|
:schedules="schedules.list"
|
||||||
|
@showTakeOwnershipModal="setTakeOwnershipModal"
|
||||||
|
@showDeleteModal="setDeleteModal"
|
||||||
|
@playPipelineSchedule="playPipelineSchedule"
|
||||||
|
/>
|
||||||
|
</gl-tab>
|
||||||
|
|
||||||
|
<template #tabs-end>
|
||||||
|
<gl-button variant="confirm" class="gl-ml-auto" data-testid="new-schedule-button">
|
||||||
|
{{ $options.i18n.newSchedule }}
|
||||||
|
</gl-button>
|
||||||
|
</template>
|
||||||
|
</gl-tabs>
|
||||||
|
|
||||||
|
<take-ownership-modal
|
||||||
|
:visible="showTakeOwnershipModal"
|
||||||
|
@takeOwnership="takeOwnership"
|
||||||
|
@hideModal="hideModal"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<delete-pipeline-schedule-modal
|
||||||
|
:visible="showDeleteModal"
|
||||||
|
@deleteSchedule="deleteSchedule"
|
||||||
|
@hideModal="hideModal"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,14 @@ export default {
|
||||||
<template>
|
<template>
|
||||||
<div class="gl-display-flex gl-justify-content-end">
|
<div class="gl-display-flex gl-justify-content-end">
|
||||||
<gl-button-group>
|
<gl-button-group>
|
||||||
<gl-button v-if="canPlay" v-gl-tooltip :title="$options.i18n.playTooltip" icon="play" />
|
<gl-button
|
||||||
|
v-if="canPlay"
|
||||||
|
v-gl-tooltip
|
||||||
|
:title="$options.i18n.playTooltip"
|
||||||
|
icon="play"
|
||||||
|
data-testid="play-pipeline-schedule-btn"
|
||||||
|
@click="$emit('playPipelineSchedule', schedule.id)"
|
||||||
|
/>
|
||||||
<gl-button
|
<gl-button
|
||||||
v-if="canTakeOwnership"
|
v-if="canTakeOwnership"
|
||||||
v-gl-tooltip
|
v-gl-tooltip
|
||||||
|
|
|
||||||
|
|
@ -96,6 +96,7 @@ export default {
|
||||||
:schedule="item"
|
:schedule="item"
|
||||||
@showTakeOwnershipModal="$emit('showTakeOwnershipModal', $event)"
|
@showTakeOwnershipModal="$emit('showTakeOwnershipModal', $event)"
|
||||||
@showDeleteModal="$emit('showDeleteModal', $event)"
|
@showDeleteModal="$emit('showDeleteModal', $event)"
|
||||||
|
@playPipelineSchedule="$emit('playPipelineSchedule', $event)"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
</gl-table-lite>
|
</gl-table-lite>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
mutation playPipelineSchedule($id: CiPipelineScheduleID!) {
|
||||||
|
pipelineSchedulePlay(input: { id: $id }) {
|
||||||
|
clientMutationId
|
||||||
|
errors
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -18,7 +18,7 @@ export default () => {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const { fullPath } = containerEl.dataset;
|
const { fullPath, pipelinesPath } = containerEl.dataset;
|
||||||
|
|
||||||
return new Vue({
|
return new Vue({
|
||||||
el: containerEl,
|
el: containerEl,
|
||||||
|
|
@ -26,6 +26,7 @@ export default () => {
|
||||||
apolloProvider,
|
apolloProvider,
|
||||||
provide: {
|
provide: {
|
||||||
fullPath,
|
fullPath,
|
||||||
|
pipelinesPath,
|
||||||
},
|
},
|
||||||
render(createElement) {
|
render(createElement) {
|
||||||
return createElement(PipelineSchedules);
|
return createElement(PipelineSchedules);
|
||||||
|
|
|
||||||
|
|
@ -37,3 +37,14 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.approvers-select {
|
||||||
|
.dropdown-menu {
|
||||||
|
@include gl-w-full;
|
||||||
|
@include gl-max-w-none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gl-dropdown-item-check-icon {
|
||||||
|
@include gl-display-none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ class AutocompleteController < ApplicationController
|
||||||
feature_category :users, [:users, :user]
|
feature_category :users, [:users, :user]
|
||||||
feature_category :projects, [:projects]
|
feature_category :projects, [:projects]
|
||||||
feature_category :team_planning, [:award_emojis]
|
feature_category :team_planning, [:award_emojis]
|
||||||
feature_category :code_review, [:merge_request_target_branches]
|
feature_category :code_review_workflow, [:merge_request_target_branches]
|
||||||
feature_category :continuous_delivery, [:deploy_keys_with_owners]
|
feature_category :continuous_delivery, [:deploy_keys_with_owners]
|
||||||
|
|
||||||
urgency :low, [:merge_request_target_branches, :deploy_keys_with_owners, :users]
|
urgency :low, [:merge_request_target_branches, :deploy_keys_with_owners, :users]
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ class DashboardController < Dashboard::ApplicationController
|
||||||
|
|
||||||
feature_category :users, [:activity]
|
feature_category :users, [:activity]
|
||||||
feature_category :team_planning, [:issues, :issues_calendar]
|
feature_category :team_planning, [:issues, :issues_calendar]
|
||||||
feature_category :code_review, [:merge_requests]
|
feature_category :code_review_workflow, [:merge_requests]
|
||||||
|
|
||||||
urgency :low, [:merge_requests, :activity]
|
urgency :low, [:merge_requests, :activity]
|
||||||
urgency :low, [:issues, :issues_calendar]
|
urgency :low, [:issues, :issues_calendar]
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
class Groups::AutocompleteSourcesController < Groups::ApplicationController
|
class Groups::AutocompleteSourcesController < Groups::ApplicationController
|
||||||
feature_category :subgroups, [:members]
|
feature_category :subgroups, [:members]
|
||||||
feature_category :team_planning, [:issues, :labels, :milestones, :commands]
|
feature_category :team_planning, [:issues, :labels, :milestones, :commands]
|
||||||
feature_category :code_review, [:merge_requests]
|
feature_category :code_review_workflow, [:merge_requests]
|
||||||
|
|
||||||
urgency :low, [:issues, :labels, :milestones, :commands, :merge_requests, :members]
|
urgency :low, [:issues, :labels, :milestones, :commands, :merge_requests, :members]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ class GroupsController < Groups::ApplicationController
|
||||||
]
|
]
|
||||||
|
|
||||||
feature_category :team_planning, [:issues, :issues_calendar, :preview_markdown]
|
feature_category :team_planning, [:issues, :issues_calendar, :preview_markdown]
|
||||||
feature_category :code_review, [:merge_requests, :unfoldered_environment_names]
|
feature_category :code_review_workflow, [:merge_requests, :unfoldered_environment_names]
|
||||||
feature_category :projects, [:projects]
|
feature_category :projects, [:projects]
|
||||||
feature_category :importers, [:export, :download_export]
|
feature_category :importers, [:export, :download_export]
|
||||||
urgency :low, [:export, :download_export]
|
urgency :low, [:export, :download_export]
|
||||||
|
|
|
||||||
|
|
@ -306,7 +306,6 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController
|
||||||
end
|
end
|
||||||
|
|
||||||
def persist_accepted_terms_if_required(user)
|
def persist_accepted_terms_if_required(user)
|
||||||
return unless Feature.enabled?(:update_oauth_registration_flow)
|
|
||||||
return unless user.persisted?
|
return unless user.persisted?
|
||||||
return unless Gitlab::CurrentSettings.current_application_settings.enforce_terms?
|
return unless Gitlab::CurrentSettings.current_application_settings.enforce_terms?
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ class Projects::AutocompleteSourcesController < Projects::ApplicationController
|
||||||
before_action :authorize_read_crm_contact!, only: :contacts
|
before_action :authorize_read_crm_contact!, only: :contacts
|
||||||
|
|
||||||
feature_category :team_planning, [:issues, :labels, :milestones, :commands, :contacts]
|
feature_category :team_planning, [:issues, :labels, :milestones, :commands, :contacts]
|
||||||
feature_category :code_review, [:merge_requests]
|
feature_category :code_review_workflow, [:merge_requests]
|
||||||
feature_category :users, [:members]
|
feature_category :users, [:members]
|
||||||
feature_category :source_code_management, [:snippets]
|
feature_category :source_code_management, [:snippets]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ class Projects::MergeRequests::ApplicationController < Projects::ApplicationCont
|
||||||
before_action :merge_request
|
before_action :merge_request
|
||||||
before_action :authorize_read_merge_request!
|
before_action :authorize_read_merge_request!
|
||||||
|
|
||||||
feature_category :code_review
|
feature_category :code_review_workflow
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,7 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo
|
||||||
|
|
||||||
after_action :log_merge_request_show, only: [:show, :diffs]
|
after_action :log_merge_request_show, only: [:show, :diffs]
|
||||||
|
|
||||||
feature_category :code_review, [
|
feature_category :code_review_workflow, [
|
||||||
:assign_related_issues, :bulk_update, :cancel_auto_merge,
|
:assign_related_issues, :bulk_update, :cancel_auto_merge,
|
||||||
:commit_change_content, :commits, :context_commits, :destroy,
|
:commit_change_content, :commits, :context_commits, :destroy,
|
||||||
:discussions, :edit, :index, :merge, :rebase, :remove_wip,
|
:discussions, :edit, :index, :merge, :rebase, :remove_wip,
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ module Projects
|
||||||
module Settings
|
module Settings
|
||||||
class CiCdController < Projects::ApplicationController
|
class CiCdController < Projects::ApplicationController
|
||||||
include RunnerSetupScripts
|
include RunnerSetupScripts
|
||||||
|
include ZuoraCSP
|
||||||
|
|
||||||
NUMBER_OF_RUNNERS_PER_PAGE = 20
|
NUMBER_OF_RUNNERS_PER_PAGE = 20
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ module Projects
|
||||||
before_action :present_project, only: [:edit]
|
before_action :present_project, only: [:edit]
|
||||||
before_action :authorize_admin_project!
|
before_action :authorize_admin_project!
|
||||||
|
|
||||||
feature_category :code_review
|
feature_category :code_review_workflow
|
||||||
|
|
||||||
def update
|
def update
|
||||||
result = ::Projects::UpdateService.new(@project, current_user, project_params).execute
|
result = ::Projects::UpdateService.new(@project, current_user, project_params).execute
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@ class ProjectsController < Projects::ApplicationController
|
||||||
feature_category :source_code_management, [:remove_fork, :housekeeping, :refs]
|
feature_category :source_code_management, [:remove_fork, :housekeeping, :refs]
|
||||||
feature_category :team_planning, [:preview_markdown, :new_issuable_address]
|
feature_category :team_planning, [:preview_markdown, :new_issuable_address]
|
||||||
feature_category :importers, [:export, :remove_export, :generate_new_export, :download_export]
|
feature_category :importers, [:export, :remove_export, :generate_new_export, :download_export]
|
||||||
feature_category :code_review, [:unfoldered_environment_names]
|
feature_category :code_review_workflow, [:unfoldered_environment_names]
|
||||||
feature_category :portfolio_management, [:planning_hierarchy]
|
feature_category :portfolio_management, [:planning_hierarchy]
|
||||||
|
|
||||||
urgency :low, [:export, :remove_export, :generate_new_export, :download_export]
|
urgency :low, [:export, :remove_export, :generate_new_export, :download_export]
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,15 @@ module Resolvers
|
||||||
alias_method :project, :object
|
alias_method :project, :object
|
||||||
|
|
||||||
def resolve_with_lookahead(**args)
|
def resolve_with_lookahead(**args)
|
||||||
apply_lookahead(project.protected_branches)
|
protected_branches.map do |protected_branch|
|
||||||
|
::Projects::BranchRule.new(project, protected_branch)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def protected_branches
|
||||||
|
apply_lookahead(project.protected_branches.sorted_by_name)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ module Types
|
||||||
class BranchRuleType < BaseObject
|
class BranchRuleType < BaseObject
|
||||||
graphql_name 'BranchRule'
|
graphql_name 'BranchRule'
|
||||||
description 'List of branch rules for a project, grouped by branch name.'
|
description 'List of branch rules for a project, grouped by branch name.'
|
||||||
accepts ::ProtectedBranch
|
|
||||||
authorize :read_protected_branch
|
authorize :read_protected_branch
|
||||||
|
|
||||||
alias_method :branch_rule, :object
|
alias_method :branch_rule, :object
|
||||||
|
|
@ -22,6 +21,12 @@ module Types
|
||||||
calls_gitaly: true,
|
calls_gitaly: true,
|
||||||
description: "Check if this branch rule protects the project's default branch."
|
description: "Check if this branch rule protects the project's default branch."
|
||||||
|
|
||||||
|
field :is_protected,
|
||||||
|
type: GraphQL::Types::Boolean,
|
||||||
|
null: false,
|
||||||
|
method: :protected?,
|
||||||
|
description: "Check if this branch rule protects access for the branch."
|
||||||
|
|
||||||
field :matching_branches_count,
|
field :matching_branches_count,
|
||||||
type: GraphQL::Types::Int,
|
type: GraphQL::Types::Int,
|
||||||
null: false,
|
null: false,
|
||||||
|
|
@ -30,9 +35,8 @@ module Types
|
||||||
|
|
||||||
field :branch_protection,
|
field :branch_protection,
|
||||||
type: Types::BranchRules::BranchProtectionType,
|
type: Types::BranchRules::BranchProtectionType,
|
||||||
null: false,
|
null: true,
|
||||||
description: 'Branch protections configured for this branch rule.',
|
description: 'Branch protections configured for this branch rule.'
|
||||||
method: :itself
|
|
||||||
|
|
||||||
field :created_at,
|
field :created_at,
|
||||||
Types::TimeType,
|
Types::TimeType,
|
||||||
|
|
@ -43,10 +47,6 @@ module Types
|
||||||
Types::TimeType,
|
Types::TimeType,
|
||||||
null: false,
|
null: false,
|
||||||
description: 'Timestamp of when the branch rule was last updated.'
|
description: 'Timestamp of when the branch rule was last updated.'
|
||||||
|
|
||||||
def matching_branches_count
|
|
||||||
branch_rule.matching(branch_rule.project.repository.branch_names).count
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -284,23 +284,38 @@ module EmailsHelper
|
||||||
end
|
end
|
||||||
|
|
||||||
def change_reviewer_notification_text(new_reviewers, previous_reviewers, html_tag = nil)
|
def change_reviewer_notification_text(new_reviewers, previous_reviewers, html_tag = nil)
|
||||||
new = new_reviewers.any? ? users_to_sentence(new_reviewers) : s_('ChangeReviewer|Unassigned')
|
if new_reviewers.empty?
|
||||||
old = previous_reviewers.any? ? users_to_sentence(previous_reviewers) : nil
|
s_('ChangeReviewer|All reviewers were removed.')
|
||||||
|
|
||||||
if html_tag.present?
|
|
||||||
new = content_tag(html_tag, new)
|
|
||||||
old = content_tag(html_tag, old) if old.present?
|
|
||||||
end
|
|
||||||
|
|
||||||
if old.present?
|
|
||||||
s_('ChangeReviewer|Reviewer changed from %{old} to %{new}').html_safe % { old: old, new: new }
|
|
||||||
else
|
else
|
||||||
s_('ChangeReviewer|Reviewer changed to %{new}').html_safe % { new: new }
|
added_reviewers = new_reviewers - previous_reviewers
|
||||||
|
removed_reviewers = previous_reviewers - new_reviewers
|
||||||
|
|
||||||
|
added_reviewers_template_text = added_reviewers.size > 1 ? "were added as reviewers.<br>" : "was added as a reviewer.<br>"
|
||||||
|
removed_reviewers_template_text = removed_reviewers.size > 1 ? "were removed from reviewers." : "was removed from reviewers."
|
||||||
|
|
||||||
|
added = format_reviewers_string(added_reviewers, html_tag)
|
||||||
|
removed = format_reviewers_string(removed_reviewers, html_tag)
|
||||||
|
|
||||||
|
added_reviewers_text = added ? "#{added} #{added_reviewers_template_text}".html_safe : ''
|
||||||
|
removed_reviewers_text = removed ? "#{removed} #{removed_reviewers_template_text}".html_safe : ''
|
||||||
|
s_('ChangeReviewer|%{added_reviewers_text}%{removed_reviewers_text}').html_safe % { added_reviewers_text: added_reviewers_text, removed_reviewers_text: removed_reviewers_text }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def format_reviewers_string(reviewers, html_tag = nil)
|
||||||
|
return unless reviewers.any?
|
||||||
|
|
||||||
|
formatted_reviewers = users_to_sentence(reviewers)
|
||||||
|
|
||||||
|
if html_tag.present?
|
||||||
|
content_tag(html_tag, formatted_reviewers)
|
||||||
|
else
|
||||||
|
formatted_reviewers
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def users_to_sentence(users)
|
def users_to_sentence(users)
|
||||||
sanitize_name(users.map(&:name).to_sentence)
|
sanitize_name(users.map(&:name).to_sentence)
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
module Projects
|
||||||
|
class BranchRule
|
||||||
|
extend Forwardable
|
||||||
|
|
||||||
|
attr_reader :project, :protected_branch
|
||||||
|
|
||||||
|
def_delegators(:protected_branch, :name, :group, :default_branch?, :created_at, :updated_at)
|
||||||
|
|
||||||
|
def initialize(project, protected_branch)
|
||||||
|
@protected_branch = protected_branch
|
||||||
|
@project = project
|
||||||
|
end
|
||||||
|
|
||||||
|
def protected?
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
|
def matching_branches_count
|
||||||
|
branch_names = project.repository.branch_names
|
||||||
|
matching_branches = protected_branch.matching(branch_names)
|
||||||
|
matching_branches.count
|
||||||
|
end
|
||||||
|
|
||||||
|
def branch_protection
|
||||||
|
protected_branch
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Projects::BranchRule.prepend_mod
|
||||||
|
|
@ -8,11 +8,9 @@ class ProtectedBranch < ApplicationRecord
|
||||||
|
|
||||||
validate :validate_either_project_or_top_group
|
validate :validate_either_project_or_top_group
|
||||||
|
|
||||||
scope :requiring_code_owner_approval,
|
scope :requiring_code_owner_approval, -> { where(code_owner_approval_required: true) }
|
||||||
-> { where(code_owner_approval_required: true) }
|
scope :allowing_force_push, -> { where(allow_force_push: true) }
|
||||||
|
scope :sorted_by_name, -> { order(name: :asc) }
|
||||||
scope :allowing_force_push,
|
|
||||||
-> { where(allow_force_push: true) }
|
|
||||||
|
|
||||||
protected_ref_access_levels :merge, :push
|
protected_ref_access_levels :merge, :push
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ class User < ApplicationRecord
|
||||||
attribute :hide_no_password, default: false
|
attribute :hide_no_password, default: false
|
||||||
attribute :project_view, default: :files
|
attribute :project_view, default: :files
|
||||||
attribute :notified_of_own_activity, default: false
|
attribute :notified_of_own_activity, default: false
|
||||||
attribute :preferred_language, default: -> { I18n.default_locale }
|
attribute :preferred_language, default: -> { Gitlab::CurrentSettings.default_preferred_language }
|
||||||
attribute :theme_id, default: -> { gitlab_config.default_theme }
|
attribute :theme_id, default: -> { gitlab_config.default_theme }
|
||||||
|
|
||||||
attr_encrypted :otp_secret,
|
attr_encrypted :otp_secret,
|
||||||
|
|
@ -541,9 +541,7 @@ class User < ApplicationRecord
|
||||||
strip_attributes! :name
|
strip_attributes! :name
|
||||||
|
|
||||||
def preferred_language
|
def preferred_language
|
||||||
read_attribute('preferred_language') ||
|
read_attribute('preferred_language').presence || Gitlab::CurrentSettings.default_preferred_language
|
||||||
I18n.default_locale.to_s.presence_in(Gitlab::I18n.available_locales) ||
|
|
||||||
default_preferred_language
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def active_for_authentication?
|
def active_for_authentication?
|
||||||
|
|
@ -2227,11 +2225,6 @@ class User < ApplicationRecord
|
||||||
otp_backup_codes.first.start_with?("$pbkdf2-sha512$")
|
otp_backup_codes.first.start_with?("$pbkdf2-sha512$")
|
||||||
end
|
end
|
||||||
|
|
||||||
# To enable JiHu repository to modify the default language options
|
|
||||||
def default_preferred_language
|
|
||||||
'en'
|
|
||||||
end
|
|
||||||
|
|
||||||
# rubocop: disable CodeReuse/ServiceClass
|
# rubocop: disable CodeReuse/ServiceClass
|
||||||
def add_primary_email_to_emails!
|
def add_primary_email_to_emails!
|
||||||
Emails::CreateService.new(self, user: self, email: self.email).execute(confirmed_at: self.confirmed_at)
|
Emails::CreateService.new(self, user: self, email: self.email).execute(confirmed_at: self.confirmed_at)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
module Projects
|
||||||
|
class BranchRulePolicy < ::ProtectedBranchPolicy
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Projects::BranchRulePolicy.prepend_mod
|
||||||
|
|
@ -18,7 +18,6 @@ module Boards
|
||||||
# TODO: eliminate need for SQL literal fragment
|
# TODO: eliminate need for SQL literal fragment
|
||||||
columns = Arel.sql(fields.values_at(*keys).join(', '))
|
columns = Arel.sql(fields.values_at(*keys).join(', '))
|
||||||
results = item_model.where(id: collection_ids)
|
results = item_model.where(id: collection_ids)
|
||||||
results = query_additions(results, required_fields)
|
|
||||||
results = results.select(columns)
|
results = results.select(columns)
|
||||||
|
|
||||||
Hash[keys.zip(results.pluck(columns).flatten)]
|
Hash[keys.zip(results.pluck(columns).flatten)]
|
||||||
|
|
@ -27,11 +26,6 @@ module Boards
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
# override if needed
|
|
||||||
def query_additions(items, required_fields)
|
|
||||||
items
|
|
||||||
end
|
|
||||||
|
|
||||||
def collection_ids
|
def collection_ids
|
||||||
@collection_ids ||= init_collection.select(item_model.arel_table[:id])
|
@collection_ids ||= init_collection.select(item_model.arel_table[:id])
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,14 @@
|
||||||
|
|
||||||
module Integrations
|
module Integrations
|
||||||
module ProjectTestData
|
module ProjectTestData
|
||||||
|
NoDataError = Class.new(ArgumentError)
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def no_data_error(msg)
|
||||||
|
raise NoDataError, msg
|
||||||
|
end
|
||||||
|
|
||||||
def push_events_data
|
def push_events_data
|
||||||
Gitlab::DataBuilder::Push.build_sample(project, current_user)
|
Gitlab::DataBuilder::Push.build_sample(project, current_user)
|
||||||
end
|
end
|
||||||
|
|
@ -11,7 +17,7 @@ module Integrations
|
||||||
def note_events_data
|
def note_events_data
|
||||||
note = NotesFinder.new(current_user, project: project, target: project, sort: 'id_desc').execute.first
|
note = NotesFinder.new(current_user, project: project, target: project, sort: 'id_desc').execute.first
|
||||||
|
|
||||||
return { error: s_('TestHooks|Ensure the project has notes.') } unless note.present?
|
no_data_error(s_('TestHooks|Ensure the project has notes.')) unless note.present?
|
||||||
|
|
||||||
Gitlab::DataBuilder::Note.build(note, current_user)
|
Gitlab::DataBuilder::Note.build(note, current_user)
|
||||||
end
|
end
|
||||||
|
|
@ -19,7 +25,7 @@ module Integrations
|
||||||
def issues_events_data
|
def issues_events_data
|
||||||
issue = IssuesFinder.new(current_user, project_id: project.id, sort: 'created_desc').execute.first
|
issue = IssuesFinder.new(current_user, project_id: project.id, sort: 'created_desc').execute.first
|
||||||
|
|
||||||
return { error: s_('TestHooks|Ensure the project has issues.') } unless issue.present?
|
no_data_error(s_('TestHooks|Ensure the project has issues.')) unless issue.present?
|
||||||
|
|
||||||
issue.to_hook_data(current_user)
|
issue.to_hook_data(current_user)
|
||||||
end
|
end
|
||||||
|
|
@ -27,7 +33,7 @@ module Integrations
|
||||||
def merge_requests_events_data
|
def merge_requests_events_data
|
||||||
merge_request = MergeRequestsFinder.new(current_user, project_id: project.id, sort: 'created_desc').execute.first
|
merge_request = MergeRequestsFinder.new(current_user, project_id: project.id, sort: 'created_desc').execute.first
|
||||||
|
|
||||||
return { error: s_('TestHooks|Ensure the project has merge requests.') } unless merge_request.present?
|
no_data_error(s_('TestHooks|Ensure the project has merge requests.')) unless merge_request.present?
|
||||||
|
|
||||||
merge_request.to_hook_data(current_user)
|
merge_request.to_hook_data(current_user)
|
||||||
end
|
end
|
||||||
|
|
@ -35,7 +41,7 @@ module Integrations
|
||||||
def job_events_data
|
def job_events_data
|
||||||
build = Ci::JobsFinder.new(current_user: current_user, project: project).execute.first
|
build = Ci::JobsFinder.new(current_user: current_user, project: project).execute.first
|
||||||
|
|
||||||
return { error: s_('TestHooks|Ensure the project has CI jobs.') } unless build.present?
|
no_data_error(s_('TestHooks|Ensure the project has CI jobs.')) unless build.present?
|
||||||
|
|
||||||
Gitlab::DataBuilder::Build.build(build)
|
Gitlab::DataBuilder::Build.build(build)
|
||||||
end
|
end
|
||||||
|
|
@ -43,7 +49,7 @@ module Integrations
|
||||||
def pipeline_events_data
|
def pipeline_events_data
|
||||||
pipeline = Ci::PipelinesFinder.new(project, current_user, order_by: 'id', sort: 'desc').execute.first
|
pipeline = Ci::PipelinesFinder.new(project, current_user, order_by: 'id', sort: 'desc').execute.first
|
||||||
|
|
||||||
return { error: s_('TestHooks|Ensure the project has CI pipelines.') } unless pipeline.present?
|
no_data_error(s_('TestHooks|Ensure the project has CI pipelines.')) unless pipeline.present?
|
||||||
|
|
||||||
Gitlab::DataBuilder::Pipeline.build(pipeline)
|
Gitlab::DataBuilder::Pipeline.build(pipeline)
|
||||||
end
|
end
|
||||||
|
|
@ -51,9 +57,7 @@ module Integrations
|
||||||
def wiki_page_events_data
|
def wiki_page_events_data
|
||||||
page = project.wiki.list_pages(limit: 1).first
|
page = project.wiki.list_pages(limit: 1).first
|
||||||
|
|
||||||
if !project.wiki_enabled? || page.blank?
|
no_data_error(s_('TestHooks|Ensure the wiki is enabled and has pages.')) if !project.wiki_enabled? || page.blank?
|
||||||
return { error: s_('TestHooks|Ensure the wiki is enabled and has pages.') }
|
|
||||||
end
|
|
||||||
|
|
||||||
Gitlab::DataBuilder::WikiPage.build(page, current_user, 'create')
|
Gitlab::DataBuilder::WikiPage.build(page, current_user, 'create')
|
||||||
end
|
end
|
||||||
|
|
@ -61,7 +65,7 @@ module Integrations
|
||||||
def deployment_events_data
|
def deployment_events_data
|
||||||
deployment = DeploymentsFinder.new(project: project, order_by: 'created_at', sort: 'desc').execute.first
|
deployment = DeploymentsFinder.new(project: project, order_by: 'created_at', sort: 'desc').execute.first
|
||||||
|
|
||||||
return { error: s_('TestHooks|Ensure the project has deployments.') } unless deployment.present?
|
no_data_error(s_('TestHooks|Ensure the project has deployments.')) unless deployment.present?
|
||||||
|
|
||||||
Gitlab::DataBuilder::Deployment.build(deployment, deployment.status, Time.current)
|
Gitlab::DataBuilder::Deployment.build(deployment, deployment.status, Time.current)
|
||||||
end
|
end
|
||||||
|
|
@ -69,7 +73,7 @@ module Integrations
|
||||||
def releases_events_data
|
def releases_events_data
|
||||||
release = ReleasesFinder.new(project, current_user, order_by: :created_at, sort: :desc).execute.first
|
release = ReleasesFinder.new(project, current_user, order_by: :created_at, sort: :desc).execute.first
|
||||||
|
|
||||||
return { error: s_('TestHooks|Ensure the project has releases.') } unless release.present?
|
no_data_error(s_('TestHooks|Ensure the project has releases.')) unless release.present?
|
||||||
|
|
||||||
release.to_hook_data('create')
|
release.to_hook_data('create')
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -21,9 +21,9 @@ module Integrations
|
||||||
return error('Testing not available for this event')
|
return error('Testing not available for this event')
|
||||||
end
|
end
|
||||||
|
|
||||||
return error(data[:error]) if data[:error].present?
|
|
||||||
|
|
||||||
integration.test(data)
|
integration.test(data)
|
||||||
|
rescue ArgumentError => e
|
||||||
|
error(e.message)
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
|
||||||
|
|
@ -16,9 +16,16 @@ module TestHooks
|
||||||
trigger_key = hook.class.triggers.key(trigger.to_sym)
|
trigger_key = hook.class.triggers.key(trigger.to_sym)
|
||||||
|
|
||||||
return error('Testing not available for this hook') if trigger_key.nil? || data.blank?
|
return error('Testing not available for this hook') if trigger_key.nil? || data.blank?
|
||||||
|
|
||||||
return error(data[:error]) if data[:error].present?
|
return error(data[:error]) if data[:error].present?
|
||||||
|
|
||||||
hook.execute(data, trigger_key, force: true)
|
hook.execute(data, trigger_key, force: true)
|
||||||
|
rescue ArgumentError => e
|
||||||
|
error(e.message)
|
||||||
|
end
|
||||||
|
|
||||||
|
def error(message)
|
||||||
|
ServiceResponse.error(message: message)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
- register_omniauth_params = Feature.enabled?(:update_oauth_registration_flow) ? { intent: :register } : {}
|
- register_omniauth_params = { intent: :register }
|
||||||
- if Feature.enabled?(:restyle_login_page, @project)
|
- if Feature.enabled?(:restyle_login_page, @project)
|
||||||
.gl-text-center.gl-pt-5
|
.gl-text-center.gl-pt-5
|
||||||
%label.gl-font-weight-normal
|
%label.gl-font-weight-normal
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
#pipeline-schedules-callout{ data: { docs_url: help_page_path('ci/pipelines/schedules'), illustration_url: image_path('illustrations/pipeline_schedule_callout.svg') } }
|
#pipeline-schedules-callout{ data: { docs_url: help_page_path('ci/pipelines/schedules'), illustration_url: image_path('illustrations/pipeline_schedule_callout.svg') } }
|
||||||
|
|
||||||
- if Feature.enabled?(:pipeline_schedules_vue, @project)
|
- if Feature.enabled?(:pipeline_schedules_vue, @project)
|
||||||
#pipeline-schedules-app{ data: { full_path: @project.full_path } }
|
#pipeline-schedules-app{ data: { full_path: @project.full_path, pipelines_path: project_pipelines_path(@project) } }
|
||||||
- else
|
- else
|
||||||
.top-area
|
.top-area
|
||||||
- schedule_path_proc = ->(scope) { pipeline_schedules_path(@project, scope: scope) }
|
- schedule_path_proc = ->(scope) { pipeline_schedules_path(@project, scope: scope) }
|
||||||
|
|
|
||||||
|
|
@ -698,7 +698,7 @@
|
||||||
:tags: []
|
:tags: []
|
||||||
- :name: cronjob:remove_unreferenced_lfs_objects
|
- :name: cronjob:remove_unreferenced_lfs_objects
|
||||||
:worker_name: RemoveUnreferencedLfsObjectsWorker
|
:worker_name: RemoveUnreferencedLfsObjectsWorker
|
||||||
:feature_category: :git_lfs
|
:feature_category: :source_code_management
|
||||||
:has_external_dependencies: false
|
:has_external_dependencies: false
|
||||||
:urgency: :low
|
:urgency: :low
|
||||||
:resource_boundary: :unknown
|
:resource_boundary: :unknown
|
||||||
|
|
@ -725,7 +725,7 @@
|
||||||
:tags: []
|
:tags: []
|
||||||
- :name: cronjob:schedule_merge_request_cleanup_refs
|
- :name: cronjob:schedule_merge_request_cleanup_refs
|
||||||
:worker_name: ScheduleMergeRequestCleanupRefsWorker
|
:worker_name: ScheduleMergeRequestCleanupRefsWorker
|
||||||
:feature_category: :code_review
|
:feature_category: :code_review_workflow
|
||||||
:has_external_dependencies: false
|
:has_external_dependencies: false
|
||||||
:urgency: :low
|
:urgency: :low
|
||||||
:resource_boundary: :unknown
|
:resource_boundary: :unknown
|
||||||
|
|
@ -734,7 +734,7 @@
|
||||||
:tags: []
|
:tags: []
|
||||||
- :name: cronjob:schedule_migrate_external_diffs
|
- :name: cronjob:schedule_migrate_external_diffs
|
||||||
:worker_name: ScheduleMigrateExternalDiffsWorker
|
:worker_name: ScheduleMigrateExternalDiffsWorker
|
||||||
:feature_category: :code_review
|
:feature_category: :code_review_workflow
|
||||||
:has_external_dependencies: false
|
:has_external_dependencies: false
|
||||||
:urgency: :low
|
:urgency: :low
|
||||||
:resource_boundary: :unknown
|
:resource_boundary: :unknown
|
||||||
|
|
@ -779,7 +779,7 @@
|
||||||
:tags: []
|
:tags: []
|
||||||
- :name: cronjob:stuck_merge_jobs
|
- :name: cronjob:stuck_merge_jobs
|
||||||
:worker_name: StuckMergeJobsWorker
|
:worker_name: StuckMergeJobsWorker
|
||||||
:feature_category: :code_review
|
:feature_category: :code_review_workflow
|
||||||
:has_external_dependencies: false
|
:has_external_dependencies: false
|
||||||
:urgency: :low
|
:urgency: :low
|
||||||
:resource_boundary: :unknown
|
:resource_boundary: :unknown
|
||||||
|
|
@ -2345,7 +2345,7 @@
|
||||||
:tags: []
|
:tags: []
|
||||||
- :name: create_note_diff_file
|
- :name: create_note_diff_file
|
||||||
:worker_name: CreateNoteDiffFileWorker
|
:worker_name: CreateNoteDiffFileWorker
|
||||||
:feature_category: :code_review
|
:feature_category: :code_review_workflow
|
||||||
:has_external_dependencies: false
|
:has_external_dependencies: false
|
||||||
:urgency: :low
|
:urgency: :low
|
||||||
:resource_boundary: :unknown
|
:resource_boundary: :unknown
|
||||||
|
|
@ -2363,7 +2363,7 @@
|
||||||
:tags: []
|
:tags: []
|
||||||
- :name: delete_diff_files
|
- :name: delete_diff_files
|
||||||
:worker_name: DeleteDiffFilesWorker
|
:worker_name: DeleteDiffFilesWorker
|
||||||
:feature_category: :code_review
|
:feature_category: :code_review_workflow
|
||||||
:has_external_dependencies: false
|
:has_external_dependencies: false
|
||||||
:urgency: :low
|
:urgency: :low
|
||||||
:resource_boundary: :unknown
|
:resource_boundary: :unknown
|
||||||
|
|
@ -2750,7 +2750,7 @@
|
||||||
:tags: []
|
:tags: []
|
||||||
- :name: merge_request_cleanup_refs
|
- :name: merge_request_cleanup_refs
|
||||||
:worker_name: MergeRequestCleanupRefsWorker
|
:worker_name: MergeRequestCleanupRefsWorker
|
||||||
:feature_category: :code_review
|
:feature_category: :code_review_workflow
|
||||||
:has_external_dependencies: false
|
:has_external_dependencies: false
|
||||||
:urgency: :low
|
:urgency: :low
|
||||||
:resource_boundary: :unknown
|
:resource_boundary: :unknown
|
||||||
|
|
@ -2759,7 +2759,7 @@
|
||||||
:tags: []
|
:tags: []
|
||||||
- :name: merge_request_mergeability_check
|
- :name: merge_request_mergeability_check
|
||||||
:worker_name: MergeRequestMergeabilityCheckWorker
|
:worker_name: MergeRequestMergeabilityCheckWorker
|
||||||
:feature_category: :code_review
|
:feature_category: :code_review_workflow
|
||||||
:has_external_dependencies: false
|
:has_external_dependencies: false
|
||||||
:urgency: :low
|
:urgency: :low
|
||||||
:resource_boundary: :unknown
|
:resource_boundary: :unknown
|
||||||
|
|
@ -2768,7 +2768,7 @@
|
||||||
:tags: []
|
:tags: []
|
||||||
- :name: merge_requests_close_issue
|
- :name: merge_requests_close_issue
|
||||||
:worker_name: MergeRequests::CloseIssueWorker
|
:worker_name: MergeRequests::CloseIssueWorker
|
||||||
:feature_category: :code_review
|
:feature_category: :code_review_workflow
|
||||||
:has_external_dependencies: true
|
:has_external_dependencies: true
|
||||||
:urgency: :low
|
:urgency: :low
|
||||||
:resource_boundary: :unknown
|
:resource_boundary: :unknown
|
||||||
|
|
@ -2777,7 +2777,7 @@
|
||||||
:tags: []
|
:tags: []
|
||||||
- :name: merge_requests_create_approval_event
|
- :name: merge_requests_create_approval_event
|
||||||
:worker_name: MergeRequests::CreateApprovalEventWorker
|
:worker_name: MergeRequests::CreateApprovalEventWorker
|
||||||
:feature_category: :code_review
|
:feature_category: :code_review_workflow
|
||||||
:has_external_dependencies: false
|
:has_external_dependencies: false
|
||||||
:urgency: :low
|
:urgency: :low
|
||||||
:resource_boundary: :unknown
|
:resource_boundary: :unknown
|
||||||
|
|
@ -2786,7 +2786,7 @@
|
||||||
:tags: []
|
:tags: []
|
||||||
- :name: merge_requests_create_approval_note
|
- :name: merge_requests_create_approval_note
|
||||||
:worker_name: MergeRequests::CreateApprovalNoteWorker
|
:worker_name: MergeRequests::CreateApprovalNoteWorker
|
||||||
:feature_category: :code_review
|
:feature_category: :code_review_workflow
|
||||||
:has_external_dependencies: false
|
:has_external_dependencies: false
|
||||||
:urgency: :low
|
:urgency: :low
|
||||||
:resource_boundary: :unknown
|
:resource_boundary: :unknown
|
||||||
|
|
@ -2804,7 +2804,7 @@
|
||||||
:tags: []
|
:tags: []
|
||||||
- :name: merge_requests_execute_approval_hooks
|
- :name: merge_requests_execute_approval_hooks
|
||||||
:worker_name: MergeRequests::ExecuteApprovalHooksWorker
|
:worker_name: MergeRequests::ExecuteApprovalHooksWorker
|
||||||
:feature_category: :code_review
|
:feature_category: :code_review_workflow
|
||||||
:has_external_dependencies: true
|
:has_external_dependencies: true
|
||||||
:urgency: :low
|
:urgency: :low
|
||||||
:resource_boundary: :unknown
|
:resource_boundary: :unknown
|
||||||
|
|
@ -2813,7 +2813,7 @@
|
||||||
:tags: []
|
:tags: []
|
||||||
- :name: merge_requests_handle_assignees_change
|
- :name: merge_requests_handle_assignees_change
|
||||||
:worker_name: MergeRequests::HandleAssigneesChangeWorker
|
:worker_name: MergeRequests::HandleAssigneesChangeWorker
|
||||||
:feature_category: :code_review
|
:feature_category: :code_review_workflow
|
||||||
:has_external_dependencies: false
|
:has_external_dependencies: false
|
||||||
:urgency: :high
|
:urgency: :high
|
||||||
:resource_boundary: :unknown
|
:resource_boundary: :unknown
|
||||||
|
|
@ -2822,7 +2822,7 @@
|
||||||
:tags: []
|
:tags: []
|
||||||
- :name: merge_requests_resolve_todos
|
- :name: merge_requests_resolve_todos
|
||||||
:worker_name: MergeRequests::ResolveTodosWorker
|
:worker_name: MergeRequests::ResolveTodosWorker
|
||||||
:feature_category: :code_review
|
:feature_category: :code_review_workflow
|
||||||
:has_external_dependencies: false
|
:has_external_dependencies: false
|
||||||
:urgency: :high
|
:urgency: :high
|
||||||
:resource_boundary: :unknown
|
:resource_boundary: :unknown
|
||||||
|
|
@ -2831,7 +2831,7 @@
|
||||||
:tags: []
|
:tags: []
|
||||||
- :name: merge_requests_resolve_todos_after_approval
|
- :name: merge_requests_resolve_todos_after_approval
|
||||||
:worker_name: MergeRequests::ResolveTodosAfterApprovalWorker
|
:worker_name: MergeRequests::ResolveTodosAfterApprovalWorker
|
||||||
:feature_category: :code_review
|
:feature_category: :code_review_workflow
|
||||||
:has_external_dependencies: false
|
:has_external_dependencies: false
|
||||||
:urgency: :low
|
:urgency: :low
|
||||||
:resource_boundary: :unknown
|
:resource_boundary: :unknown
|
||||||
|
|
@ -2840,7 +2840,7 @@
|
||||||
:tags: []
|
:tags: []
|
||||||
- :name: merge_requests_update_head_pipeline
|
- :name: merge_requests_update_head_pipeline
|
||||||
:worker_name: MergeRequests::UpdateHeadPipelineWorker
|
:worker_name: MergeRequests::UpdateHeadPipelineWorker
|
||||||
:feature_category: :code_review
|
:feature_category: :code_review_workflow
|
||||||
:has_external_dependencies: false
|
:has_external_dependencies: false
|
||||||
:urgency: :high
|
:urgency: :high
|
||||||
:resource_boundary: :cpu
|
:resource_boundary: :cpu
|
||||||
|
|
@ -2867,7 +2867,7 @@
|
||||||
:tags: []
|
:tags: []
|
||||||
- :name: migrate_external_diffs
|
- :name: migrate_external_diffs
|
||||||
:worker_name: MigrateExternalDiffsWorker
|
:worker_name: MigrateExternalDiffsWorker
|
||||||
:feature_category: :code_review
|
:feature_category: :code_review_workflow
|
||||||
:has_external_dependencies: false
|
:has_external_dependencies: false
|
||||||
:urgency: :low
|
:urgency: :low
|
||||||
:resource_boundary: :unknown
|
:resource_boundary: :unknown
|
||||||
|
|
@ -2903,7 +2903,7 @@
|
||||||
:tags: []
|
:tags: []
|
||||||
- :name: new_merge_request
|
- :name: new_merge_request
|
||||||
:worker_name: NewMergeRequestWorker
|
:worker_name: NewMergeRequestWorker
|
||||||
:feature_category: :code_review
|
:feature_category: :code_review_workflow
|
||||||
:has_external_dependencies: false
|
:has_external_dependencies: false
|
||||||
:urgency: :high
|
:urgency: :high
|
||||||
:resource_boundary: :cpu
|
:resource_boundary: :cpu
|
||||||
|
|
@ -3362,7 +3362,7 @@
|
||||||
:tags: []
|
:tags: []
|
||||||
- :name: update_merge_requests
|
- :name: update_merge_requests
|
||||||
:worker_name: UpdateMergeRequestsWorker
|
:worker_name: UpdateMergeRequestsWorker
|
||||||
:feature_category: :code_review
|
:feature_category: :code_review_workflow
|
||||||
:has_external_dependencies: false
|
:has_external_dependencies: false
|
||||||
:urgency: :high
|
:urgency: :high
|
||||||
:resource_boundary: :cpu
|
:resource_boundary: :cpu
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ class CreateNoteDiffFileWorker # rubocop:disable Scalability/IdempotentWorker
|
||||||
|
|
||||||
sidekiq_options retry: 3
|
sidekiq_options retry: 3
|
||||||
|
|
||||||
feature_category :code_review
|
feature_category :code_review_workflow
|
||||||
|
|
||||||
def perform(diff_note_id)
|
def perform(diff_note_id)
|
||||||
return unless diff_note_id.present?
|
return unless diff_note_id.present?
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ class DeleteDiffFilesWorker # rubocop:disable Scalability/IdempotentWorker
|
||||||
|
|
||||||
sidekiq_options retry: 3
|
sidekiq_options retry: 3
|
||||||
|
|
||||||
feature_category :code_review
|
feature_category :code_review_workflow
|
||||||
|
|
||||||
# rubocop: disable CodeReuse/ActiveRecord
|
# rubocop: disable CodeReuse/ActiveRecord
|
||||||
def perform(merge_request_diff_id)
|
def perform(merge_request_diff_id)
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ class MergeRequestCleanupRefsWorker
|
||||||
|
|
||||||
sidekiq_options retry: 3
|
sidekiq_options retry: 3
|
||||||
|
|
||||||
feature_category :code_review
|
feature_category :code_review_workflow
|
||||||
idempotent!
|
idempotent!
|
||||||
|
|
||||||
# Hard-coded to 4 for now. Will be configurable later on via application settings.
|
# Hard-coded to 4 for now. Will be configurable later on via application settings.
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ class MergeRequestMergeabilityCheckWorker
|
||||||
|
|
||||||
sidekiq_options retry: 3
|
sidekiq_options retry: 3
|
||||||
|
|
||||||
feature_category :code_review
|
feature_category :code_review_workflow
|
||||||
idempotent!
|
idempotent!
|
||||||
|
|
||||||
def logger
|
def logger
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ module MergeRequests
|
||||||
include ApplicationWorker
|
include ApplicationWorker
|
||||||
|
|
||||||
data_consistency :always
|
data_consistency :always
|
||||||
feature_category :code_review
|
feature_category :code_review_workflow
|
||||||
urgency :low
|
urgency :low
|
||||||
idempotent!
|
idempotent!
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ module MergeRequests
|
||||||
include Gitlab::EventStore::Subscriber
|
include Gitlab::EventStore::Subscriber
|
||||||
|
|
||||||
data_consistency :always
|
data_consistency :always
|
||||||
feature_category :code_review
|
feature_category :code_review_workflow
|
||||||
urgency :low
|
urgency :low
|
||||||
idempotent!
|
idempotent!
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ module MergeRequests
|
||||||
include Gitlab::EventStore::Subscriber
|
include Gitlab::EventStore::Subscriber
|
||||||
|
|
||||||
data_consistency :always
|
data_consistency :always
|
||||||
feature_category :code_review
|
feature_category :code_review_workflow
|
||||||
urgency :low
|
urgency :low
|
||||||
idempotent!
|
idempotent!
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ module MergeRequests
|
||||||
include Gitlab::EventStore::Subscriber
|
include Gitlab::EventStore::Subscriber
|
||||||
|
|
||||||
data_consistency :always
|
data_consistency :always
|
||||||
feature_category :code_review
|
feature_category :code_review_workflow
|
||||||
urgency :low
|
urgency :low
|
||||||
idempotent!
|
idempotent!
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ class MergeRequests::HandleAssigneesChangeWorker
|
||||||
|
|
||||||
sidekiq_options retry: 3
|
sidekiq_options retry: 3
|
||||||
|
|
||||||
feature_category :code_review
|
feature_category :code_review_workflow
|
||||||
urgency :high
|
urgency :high
|
||||||
deduplicate :until_executed
|
deduplicate :until_executed
|
||||||
idempotent!
|
idempotent!
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ module MergeRequests
|
||||||
include Gitlab::EventStore::Subscriber
|
include Gitlab::EventStore::Subscriber
|
||||||
|
|
||||||
data_consistency :always
|
data_consistency :always
|
||||||
feature_category :code_review
|
feature_category :code_review_workflow
|
||||||
urgency :low
|
urgency :low
|
||||||
idempotent!
|
idempotent!
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ class MergeRequests::ResolveTodosWorker
|
||||||
|
|
||||||
sidekiq_options retry: 3
|
sidekiq_options retry: 3
|
||||||
|
|
||||||
feature_category :code_review
|
feature_category :code_review_workflow
|
||||||
urgency :high
|
urgency :high
|
||||||
deduplicate :until_executed
|
deduplicate :until_executed
|
||||||
idempotent!
|
idempotent!
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ module MergeRequests
|
||||||
class UpdateHeadPipelineWorker
|
class UpdateHeadPipelineWorker
|
||||||
include Gitlab::EventStore::Subscriber
|
include Gitlab::EventStore::Subscriber
|
||||||
|
|
||||||
feature_category :code_review
|
feature_category :code_review_workflow
|
||||||
urgency :high
|
urgency :high
|
||||||
worker_resource_boundary :cpu
|
worker_resource_boundary :cpu
|
||||||
data_consistency :always
|
data_consistency :always
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ class MigrateExternalDiffsWorker # rubocop:disable Scalability/IdempotentWorker
|
||||||
|
|
||||||
sidekiq_options retry: 3
|
sidekiq_options retry: 3
|
||||||
|
|
||||||
feature_category :code_review
|
feature_category :code_review_workflow
|
||||||
|
|
||||||
def perform(merge_request_diff_id)
|
def perform(merge_request_diff_id)
|
||||||
diff = MergeRequestDiff.find_by_id(merge_request_diff_id)
|
diff = MergeRequestDiff.find_by_id(merge_request_diff_id)
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ class NewMergeRequestWorker # rubocop:disable Scalability/IdempotentWorker
|
||||||
sidekiq_options retry: 3
|
sidekiq_options retry: 3
|
||||||
include NewIssuable
|
include NewIssuable
|
||||||
|
|
||||||
feature_category :code_review
|
feature_category :code_review_workflow
|
||||||
urgency :high
|
urgency :high
|
||||||
worker_resource_boundary :cpu
|
worker_resource_boundary :cpu
|
||||||
weight 2
|
weight 2
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ class RemoveUnreferencedLfsObjectsWorker
|
||||||
include CronjobQueue
|
include CronjobQueue
|
||||||
# rubocop:enable Scalability/CronWorkerContext
|
# rubocop:enable Scalability/CronWorkerContext
|
||||||
|
|
||||||
feature_category :git_lfs
|
feature_category :source_code_management
|
||||||
deduplicate :until_executed
|
deduplicate :until_executed
|
||||||
idempotent!
|
idempotent!
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ class ScheduleMergeRequestCleanupRefsWorker
|
||||||
|
|
||||||
include CronjobQueue # rubocop:disable Scalability/CronWorkerContext
|
include CronjobQueue # rubocop:disable Scalability/CronWorkerContext
|
||||||
|
|
||||||
feature_category :code_review
|
feature_category :code_review_workflow
|
||||||
idempotent!
|
idempotent!
|
||||||
|
|
||||||
def perform
|
def perform
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ class ScheduleMigrateExternalDiffsWorker # rubocop:disable Scalability/Idempoten
|
||||||
|
|
||||||
include Gitlab::ExclusiveLeaseHelpers
|
include Gitlab::ExclusiveLeaseHelpers
|
||||||
|
|
||||||
feature_category :code_review
|
feature_category :code_review_workflow
|
||||||
|
|
||||||
def perform
|
def perform
|
||||||
in_lock(self.class.name.underscore, ttl: 2.hours, retries: 0) do
|
in_lock(self.class.name.underscore, ttl: 2.hours, retries: 0) do
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ class StuckMergeJobsWorker # rubocop:disable Scalability/IdempotentWorker
|
||||||
|
|
||||||
include CronjobQueue # rubocop:disable Scalability/CronWorkerContext
|
include CronjobQueue # rubocop:disable Scalability/CronWorkerContext
|
||||||
|
|
||||||
feature_category :code_review
|
feature_category :code_review_workflow
|
||||||
|
|
||||||
def self.logger
|
def self.logger
|
||||||
Gitlab::AppLogger
|
Gitlab::AppLogger
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ class UpdateMergeRequestsWorker # rubocop:disable Scalability/IdempotentWorker
|
||||||
|
|
||||||
sidekiq_options retry: 3
|
sidekiq_options retry: 3
|
||||||
|
|
||||||
feature_category :code_review
|
feature_category :code_review_workflow
|
||||||
urgency :high
|
urgency :high
|
||||||
worker_resource_boundary :cpu
|
worker_resource_boundary :cpu
|
||||||
weight 3
|
weight 3
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@
|
||||||
---
|
---
|
||||||
- advanced_deployments
|
- advanced_deployments
|
||||||
- advisory_database
|
- advisory_database
|
||||||
|
- api
|
||||||
- api_security
|
- api_security
|
||||||
- application_instrumentation
|
- application_instrumentation
|
||||||
- application_performance
|
- application_performance
|
||||||
|
|
@ -24,7 +25,7 @@
|
||||||
- cloud_native_installation
|
- cloud_native_installation
|
||||||
- cluster_cost_management
|
- cluster_cost_management
|
||||||
- code_quality
|
- code_quality
|
||||||
- code_review
|
- code_review_workflow
|
||||||
- code_search
|
- code_search
|
||||||
- code_suggestions
|
- code_suggestions
|
||||||
- code_testing
|
- code_testing
|
||||||
|
|
@ -53,7 +54,6 @@
|
||||||
- disaster_recovery
|
- disaster_recovery
|
||||||
- dora_metrics
|
- dora_metrics
|
||||||
- dynamic_application_security_testing
|
- dynamic_application_security_testing
|
||||||
- editor_extension
|
|
||||||
- environment_management
|
- environment_management
|
||||||
- error_budgets
|
- error_budgets
|
||||||
- error_tracking
|
- error_tracking
|
||||||
|
|
@ -64,12 +64,11 @@
|
||||||
- feature_flags
|
- feature_flags
|
||||||
- five_minute_production_app
|
- five_minute_production_app
|
||||||
- fulfillment_admin_tooling
|
- fulfillment_admin_tooling
|
||||||
- fulfillment_developer_productivity
|
|
||||||
- fulfillment_infrastructure
|
- fulfillment_infrastructure
|
||||||
- fuzz_testing
|
- fuzz_testing
|
||||||
- geo_replication
|
- geo_replication
|
||||||
- git_lfs
|
|
||||||
- gitaly
|
- gitaly
|
||||||
|
- gitlab_cli
|
||||||
- global_search
|
- global_search
|
||||||
- helm_chart_registry
|
- helm_chart_registry
|
||||||
- importers
|
- importers
|
||||||
|
|
@ -82,7 +81,6 @@
|
||||||
- intel_code_security
|
- intel_code_security
|
||||||
- interactive_application_security_testing
|
- interactive_application_security_testing
|
||||||
- internationalization
|
- internationalization
|
||||||
- jenkins_importer
|
|
||||||
- kubernetes_management
|
- kubernetes_management
|
||||||
- license_compliance
|
- license_compliance
|
||||||
- logging
|
- logging
|
||||||
|
|
@ -141,5 +139,6 @@
|
||||||
- value_stream_management
|
- value_stream_management
|
||||||
- vulnerability_management
|
- vulnerability_management
|
||||||
- web_ide
|
- web_ide
|
||||||
|
- webhooks
|
||||||
- wiki
|
- wiki
|
||||||
- workflow_automation
|
- workflow_automation
|
||||||
|
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
---
|
|
||||||
name: update_oauth_registration_flow
|
|
||||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/85871
|
|
||||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/364342
|
|
||||||
milestone: '15.2'
|
|
||||||
type: development
|
|
||||||
group: group::acquisition
|
|
||||||
default_enabled: false
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
table_name: approval_merge_request_rules_approved_approvers
|
table_name: approval_merge_request_rules_approved_approvers
|
||||||
classes: []
|
classes: []
|
||||||
feature_categories:
|
feature_categories:
|
||||||
- code_review
|
- code_review_workflow
|
||||||
description: Join table for approved approvers and ApprovalMergeRequestRule
|
description: Join table for approved approvers and ApprovalMergeRequestRule
|
||||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/8497
|
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/8497
|
||||||
milestone: '11.7'
|
milestone: '11.7'
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ table_name: approver_groups
|
||||||
classes:
|
classes:
|
||||||
- ApproverGroup
|
- ApproverGroup
|
||||||
feature_categories:
|
feature_categories:
|
||||||
- code_review
|
- code_review_workflow
|
||||||
- source_code_management
|
- source_code_management
|
||||||
description: Group approvers of given merge request
|
description: Group approvers of given merge request
|
||||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/743
|
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/743
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ table_name: approvers
|
||||||
classes:
|
classes:
|
||||||
- Approver
|
- Approver
|
||||||
feature_categories:
|
feature_categories:
|
||||||
- code_review
|
- code_review_workflow
|
||||||
- source_code_management
|
- source_code_management
|
||||||
description: Approvers of given merge request
|
description: Approvers of given merge request
|
||||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/commit/3cc78d89984d9c9df8372c52b7bba38e6226f9f2
|
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/commit/3cc78d89984d9c9df8372c52b7bba38e6226f9f2
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ table_name: draft_notes
|
||||||
classes:
|
classes:
|
||||||
- DraftNote
|
- DraftNote
|
||||||
feature_categories:
|
feature_categories:
|
||||||
- code_review
|
- code_review_workflow
|
||||||
- source_code_management
|
- source_code_management
|
||||||
description: Notes created during the review of an MR that are not yet published
|
description: Notes created during the review of an MR that are not yet published
|
||||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/4213
|
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/4213
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ table_name: lfs_file_locks
|
||||||
classes:
|
classes:
|
||||||
- LfsFileLock
|
- LfsFileLock
|
||||||
feature_categories:
|
feature_categories:
|
||||||
- git_lfs
|
- source_code_management
|
||||||
description: File locks for LFS objects
|
description: File locks for LFS objects
|
||||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/4091
|
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/4091
|
||||||
milestone: '10.5'
|
milestone: '10.5'
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ table_name: lfs_object_states
|
||||||
classes:
|
classes:
|
||||||
- Geo::LfsObjectState
|
- Geo::LfsObjectState
|
||||||
feature_categories:
|
feature_categories:
|
||||||
- git_lfs
|
- source_code_management
|
||||||
description: Geo verification states for LFS objects
|
description: Geo verification states for LFS objects
|
||||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/63981
|
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/63981
|
||||||
milestone: '14.6'
|
milestone: '14.6'
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ table_name: lfs_objects
|
||||||
classes:
|
classes:
|
||||||
- LfsObject
|
- LfsObject
|
||||||
feature_categories:
|
feature_categories:
|
||||||
- git_lfs
|
- source_code_management
|
||||||
description: LFS files
|
description: LFS files
|
||||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/1727
|
introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/1727
|
||||||
milestone: '8.2'
|
milestone: '8.2'
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@ table_name: lfs_objects_projects
|
||||||
classes:
|
classes:
|
||||||
- LfsObjectsProject
|
- LfsObjectsProject
|
||||||
feature_categories:
|
feature_categories:
|
||||||
- git_lfs
|
|
||||||
- source_code_management
|
- source_code_management
|
||||||
description: Join table relating lfs_objects and projects
|
description: Join table relating lfs_objects and projects
|
||||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/1727
|
introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/1727
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ table_name: merge_request_assignees
|
||||||
classes:
|
classes:
|
||||||
- MergeRequestAssignee
|
- MergeRequestAssignee
|
||||||
feature_categories:
|
feature_categories:
|
||||||
- code_review
|
- code_review_workflow
|
||||||
description: Store allocated assignees for merge requests
|
description: Store allocated assignees for merge requests
|
||||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/26496
|
introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/26496
|
||||||
milestone: '11.10'
|
milestone: '11.10'
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ table_name: merge_request_cleanup_schedules
|
||||||
classes:
|
classes:
|
||||||
- MergeRequest::CleanupSchedule
|
- MergeRequest::CleanupSchedule
|
||||||
feature_categories:
|
feature_categories:
|
||||||
- code_review
|
- code_review_workflow
|
||||||
description: Store refs cleanup schedules for merge requests
|
description: Store refs cleanup schedules for merge requests
|
||||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/46758
|
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/46758
|
||||||
milestone: '13.6'
|
milestone: '13.6'
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ table_name: merge_request_context_commit_diff_files
|
||||||
classes:
|
classes:
|
||||||
- MergeRequestContextCommitDiffFile
|
- MergeRequestContextCommitDiffFile
|
||||||
feature_categories:
|
feature_categories:
|
||||||
- code_review
|
- code_review_workflow
|
||||||
description: Stores diffs data for merge request context commits
|
description: Stores diffs data for merge request context commits
|
||||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/23701
|
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/23701
|
||||||
milestone: '12.8'
|
milestone: '12.8'
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ table_name: merge_request_context_commits
|
||||||
classes:
|
classes:
|
||||||
- MergeRequestContextCommit
|
- MergeRequestContextCommit
|
||||||
feature_categories:
|
feature_categories:
|
||||||
- code_review
|
- code_review_workflow
|
||||||
description: Store context commit related data for merge requests
|
description: Store context commit related data for merge requests
|
||||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/23701
|
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/23701
|
||||||
milestone: '12.8'
|
milestone: '12.8'
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ table_name: merge_request_diff_commit_users
|
||||||
classes:
|
classes:
|
||||||
- MergeRequest::DiffCommitUser
|
- MergeRequest::DiffCommitUser
|
||||||
feature_categories:
|
feature_categories:
|
||||||
- code_review
|
- code_review_workflow
|
||||||
description: Store commit user information for merge request diffs
|
description: Store commit user information for merge request diffs
|
||||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/63669
|
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/63669
|
||||||
milestone: '14.1'
|
milestone: '14.1'
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ table_name: merge_request_diff_commits
|
||||||
classes:
|
classes:
|
||||||
- MergeRequestDiffCommit
|
- MergeRequestDiffCommit
|
||||||
feature_categories:
|
feature_categories:
|
||||||
- code_review
|
- code_review_workflow
|
||||||
description: Store commit related information within a merge request diff
|
description: Store commit related information within a merge request diff
|
||||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/12527
|
introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/12527
|
||||||
milestone: '9.4'
|
milestone: '9.4'
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ table_name: merge_request_diff_files
|
||||||
classes:
|
classes:
|
||||||
- MergeRequestDiffFile
|
- MergeRequestDiffFile
|
||||||
feature_categories:
|
feature_categories:
|
||||||
- code_review
|
- code_review_workflow
|
||||||
description: Store file related information within a merge request diff
|
description: Store file related information within a merge request diff
|
||||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/12047
|
introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/12047
|
||||||
milestone: '9.4'
|
milestone: '9.4'
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ table_name: merge_request_diffs
|
||||||
classes:
|
classes:
|
||||||
- MergeRequestDiff
|
- MergeRequestDiff
|
||||||
feature_categories:
|
feature_categories:
|
||||||
- code_review
|
- code_review_workflow
|
||||||
description: Store information about the changes made within a git push for a merge request
|
description: Store information about the changes made within a git push for a merge request
|
||||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/commit/c983e8eb3d9cac01090b8657735544f71f891576
|
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/commit/c983e8eb3d9cac01090b8657735544f71f891576
|
||||||
milestone: '6.6'
|
milestone: '6.6'
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ classes:
|
||||||
- MergeRequest::Metrics
|
- MergeRequest::Metrics
|
||||||
feature_categories:
|
feature_categories:
|
||||||
- value_stream_management
|
- value_stream_management
|
||||||
- code_review
|
- code_review_workflow
|
||||||
description: Store various metrics for merge requests.
|
description: Store various metrics for merge requests.
|
||||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/5986
|
introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/5986
|
||||||
milestone: '8.12'
|
milestone: '8.12'
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ table_name: merge_request_reviewers
|
||||||
classes:
|
classes:
|
||||||
- MergeRequestReviewer
|
- MergeRequestReviewer
|
||||||
feature_categories:
|
feature_categories:
|
||||||
- code_review
|
- code_review_workflow
|
||||||
description: Store allocated reviewers for merge requests
|
description: Store allocated reviewers for merge requests
|
||||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/40358
|
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/40358
|
||||||
milestone: '13.4'
|
milestone: '13.4'
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ table_name: merge_requests
|
||||||
classes:
|
classes:
|
||||||
- MergeRequest
|
- MergeRequest
|
||||||
feature_categories:
|
feature_categories:
|
||||||
- code_review
|
- code_review_workflow
|
||||||
description: This is the main table that stores information about project merge requests.
|
description: This is the main table that stores information about project merge requests.
|
||||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/commit/6d460aa2d6b3959593c168eed181516036525393
|
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/commit/6d460aa2d6b3959593c168eed181516036525393
|
||||||
milestone: "<6.0"
|
milestone: "<6.0"
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ table_name: merge_requests_closing_issues
|
||||||
classes:
|
classes:
|
||||||
- MergeRequestsClosingIssues
|
- MergeRequestsClosingIssues
|
||||||
feature_categories:
|
feature_categories:
|
||||||
- code_review
|
- code_review_workflow
|
||||||
description: Store the events of merge request closing any issues
|
description: Store the events of merge request closing any issues
|
||||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/5986
|
introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/5986
|
||||||
milestone: '8.12'
|
milestone: '8.12'
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ table_name: note_diff_files
|
||||||
classes:
|
classes:
|
||||||
- NoteDiffFile
|
- NoteDiffFile
|
||||||
feature_categories:
|
feature_categories:
|
||||||
- code_review
|
- code_review_workflow
|
||||||
description: Persisted truncated note diffs
|
description: Persisted truncated note diffs
|
||||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/18991
|
introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/18991
|
||||||
milestone: '11.0'
|
milestone: '11.0'
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ classes:
|
||||||
- SyntheticNote
|
- SyntheticNote
|
||||||
- WeightNote
|
- WeightNote
|
||||||
feature_categories:
|
feature_categories:
|
||||||
- code_review
|
- code_review_workflow
|
||||||
- portfolio_management
|
- portfolio_management
|
||||||
- service_desk
|
- service_desk
|
||||||
- source_code_management
|
- source_code_management
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ table_name: reviews
|
||||||
classes:
|
classes:
|
||||||
- Review
|
- Review
|
||||||
feature_categories:
|
feature_categories:
|
||||||
- code_review
|
- code_review_workflow
|
||||||
description: TODO
|
description: TODO
|
||||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/8442
|
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/8442
|
||||||
milestone: '11.6'
|
milestone: '11.6'
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ table_name: suggestions
|
||||||
classes:
|
classes:
|
||||||
- Suggestion
|
- Suggestion
|
||||||
feature_categories:
|
feature_categories:
|
||||||
- code_review
|
- code_review_workflow
|
||||||
description: Storing code suggestions within notes
|
description: Storing code suggestions within notes
|
||||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/8656
|
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/8656
|
||||||
milestone: '11.6'
|
milestone: '11.6'
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ table_name: uploads
|
||||||
classes:
|
classes:
|
||||||
- Upload
|
- Upload
|
||||||
feature_categories:
|
feature_categories:
|
||||||
- code_review
|
- code_review_workflow
|
||||||
- design_management
|
- design_management
|
||||||
- importers
|
- importers
|
||||||
- portfolio_management
|
- portfolio_management
|
||||||
|
|
|
||||||
|
|
@ -10860,10 +10860,11 @@ List of branch rules for a project, grouped by branch name.
|
||||||
| Name | Type | Description |
|
| Name | Type | Description |
|
||||||
| ---- | ---- | ----------- |
|
| ---- | ---- | ----------- |
|
||||||
| <a id="branchruleapprovalrules"></a>`approvalRules` | [`ApprovalProjectRuleConnection`](#approvalprojectruleconnection) | Merge request approval rules configured for this branch rule. (see [Connections](#connections)) |
|
| <a id="branchruleapprovalrules"></a>`approvalRules` | [`ApprovalProjectRuleConnection`](#approvalprojectruleconnection) | Merge request approval rules configured for this branch rule. (see [Connections](#connections)) |
|
||||||
| <a id="branchrulebranchprotection"></a>`branchProtection` | [`BranchProtection!`](#branchprotection) | Branch protections configured for this branch rule. |
|
| <a id="branchrulebranchprotection"></a>`branchProtection` | [`BranchProtection`](#branchprotection) | Branch protections configured for this branch rule. |
|
||||||
| <a id="branchrulecreatedat"></a>`createdAt` | [`Time!`](#time) | Timestamp of when the branch rule was created. |
|
| <a id="branchrulecreatedat"></a>`createdAt` | [`Time!`](#time) | Timestamp of when the branch rule was created. |
|
||||||
| <a id="branchruleexternalstatuschecks"></a>`externalStatusChecks` | [`ExternalStatusCheckConnection`](#externalstatuscheckconnection) | External status checks configured for this branch rule. (see [Connections](#connections)) |
|
| <a id="branchruleexternalstatuschecks"></a>`externalStatusChecks` | [`ExternalStatusCheckConnection`](#externalstatuscheckconnection) | External status checks configured for this branch rule. (see [Connections](#connections)) |
|
||||||
| <a id="branchruleisdefault"></a>`isDefault` | [`Boolean!`](#boolean) | Check if this branch rule protects the project's default branch. |
|
| <a id="branchruleisdefault"></a>`isDefault` | [`Boolean!`](#boolean) | Check if this branch rule protects the project's default branch. |
|
||||||
|
| <a id="branchruleisprotected"></a>`isProtected` | [`Boolean!`](#boolean) | Check if this branch rule protects access for the branch. |
|
||||||
| <a id="branchrulematchingbranchescount"></a>`matchingBranchesCount` | [`Int!`](#int) | Number of existing branches that match this branch rule. |
|
| <a id="branchrulematchingbranchescount"></a>`matchingBranchesCount` | [`Int!`](#int) | Number of existing branches that match this branch rule. |
|
||||||
| <a id="branchrulename"></a>`name` | [`String!`](#string) | Branch name, with wildcards, for the branch rules. |
|
| <a id="branchrulename"></a>`name` | [`String!`](#string) | Branch name, with wildcards, for the branch rules. |
|
||||||
| <a id="branchruleupdatedat"></a>`updatedAt` | [`Time!`](#time) | Timestamp of when the branch rule was last updated. |
|
| <a id="branchruleupdatedat"></a>`updatedAt` | [`Time!`](#time) | Timestamp of when the branch rule was last updated. |
|
||||||
|
|
|
||||||
|
|
@ -66,7 +66,7 @@ Gitlab::Metrics::Sli::Apdex.initialize_sli(:received_email, [
|
||||||
email_type: :service_desk
|
email_type: :service_desk
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
feature_category: :code_review,
|
feature_category: :code_review_workflow,
|
||||||
email_type: :create_merge_request
|
email_type: :create_merge_request
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
|
|
|
||||||
|
|
@ -115,7 +115,7 @@ second argument:
|
||||||
```ruby
|
```ruby
|
||||||
class DashboardController < ApplicationController
|
class DashboardController < ApplicationController
|
||||||
feature_category :team_planning, [:issues, :issues_calendar]
|
feature_category :team_planning, [:issues, :issues_calendar]
|
||||||
feature_category :code_review, [:merge_requests]
|
feature_category :code_review_workflow, [:merge_requests]
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -204,6 +204,8 @@ To enable security training for vulnerabilities in your project:
|
||||||
1. On the tab bar, select **Vulnerability Management**.
|
1. On the tab bar, select **Vulnerability Management**.
|
||||||
1. To enable a security training provider, turn on the toggle.
|
1. To enable a security training provider, turn on the toggle.
|
||||||
|
|
||||||
|
Security training uses content from third-party vendors. You must have an internet connection to use this feature.
|
||||||
|
|
||||||
## View security training for a vulnerability
|
## View security training for a vulnerability
|
||||||
|
|
||||||
> [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/6176) in GitLab 14.9.
|
> [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/6176) in GitLab 14.9.
|
||||||
|
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 13 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 11 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 9.5 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 21 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 17 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 11 KiB |
|
|
@ -90,38 +90,23 @@ You don't need to construct these lines manually. Instead, you can:
|
||||||
|
|
||||||
## Upload a file
|
## Upload a file
|
||||||
|
|
||||||
The ability to create a file is great when the content is text. However, this
|
To upload a binary file in the Web Editor:
|
||||||
doesn't work well for binary data such as images, PDFs, or other binary file types. In
|
|
||||||
this case, you need to upload a file.
|
|
||||||
|
|
||||||
From a project's files page, select the '+' button to the right of the branch
|
1. On the top bar, select **Main menu > Projects** and find your project.
|
||||||
selector. Choose **Upload file** from the dropdown:
|
1. On the project page, next to the branch name, select the plus icon (**{plus}**).
|
||||||
|
1. From the dropdown list, select **Upload file**.
|
||||||

|
1. Complete the fields. To create a merge request with the uploaded file, ensure the **Start a new merge request with these changes** toggle is turned on.
|
||||||
|
1. Select **Upload file**.
|
||||||
After the upload dialog pops up, there are two ways to upload your file. Either
|
|
||||||
drag and drop a file on the popup or use the **click to upload** link. After you
|
|
||||||
select a file to upload, a file preview displays.
|
|
||||||
|
|
||||||
Enter a commit message, choose a branch, and select **Upload file** when you are
|
|
||||||
ready.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## Create a directory
|
## Create a directory
|
||||||
|
|
||||||
To keep files in the repository organized it is often helpful to create a new
|
To create a directory in the Web Editor:
|
||||||
directory.
|
|
||||||
|
|
||||||
From a project's files page, select the plus button (`+`) to the right of the branch selector.
|
1. On the top bar, select **Main menu > Projects** and find your project.
|
||||||
Choose **New directory** from the dropdown.
|
1. On the project page, next to the branch name, select the plus icon (**{plus}**).
|
||||||
|
1. From the dropdown list, select **New directory**.
|
||||||

|
1. Complete the fields. To create a merge request with the new directory, ensure the **Start a new merge request with these changes** toggle is turned on.
|
||||||
|
1. Select **Create directory**.
|
||||||
In the new directory dialog, enter a directory name, a commit message, and choose
|
|
||||||
the target branch. Select **Create directory** to finish.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## Create a new branch
|
## Create a new branch
|
||||||
|
|
||||||
|
|
@ -209,24 +194,16 @@ modify files.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## Create a new tag
|
## Create a tag
|
||||||
|
|
||||||
Tags help you mark major milestones such as production releases and
|
You can create tags to mark milestones such as production releases and
|
||||||
release candidates. You can create a tag from a branch or a commit
|
release candidates. To create a tag in the Web Editor:
|
||||||
SHA:
|
|
||||||
|
|
||||||
1. From a project's files page, choose **New tag** from the dropdown list.
|
1. On the top bar, select **Main menu > Projects** and find your project.
|
||||||
|
1. On the project page, next to the branch name, select the plus icon (**{plus}**).
|
||||||

|
1. From the dropdown list, select **New tag**.
|
||||||
|
1. Complete the fields. From the **Create from** dropdown list, select an existing branch, tag, or commit SHA.
|
||||||
1. Give the tag a name such as `v1.0.0`.
|
1. Select **Create tag**.
|
||||||
1. Choose the branch or SHA from which you want to create this new tag.
|
|
||||||
1. Optional. Add a message and release notes. The release notes section supports
|
|
||||||
Markdown format.
|
|
||||||
1. Optional. Upload an attachment.
|
|
||||||
1. Select **Create tag**. GitLab redirects you to the tag list page.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## Tips
|
## Tips
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ module API
|
||||||
def self.awardables
|
def self.awardables
|
||||||
[
|
[
|
||||||
{ type: 'issue', resource: :projects, find_by: :iid, feature_category: :team_planning },
|
{ type: 'issue', resource: :projects, find_by: :iid, feature_category: :team_planning },
|
||||||
{ type: 'merge_request', resource: :projects, find_by: :iid, feature_category: :code_review },
|
{ type: 'merge_request', resource: :projects, find_by: :iid, feature_category: :code_review_workflow },
|
||||||
{ type: 'snippet', resource: :projects, find_by: :id, feature_category: :source_code_management }
|
{ type: 'snippet', resource: :projects, find_by: :id, feature_category: :source_code_management }
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -9,8 +9,8 @@ module API
|
||||||
{
|
{
|
||||||
Issue => :team_planning,
|
Issue => :team_planning,
|
||||||
Snippet => :source_code_management,
|
Snippet => :source_code_management,
|
||||||
MergeRequest => :code_review,
|
MergeRequest => :code_review_workflow,
|
||||||
Commit => :code_review
|
Commit => :code_review_workflow
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ module API
|
||||||
def self.feature_category_per_noteable_type
|
def self.feature_category_per_noteable_type
|
||||||
{
|
{
|
||||||
Issue => :team_planning,
|
Issue => :team_planning,
|
||||||
MergeRequest => :code_review,
|
MergeRequest => :code_review_workflow,
|
||||||
Snippet => :source_code_management
|
Snippet => :source_code_management
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ module API
|
||||||
# This is a method instead of a constant, allowing EE to more easily extend it.
|
# This is a method instead of a constant, allowing EE to more easily extend it.
|
||||||
{
|
{
|
||||||
Issue => { feature_category: :team_planning, id_field: 'IID' },
|
Issue => { feature_category: :team_planning, id_field: 'IID' },
|
||||||
MergeRequest => { feature_category: :code_review, id_field: 'IID' }
|
MergeRequest => { feature_category: :code_review_workflow, id_field: 'IID' }
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ module API
|
||||||
|
|
||||||
before { authenticate! }
|
before { authenticate! }
|
||||||
|
|
||||||
feature_category :code_review
|
feature_category :code_review_workflow
|
||||||
|
|
||||||
params do
|
params do
|
||||||
requires :id, types: [String, Integer], desc: 'The ID or URL-encoded path of the project'
|
requires :id, types: [String, Integer], desc: 'The ID or URL-encoded path of the project'
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ module API
|
||||||
# These endpoints are defined in `TimeTrackingEndpoints` and is shared by
|
# These endpoints are defined in `TimeTrackingEndpoints` and is shared by
|
||||||
# API::Issues. In order to be able to define the feature category of these
|
# API::Issues. In order to be able to define the feature category of these
|
||||||
# endpoints, we need to define them at the top-level by route.
|
# endpoints, we need to define them at the top-level by route.
|
||||||
feature_category :code_review, [
|
feature_category :code_review_workflow, [
|
||||||
'/projects/:id/merge_requests/:merge_request_iid/time_estimate',
|
'/projects/:id/merge_requests/:merge_request_iid/time_estimate',
|
||||||
'/projects/:id/merge_requests/:merge_request_iid/reset_time_estimate',
|
'/projects/:id/merge_requests/:merge_request_iid/reset_time_estimate',
|
||||||
'/projects/:id/merge_requests/:merge_request_iid/add_spent_time',
|
'/projects/:id/merge_requests/:merge_request_iid/add_spent_time',
|
||||||
|
|
@ -138,7 +138,7 @@ module API
|
||||||
use :merge_requests_params
|
use :merge_requests_params
|
||||||
use :optional_scope_param
|
use :optional_scope_param
|
||||||
end
|
end
|
||||||
get feature_category: :code_review, urgency: :low do
|
get feature_category: :code_review_workflow, urgency: :low do
|
||||||
authenticate! unless params[:scope] == 'all'
|
authenticate! unless params[:scope] == 'all'
|
||||||
validate_anonymous_search_access! if params[:search].present?
|
validate_anonymous_search_access! if params[:search].present?
|
||||||
validate_search_rate_limit! if declared_params[:search].present?
|
validate_search_rate_limit! if declared_params[:search].present?
|
||||||
|
|
@ -168,7 +168,7 @@ module API
|
||||||
default: true,
|
default: true,
|
||||||
desc: 'Returns merge requests from non archived projects only.'
|
desc: 'Returns merge requests from non archived projects only.'
|
||||||
end
|
end
|
||||||
get ":id/merge_requests", feature_category: :code_review, urgency: :low do
|
get ":id/merge_requests", feature_category: :code_review_workflow, urgency: :low do
|
||||||
validate_anonymous_search_access! if declared_params[:search].present?
|
validate_anonymous_search_access! if declared_params[:search].present?
|
||||||
validate_search_rate_limit! if declared_params[:search].present?
|
validate_search_rate_limit! if declared_params[:search].present?
|
||||||
merge_requests = find_merge_requests(group_id: user_group.id, include_subgroups: true)
|
merge_requests = find_merge_requests(group_id: user_group.id, include_subgroups: true)
|
||||||
|
|
@ -235,7 +235,7 @@ module API
|
||||||
desc: 'Returns the request having the given `iid`.',
|
desc: 'Returns the request having the given `iid`.',
|
||||||
documentation: { is_array: true }
|
documentation: { is_array: true }
|
||||||
end
|
end
|
||||||
get ":id/merge_requests", feature_category: :code_review, urgency: :low do
|
get ":id/merge_requests", feature_category: :code_review_workflow, urgency: :low do
|
||||||
authorize! :read_merge_request, user_project
|
authorize! :read_merge_request, user_project
|
||||||
validate_anonymous_search_access! if declared_params[:search].present?
|
validate_anonymous_search_access! if declared_params[:search].present?
|
||||||
validate_search_rate_limit! if declared_params[:search].present?
|
validate_search_rate_limit! if declared_params[:search].present?
|
||||||
|
|
@ -281,7 +281,7 @@ module API
|
||||||
desc: 'The target project of the merge request defaults to the :id of the project.'
|
desc: 'The target project of the merge request defaults to the :id of the project.'
|
||||||
use :optional_params
|
use :optional_params
|
||||||
end
|
end
|
||||||
post ":id/merge_requests", feature_category: :code_review, urgency: :low do
|
post ":id/merge_requests", feature_category: :code_review_workflow, urgency: :low do
|
||||||
Gitlab::QueryLimiting.disable!('https://gitlab.com/gitlab-org/gitlab/-/issues/20770')
|
Gitlab::QueryLimiting.disable!('https://gitlab.com/gitlab-org/gitlab/-/issues/20770')
|
||||||
|
|
||||||
authorize! :create_merge_request_from, user_project
|
authorize! :create_merge_request_from, user_project
|
||||||
|
|
@ -309,7 +309,7 @@ module API
|
||||||
params do
|
params do
|
||||||
requires :merge_request_iid, type: Integer, desc: 'The internal ID of the merge request.'
|
requires :merge_request_iid, type: Integer, desc: 'The internal ID of the merge request.'
|
||||||
end
|
end
|
||||||
delete ":id/merge_requests/:merge_request_iid", feature_category: :code_review, urgency: :low do
|
delete ":id/merge_requests/:merge_request_iid", feature_category: :code_review_workflow, urgency: :low do
|
||||||
merge_request = find_project_merge_request(params[:merge_request_iid])
|
merge_request = find_project_merge_request(params[:merge_request_iid])
|
||||||
|
|
||||||
authorize!(:destroy_merge_request, merge_request)
|
authorize!(:destroy_merge_request, merge_request)
|
||||||
|
|
@ -334,7 +334,7 @@ module API
|
||||||
]
|
]
|
||||||
tags %w[merge_requests]
|
tags %w[merge_requests]
|
||||||
end
|
end
|
||||||
get ':id/merge_requests/:merge_request_iid', feature_category: :code_review, urgency: :low do
|
get ':id/merge_requests/:merge_request_iid', feature_category: :code_review_workflow, urgency: :low do
|
||||||
merge_request = find_merge_request_with_access(params[:merge_request_iid])
|
merge_request = find_merge_request_with_access(params[:merge_request_iid])
|
||||||
|
|
||||||
present merge_request,
|
present merge_request,
|
||||||
|
|
@ -355,7 +355,7 @@ module API
|
||||||
]
|
]
|
||||||
tags %w[merge_requests]
|
tags %w[merge_requests]
|
||||||
end
|
end
|
||||||
get ':id/merge_requests/:merge_request_iid/participants', feature_category: :code_review, urgency: :low do
|
get ':id/merge_requests/:merge_request_iid/participants', feature_category: :code_review_workflow, urgency: :low do
|
||||||
merge_request = find_merge_request_with_access(params[:merge_request_iid])
|
merge_request = find_merge_request_with_access(params[:merge_request_iid])
|
||||||
|
|
||||||
participants = ::Kaminari.paginate_array(merge_request.visible_participants(current_user))
|
participants = ::Kaminari.paginate_array(merge_request.visible_participants(current_user))
|
||||||
|
|
@ -371,7 +371,7 @@ module API
|
||||||
]
|
]
|
||||||
tags %w[merge_requests]
|
tags %w[merge_requests]
|
||||||
end
|
end
|
||||||
get ':id/merge_requests/:merge_request_iid/reviewers', feature_category: :code_review, urgency: :low do
|
get ':id/merge_requests/:merge_request_iid/reviewers', feature_category: :code_review_workflow, urgency: :low do
|
||||||
merge_request = find_merge_request_with_access(params[:merge_request_iid])
|
merge_request = find_merge_request_with_access(params[:merge_request_iid])
|
||||||
|
|
||||||
reviewers = ::Kaminari.paginate_array(merge_request.merge_request_reviewers)
|
reviewers = ::Kaminari.paginate_array(merge_request.merge_request_reviewers)
|
||||||
|
|
@ -387,7 +387,7 @@ module API
|
||||||
]
|
]
|
||||||
tags %w[merge_requests]
|
tags %w[merge_requests]
|
||||||
end
|
end
|
||||||
get ':id/merge_requests/:merge_request_iid/commits', feature_category: :code_review, urgency: :low do
|
get ':id/merge_requests/:merge_request_iid/commits', feature_category: :code_review_workflow, urgency: :low do
|
||||||
merge_request = find_merge_request_with_access(params[:merge_request_iid])
|
merge_request = find_merge_request_with_access(params[:merge_request_iid])
|
||||||
|
|
||||||
commits =
|
commits =
|
||||||
|
|
@ -405,7 +405,7 @@ module API
|
||||||
]
|
]
|
||||||
tags %w[merge_requests]
|
tags %w[merge_requests]
|
||||||
end
|
end
|
||||||
get ':id/merge_requests/:merge_request_iid/context_commits', feature_category: :code_review, urgency: :high do
|
get ':id/merge_requests/:merge_request_iid/context_commits', feature_category: :code_review_workflow, urgency: :high do
|
||||||
merge_request = find_merge_request_with_access(params[:merge_request_iid])
|
merge_request = find_merge_request_with_access(params[:merge_request_iid])
|
||||||
context_commits =
|
context_commits =
|
||||||
paginate(merge_request.merge_request_context_commits).map(&:to_commit)
|
paginate(merge_request.merge_request_context_commits).map(&:to_commit)
|
||||||
|
|
@ -429,7 +429,7 @@ module API
|
||||||
]
|
]
|
||||||
tags %w[merge_requests]
|
tags %w[merge_requests]
|
||||||
end
|
end
|
||||||
post ':id/merge_requests/:merge_request_iid/context_commits', feature_category: :code_review do
|
post ':id/merge_requests/:merge_request_iid/context_commits', feature_category: :code_review_workflow do
|
||||||
commit_ids = params[:commits]
|
commit_ids = params[:commits]
|
||||||
|
|
||||||
if commit_ids.size > CONTEXT_COMMITS_POST_LIMIT
|
if commit_ids.size > CONTEXT_COMMITS_POST_LIMIT
|
||||||
|
|
@ -466,7 +466,7 @@ module API
|
||||||
]
|
]
|
||||||
tags %w[merge_requests]
|
tags %w[merge_requests]
|
||||||
end
|
end
|
||||||
delete ':id/merge_requests/:merge_request_iid/context_commits', feature_category: :code_review do
|
delete ':id/merge_requests/:merge_request_iid/context_commits', feature_category: :code_review_workflow do
|
||||||
commit_ids = params[:commits]
|
commit_ids = params[:commits]
|
||||||
merge_request = find_merge_request_with_access(params[:merge_request_iid])
|
merge_request = find_merge_request_with_access(params[:merge_request_iid])
|
||||||
|
|
||||||
|
|
@ -490,7 +490,7 @@ module API
|
||||||
]
|
]
|
||||||
tags %w[merge_requests]
|
tags %w[merge_requests]
|
||||||
end
|
end
|
||||||
get ':id/merge_requests/:merge_request_iid/changes', feature_category: :code_review, urgency: :low do
|
get ':id/merge_requests/:merge_request_iid/changes', feature_category: :code_review_workflow, urgency: :low do
|
||||||
merge_request = find_merge_request_with_access(params[:merge_request_iid])
|
merge_request = find_merge_request_with_access(params[:merge_request_iid])
|
||||||
|
|
||||||
present merge_request,
|
present merge_request,
|
||||||
|
|
@ -512,7 +512,7 @@ module API
|
||||||
params do
|
params do
|
||||||
use :pagination
|
use :pagination
|
||||||
end
|
end
|
||||||
get ':id/merge_requests/:merge_request_iid/diffs', feature_category: :code_review, urgency: :low do
|
get ':id/merge_requests/:merge_request_iid/diffs', feature_category: :code_review_workflow, urgency: :low do
|
||||||
merge_request = find_merge_request_with_access(params[:merge_request_iid])
|
merge_request = find_merge_request_with_access(params[:merge_request_iid])
|
||||||
|
|
||||||
present paginate(merge_request.merge_request_diff.paginated_diffs(params[:page], params[:per_page])).diffs, with: Entities::Diff
|
present paginate(merge_request.merge_request_diff.paginated_diffs(params[:page], params[:per_page])).diffs, with: Entities::Diff
|
||||||
|
|
@ -580,7 +580,7 @@ module API
|
||||||
use :optional_params
|
use :optional_params
|
||||||
at_least_one_of(*::API::MergeRequests.update_params_at_least_one_of)
|
at_least_one_of(*::API::MergeRequests.update_params_at_least_one_of)
|
||||||
end
|
end
|
||||||
put ':id/merge_requests/:merge_request_iid', feature_category: :code_review, urgency: :low do
|
put ':id/merge_requests/:merge_request_iid', feature_category: :code_review_workflow, urgency: :low do
|
||||||
Gitlab::QueryLimiting.disable!('https://gitlab.com/gitlab-org/gitlab/-/issues/20772')
|
Gitlab::QueryLimiting.disable!('https://gitlab.com/gitlab-org/gitlab/-/issues/20772')
|
||||||
|
|
||||||
merge_request = find_merge_request_with_access(params.delete(:merge_request_iid), :update_merge_request)
|
merge_request = find_merge_request_with_access(params.delete(:merge_request_iid), :update_merge_request)
|
||||||
|
|
@ -622,7 +622,7 @@ module API
|
||||||
optional :sha, type: String, desc: 'If present, then this SHA must match the HEAD of the source branch, otherwise the merge fails.'
|
optional :sha, type: String, desc: 'If present, then this SHA must match the HEAD of the source branch, otherwise the merge fails.'
|
||||||
optional :squash, type: Grape::API::Boolean, desc: 'If `true`, the commits are squashed into a single commit on merge.'
|
optional :squash, type: Grape::API::Boolean, desc: 'If `true`, the commits are squashed into a single commit on merge.'
|
||||||
end
|
end
|
||||||
put ':id/merge_requests/:merge_request_iid/merge', feature_category: :code_review, urgency: :low do
|
put ':id/merge_requests/:merge_request_iid/merge', feature_category: :code_review_workflow, urgency: :low do
|
||||||
Gitlab::QueryLimiting.disable!('https://gitlab.com/gitlab-org/gitlab/-/issues/4796')
|
Gitlab::QueryLimiting.disable!('https://gitlab.com/gitlab-org/gitlab/-/issues/4796')
|
||||||
|
|
||||||
merge_request = find_project_merge_request(params[:merge_request_iid])
|
merge_request = find_project_merge_request(params[:merge_request_iid])
|
||||||
|
|
@ -673,7 +673,7 @@ module API
|
||||||
]
|
]
|
||||||
tags %w[merge_requests]
|
tags %w[merge_requests]
|
||||||
end
|
end
|
||||||
get ':id/merge_requests/:merge_request_iid/merge_ref', feature_category: :code_review do
|
get ':id/merge_requests/:merge_request_iid/merge_ref', feature_category: :code_review_workflow do
|
||||||
merge_request = find_project_merge_request(params[:merge_request_iid])
|
merge_request = find_project_merge_request(params[:merge_request_iid])
|
||||||
|
|
||||||
result = ::MergeRequests::MergeabilityCheckService.new(merge_request).execute(recheck: true)
|
result = ::MergeRequests::MergeabilityCheckService.new(merge_request).execute(recheck: true)
|
||||||
|
|
@ -696,7 +696,7 @@ module API
|
||||||
]
|
]
|
||||||
tags %w[merge_requests]
|
tags %w[merge_requests]
|
||||||
end
|
end
|
||||||
post ':id/merge_requests/:merge_request_iid/cancel_merge_when_pipeline_succeeds', feature_category: :code_review do
|
post ':id/merge_requests/:merge_request_iid/cancel_merge_when_pipeline_succeeds', feature_category: :code_review_workflow do
|
||||||
merge_request = find_project_merge_request(params[:merge_request_iid])
|
merge_request = find_project_merge_request(params[:merge_request_iid])
|
||||||
|
|
||||||
unauthorized! unless merge_request.can_cancel_auto_merge?(current_user)
|
unauthorized! unless merge_request.can_cancel_auto_merge?(current_user)
|
||||||
|
|
@ -716,7 +716,7 @@ module API
|
||||||
params do
|
params do
|
||||||
optional :skip_ci, type: Boolean, desc: 'Set to true to skip creating a CI pipeline.'
|
optional :skip_ci, type: Boolean, desc: 'Set to true to skip creating a CI pipeline.'
|
||||||
end
|
end
|
||||||
put ':id/merge_requests/:merge_request_iid/rebase', feature_category: :code_review, urgency: :low do
|
put ':id/merge_requests/:merge_request_iid/rebase', feature_category: :code_review_workflow, urgency: :low do
|
||||||
merge_request = find_project_merge_request(params[:merge_request_iid])
|
merge_request = find_project_merge_request(params[:merge_request_iid])
|
||||||
|
|
||||||
authorize_merge_request_rebase!(merge_request)
|
authorize_merge_request_rebase!(merge_request)
|
||||||
|
|
@ -739,7 +739,7 @@ module API
|
||||||
params do
|
params do
|
||||||
use :pagination
|
use :pagination
|
||||||
end
|
end
|
||||||
get ':id/merge_requests/:merge_request_iid/closes_issues', feature_category: :code_review, urgency: :low do
|
get ':id/merge_requests/:merge_request_iid/closes_issues', feature_category: :code_review_workflow, urgency: :low do
|
||||||
merge_request = find_merge_request_with_access(params[:merge_request_iid])
|
merge_request = find_merge_request_with_access(params[:merge_request_iid])
|
||||||
issues = ::Kaminari.paginate_array(merge_request.visible_closing_issues_for(current_user))
|
issues = ::Kaminari.paginate_array(merge_request.visible_closing_issues_for(current_user))
|
||||||
issues = paginate(issues)
|
issues = paginate(issues)
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ module API
|
||||||
|
|
||||||
{
|
{
|
||||||
Issue => :team_planning,
|
Issue => :team_planning,
|
||||||
MergeRequest => :code_review
|
MergeRequest => :code_review_workflow
|
||||||
}.each do |eventable_type, feature_category|
|
}.each do |eventable_type, feature_category|
|
||||||
parent_type = eventable_type.parent_class.to_s.underscore
|
parent_type = eventable_type.parent_class.to_s.underscore
|
||||||
eventables_str = eventable_type.to_s.underscore.pluralize
|
eventables_str = eventable_type.to_s.underscore.pluralize
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ module API
|
||||||
entity: Entities::MergeRequest,
|
entity: Entities::MergeRequest,
|
||||||
source: Project,
|
source: Project,
|
||||||
finder: ->(id) { find_merge_request_with_access(id, :update_merge_request) },
|
finder: ->(id) { find_merge_request_with_access(id, :update_merge_request) },
|
||||||
feature_category: :code_review
|
feature_category: :code_review_workflow
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'issues',
|
type: 'issues',
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ module API
|
||||||
class Suggestions < ::API::Base
|
class Suggestions < ::API::Base
|
||||||
before { authenticate! }
|
before { authenticate! }
|
||||||
|
|
||||||
feature_category :code_review
|
feature_category :code_review_workflow
|
||||||
|
|
||||||
resource :suggestions do
|
resource :suggestions do
|
||||||
desc 'Apply suggestion patch in the Merge Request it was created' do
|
desc 'Apply suggestion patch in the Merge Request it was created' do
|
||||||
|
|
|
||||||
|
|
@ -137,6 +137,7 @@ included_attributes:
|
||||||
ci_cd_settings:
|
ci_cd_settings:
|
||||||
- :group_runners_enabled
|
- :group_runners_enabled
|
||||||
- :runner_token_expiration_interval
|
- :runner_token_expiration_interval
|
||||||
|
- :default_git_depth
|
||||||
metrics_setting:
|
metrics_setting:
|
||||||
- :dashboard_timezone
|
- :dashboard_timezone
|
||||||
- :external_dashboard_url
|
- :external_dashboard_url
|
||||||
|
|
@ -719,7 +720,6 @@ included_attributes:
|
||||||
- :feature_flags_access_level
|
- :feature_flags_access_level
|
||||||
- :releases_access_level
|
- :releases_access_level
|
||||||
- :infrastructure_access_level
|
- :infrastructure_access_level
|
||||||
- :allow_merge_on_skipped_pipeline
|
|
||||||
- :auto_devops_deploy_strategy
|
- :auto_devops_deploy_strategy
|
||||||
- :auto_devops_enabled
|
- :auto_devops_enabled
|
||||||
- :container_registry_enabled
|
- :container_registry_enabled
|
||||||
|
|
@ -728,13 +728,14 @@ included_attributes:
|
||||||
- :merge_method
|
- :merge_method
|
||||||
- :merge_requests_enabled
|
- :merge_requests_enabled
|
||||||
- :snippets_enabled
|
- :snippets_enabled
|
||||||
- :squash_option
|
|
||||||
- :topics
|
- :topics
|
||||||
- :visibility
|
- :visibility
|
||||||
- :wiki_enabled
|
- :wiki_enabled
|
||||||
- :build_git_strategy
|
- :build_git_strategy
|
||||||
- :build_enabled
|
- :build_enabled
|
||||||
- :security_and_compliance_enabled
|
- :security_and_compliance_enabled
|
||||||
|
- :allow_merge_on_skipped_pipeline
|
||||||
|
- :squash_option
|
||||||
resource_milestone_events:
|
resource_milestone_events:
|
||||||
- :user_id
|
- :user_id
|
||||||
- :action
|
- :action
|
||||||
|
|
@ -1072,6 +1073,9 @@ excluded_attributes:
|
||||||
- :sequence
|
- :sequence
|
||||||
|
|
||||||
methods:
|
methods:
|
||||||
|
project:
|
||||||
|
- :allow_merge_on_skipped_pipeline
|
||||||
|
- :squash_option
|
||||||
notes:
|
notes:
|
||||||
- :type
|
- :type
|
||||||
labels:
|
labels:
|
||||||
|
|
@ -1180,6 +1184,7 @@ ee:
|
||||||
- :reject_unsigned_commits
|
- :reject_unsigned_commits
|
||||||
- :commit_committer_check
|
- :commit_committer_check
|
||||||
- :regexp_uses_re2
|
- :regexp_uses_re2
|
||||||
|
- :reject_non_dco_commits
|
||||||
unprotect_access_levels:
|
unprotect_access_levels:
|
||||||
- :access_level
|
- :access_level
|
||||||
- :user_id
|
- :user_id
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ module Gitlab
|
||||||
# with an explosion in unused metric combinations, but we want the
|
# with an explosion in unused metric combinations, but we want the
|
||||||
# most common ones to be always present.
|
# most common ones to be always present.
|
||||||
FEATURE_CATEGORIES_TO_INITIALIZE = ['authentication_and_authorization',
|
FEATURE_CATEGORIES_TO_INITIALIZE = ['authentication_and_authorization',
|
||||||
'code_review', 'continuous_integration',
|
'code_review_workflow', 'continuous_integration',
|
||||||
'not_owned', 'source_code_management',
|
'not_owned', 'source_code_management',
|
||||||
FEATURE_CATEGORY_DEFAULT].freeze
|
FEATURE_CATEGORY_DEFAULT].freeze
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8069,13 +8069,10 @@ msgstr ""
|
||||||
msgid "Change your password or recover your current one"
|
msgid "Change your password or recover your current one"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "ChangeReviewer|Reviewer changed from %{old} to %{new}"
|
msgid "ChangeReviewer|%{added_reviewers_text}%{removed_reviewers_text}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "ChangeReviewer|Reviewer changed to %{new}"
|
msgid "ChangeReviewer|All reviewers were removed."
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "ChangeReviewer|Unassigned"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "ChangeTypeAction|Cherry-pick"
|
msgid "ChangeTypeAction|Cherry-pick"
|
||||||
|
|
@ -30567,6 +30564,9 @@ msgstr ""
|
||||||
msgid "PipelineSchedules|Save pipeline schedule"
|
msgid "PipelineSchedules|Save pipeline schedule"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "PipelineSchedules|Successfully scheduled a pipeline to run. Go to the %{linkStart}Pipelines page%{linkEnd} for details. "
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "PipelineSchedules|Successfully taken ownership from %{owner}."
|
msgid "PipelineSchedules|Successfully taken ownership from %{owner}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
@ -30585,6 +30585,9 @@ msgstr ""
|
||||||
msgid "PipelineSchedules|There was a problem fetching pipeline schedules."
|
msgid "PipelineSchedules|There was a problem fetching pipeline schedules."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "PipelineSchedules|There was a problem playing the pipeline schedule."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "PipelineSchedules|There was a problem taking ownership of the pipeline schedule."
|
msgid "PipelineSchedules|There was a problem taking ownership of the pipeline schedule."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue