Files
gitlabhq/app/services/create_release_service.rb
Stan HuandRobert Speicher 27821ce01f Merge branch 'consistent-tags-api' into 'master'
Make tag API for release feature consistent

Make tags API consistent with other tags methods. This changes the endpoint from `PUT /projects/:id/repository/:tag/release` to `PUT /projects/:id/repository/tags/:tag_name/release`.

On thing the API is still missing, is an error if the tag does not exist. Right now it returns 200 even the tag does not exist. I'll fix that such it returns 404.

@stanhu Can you review?
@rspeicher This MR should go into 8.2

See merge request !1864
2015-11-21 22:38:13 -05:00

32 lines
701 B
Ruby

require_relative 'base_service'
class CreateReleaseService < BaseService
def execute(tag_name, release_description)
repository = project.repository
existing_tag = repository.find_tag(tag_name)
# Only create a release if the tag exists
if existing_tag
release = project.releases.find_by(tag: tag_name)
if release
error('Release already exists', 409)
else
release = project.releases.new({ tag: tag_name, description: release_description })
release.save
success(release)
end
else
error('Tag does not exist', 404)
end
end
def success(release)
out = super()
out[:release] = release
out
end
end