Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
gitlab-foss
提交
0e6fdf06
G
gitlab-foss
项目概览
李少辉-开发者
/
gitlab-foss
通知
15
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
gitlab-foss
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
0e6fdf06
编写于
1月 24, 2019
作者:
A
Alex Lossent
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Support polymorphism of Bamboo REST API results
It may return single result or an array of results
上级
4dd8740c
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
49 addition
and
14 deletion
+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
未找到文件。
app/models/project_services/bamboo_service.rb
浏览文件 @
0e6fdf06
...
...
@@ -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
浏览文件 @
0e6fdf06
---
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
浏览文件 @
0e6fdf06
...
...
@@ -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
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录