Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2021-05-31 06:10:40 +00:00
parent 5fa401a99e
commit d6ae5ba9df
14 changed files with 77 additions and 13 deletions

View file

@ -10,8 +10,8 @@
# because some repos are private and CI_JOB_TOKEN cannot access files. # because some repos are private and CI_JOB_TOKEN cannot access files.
# See https://gitlab.com/gitlab-org/gitlab/issues/191273 # See https://gitlab.com/gitlab-org/gitlab/issues/191273
GIT_DEPTH: 1 GIT_DEPTH: 1
# By default, deploy the Review App using the `master` branch of the `gitlab-org/gitlab-docs` project # By default, deploy the Review App using the `main` branch of the `gitlab-org/gitlab-docs` project
DOCS_BRANCH: master DOCS_BRANCH: main
environment: environment:
name: review-docs/mr-${CI_MERGE_REQUEST_IID} name: review-docs/mr-${CI_MERGE_REQUEST_IID}
# DOCS_REVIEW_APPS_DOMAIN and DOCS_GITLAB_REPO_SUFFIX are CI variables # DOCS_REVIEW_APPS_DOMAIN and DOCS_GITLAB_REPO_SUFFIX are CI variables

View file

@ -56,7 +56,13 @@ class Projects::ForksController < Projects::ApplicationController
can_fork_to?(current_user.namespace) can_fork_to?(current_user.namespace)
render json: { render json: {
namespaces: ForkNamespaceSerializer.new.represent(namespaces, project: project, current_user: current_user, memberships: memberships_hash) namespaces: ForkNamespaceSerializer.new.represent(
namespaces,
project: project,
current_user: current_user,
memberships: memberships_hash,
forked_projects: forked_projects_by_namespace(namespaces)
)
} }
end end
end end
@ -129,6 +135,10 @@ class Projects::ForksController < Projects::ApplicationController
def memberships_hash def memberships_hash
current_user.members.where(source: load_namespaces_with_associations).index_by(&:source_id) current_user.members.where(source: load_namespaces_with_associations).index_by(&:source_id)
end end
def forked_projects_by_namespace(namespaces)
project.forks.where(namespace: namespaces).includes(:namespace).index_by(&:namespace_id)
end
end end
Projects::ForksController.prepend_mod_with('Projects::ForksController') Projects::ForksController.prepend_mod_with('Projects::ForksController')

View file

@ -160,7 +160,7 @@ class Projects::IssuesController < Projects::ApplicationController
new_project = Project.find(params[:move_to_project_id]) new_project = Project.find(params[:move_to_project_id])
return render_404 unless issue.can_move?(current_user, new_project) return render_404 unless issue.can_move?(current_user, new_project)
@issue = ::Issues::UpdateService.new(project: project, current_user: current_user, params: { target_project: new_project }).execute(issue) @issue = ::Issues::MoveService.new(project: project, current_user: current_user).execute(issue, new_project)
end end
respond_to do |format| respond_to do |format|

View file

@ -73,6 +73,8 @@ class WebHook < ApplicationRecord
end end
def enable! def enable!
return if recent_failures == 0 && disabled_until.nil? && backoff_count == 0
update!(recent_failures: 0, disabled_until: nil, backoff_count: 0) update!(recent_failures: 0, disabled_until: nil, backoff_count: 0)
end end

View file

@ -13,7 +13,7 @@ class ForkNamespaceEntity < Grape::Entity
end end
expose :forked_project_path do |namespace, options| expose :forked_project_path do |namespace, options|
if forked_project = namespace.find_fork_of(options[:project]) if forked_project = options.dig(:forked_projects, namespace.id)
project_path(forked_project) project_path(forked_project)
end end
end end

View file

@ -42,6 +42,10 @@ SCIM mapping:
![Azure AD SCIM](img/AzureAD-scim_attribute_mapping.png) ![Azure AD SCIM](img/AzureAD-scim_attribute_mapping.png)
Group Sync:
![Azure Group Claims](img/azure_configure_group_claim.png)
## Okta ## Okta
Basic SAML app configuration: Basic SAML app configuration:

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

View file

@ -29,7 +29,7 @@ jobs, where each of the jobs executes a different command.
Of course a command can execute code directly (`./configure;make;make install`) Of course a command can execute code directly (`./configure;make;make install`)
or run a script (`test.sh`) in the repository. or run a script (`test.sh`) in the repository.
Jobs are picked up by [runners](../runners/README.md) and executed within the Jobs are picked up by [runners](../runners/README.md) and executed in the
environment of the runner. What is important is that each job is run environment of the runner. What is important is that each job is run
independently from each other. independently from each other.

View file

