2021-01-29 00:20:46 +05:30
# frozen_string_literal: true
module Mutations
module Releases
class Create < Base
graphql_name 'ReleaseCreate'
field :release ,
Types :: ReleaseType ,
null : true ,
2021-10-27 15:23:28 +05:30
description : 'Release after mutation.'
2021-01-29 00:20:46 +05:30
2021-10-27 15:23:28 +05:30
argument :tag_name , GraphQL :: Types :: String ,
2021-01-29 00:20:46 +05:30
required : true , as : :tag ,
2021-03-08 18:12:59 +05:30
description : 'Name of the tag to associate with the release.'
2021-01-29 00:20:46 +05:30
2022-07-23 23:45:48 +05:30
argument :tag_message , GraphQL :: Types :: String ,
required : false ,
description : 'Message to use if creating a new annotated tag.'
2021-10-27 15:23:28 +05:30
argument :ref , GraphQL :: Types :: String ,
2021-01-29 00:20:46 +05:30
required : false ,
2021-10-27 15:23:28 +05:30
description : 'Commit SHA or branch name to use if creating a new tag.'
2021-01-29 00:20:46 +05:30
2021-10-27 15:23:28 +05:30
argument :name , GraphQL :: Types :: String ,
2021-01-29 00:20:46 +05:30
required : false ,
2021-03-08 18:12:59 +05:30
description : 'Name of the release.'
2021-01-29 00:20:46 +05:30
2021-10-27 15:23:28 +05:30
argument :description , GraphQL :: Types :: String ,
2021-01-29 00:20:46 +05:30
required : false ,
2021-03-08 18:12:59 +05:30
description : 'Description (also known as "release notes") of the release.'
2021-01-29 00:20:46 +05:30
2023-03-17 16:20:25 +05:30
argument :released_at , Types :: TimeType , # rubocop:disable Graphql/Descriptions
2021-01-29 00:20:46 +05:30
required : false ,
2022-10-11 01:57:18 +05:30
description : 'Date and time for the release. Defaults to the current time. Expected in ISO 8601 format (`2019-03-15T08:00:00Z`). Only provide this field if creating an upcoming or historical release.'
2021-01-29 00:20:46 +05:30
2021-10-27 15:23:28 +05:30
argument :milestones , [ GraphQL :: Types :: String ] ,
2021-01-29 00:20:46 +05:30
required : false ,
2021-10-27 15:23:28 +05:30
description : 'Title of each milestone the release is associated with. GitLab Premium customers can specify group milestones.'
2021-01-29 00:20:46 +05:30
argument :assets , Types :: ReleaseAssetsInputType ,
required : false ,
2021-03-08 18:12:59 +05:30
description : 'Assets associated to the release.'
2021-01-29 00:20:46 +05:30
authorize :create_release
2021-02-22 17:27:13 +05:30
def resolve ( project_path : , assets : nil , ** scalars )
2021-03-11 19:13:27 +05:30
project = authorized_find! ( project_path )
2021-01-29 00:20:46 +05:30
params = {
** scalars ,
assets : assets . to_h
} . with_indifferent_access
result = :: Releases :: CreateService . new ( project , current_user , params ) . execute
if result [ :status ] == :success
{
release : result [ :release ] ,
errors : [ ]
}
else
{
release : nil ,
errors : [ result [ :message ] ]
}
end
end
end
end
end