Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
bb3ea5f45e
commit
982c486da4
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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) }
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue