BigW Consortium Gitlab

commits.rb 2.27 KB
Newer Older
1 2 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
module Ci
  module API
    class Commits < Grape::API
      resource :commits do
        # Get list of commits per project
        #
        # Parameters:
        #   project_id (required) - The ID of a project
        #   project_token (requires) - Project token
        #   page (optional)
        #   per_page (optional) - items per request (default is 20)
        #
        get do
          required_attributes! [:project_id, :project_token]
          project = Ci::Project.find(params[:project_id])
          authenticate_project_token!(project)

          commits = project.commits.page(params[:page]).per(params[:per_page] || 20)
          present commits, with: Entities::CommitWithBuilds
        end

        # Create a commit
        #
        # Parameters:
        #   project_id (required) - The ID of a project
        #   project_token (requires) - Project token
        #   data (required) - GitLab push data
        #
        #   Sample GitLab push data:
        #   {
        #     "before": "95790bf891e76fee5e1747ab589903a6a1f80f22",
        #     "after": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
        #     "ref": "refs/heads/master",
        #     "commits": [
        #       {
        #         "id": "b6568db1bc1dcd7f8b4d5a946b0b91f9dacd7327",
        #         "message": "Update Catalan translation to e38cb41.",
        #         "timestamp": "2011-12-12T14:27:31+02:00",
        #         "url": "http://localhost/diaspora/commits/b6568db1bc1dcd7f8b4d5a946b0b91f9dacd7327",
        #         "author": {
        #           "name": "Jordi Mallach",
        #           "email": "jordi@softcatala.org",
        #         }
        #       }, .... more commits
        #     ]
        #   }
        #
        # Example Request:
        #   POST /commits
        post do
          required_attributes! [:project_id, :data, :project_token]
          project = Ci::Project.find(params[:project_id])
          authenticate_project_token!(project)
          commit = Ci::CreateCommitService.new.execute(project, params[:data])

          if commit.persisted?
            present commit, with: Entities::CommitWithBuilds
          else
            errors = commit.errors.full_messages.join(", ")
            render_api_error!(errors, 400)
          end
        end
      end
    end
  end
end