Commit 05a9c6b2 authored by Stan Hu's avatar Stan Hu

Fix Bamboo CI status not showing for branch plans

The original API that queries by label (`/rest/api/latest/result?label=#{sha1}`)
only works for results from main plans and not branch plans. The
`/rest/api/latest/result/byChangeset/#{sha1}` endpoint gives results from
branch plans but not for the first push to the branch. Subsequent pushes
work.

For more details, see https://jira.atlassian.com/browse/BAM-16121.

Closes #1355
parent 70cf3bff
...@@ -67,11 +67,11 @@ class BambooService < CiService ...@@ -67,11 +67,11 @@ class BambooService < CiService
def execute(data) def execute(data)
return unless supported_events.include?(data[:object_kind]) return unless supported_events.include?(data[:object_kind])
get_path("updateAndBuild.action?buildKey=#{build_key}") get_path("updateAndBuild.action", { buildKey: build_key })
end end
def calculate_reactive_cache(sha, ref) def calculate_reactive_cache(sha, ref)
response = get_path("rest/api/latest/result?label=#{sha}") response = get_path("rest/api/latest/result/byChangeset/#{sha}")
{ build_page: read_build_page(response), commit_status: read_commit_status(response) } { build_page: read_build_page(response), commit_status: read_commit_status(response) }
end end
...@@ -113,18 +113,20 @@ class BambooService < CiService ...@@ -113,18 +113,20 @@ class BambooService < CiService
URI.join("#{bamboo_url}/", path).to_s URI.join("#{bamboo_url}/", path).to_s
end end
def get_path(path) def get_path(path, query_params = {})
url = build_url(path) url = build_url(path)
if username.blank? && password.blank? if username.blank? && password.blank?
Gitlab::HTTP.get(url, verify: false) Gitlab::HTTP.get(url, verify: false, query: query_params)
else else
url << '&os_authType=basic' query_params[:os_authType] = 'basic'
Gitlab::HTTP.get(url, verify: false, Gitlab::HTTP.get(url,
basic_auth: { verify: false,
username: username, query: query_params,
password: password basic_auth: {
}) username: username,
password: password
})
end end
end end
end end
---
title: Fix Bamboo CI status not showing for branch plans
merge_request:
author:
type: fixed
...@@ -120,6 +120,14 @@ describe BambooService, :use_clean_rails_memory_store_caching do ...@@ -120,6 +120,14 @@ describe BambooService, :use_clean_rails_memory_store_caching do
end end
end end
describe '#execute' do
it 'runs update and build action' do
stub_update_and_build_request
subject.execute(Gitlab::DataBuilder::Push::SAMPLE_DATA)
end
end
describe '#build_page' do describe '#build_page' do
it 'returns the contents of the reactive cache' do it 'returns the contents of the reactive cache' do
stub_reactive_cache(service, { build_page: 'foo' }, 'sha', 'ref') stub_reactive_cache(service, { build_page: 'foo' }, 'sha', 'ref')
...@@ -216,10 +224,20 @@ describe BambooService, :use_clean_rails_memory_store_caching do ...@@ -216,10 +224,20 @@ describe BambooService, :use_clean_rails_memory_store_caching do
end end
end end
def stub_update_and_build_request(status: 200, body: nil)
bamboo_full_url = 'http://gitlab.com/bamboo/updateAndBuild.action?buildKey=foo&os_authType=basic'
stub_bamboo_request(bamboo_full_url, status, body)
end
def stub_request(status: 200, body: nil) def stub_request(status: 200, body: nil)
bamboo_full_url = 'http://gitlab.com/bamboo/rest/api/latest/result?label=123&os_authType=basic' bamboo_full_url = 'http://gitlab.com/bamboo/rest/api/latest/result/byChangeset/123?os_authType=basic'
stub_bamboo_request(bamboo_full_url, status, body)
end
WebMock.stub_request(:get, bamboo_full_url).to_return( def stub_bamboo_request(url, status, body)
WebMock.stub_request(:get, url).to_return(
status: status, status: status,
headers: { 'Content-Type' => 'application/json' }, headers: { 'Content-Type' => 'application/json' },
body: body body: body
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment