diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -654,6 +654,7 @@ 'HarbormasterBuildCommand' => 'applications/harbormaster/storage/HarbormasterBuildCommand.php', 'HarbormasterBuildDependencyDatasource' => 'applications/harbormaster/typeahead/HarbormasterBuildDependencyDatasource.php', 'HarbormasterBuildEngine' => 'applications/harbormaster/engine/HarbormasterBuildEngine.php', + 'HarbormasterBuildFailureException' => 'applications/harbormaster/exception/HarbormasterBuildFailureException.php', 'HarbormasterBuildGraph' => 'applications/harbormaster/engine/HarbormasterBuildGraph.php', 'HarbormasterBuildItem' => 'applications/harbormaster/storage/build/HarbormasterBuildItem.php', 'HarbormasterBuildItemPHIDType' => 'applications/harbormaster/phid/HarbormasterBuildItemPHIDType.php', @@ -3394,6 +3395,7 @@ 'HarbormasterBuildCommand' => 'HarbormasterDAO', 'HarbormasterBuildDependencyDatasource' => 'PhabricatorTypeaheadDatasource', 'HarbormasterBuildEngine' => 'Phobject', + 'HarbormasterBuildFailureException' => 'Exception', 'HarbormasterBuildGraph' => 'AbstractDirectedGraph', 'HarbormasterBuildItem' => 'HarbormasterDAO', 'HarbormasterBuildItemPHIDType' => 'PhabricatorPHIDType', diff --git a/src/applications/harbormaster/exception/HarbormasterBuildFailureException.php b/src/applications/harbormaster/exception/HarbormasterBuildFailureException.php new file mode 100644 --- /dev/null +++ b/src/applications/harbormaster/exception/HarbormasterBuildFailureException.php @@ -0,0 +1,5 @@ +finalize($start_stderr); if ($err) { - throw new Exception(pht('Command failed with error %d.', $err)); + throw new HarbormasterBuildFailureException(); } } diff --git a/src/applications/harbormaster/worker/HarbormasterTargetWorker.php b/src/applications/harbormaster/worker/HarbormasterTargetWorker.php --- a/src/applications/harbormaster/worker/HarbormasterTargetWorker.php +++ b/src/applications/harbormaster/worker/HarbormasterTargetWorker.php @@ -56,6 +56,10 @@ // If the target wants to yield, let that escape without further // processing. We'll resume after the task retries. throw $ex; + } catch (HarbormasterBuildFailureException $ex) { + // A build step wants to fail explicitly. + $target->setTargetStatus(HarbormasterBuildTarget::STATUS_FAILED); + $target->save(); } catch (Exception $ex) { phlog($ex);