Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
defefe4f
Commit
defefe4f
authored
Jan 30, 2019
by
GitLab Bot
Browse files
Options
Browse Files
Download
Plain Diff
Automatic merge of gitlab-org/gitlab-ce master
parents
65341130
14397584
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
49 additions
and
14 deletions
+49
-14
app/models/project_services/bamboo_service.rb
app/models/project_services/bamboo_service.rb
+22
-10
changelogs/unreleased/24680-support-bamboo-api-polymorphism.yml
...logs/unreleased/24680-support-bamboo-api-polymorphism.yml
+5
-0
spec/models/project_services/bamboo_service_spec.rb
spec/models/project_services/bamboo_service_spec.rb
+22
-4
No files found.
app/models/project_services/bamboo_service.rb
View file @
defefe4f
...
...
@@ -80,19 +80,27 @@ 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
def
get_build_result
(
response
)
return
if
response
.
code
!=
200
# May be nil if no result, a single result hash, or an array if multiple results for a given changeset.
result
=
response
.
dig
(
'results'
,
'results'
,
'result'
)
# In case of multiple results, arbitrarily assume the last one is the most relevant.
return
result
.
last
if
result
.
is_a?
(
Array
)
result
end
def
read_build_page
(
response
)
result
=
get_build_result
(
response
)
key
=
if
res
ponse
.
code
!=
200
||
response
.
dig
(
'results'
,
'results'
,
'size'
)
==
'0'
if
res
ult
.
blank?
# If actual build link can't be determined, send user to build summary page.
build_key
else
# If actual build link is available, go to build result page.
res
ponse
.
dig
(
'results'
,
'results'
,
'result'
,
get_build_result_index
,
'planResultKey'
,
'key'
)
res
ult
.
dig
(
'planResultKey'
,
'key'
)
end
build_url
(
"browse/
#{
key
}
"
)
...
...
@@ -101,11 +109,15 @@ class BambooService < CiService
def
read_commit_status
(
response
)
return
:error
unless
response
.
code
==
200
||
response
.
code
==
404
status
=
if
response
.
code
==
404
||
response
.
dig
(
'results'
,
'results'
,
'size'
)
==
'0'
'Pending'
else
response
.
dig
(
'results'
,
'results'
,
'result'
,
get_build_result_index
,
'buildState'
)
end
result
=
get_build_result
(
response
)
status
=
if
result
.
blank?
'Pending'
else
result
.
dig
(
'buildState'
)
end
return
:error
unless
status
.
present?
if
status
.
include?
(
'Success'
)
'success'
...
...
changelogs/unreleased/24680-support-bamboo-api-polymorphism.yml
0 → 100644
View file @
defefe4f
---
title
:
"
Support
bamboo
api
polymorphism"
merge_request
:
24680
author
:
Alex Lossent
type
:
fixed
\ No newline at end of file
spec/models/project_services/bamboo_service_spec.rb
View file @
defefe4f
...
...
@@ -144,7 +144,7 @@ describe BambooService, :use_clean_rails_memory_store_caching do
end
end
describe
'#calculate_reactive_cache
'
do
shared_examples
'reactive cache calculation
'
do
context
'#build_page'
do
subject
{
service
.
calculate_reactive_cache
(
'123'
,
'unused'
)[
:build_page
]
}
...
...
@@ -155,7 +155,7 @@ describe BambooService, :use_clean_rails_memory_store_caching do
end
it
'returns a specific URL when response has no results'
do
stub_request
(
body:
bamboo_response
(
size:
0
))
stub_request
(
body:
%q({"results":{"results":{"size":"0"}}}
)
)
is_expected
.
to
eq
(
'http://gitlab.com/bamboo/browse/foo'
)
end
...
...
@@ -224,6 +224,24 @@ describe BambooService, :use_clean_rails_memory_store_caching do
end
end
describe
'#calculate_reactive_cache'
do
context
'when Bamboo API returns single result'
do
let
(
:bamboo_response_template
)
do
%q({"results":{"results":{"size":"1","result":{"buildState":"%{build_state}","planResultKey":{"key":"42"}}}}})
end
it_behaves_like
'reactive cache calculation'
end
context
'when Bamboo API returns an array of results and we only consider the last one'
do
let
(
:bamboo_response_template
)
do
%q({"results":{"results":{"size":"2","result":[{"buildState":"%{build_state}","planResultKey":{"key":"41"}},{"buildState":"%{build_state}","planResultKey":{"key":"42"}}]}}})
end
it_behaves_like
'reactive cache calculation'
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'
...
...
@@ -244,8 +262,8 @@ describe BambooService, :use_clean_rails_memory_store_caching do
).
with
(
basic_auth:
%w(mic password)
)
end
def
bamboo_response
(
result_key:
42
,
build_state:
'success'
,
size:
1
)
def
bamboo_response
(
build_state:
'success'
)
# 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
}
"}}]}}})
bamboo_response_template
%
{
build_state:
build_state
}
end
end
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment