gitlab_ci_service.rb 1.88 KB
Newer Older
1
2
3
4
# == Schema Information
#
# Table name: services
#
Valery Sizov's avatar
Valery Sizov committed
5
6
7
8
9
10
11
12
#  id         :integer          not null, primary key
#  type       :string(255)
#  title      :string(255)
#  project_id :integer          not null
#  created_at :datetime
#  updated_at :datetime
#  active     :boolean          default(FALSE), not null
#  properties :text
13
14
#

15
class GitlabCiService < CiService
Drew Blessing's avatar
Drew Blessing committed
16
  prop_accessor :project_url, :token
17
18
  validates :project_url, presence: true, if: :activated?
  validates :token, presence: true, if: :activated?
19
20
21

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

22
23
  after_save :compose_service_hook, if: :activated?

24
25
26
27
28
  def compose_service_hook
    hook = service_hook || build_service_hook
    hook.url = [project_url, "/build", "?token=#{token}"].join("")
    hook.save
  end
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
29

30
  def commit_status_path(sha)
31
32
33
    project_url + "/builds/#{sha}/status.json?token=#{token}"
  end

34
35
36
37
38
39
40
  def get_ci_build(sha)
    @ci_builds ||= {}
    @ci_builds[sha] ||= HTTParty.get(commit_status_path(sha), verify: false)
  end

  def commit_status(sha)
    response = get_ci_build(sha)
41
42
43
44
45
46
47
48

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

49
50
51
52
53
54
55
56
  def commit_coverage(sha)
    response = get_ci_build(sha)

    if response.code == 200 and response["coverage"]
      response["coverage"]
    end
  end

57
  def build_page(sha)
58
59
    project_url + "/builds/#{sha}"
  end
60
61
62
63
64
65
66
67

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

  def status_img_path
    project_url + "/status.png?ref=" + project.default_branch
  end
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86

  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
87
end