@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at recaptime-dev/main 118 lines 3.3 kB view raw
1<?php 2 3final class HarbormasterManagementBuildWorkflow 4 extends HarbormasterManagementWorkflow { 5 6 protected function didConstruct() { 7 $this 8 ->setName('build') 9 ->setExamples('**build** [__options__] __buildable__ --plan __id__') 10 ->setSynopsis(pht('Run plan __id__ on __buildable__.')) 11 ->setArguments( 12 array( 13 array( 14 'name' => 'plan', 15 'param' => 'id', 16 'help' => pht('ID of build plan to run.'), 17 ), 18 array( 19 'name' => 'background', 20 'help' => pht( 21 'Submit builds into the build queue normally instead of '. 22 'running them in the foreground.'), 23 ), 24 array( 25 'name' => 'buildable', 26 'wildcard' => true, 27 ), 28 )); 29 } 30 31 public function execute(PhutilArgumentParser $args) { 32 $viewer = $this->getViewer(); 33 34 $names = $args->getArg('buildable'); 35 if (count($names) != 1) { 36 throw new PhutilArgumentUsageException( 37 pht('Specify exactly one buildable object, by object name.')); 38 } 39 40 $name = head($names); 41 42 $buildable = id(new PhabricatorObjectQuery()) 43 ->setViewer($viewer) 44 ->withNames($names) 45 ->executeOne(); 46 if (!$buildable) { 47 throw new PhutilArgumentUsageException( 48 pht('No such buildable "%s"!', $name)); 49 } 50 51 if (!($buildable instanceof HarbormasterBuildableInterface)) { 52 throw new PhutilArgumentUsageException( 53 pht('Object "%s" is not a buildable!', $name)); 54 } 55 56 $plan_id = $args->getArg('plan'); 57 if (!$plan_id) { 58 throw new PhutilArgumentUsageException( 59 pht( 60 'Use %s to specify a build plan to run.', 61 '--plan')); 62 } 63 64 $plan = id(new HarbormasterBuildPlanQuery()) 65 ->setViewer($viewer) 66 ->withIDs(array($plan_id)) 67 ->executeOne(); 68 if (!$plan) { 69 throw new PhutilArgumentUsageException( 70 pht('Build plan "%s" does not exist.', $plan_id)); 71 } 72 73 if (!$plan->canRunManually()) { 74 throw new PhutilArgumentUsageException( 75 pht('This build plan can not be run manually.')); 76 } 77 78 $console = PhutilConsole::getConsole(); 79 80 $buildable = HarbormasterBuildable::initializeNewBuildable($viewer) 81 ->setIsManualBuildable(true) 82 ->setBuildablePHID($buildable->getHarbormasterBuildablePHID()) 83 ->setContainerPHID($buildable->getHarbormasterContainerPHID()) 84 ->save(); 85 86 $buildable->sendMessage( 87 $viewer, 88 HarbormasterMessageType::BUILDABLE_BUILD, 89 false); 90 91 $console->writeOut( 92 "%s\n", 93 pht( 94 'Applying plan %s to new buildable %s...', 95 $plan->getID(), 96 'B'.$buildable->getID())); 97 98 $console->writeOut( 99 "\n %s\n\n", 100 PhabricatorEnv::getProductionURI('/B'.$buildable->getID())); 101 102 if (!$args->getArg('background')) { 103 PhabricatorWorker::setRunAllTasksInProcess(true); 104 } 105 106 if ($viewer->isOmnipotent()) { 107 $initiator = id(new PhabricatorHarbormasterApplication())->getPHID(); 108 } else { 109 $initiator = $viewer->getPHID(); 110 } 111 $buildable->applyPlan($plan, array(), $initiator); 112 113 $console->writeOut("%s\n", pht('Done.')); 114 115 return 0; 116 } 117 118}