Path: blob/master/src/applications/harbormaster/step/HarbormasterDrydockCommandBuildStepImplementation.php
12256 views
<?php12final class HarbormasterDrydockCommandBuildStepImplementation3extends HarbormasterBuildStepImplementation {45public function getName() {6return pht('Drydock: Run Command');7}89public function getGenericDescription() {10return pht('Run a command on Drydock resource.');11}1213public function getBuildStepGroupKey() {14return HarbormasterDrydockBuildStepGroup::GROUPKEY;15}1617public function getDescription() {18return pht(19'Run command %s on %s.',20$this->formatSettingForDescription('command'),21$this->formatSettingForDescription('artifact'));22}2324public function execute(25HarbormasterBuild $build,26HarbormasterBuildTarget $build_target) {27$viewer = PhabricatorUser::getOmnipotentUser();2829$settings = $this->getSettings();30$variables = $build_target->getVariables();3132$artifact = $build_target->loadArtifact($settings['artifact']);33$impl = $artifact->getArtifactImplementation();34$lease = $impl->loadArtifactLease($viewer);3536// TODO: Require active lease.3738$command = $this->mergeVariables(39'vcsprintf',40$settings['command'],41$variables);4243$interface = $lease->getInterface(DrydockCommandInterface::INTERFACE_TYPE);4445$exec_future = $interface->getExecFuture('%C', $command);4647$harbor_future = id(new HarbormasterExecFuture())48->setFuture($exec_future)49->setLogs(50$build_target->newLog('remote', 'stdout'),51$build_target->newLog('remote', 'stderr'));5253$this->resolveFutures(54$build,55$build_target,56array($harbor_future));5758list($err) = $harbor_future->resolve();59if ($err) {60throw new HarbormasterBuildFailureException();61}62}6364public function getArtifactInputs() {65return array(66array(67'name' => pht('Drydock Lease'),68'key' => $this->getSetting('artifact'),69'type' => HarbormasterWorkingCopyArtifact::ARTIFACTCONST,70),71);72}7374public function getFieldSpecifications() {75return array(76'command' => array(77'name' => pht('Command'),78'type' => 'text',79'required' => true,80),81'artifact' => array(82'name' => pht('Drydock Lease'),83'type' => 'text',84'required' => true,85),86);87}8889}909192