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

  1. Only run Buildkite steps against Diffusion repositories, which implement the interface
  2. Remove the Buildkite step from plans that build other kinds of objects
  3. 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

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


AI-assisted analysis of phacility/phabricator@5720a38cfe (2026-08-21). Data as JSON: /api/errors/0d3fe4957e44e216. Report an issue: GitHub.