Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2022-05-03 06:11:51 +00:00
parent bb3ea5f45e
commit 982c486da4
6 changed files with 84 additions and 10 deletions

View File

@ -45,7 +45,7 @@ module Projects
def visible_groups def visible_groups
visible_groups = project.invited_groups visible_groups = project.invited_groups
unless project_owner? unless project.team.owner?(current_user)
visible_groups = visible_groups.public_or_visible_to_user(current_user) visible_groups = visible_groups.public_or_visible_to_user(current_user)
end end
@ -60,13 +60,5 @@ module Projects
def individual_project_members def individual_project_members
project.project_members.select(*GroupMember.cached_column_list) project.project_members.select(*GroupMember.cached_column_list)
end end
def project_owner?
if project.group.present?
project.group.owners.include?(current_user)
else
project.namespace.owner == current_user
end
end
end end
end end

View File

@ -8,6 +8,34 @@ info: To determine the technical writer assigned to the Stage/Group associated w
You can read more about [controlling the job concurrency with resource groups](../ci/resource_groups/index.md). You can read more about [controlling the job concurrency with resource groups](../ci/resource_groups/index.md).
## Get all resource groups for a project
```plaintext
GET /projects/:id/resource_groups
```
| Attribute | Type | Required | Description |
|-----------|---------|----------|---------------------|
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding) owned by the authenticated user |
```shell
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/resource_groups"
```
Example of response
```json
[
{
"id": 3,
"key": "production",
"process_mode": "unordered",
"created_at": "2021-09-01T08:04:59.650Z",
"updated_at": "2021-09-01T08:04:59.650Z"
}
]
```
## Get a specific resource group ## Get a specific resource group
```plaintext ```plaintext

View File

@ -3,6 +3,8 @@
module API module API
module Ci module Ci
class ResourceGroups < ::API::Base class ResourceGroups < ::API::Base
include PaginationParams
before { authenticate! } before { authenticate! }
feature_category :continuous_delivery feature_category :continuous_delivery
@ -12,6 +14,18 @@ module API
requires :id, type: String, desc: 'The ID of a project' requires :id, type: String, desc: 'The ID of a project'
end end
resource :projects, requirements: ::API::API::NAMESPACE_OR_PROJECT_REQUIREMENTS do resource :projects, requirements: ::API::API::NAMESPACE_OR_PROJECT_REQUIREMENTS do
desc 'Get all resource groups for this project' do
success Entities::Ci::ResourceGroup
end
params do
use :pagination
end
get ':id/resource_groups' do
authorize! :read_resource_group, user_project
present paginate(user_project.resource_groups), with: Entities::Ci::ResourceGroup
end
desc 'Get a single resource group' do desc 'Get a single resource group' do
success Entities::Ci::ResourceGroup success Entities::Ci::ResourceGroup
end end

View File

@ -11,6 +11,8 @@ module Gitlab
Gitlab::ProcessMemoryCache.cache_backend.clear Gitlab::ProcessMemoryCache.cache_backend.clear
@app.call(env) @app.call(env)
ensure
Gitlab::ProcessMemoryCache.cache_backend.clear
end end
end end
end end

View File

@ -9,6 +9,36 @@ RSpec.describe API::Ci::ResourceGroups do
let(:user) { developer } let(:user) { developer }
describe 'GET /projects/:id/resource_groups' do
subject { get api("/projects/#{project.id}/resource_groups", user) }
let!(:resource_groups) { create_list(:ci_resource_group, 3, project: project) }
it 'returns all resource groups for this project', :aggregate_failures do
subject
expect(response).to have_gitlab_http_status(:ok)
expect(response).to include_pagination_headers
resource_groups.each_index do |i|
expect(json_response[i]['id']).to eq(resource_groups[i].id)
expect(json_response[i]['key']).to eq(resource_groups[i].key)
expect(json_response[i]['process_mode']).to eq(resource_groups[i].process_mode)
expect(Time.parse(json_response[i]['created_at'])).to be_like_time(resource_groups[i].created_at)
expect(Time.parse(json_response[i]['updated_at'])).to be_like_time(resource_groups[i].updated_at)
end
end
context 'when user is reporter' do
let(:user) { reporter }
it 'returns forbidden' do
subject
expect(response).to have_gitlab_http_status(:forbidden)
end
end
end
describe 'GET /projects/:id/resource_groups/:key' do describe 'GET /projects/:id/resource_groups/:key' do
subject { get api("/projects/#{project.id}/resource_groups/#{key}", user) } subject { get api("/projects/#{project.id}/resource_groups/#{key}", user) }

View File

@ -80,7 +80,8 @@ module ActiveRecord
if values[:cached] && skip_cached if values[:cached] && skip_cached
@cached << values[:sql] @cached << values[:sql]
elsif !skip_schema_queries || !values[:name]&.include?("SCHEMA") elsif !ignorable?(values)
backtrace = @query_recorder_debug ? show_backtrace(values, duration) : nil backtrace = @query_recorder_debug ? show_backtrace(values, duration) : nil
@log << values[:sql] @log << values[:sql]
store_sql_by_source(values: values, duration: duration, backtrace: backtrace) store_sql_by_source(values: values, duration: duration, backtrace: backtrace)
@ -102,5 +103,12 @@ module ActiveRecord
def occurrences def occurrences
@occurrences ||= @log.group_by(&:to_s).transform_values(&:count) @occurrences ||= @log.group_by(&:to_s).transform_values(&:count)
end end
def ignorable?(values)
return true if skip_schema_queries && values[:name]&.include?("SCHEMA")
return true if values[:name]&.match(/License Load/)
false
end
end end
end end