@ -152,6 +152,10 @@ We recommend:
- **Unique User Identifier (Name identifier)** set to `user.objectID`. - **Unique User Identifier (Name identifier)** set to `user.objectID`.
- **nameid-format** set to persistent. - **nameid-format** set to persistent.
If using [Group Sync](#group-sync), customize the name of the group claim to match the required attribute.
See the [troubleshooting page](../../../administration/troubleshooting/group_saml_scim.md#azure-active-directory) for an example configuration.
### Okta setup notes ### Okta setup notes
Please follow the Okta documentation on [setting up a SAML application in Okta](https://developer.okta.com/docs/guides/build-sso-integration/saml2/overview/) with the notes below for consideration. Please follow the Okta documentation on [setting up a SAML application in Okta](https://developer.okta.com/docs/guides/build-sso-integration/saml2/overview/) with the notes below for consideration.

View file

@ -81,6 +81,8 @@ the following table.
## Enable or disable project access token creation ## Enable or disable project access token creation
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/287707) in GitLab 13.11.
You may enable or disable project access token creation for all projects in a group in **Group > Settings > General > Permissions, LFS, 2FA > Allow project access token creation**. You may enable or disable project access token creation for all projects in a group in **Group > Settings > General > Permissions, LFS, 2FA > Allow project access token creation**.
Even when creation is disabled, you can still use and revoke existing project access tokens. Even when creation is disabled, you can still use and revoke existing project access tokens.
This setting is available only on top-level groups. This setting is available only on top-level groups.

View file

@ -255,7 +255,7 @@ module Trigger
end end
def ref def ref
ENV['DOCS_BRANCH'] || 'master' ENV['DOCS_BRANCH'] || 'main'
end end
# `gitlab-org/gitlab-docs` pipeline trigger "Triggered from gitlab-org/gitlab 'review-docs-deploy' job" # `gitlab-org/gitlab-docs` pipeline trigger "Triggered from gitlab-org/gitlab 'review-docs-deploy' job"

View file

@ -195,6 +195,29 @@ RSpec.describe Projects::ForksController do
expect(json_response['namespaces'].length).to eq(1) expect(json_response['namespaces'].length).to eq(1)
expect(json_response['namespaces'][0]['id']).to eq(group.id) expect(json_response['namespaces'][0]['id']).to eq(group.id)
end end
context 'N+1 queries' do
before do
create(:fork_network, root_project: project)
end
it 'avoids N+1 queries' do
do_request = -> { get :new, format: format, params: { namespace_id: project.namespace, project_id: project } }
# warm up
do_request.call
control = ActiveRecord::QueryRecorder.new { do_request.call }
create(:group, :public).add_owner(user)
# TODO: There is another N+1 caused by user.can?(:create_projects, namespace)
# Defined in ForkNamespaceEntity
extra_count = 1
expect { do_request.call }.not_to exceed_query_limit(control.count + extra_count)
end
end
end end
end end

View file

@ -268,11 +268,29 @@ RSpec.describe WebHook do
end end
describe '#enable!' do describe '#enable!' do
it 'makes a hook executable' do it 'makes a hook executable if it was marked as failed' do
hook.recent_failures = 1000 hook.recent_failures = 1000
expect { hook.enable! }.to change(hook, :executable?).from(false).to(true) expect { hook.enable! }.to change(hook, :executable?).from(false).to(true)
end end
it 'makes a hook executable if it is currently backed off' do
hook.disabled_until = 1.hour.from_now
expect { hook.enable! }.to change(hook, :executable?).from(false).to(true)
end
it 'does not update hooks unless necessary' do
expect(hook).not_to receive(:update!)
hook.enable!
end
it 'is idempotent on executable hooks' do
expect(hook).not_to receive(:update!)
expect { hook.enable! }.not_to change(hook, :executable?)
end
end end
describe 'backoff!' do describe 'backoff!' do
@ -298,6 +316,7 @@ RSpec.describe WebHook do
it 'does not allow the failure count to exceed the maximum value' do it 'does not allow the failure count to exceed the maximum value' do
hook.recent_failures = described_class::MAX_FAILURES hook.recent_failures = described_class::MAX_FAILURES
expect(hook).not_to receive(:update!)
expect { hook.failed! }.not_to change(hook, :recent_failures) expect { hook.failed! }.not_to change(hook, :recent_failures)
end end

View file

@ -9,12 +9,15 @@ RSpec.describe ForkNamespaceEntity do
let_it_be(:user) { create(:user) } let_it_be(:user) { create(:user) }
let_it_be(:project) { create(:project) } let_it_be(:project) { create(:project) }
let_it_be(:namespace) { create(:group, :with_avatar, description: 'test') } let_it_be(:namespace) { create(:group, :with_avatar, description: 'test') }
let_it_be(:forked_project) { build(:project) }
let(:memberships) do let(:memberships) do
user.members.index_by(&:source_id) user.members.index_by(&:source_id)
end end
let(:entity) { described_class.new(namespace, current_user: user, project: project, memberships: memberships) } let(:forked_projects) { { namespace.id => forked_project } }
let(:entity) { described_class.new(namespace, current_user: user, project: project, memberships: memberships, forked_projects: forked_projects) }
subject(:json) { entity.as_json } subject(:json) { entity.as_json }
@ -46,10 +49,7 @@ RSpec.describe ForkNamespaceEntity do
end end
it 'exposes forked_project_path when fork exists in namespace' do it 'exposes forked_project_path when fork exists in namespace' do
namespace.add_maintainer(user) expect(json[:forked_project_path]).to eql project_path(forked_project)
fork_in_namespace = fork_project(project, user, namespace: namespace)
expect(json[:forked_project_path]).to eql project_path(fork_in_namespace)
end end
it 'exposes relative path to the namespace' do it 'exposes relative path to the namespace' do