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
|
||||
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)
|
||||
end
|
||||
|
||||
|
@ -60,13 +60,5 @@ module Projects
|
|||
def individual_project_members
|
||||
project.project_members.select(*GroupMember.cached_column_list)
|
||||
end
|
||||
|
||||
def project_owner?
|
||||
if project.group.present?
|
||||
project.group.owners.include?(current_user)
|
||||
else
|
||||
project.namespace.owner == current_user
|
||||
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).
|
||||
|
||||
## 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
|
||||
|
||||
```plaintext
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
module API
|
||||
module Ci
|
||||
class ResourceGroups < ::API::Base
|
||||
include PaginationParams
|
||||
|
||||
before { authenticate! }
|
||||
|
||||
feature_category :continuous_delivery
|
||||
|
@ -12,6 +14,18 @@ module API
|
|||
requires :id, type: String, desc: 'The ID of a project'
|
||||
end
|
||||
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
|
||||
success Entities::Ci::ResourceGroup
|
||||
end
|
||||
|
|
|
@ -11,6 +11,8 @@ module Gitlab
|
|||
Gitlab::ProcessMemoryCache.cache_backend.clear
|
||||
|
||||
@app.call(env)
|
||||
ensure
|
||||
Gitlab::ProcessMemoryCache.cache_backend.clear
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -9,6 +9,36 @@ RSpec.describe API::Ci::ResourceGroups do
|
|||
|
||||
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
|
||||
subject { get api("/projects/#{project.id}/resource_groups/#{key}", user) }
|
||||
|
||||
|
|
|
@ -80,7 +80,8 @@ module ActiveRecord
|
|||
|
||||
if values[:cached] && skip_cached
|
||||
@cached << values[:sql]
|
||||
elsif !skip_schema_queries || !values[:name]&.include?("SCHEMA")
|
||||
elsif !ignorable?(values)
|
||||
|
||||
backtrace = @query_recorder_debug ? show_backtrace(values, duration) : nil
|
||||
@log << values[:sql]
|
||||
store_sql_by_source(values: values, duration: duration, backtrace: backtrace)
|
||||
|
@ -102,5 +103,12 @@ module ActiveRecord
|
|||
def occurrences
|
||||
@occurrences ||= @log.group_by(&:to_s).transform_values(&:count)
|
||||
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
|
||||
|
|
Loading…
Reference in New Issue