1.80.0 1.81.0
...@@ -457,7 +457,7 @@ group :ed25519 do ...@@ -457,7 +457,7 @@ group :ed25519 do
end end
# Gitaly GRPC protocol definitions # Gitaly GRPC protocol definitions
gem 'gitaly', '~> 1.73.0' gem 'gitaly', '~> 1.81.0'
gem 'grpc', '~> 1.24.0' gem 'grpc', '~> 1.24.0'
... ...
......
...@@ -362,7 +362,7 @@ GEM ...@@ -362,7 +362,7 @@ GEM
po_to_json (>= 1.0.0) po_to_json (>= 1.0.0)
rails (>= 3.2.0) rails (>= 3.2.0)
git (1.5.0) git (1.5.0)
gitaly (1.73.0) gitaly (1.81.0)
grpc (~> 1.0) grpc (~> 1.0)
github-markup (1.7.0) github-markup (1.7.0)
gitlab-chronic (0.10.5) gitlab-chronic (0.10.5)
...@@ -1211,7 +1211,7 @@ DEPENDENCIES ...@@ -1211,7 +1211,7 @@ DEPENDENCIES
gettext (~> 3.2.2) gettext (~> 3.2.2)
gettext_i18n_rails (~> 1.8.0) gettext_i18n_rails (~> 1.8.0)
gettext_i18n_rails_js (~> 1.3) gettext_i18n_rails_js (~> 1.3)
gitaly (~> 1.73.0) gitaly (~> 1.81.0)
github-markup (~> 1.7.0) github-markup (~> 1.7.0)
gitlab-chronic (~> 0.10.5) gitlab-chronic (~> 0.10.5)
gitlab-labkit (= 0.8.0) gitlab-labkit (= 0.8.0)
... ...
......
...@@ -149,7 +149,7 @@ export default { ...@@ -149,7 +149,7 @@ export default {
roleDropdownHelpText() { roleDropdownHelpText() {
return sprintf( return sprintf(
s__( s__(
'ClusterIntegration|Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role name, first create one on %{startLink}Amazon Web Services %{externalLinkIcon} %{endLink}.', 'ClusterIntegration|Your service role is distinct from the provision role used when authenticating. It will allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf. To use a new role, first create one on %{startLink}Amazon Web Services %{externalLinkIcon} %{endLink}.',
), ),
{ {
startLink: startLink:
...@@ -344,7 +344,7 @@ export default { ...@@ -344,7 +344,7 @@ export default {
/> />
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="label-bold" for="eks-role">{{ s__('ClusterIntegration|Role name') }}</label> <label class="label-bold" for="eks-role">{{ s__('ClusterIntegration|Service role') }}</label>
<cluster-form-dropdown <cluster-form-dropdown
field-id="eks-role" field-id="eks-role"
field-name="eks-role" field-name="eks-role"
...@@ -352,7 +352,7 @@ export default { ...@@ -352,7 +352,7 @@ export default {
:items="roles" :items="roles"
:loading="isLoadingRoles" :loading="isLoadingRoles"
:loading-text="s__('ClusterIntegration|Loading IAM Roles')" :loading-text="s__('ClusterIntegration|Loading IAM Roles')"
:placeholder="s__('ClusterIntergation|Select role name')" :placeholder="s__('ClusterIntergation|Select service role')"
:search-field-placeholder="s__('ClusterIntegration|Search IAM Roles')" :search-field-placeholder="s__('ClusterIntegration|Search IAM Roles')"
:empty-text="s__('ClusterIntegration|No IAM Roles found')" :empty-text="s__('ClusterIntegration|No IAM Roles found')"
:has-errors="Boolean(loadingRolesError)" :has-errors="Boolean(loadingRolesError)"
... ...
......
...@@ -49,6 +49,10 @@ export default { ...@@ -49,6 +49,10 @@ export default {
triggerEvent() { triggerEvent() {
this.$emit(this.selectedItem.eventName); this.$emit(this.selectedItem.eventName);
}, },
changeSelectedItem(item) {
this.selectedItem = item;
this.$emit('change', item);
},
}, },
}; };
</script> </script>
...@@ -67,7 +71,7 @@ export default { ...@@ -67,7 +71,7 @@ export default {
:key="item.eventName" :key="item.eventName"
:active="selectedItem === item" :active="selectedItem === item"
active-class="is-active" active-class="is-active"
@click="selectedItem = item" @click="changeSelectedItem(item)"
> >
<strong>{{ item.title }}</strong> <strong>{{ item.title }}</strong>
<div>{{ item.description }}</div> <div>{{ item.description }}</div>
... ...
......
...@@ -7,7 +7,7 @@ class Projects::ReleasesController < Projects::ApplicationController ...@@ -7,7 +7,7 @@ class Projects::ReleasesController < Projects::ApplicationController
before_action :authorize_read_release! before_action :authorize_read_release!
before_action do before_action do
push_frontend_feature_flag(:release_issue_summary, project) push_frontend_feature_flag(:release_issue_summary, project)
push_frontend_feature_flag(:release_evidence_collection, project) push_frontend_feature_flag(:release_evidence_collection, project, default_enabled: true)
end end
before_action :authorize_update_release!, only: %i[edit update] before_action :authorize_update_release!, only: %i[edit update]
before_action :authorize_read_release_evidence!, only: [:evidence] before_action :authorize_read_release_evidence!, only: [:evidence]
... ...
......
# frozen_string_literal: true
class SentryIssueFinder
attr_accessor :project, :current_user
def initialize(project, current_user: nil)
@project = project
@current_user = current_user
end
def execute(identifier)
return unless authorized?
SentryIssue
.for_project_and_identifier(project, identifier)
end
private
def authorized?
Ability.allowed?(current_user, :read_sentry_issue, project)
end
end
...@@ -449,7 +449,7 @@ class MergeRequest < ApplicationRecord ...@@ -449,7 +449,7 @@ class MergeRequest < ApplicationRecord
# Set off a rebase asynchronously, atomically updating the `rebase_jid` of # Set off a rebase asynchronously, atomically updating the `rebase_jid` of
# the MR so that the status of the operation can be tracked. # the MR so that the status of the operation can be tracked.
def rebase_async(user_id) def rebase_async(user_id, skip_ci: false)
with_rebase_lock do with_rebase_lock do
raise ActiveRecord::StaleObjectError if !open? || rebase_in_progress? raise ActiveRecord::StaleObjectError if !open? || rebase_in_progress?
...@@ -458,7 +458,7 @@ class MergeRequest < ApplicationRecord ...@@ -458,7 +458,7 @@ class MergeRequest < ApplicationRecord
# attribute is set *and* that the sidekiq job is still running. So a JID # attribute is set *and* that the sidekiq job is still running. So a JID
# for a completed RebaseWorker is equivalent to a nil JID. # for a completed RebaseWorker is equivalent to a nil JID.
jid = Sidekiq::Worker.skipping_transaction_check do jid = Sidekiq::Worker.skipping_transaction_check do
RebaseWorker.perform_async(id, user_id) RebaseWorker.perform_async(id, user_id, skip_ci)
end end
update_column(:rebase_jid, jid) update_column(:rebase_jid, jid)
... ...
......
...@@ -186,7 +186,11 @@ class Namespace < ApplicationRecord ...@@ -186,7 +186,11 @@ class Namespace < ApplicationRecord
# any ancestor can disable emails for all descendants # any ancestor can disable emails for all descendants
def emails_disabled? def emails_disabled?
strong_memoize(:emails_disabled) do strong_memoize(:emails_disabled) do
self_and_ancestors.where(emails_disabled: true).exists? if parent_id
self_and_ancestors.where(emails_disabled: true).exists?
else
!!emails_disabled
end
end end
end end
... ...
......
...@@ -1062,18 +1062,22 @@ class Repository ...@@ -1062,18 +1062,22 @@ class Repository
rebase_sha rebase_sha
end end
def rebase(user, merge_request) def rebase(user, merge_request, skip_ci: false)
if Feature.disabled?(:two_step_rebase, default_enabled: true) if Feature.disabled?(:two_step_rebase, default_enabled: true)
return rebase_deprecated(user, merge_request) return rebase_deprecated(user, merge_request)
end end
push_options = []
push_options << Gitlab::PushOptions::CI_SKIP if skip_ci
raw.rebase( raw.rebase(
user, user,
merge_request.id, merge_request.id,
branch: merge_request.source_branch, branch: merge_request.source_branch,
branch_sha: merge_request.source_branch_sha, branch_sha: merge_request.source_branch_sha,
remote_repository: merge_request.target_project.repository.raw, remote_repository: merge_request.target_project.repository.raw,
remote_branch: merge_request.target_branch remote_branch: merge_request.target_branch,
push_options: push_options
) do |commit_id| ) do |commit_id|
merge_request.update!(rebase_commit_sha: commit_id, merge_error: nil) merge_request.update!(rebase_commit_sha: commit_id, merge_error: nil)
end end
... ...
......
...@@ -4,7 +4,11 @@ class SentryIssue < ApplicationRecord ...@@ -4,7 +4,11 @@ class SentryIssue < ApplicationRecord
belongs_to :issue belongs_to :issue
validates :issue, uniqueness: true, presence: true validates :issue, uniqueness: true, presence: true
validates :sentry_issue_identifier, validates :sentry_issue_identifier, presence: true
uniqueness: true,
presence: true def self.for_project_and_identifier(project, identifier)
joins(:issue)
.where(issues: { project_id: project.id })
.find_by_sentry_issue_identifier(identifier)
end
end end
...@@ -8,8 +8,9 @@ module MergeRequests ...@@ -8,8 +8,9 @@ module MergeRequests
attr_reader :merge_request attr_reader :merge_request
def execute(merge_request) def execute(merge_request, skip_ci: false)
@merge_request = merge_request @merge_request = merge_request
@skip_ci = skip_ci
if rebase if rebase
success success
...@@ -25,7 +26,7 @@ module MergeRequests ...@@ -25,7 +26,7 @@ module MergeRequests
return false return false
end end
repository.rebase(current_user, merge_request) repository.rebase(current_user, merge_request, skip_ci: @skip_ci)
true true
rescue => e rescue => e
... ...
......
...@@ -7,12 +7,12 @@ class RebaseWorker ...@@ -7,12 +7,12 @@ class RebaseWorker
feature_category :source_code_management feature_category :source_code_management
def perform(merge_request_id, current_user_id) def perform(merge_request_id, current_user_id, skip_ci = false)
current_user = User.find(current_user_id) current_user = User.find(current_user_id)
merge_request = MergeRequest.find(merge_request_id) merge_request = MergeRequest.find(merge_request_id)
MergeRequests::RebaseService MergeRequests::RebaseService
.new(merge_request.source_project, current_user) .new(merge_request.source_project, current_user)
.execute(merge_request) .execute(merge_request, skip_ci: skip_ci)
end end
end end
---
title: 'Geo: Fix Docker repository synchronization for local storage'
merge_request: 22981
author:
type: fixed
---
title: Bump cluster-applications image to v0.5.0 (Adds GitLab Runner support)
merge_request: 23110
author:
type: added
---
title: Detect go when doing dependency scanning
merge_request: 22712
author:
type: added
---
title: Allow "skip_ci" flag to be passed to rebase operation
merge_request: 22800
author:
type: added
---
title: Updates AWS EKS service role name help text to clarify it is distinct from provision role
merge_request:
author:
type: changed
---
title: Upgrade to Gitaly v1.81.0
merge_request: 23198
author:
type: changed
# frozen_string_literal: true
class AddIndexToSentryIssuesSentryIssueIdentifier < ActiveRecord::Migration[5.2]
include Gitlab::Database::MigrationHelpers
DOWNTIME = false
disable_ddl_transaction!
def up
add_concurrent_index :sentry_issues, :sentry_issue_identifier
end
def down
remove_concurrent_index :sentry_issues, :sentry_issue_identifier
end
end