BigW Consortium Gitlab

gitlab_ci_service.rb 1.74 KB
Newer Older
1 2 3 4
# == Schema Information
#
# Table name: services
#
Dmitriy Zaporozhets committed
5 6 7 8 9
#  id          :integer          not null, primary key
#  type        :string(255)
#  title       :string(255)
#  token       :string(255)
#  project_id  :integer          not null
Dmitriy Zaporozhets committed
10 11
#  created_at  :datetime
#  updated_at  :datetime
Dmitriy Zaporozhets committed
12 13
#  active      :boolean          default(FALSE), not null
#  project_url :string(255)
Dmitriy Zaporozhets committed
14 15
#  subdomain   :string(255)
#  room        :string(255)
Dmitriy Zaporozhets committed
16
#  recipients  :text
17
#  api_key     :string(255)
18 19
#

20
class GitlabCiService < CiService
21 22
  validates :project_url, presence: true, if: :activated?
  validates :token, presence: true, if: :activated?
23 24 25

  delegate :execute, to: :service_hook, prefix: nil

26 27
  after_save :compose_service_hook, if: :activated?

28 29 30 31 32
  def compose_service_hook
    hook = service_hook || build_service_hook
    hook.url = [project_url, "/build", "?token=#{token}"].join("")
    hook.save
  end
33

34 35 36 37 38
  def commit_status_path sha
    project_url + "/builds/#{sha}/status.json?token=#{token}"
  end

  def commit_status sha
39
    response = HTTParty.get(commit_status_path(sha), verify: false)
40 41 42 43 44 45 46 47 48 49 50

    if response.code == 200 and response["status"]
      response["status"]
    else
      :error
    end
  end

  def build_page sha
    project_url + "/builds/#{sha}"
  end
51 52 53 54 55 56 57 58

  def builds_path
    project_url + "?ref=" + project.default_branch
  end

  def status_img_path
    project_url + "/status.png?ref=" + project.default_branch
  end
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77

  def title
    'GitLab CI'
  end

  def description
    'Continuous integration server from GitLab'
  end

  def to_param
    'gitlab_ci'
  end

  def fields
    [
      { type: 'text', name: 'token', placeholder: 'GitLab CI project specific token' },
      { type: 'text', name: 'project_url', placeholder: 'http://ci.gitlabhq.com/projects/3'}
    ]
  end
78
end