diff options
-rw-r--r-- | app/models/project_services/bamboo_service.rb | 13 | ||||
-rw-r--r-- | changelogs/unreleased/21970-fix-bamboo-results.yml | 5 | ||||
-rw-r--r-- | spec/models/project_services/bamboo_service_spec.rb | 3 |
3 files changed, 16 insertions, 5 deletions
diff --git a/app/models/project_services/bamboo_service.rb b/app/models/project_services/bamboo_service.rb index d502423726c..d121d088ff6 100644 --- a/app/models/project_services/bamboo_service.rb +++ b/app/models/project_services/bamboo_service.rb @@ -80,13 +80,18 @@ class BambooService < CiService private + def get_build_result_index + # When Bamboo returns multiple results for a given changeset, arbitrarily assume the most relevant result to be the last one. + -1 + end + def read_build_page(response) - if response.code != 200 || response['results']['results']['size'] == '0' + if response.code != 200 || response.dig('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'] + result_key = response.dig('results', 'results', 'result', get_build_result_index, 'planResultKey', 'key') URI.join("#{bamboo_url}/", "browse/#{result_key}").to_s end end @@ -94,10 +99,10 @@ class BambooService < CiService def read_commit_status(response) return :error unless response.code == 200 || response.code == 404 - status = if response.code == 404 || response['results']['results']['size'] == '0' + status = if response.code == 404 || response.dig('results', 'results', 'size') == '0' 'Pending' else - response['results']['results']['result']['buildState'] + response.dig('results', 'results', 'result', get_build_result_index, 'buildState') end if status.include?('Success') diff --git a/changelogs/unreleased/21970-fix-bamboo-results.yml b/changelogs/unreleased/21970-fix-bamboo-results.yml new file mode 100644 index 00000000000..2fbb354c477 --- /dev/null +++ b/changelogs/unreleased/21970-fix-bamboo-results.yml @@ -0,0 +1,5 @@ +--- +title: "Correctly process Bamboo API result array" +merge_request: 21970 +author: Alex Lossent +type: fixed
\ No newline at end of file diff --git a/spec/models/project_services/bamboo_service_spec.rb b/spec/models/project_services/bamboo_service_spec.rb index f4f7afb1b92..ee84fa95f0e 100644 --- a/spec/models/project_services/bamboo_service_spec.rb +++ b/spec/models/project_services/bamboo_service_spec.rb @@ -245,6 +245,7 @@ describe BambooService, :use_clean_rails_memory_store_caching do end def bamboo_response(result_key: 42, build_state: 'success', size: 1) - %Q({"results":{"results":{"size":"#{size}","result":{"buildState":"#{build_state}","planResultKey":{"key":"#{result_key}"}}}}}) + # reference: https://docs.atlassian.com/atlassian-bamboo/REST/6.2.5/#d2e786 + %Q({"results":{"results":{"size":"#{size}","result":[{"buildState":"#{build_state}","planResultKey":{"key":"#{result_key}"}}]}}}) end end |