phacility/phabricator · error · Exception
This object does not support builds with Buildkite.
Error message
This object does not support builds with Buildkite.
What it means
The Buildkite build step (HarbormasterBuildkiteBuildStepImplementation::execute) requires the buildable's underlying object to implement HarbormasterBuildkiteBuildableInterface, which is how the step obtains Buildkite wiring from the object. If the object being built (for example a custom or non-repository buildable) lacks the interface, the step throws during build execution and the target fails.
Source
Thrown at src/applications/harbormaster/step/HarbormasterBuildkiteBuildStepImplementation.php:84
,
$hook_uri);
}
public function execute(
HarbormasterBuild $build,
HarbormasterBuildTarget $build_target) {
$viewer = PhabricatorUser::getOmnipotentUser();
if (PhabricatorEnv::getEnvConfig('phabricator.silent')) {
$this->logSilencedCall($build, $build_target, pht('Buildkite'));
throw new HarbormasterBuildFailureException();
}
$buildable = $build->getBuildable();
$object = $buildable->getBuildableObject();
if (!($object instanceof HarbormasterBuildkiteBuildableInterface)) {
throw new Exception(
pht('This object does not support builds with Buildkite.'));
}
$organization = $this->getSetting('organization');
$pipeline = $this->getSetting('pipeline');
$uri = urisprintf(
'https://api.buildkite.com/v2/organizations/%s/pipelines/%s/builds',
$organization,
$pipeline);
$data_structure = array(
'commit' => $object->getBuildkiteCommit(),
'branch' => $object->getBuildkiteBranch(),
'message' => pht(
'Harbormaster Build %s ("%s") for %s',
$build->getID(),
$build->getName(),View on GitHub (pinned to 5720a38cfe)
Solutions
- Only run Buildkite steps against Diffusion repositories, which implement the interface
- Remove the Buildkite step from plans that build other kinds of objects
- If you own the buildable class, implement HarbormasterBuildkiteBuildableInterface on it so the step can read its Buildkite metadata
Example fix
// before: Buildkite step attached to a plan building a custom object
// -> throws at execute time
// after: either (a) attach Buildkite steps only to repository builds, or
// (b) implement the interface on the buildable object:
class MyBuildableObject implements HarbormasterBuildkiteBuildableInterface {
// ...implement the interface methods...
} Defensive patterns
Strategy: type-guard
Validate before calling
$object = $build->getBuildable()->getBuildableObject();
if (!($object instanceof HarbormasterBuildkiteBuildableInterface)) {
// fail fast with a clear message; do not attach this step to such plans
} Type guard
function supportsBuildkiteBuilds(HarbormasterBuild $build) {
return ($build->getBuildable()->getBuildableObject()
instanceof HarbormasterBuildkiteBuildableInterface);
} Prevention
- Gate Buildkite steps to plans that build Diffusion repositories
- When adding custom buildable objects, decide up front which CI interfaces they implement
When it happens
Trigger: Attaching a Buildkite build step to a build plan whose buildable object does not implement HarbormasterBuildkiteBuildableInterface (e.g. a custom application's buildable); building an object type that was never designed for Buildkite.
Common situations: Copy-pasting a CI plan from a repository build to plans for other object types; custom applications exposing buildable objects without implementing the CI interfaces.
Related errors
- Object ("%s") does not implement interface "%s". Only object
- No implementation is specified!
- No such implementation "%s" exists!
- No such variable '%s'!
- Unable to load API token ("%s")!
AI-assisted analysis of phacility/phabricator@5720a38cfe (2026-08-21).
Data as JSON: /api/errors/0d3fe4957e44e216.
Report an issue: GitHub.