Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/api/releases.rb')
-rw-r--r--lib/api/releases.rb37
1 files changed, 35 insertions, 2 deletions
diff --git a/lib/api/releases.rb b/lib/api/releases.rb
index c20e618efd1..c65a23e334f 100644
--- a/lib/api/releases.rb
+++ b/lib/api/releases.rb
@@ -6,9 +6,12 @@ module API
RELEASE_ENDPOINT_REQUIREMENTS = API::NAMESPACE_OR_PROJECT_REQUIREMENTS
.merge(tag_name: API::NO_SLASH_URL_PART_REGEX)
+ RELEASE_CLI_USER_AGENT = 'GitLab-release-cli'
before { authorize_read_releases! }
+ after { track_release_event }
+
feature_category :release_orchestration
params do
@@ -17,6 +20,7 @@ module API
resource :projects, requirements: API::NAMESPACE_OR_PROJECT_REQUIREMENTS do
desc 'Get a project releases' do
detail 'This feature was introduced in GitLab 11.7.'
+ named 'get_releases'
success Entities::Release
end
params do
@@ -29,11 +33,22 @@ module API
get ':id/releases' do
releases = ::ReleasesFinder.new(user_project, current_user, declared_params.slice(:order_by, :sort)).execute
- present paginate(releases), with: Entities::Release, current_user: current_user
+ # We cache the serialized payload per user in order to avoid repeated renderings.
+ # Since the cached result could contain sensitive information,
+ # it will expire in a short interval.
+ present_cached paginate(releases),
+ with: Entities::Release,
+ # `current_user` could be absent if the releases are publicly accesible.
+ # We should not use `cache_key` for the user because the version/updated_at
+ # context is unnecessary here.
+ cache_context: -> (_) { "user:{#{current_user&.id}}" },
+ expires_in: 5.minutes,
+ current_user: current_user
end
desc 'Get a single project release' do
detail 'This feature was introduced in GitLab 11.7.'
+ named 'get_release'
success Entities::Release
end
params do
@@ -47,6 +62,7 @@ module API
desc 'Create a new release' do
detail 'This feature was introduced in GitLab 11.7.'
+ named 'create_release'
success Entities::Release
end
params do
@@ -84,6 +100,7 @@ module API
desc 'Update a release' do
detail 'This feature was introduced in GitLab 11.7.'
+ named 'update_release'
success Entities::Release
end
params do
@@ -112,6 +129,7 @@ module API
desc 'Delete a release' do
detail 'This feature was introduced in GitLab 11.7.'
+ named 'delete_release'
success Entities::Release
end
params do
@@ -176,8 +194,23 @@ module API
def log_release_milestones_updated_audit_event
# extended in EE
end
+
+ def release_cli?
+ request.env['HTTP_USER_AGENT']&.include?(RELEASE_CLI_USER_AGENT) == true
+ end
+
+ def event_context
+ {
+ release_cli: release_cli?
+ }
+ end
+
+ def track_release_event
+ Gitlab::Tracking.event(options[:for].name, options[:route_options][:named],
+ project: user_project, user: current_user, **event_context)
+ end
end
end
end
-API::Releases.prepend_if_ee('EE::API::Releases')
+API::Releases.prepend_mod_with('API::Releases')