Class: BambooService

Inherits:
CiService show all
Includes:
HTTParty
Defined in:
app/models/project_services/bamboo_service.rb

Overview

Schema Information

Table name: services

id                    :integer          not null, primary key
type                  :string
title                 :string
project_id            :integer
created_at            :datetime         not null
updated_at            :datetime         not null
active                :boolean          not null
properties            :text
template              :boolean          default(FALSE)
push_events           :boolean          default(TRUE)
issues_events         :boolean          default(TRUE)
merge_requests_events :boolean          default(TRUE)
tag_push_events       :boolean          default(TRUE)
note_events           :boolean          default(TRUE), not null
build_events          :boolean          default(FALSE), not null
category              :string           default("common"), not null
default               :boolean          default(FALSE)
wiki_page_events      :boolean          default(TRUE)

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from CiService

#commit_page, #merge_request_page, #merge_request_status, #valid_token?

Methods inherited from Service

#activated?, #async_execute, available_services_names, boolean_accessor, #can_test?, #category, create_from_template, #initialize_properties, #issue_tracker?, prop_accessor, #reset_updated_properties, #template?, #test, #updated_properties

Instance Attribute Details

#responseObject

Returns the value of attribute response


39
40
41
# File 'app/models/project_services/bamboo_service.rb', line 39

def response
  @response
end

Instance Method Details

#build_info(sha) ⇒ Object


87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'app/models/project_services/bamboo_service.rb', line 87

def build_info(sha)
  url = URI.join(bamboo_url, "/rest/api/latest/result?label=#{sha}").to_s

  if username.blank? && password.blank?
    @response = HTTParty.get(url, verify: false)
  else
    url << '&os_authType=basic'
    auth = {
      username: username,
      password: password
    }
    @response = HTTParty.get(url, verify: false, basic_auth: auth)
  end
end

#build_page(sha, ref) ⇒ Object


102
103
104
105
106
107
108
109
110
111
112
113
# File 'app/models/project_services/bamboo_service.rb', line 102

def build_page(sha, ref)
  build_info(sha) if @response.nil? || !@response.code

  if @response.code != 200 || @response['results']['results']['size'] == '0'
    # If actual build link can't be determined, send user to build summary page.
    URI.join(bamboo_url, "/browse/#{build_key}").to_s
  else
    # If actual build link is available, go to build result page.
    result_key = @response['results']['results']['result']['planResultKey']['key']
    URI.join(bamboo_url, "/browse/#{result_key}").to_s
  end
end

#commit_status(sha, ref) ⇒ Object


115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# File 'app/models/project_services/bamboo_service.rb', line 115

def commit_status(sha, ref)
  build_info(sha) if @response.nil? || !@response.code
  return :error unless @response.code == 200 || @response.code == 404

  status = if @response.code == 404 || @response['results']['results']['size'] == '0'
             'Pending'
           else
             @response['results']['results']['result']['buildState']
           end

  if status.include?('Success')
    'success'
  elsif status.include?('Failed')
    'failed'
  elsif status.include?('Pending')
    'pending'
  else
    :error
  end
end

#compose_service_hookObject


44
45
46
47
# File 'app/models/project_services/bamboo_service.rb', line 44

def compose_service_hook
  hook = service_hook || build_service_hook
  hook.save
end

#descriptionObject


59
60
61
# File 'app/models/project_services/bamboo_service.rb', line 59

def description
  'A continuous integration and build server'
end

#execute(data) ⇒ Object


136
137
138
139
140
141
142
# File 'app/models/project_services/bamboo_service.rb', line 136

def execute(data)
  return unless supported_events.include?(data[:object_kind])

  # Bamboo requires a GET and does not take any data.
  url = URI.join(bamboo_url, "/updateAndBuild.action?buildKey=#{build_key}").to_s
  self.class.get(url, verify: false)
end

#fieldsObject


71
72
73
74
75
76
77
78
79
80
81
# File 'app/models/project_services/bamboo_service.rb', line 71

def fields
  [
      { type: 'text', name: 'bamboo_url',
        placeholder: 'Bamboo root URL like https://bamboo.example.com' },
      { type: 'text', name: 'build_key',
        placeholder: 'Bamboo build plan key like KEY' },
      { type: 'text', name: 'username',
        placeholder: 'A user with API access, if applicable' },
      { type: 'password', name: 'password' },
  ]
end

#helpObject


63
64
65
# File 'app/models/project_services/bamboo_service.rb', line 63

def help
  'You must set up automatic revision labeling and a repository trigger in Bamboo.'
end

#reset_passwordObject


49
50
51
52
53
# File 'app/models/project_services/bamboo_service.rb', line 49

def reset_password
  if bamboo_url_changed? && !password_touched?
    self.password = nil
  end
end

#supported_eventsObject


83
84
85
# File 'app/models/project_services/bamboo_service.rb', line 83

def supported_events
  %w(push)
end

#titleObject


55
56
57
# File 'app/models/project_services/bamboo_service.rb', line 55

def title
  'Atlassian Bamboo CI'
end

#to_paramObject


67
68
69
# File 'app/models/project_services/bamboo_service.rb', line 67

def to_param
  'bamboo'
end