diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-04-20 10:00:54 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-04-20 10:00:54 +0000 |
commit | 3cccd102ba543e02725d247893729e5c73b38295 (patch) | |
tree | f36a04ec38517f5deaaacb5acc7d949688d1e187 /lib/api/releases.rb | |
parent | 205943281328046ef7b4528031b90fbda70c75ac (diff) | |
download | gitlab-ce-3cccd102ba543e02725d247893729e5c73b38295.tar.gz |
Add latest changes from gitlab-org/gitlab@14-10-stable-eev14.10.0-rc42
Diffstat (limited to 'lib/api/releases.rb')
-rw-r--r-- | lib/api/releases.rb | 58 |
1 files changed, 55 insertions, 3 deletions
diff --git a/lib/api/releases.rb b/lib/api/releases.rb index 7b89a177fd9..9e085a91a7c 100644 --- a/lib/api/releases.rb +++ b/lib/api/releases.rb @@ -8,16 +8,48 @@ module API .merge(tag_name: API::NO_SLASH_URL_PART_REGEX) RELEASE_CLI_USER_AGENT = 'GitLab-release-cli' - before { authorize_read_releases! } + feature_category :release_orchestration - after { track_release_event } + params do + requires :id, type: String, desc: 'The ID of a group' + end + resource :groups, requirements: API::NAMESPACE_OR_PROJECT_REQUIREMENTS do + before { authorize_read_group_releases! } - feature_category :release_orchestration + desc 'Get a list of releases for projects in this group.' do + success Entities::Release + end + params do + requires :id, type: Integer, desc: 'The ID of the group to get releases for' + optional :sort, type: String, values: %w[asc desc], default: 'desc', + desc: 'Return projects sorted in ascending and descending order by released_at' + optional :simple, type: Boolean, default: false, + desc: 'Return only the ID, URL, name, and path of each project' + + use :pagination + end + get ":id/releases" do + not_found! unless Feature.enabled?(:group_releases_finder_inoperator) + + finder_options = { + sort: params[:sort] + } + + strict_params = declared_params(include_missing: false) + releases = find_group_releases(finder_options) + + present_group_releases(strict_params, releases) + end + end params do requires :id, type: String, desc: 'The ID of a project' end resource :projects, requirements: API::NAMESPACE_OR_PROJECT_REQUIREMENTS do + before { authorize_read_releases! } + + after { track_release_event } + desc 'Get a project releases' do detail 'This feature was introduced in GitLab 11.7.' named 'get_releases' @@ -162,6 +194,10 @@ module API end helpers do + def authorize_read_group_releases! + authorize! :read_release, user_group + end + def authorize_create_release! authorize! :create_release, user_project end @@ -220,6 +256,22 @@ module API Gitlab::Tracking.event(options[:for].name, options[:route_options][:named], project: user_project, user: current_user, **event_context) end + + def find_group_releases(finder_options) + ::Releases::GroupReleasesFinder + .new(user_group, current_user, finder_options) + .execute(preload: true) + end + + def present_group_releases(params, releases) + options = { + with: params[:simple] ? Entities::BasicReleaseDetails : Entities::Release, + current_user: current_user + } + + # GroupReleasesFinder has already ordered the data for us + present paginate(releases, skip_default_order: true), options + end end end end |