GitLab wird am Montag, den 31. Januar, zwischen 08:00 und 12:00 Uhr wegen wichtigen Wartungsarbeiten nicht zur Verfügung stehen.

tags.rb 3.6 KB
Newer Older
1
module API
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
2
  # Git Tags API
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
  class Tags < Grape::API
    before { authenticate! }
    before { authorize! :download_code, user_project }

    resource :projects do
      # Get a project repository tags
      #
      # Parameters:
      #   id (required) - The ID of a project
      # Example Request:
      #   GET /projects/:id/repository/tags
      get ":id/repository/tags" do
        present user_project.repo.tags.sort_by(&:name).reverse,
                with: Entities::RepoTag, project: user_project
      end

      # Create tag
      #
      # Parameters:
      #   id (required) - The ID of a project
      #   tag_name (required) - The name of the tag
      #   ref (required) - Create tag from commit sha or branch
      #   message (optional) - Specifying a message creates an annotated tag.
      # Example Request:
      #   POST /projects/:id/repository/tags
      post ':id/repository/tags' do
        authorize_push_project
        message = params[:message] || nil
        result = CreateTagService.new(user_project, current_user).
32
          execute(params[:tag_name], params[:ref], message, params[:release_description])
33
34
35
36
37
38
39
40
41

        if result[:status] == :success
          present result[:tag],
                  with: Entities::RepoTag,
                  project: user_project
        else
          render_api_error!(result[:message], 400)
        end
      end
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
42

Robert Schilling's avatar
Robert Schilling committed
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
      # Delete tag
      #
      # Parameters:
      #   id (required) - The ID of a project
      #   tag_name (required) - The name of the tag
      # Example Request:
      #   DELETE /projects/:id/repository/tags/:tag
      delete ":id/repository/tags/:tag_name", requirements: { tag_name: /.*/ } do
        authorize_push_project
        result = DeleteTagService.new(user_project, current_user).
          execute(params[:tag_name])

        if result[:status] == :success
          {
            tag_name: params[:tag_name]
          }
        else
          render_api_error!(result[:message], result[:return_code])
        end
      end

Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
64
65
66
67
      # Add release notes to tag
      #
      # Parameters:
      #   id (required) - The ID of a project
68
      #   tag_name (required) - The name of the tag
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
69
70
      #   description (required) - Release notes with markdown support
      # Example Request:
71
      #   POST /projects/:id/repository/tags/:tag_name/release
72
      post ':id/repository/tags/:tag_name/release', requirements: { tag_name: /.*/ } do
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
73
74
        authorize_push_project
        required_attributes! [:description]
75
76
        result = CreateReleaseService.new(user_project, current_user).
          execute(params[:tag_name], params[:description])
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
77

78
79
80
        if result[:status] == :success
          present result[:release], with: Entities::Release
        else
81
          render_api_error!(result[:message], result[:http_status])
82
        end
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
83
      end
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104

      # Updates a release notes of a tag
      #
      # Parameters:
      #   id (required) - The ID of a project
      #   tag_name (required) - The name of the tag
      #   description (required) - Release notes with markdown support
      # Example Request:
      #   PUT /projects/:id/repository/tags/:tag_name/release
      put ':id/repository/tags/:tag_name/release', requirements: { tag_name: /.*/ } do
        authorize_push_project
        required_attributes! [:description]
        result = UpdateReleaseService.new(user_project, current_user).
          execute(params[:tag_name], params[:description])

        if result[:status] == :success
          present result[:release], with: Entities::Release
        else
          render_api_error!(result[:message], result[:http_status])
        end
      end
105
106
107
    end
  end
end