Skip to content

Commit 690d35f

Browse files
committed
Merge branch 'fix-bamboo-results' into 'master'
Correctly process Bamboo API results Closes #51950 See merge request gitlab-org/gitlab-ce!21970
2 parents 7800964 + 60937ad commit 690d35f

File tree

3 files changed

+16
-5
lines changed

3 files changed

+16
-5
lines changed

app/models/project_services/bamboo_service.rb

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,24 +80,29 @@ def calculate_reactive_cache(sha, ref)
8080

8181
private
8282

83+
def get_build_result_index
84+
# When Bamboo returns multiple results for a given changeset, arbitrarily assume the most relevant result to be the last one.
85+
-1
86+
end
87+
8388
def read_build_page(response)
84-
if response.code != 200 || response['results']['results']['size'] == '0'
89+
if response.code != 200 || response.dig('results', 'results', 'size') == '0'
8590
# If actual build link can't be determined, send user to build summary page.
8691
URI.join("#{bamboo_url}/", "browse/#{build_key}").to_s
8792
else
8893
# If actual build link is available, go to build result page.
89-
result_key = response['results']['results']['result']['planResultKey']['key']
94+
result_key = response.dig('results', 'results', 'result', get_build_result_index, 'planResultKey', 'key')
9095
URI.join("#{bamboo_url}/", "browse/#{result_key}").to_s
9196
end
9297
end
9398

9499
def read_commit_status(response)
95100
return :error unless response.code == 200 || response.code == 404
96101

97-
status = if response.code == 404 || response['results']['results']['size'] == '0'
102+
status = if response.code == 404 || response.dig('results', 'results', 'size') == '0'
98103
'Pending'
99104
else
100-
response['results']['results']['result']['buildState']
105+
response.dig('results', 'results', 'result', get_build_result_index, 'buildState')
101106
end
102107

103108
if status.include?('Success')
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
title: "Correctly process Bamboo API result array"
3+
merge_request: 21970
4+
author: Alex Lossent
5+
type: fixed

spec/models/project_services/bamboo_service_spec.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,7 @@ def stub_bamboo_request(url, status, body)
245245
end
246246

247247
def bamboo_response(result_key: 42, build_state: 'success', size: 1)
248-
%Q({"results":{"results":{"size":"#{size}","result":{"buildState":"#{build_state}","planResultKey":{"key":"#{result_key}"}}}}})
248+
# reference: https://docs.atlassian.com/atlassian-bamboo/REST/6.2.5/#d2e786
249+
%Q({"results":{"results":{"size":"#{size}","result":[{"buildState":"#{build_state}","planResultKey":{"key":"#{result_key}"}}]}}})
249250
end
250251
end

0 commit comments

Comments
 (0)