mirror of
https://we.phorge.it/source/phorge.git
synced 2025-02-26 13:39:08 +01:00
Summary: Ref T9252. This is still crude in a few ways but basically works, at least for commits. Test Plan: - Made a build plan with just this build step. - Ran `bin/harbormaster build --plan 10 ...` on a commit. - It actually built a working copy, leased it, took no action, and released the lease. MAGIC~~~ Reviewers: chad Reviewed By: chad Maniphest Tasks: T9252 Differential Revision: https://secure.phabricator.com/D14160
73 lines
1.9 KiB
PHP
73 lines
1.9 KiB
PHP
<?php
|
|
|
|
abstract class HarbormasterDrydockLeaseArtifact
|
|
extends HarbormasterArtifact {
|
|
|
|
public function getArtifactParameterSpecification() {
|
|
return array(
|
|
'drydockLeasePHID' => 'string',
|
|
);
|
|
}
|
|
|
|
public function getArtifactParameterDescriptions() {
|
|
return array(
|
|
'drydockLeasePHID' => pht(
|
|
'Drydock working copy lease to create an artifact from.'),
|
|
);
|
|
}
|
|
|
|
public function getArtifactDataExample() {
|
|
return array(
|
|
'drydockLeasePHID' => 'PHID-DRYL-abcdefghijklmnopqrst',
|
|
);
|
|
}
|
|
|
|
public function renderArtifactSummary(PhabricatorUser $viewer) {
|
|
$artifact = $this->getBuildArtifact();
|
|
$lease_phid = $artifact->getProperty('drydockLeasePHID');
|
|
return $viewer->renderHandle($lease_phid);
|
|
}
|
|
|
|
public function willCreateArtifact(PhabricatorUser $actor) {
|
|
$this->loadArtifactLease($actor);
|
|
}
|
|
|
|
public function loadArtifactLease(PhabricatorUser $viewer) {
|
|
$artifact = $this->getBuildArtifact();
|
|
$lease_phid = $artifact->getProperty('drydockLeasePHID');
|
|
|
|
$lease = id(new DrydockLeaseQuery())
|
|
->setViewer($viewer)
|
|
->withPHIDs(array($lease_phid))
|
|
->executeOne();
|
|
if (!$lease) {
|
|
throw new Exception(
|
|
pht(
|
|
'Drydock lease PHID "%s" does not correspond to a valid lease.',
|
|
$lease_phid));
|
|
}
|
|
|
|
return $lease;
|
|
}
|
|
|
|
public function releaseArtifact(PhabricatorUser $actor) {
|
|
$lease = $this->loadArtifactLease($actor);
|
|
if (!$lease->canRelease()) {
|
|
return;
|
|
}
|
|
|
|
$author_phid = $actor->getPHID();
|
|
if (!$author_phid) {
|
|
$author_phid = id(new PhabricatorHarbormasterApplication())->getPHID();
|
|
}
|
|
|
|
$command = DrydockCommand::initializeNewCommand($actor)
|
|
->setTargetPHID($lease->getPHID())
|
|
->setAuthorPHID($author_phid)
|
|
->setCommand(DrydockCommand::COMMAND_RELEASE)
|
|
->save();
|
|
|
|
$lease->scheduleUpdate();
|
|
}
|
|
|
|
}
|