Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F105895342
HarbormasterCircleCIHookController.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Thu, Mar 20, 15:38
Size
2 KB
Mime Type
text/x-php
Expires
Sat, Mar 22, 15:38 (2 d)
Engine
blob
Format
Raw Data
Handle
25023988
Attached To
rPH Phabricator
HarbormasterCircleCIHookController.php
View Options
<?php
final
class
HarbormasterCircleCIHookController
extends
HarbormasterController
{
public
function
shouldRequireLogin
()
{
return
false
;
}
/**
* @phutil-external-symbol class PhabricatorStartup
*/
public
function
handleRequest
(
AphrontRequest
$request
)
{
$raw_body
=
PhabricatorStartup
::
getRawInput
();
$body
=
phutil_json_decode
(
$raw_body
);
$payload
=
$body
[
'payload'
];
$parameters
=
idx
(
$payload
,
'build_parameters'
);
if
(!
$parameters
)
{
$parameters
=
array
();
}
$target_phid
=
idx
(
$parameters
,
'HARBORMASTER_BUILD_TARGET_PHID'
);
// NOTE: We'll get callbacks here for builds we triggered, but also for
// arbitrary builds the system executes for other reasons. So it's normal
// to get some notifications with no Build Target PHID. We just ignore
// these under the assumption that they're routine builds caused by events
// like branch updates.
if
(
$target_phid
)
{
$viewer
=
PhabricatorUser
::
getOmnipotentUser
();
$target
=
id
(
new
HarbormasterBuildTargetQuery
())
->
setViewer
(
$viewer
)
->
withPHIDs
(
array
(
$target_phid
))
->
needBuildSteps
(
true
)
->
executeOne
();
if
(
$target
)
{
$unguarded
=
AphrontWriteGuard
::
beginScopedUnguardedWrites
();
$this
->
updateTarget
(
$target
,
$payload
);
}
}
$response
=
new
AphrontWebpageResponse
();
$response
->
setContent
(
pht
(
"Request OK
\n
"
));
return
$response
;
}
private
function
updateTarget
(
HarbormasterBuildTarget
$target
,
array
$payload
)
{
$step
=
$target
->
getBuildStep
();
$impl
=
$step
->
getStepImplementation
();
if
(!(
$impl
instanceof
HarbormasterCircleCIBuildStepImplementation
))
{
throw
new
Exception
(
pht
(
'Build target ("%s") has the wrong type of build step. Only '
.
'CircleCI build steps may be updated via the CircleCI webhook.'
,
$target
->
getPHID
()));
}
switch
(
idx
(
$payload
,
'status'
))
{
case
'success'
:
case
'fixed'
:
$message_type
=
HarbormasterMessageType
::
MESSAGE_PASS
;
break
;
default
:
$message_type
=
HarbormasterMessageType
::
MESSAGE_FAIL
;
break
;
}
$viewer
=
PhabricatorUser
::
getOmnipotentUser
();
$api_method
=
'harbormaster.sendmessage'
;
$api_params
=
array
(
'buildTargetPHID'
=>
$target
->
getPHID
(),
'type'
=>
$message_type
,
);
id
(
new
ConduitCall
(
$api_method
,
$api_params
))
->
setUser
(
$viewer
)
->
execute
();
}
}
Event Timeline
Log In to Comment