Implement explicit build step ordering in Harbormaster

Summary: This implements support for explicitly marking the sequence of build steps.  Users can now drag and re-order build steps in plans, and artifact dependencies are re-calculated so that if you move "Run Command" before "Lease Host", the "Run Command" step has it's artifact setting cleared and thus the step becomes invalid.

Test Plan: Re-ordered build steps and observed dependencies being correctly recalculated.

Reviewers: epriestley, #blessed_reviewers

Reviewed By: epriestley

CC: Korvin, epriestley, aran

Maniphest Tasks: T1049

Differential Revision: https://secure.phabricator.com/D7715
This commit is contained in:
James Rhodes
2013-12-06 14:12:15 +11:00
parent dd01535ed6
commit 79d153b85d
13 changed files with 221 additions and 5 deletions

View File

@@ -0,0 +1,2 @@
ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_buildstep
ADD COLUMN sequence INT UNSIGNED NOT NULL;

View File

@@ -0,0 +1,41 @@
<?php
$table = new HarbormasterBuildPlan();
$conn_w = $table->establishConnection('w');
$viewer = PhabricatorUser::getOmnipotentUser();
// Since HarbormasterBuildStepQuery has been updated to handle the
// correct order, we can't use the built in database access.
foreach (new LiskMigrationIterator($table) as $plan) {
$planname = $plan->getName();
echo "Migrating steps in {$planname}...\n";
$rows = queryfx_all(
$conn_w,
"SELECT id, sequence FROM harbormaster_buildstep ".
"WHERE buildPlanPHID = %s ".
"ORDER BY id ASC",
$plan->getPHID());
$sequence = 1;
foreach ($rows as $row) {
$id = $row['id'];
$existing = $row['sequence'];
if ($existing != 0) {
echo " - {$id} (already migrated)...\n";
continue;
}
echo " - {$id} to position {$sequence}...\n";
queryfx(
$conn_w,
"UPDATE harbormaster_buildstep ".
"SET sequence = %d ".
"WHERE id = %d",
$sequence,
$id);
$sequence++;
}
}
echo "Done.\n";