Add buildStarted plugin hook
[?]
Mar 12, 2016, 2:48 AM
FCTX433OH7QIVWHXL23DKVSUKBQSLQTRK3PFCKKSMLX6A634456QCDependencies
- [2]
B2L4T3X6Sync with Nix - [3]
HJOEIMLRRefactor - [4]
MHVIT4JYSplit hydra-queue-runner.cc more - [5]
K5G5GZY7Guard against concurrent invocations of hydra-queue-runner - [6]
BG6PEOB2Make the output size limit configurable - [7]
NKQOEVVPGet rid of "will retry" messages after "maybe cancelling..." - [8]
7VHPMFAGUse /usr/bin/env to find perl - [9]
DKJFD6JNProcess Nix API changes - [10]
BRAESISHWarn if PostgreSQL appears stalled - [11]
X6FOUYFJint2String -> std::to_string - [12]
IE2PRAQUhydra-queue-runner: Send build notifications - [13]
UYUVQWXQFix hydra-queue-runner --build-one - [*]
24BMQDZAStart of single-process hydra-queue-runner - [*]
PHNLYPKBCall buildFinished when a cached build is added - [*]
5EQYVRWEAdd a plugin mechanism
Change contents
- replacement in src/hydra-queue-runner/builder.cc at line 87
for (auto build2 : dependents)if (build2->drvPath == step->drvPath) { build = build2; break; }for (auto build2 : dependents) {if (build2->drvPath == step->drvPath) {build = build2;{auto notificationSenderQueue_(notificationSenderQueue.lock());notificationSenderQueue_->push(NotificationItem{NotificationItem::Type::Started, build->id});}notificationSenderWakeup.notify_one();}} - replacement in src/hydra-queue-runner/builder.cc at line 259
notificationSenderQueue_->push(NotificationItem(id, std::vector<BuildID>()));notificationSenderQueue_->push(NotificationItem{NotificationItem::Type::Finished, id}); - replacement in src/hydra-queue-runner/builder.cc at line 379
notificationSenderQueue_->push(NotificationItem(build->id, dependentIDs));notificationSenderQueue_->push(NotificationItem{NotificationItem::Type::Finished, build->id, dependentIDs}); - replacement in src/hydra-queue-runner/hydra-queue-runner.cc at line 485
printMsg(lvlChatty, format("sending notification about build %1%") % item.first);printMsg(lvlChatty, format("sending notification about build %1%") % item.id); - replacement in src/hydra-queue-runner/hydra-queue-runner.cc at line 488
Strings argv({"hydra-notify", "build", std::to_string(item.first)});for (auto id : item.second)Strings argv({"hydra-notify", item.type == NotificationItem::Type::Started ? "build-started" : "build-finished", std::to_string(item.id)});for (auto id : item.dependentIds) - replacement in src/hydra-queue-runner/hydra-queue-runner.cc at line 499
% res % item.first);% res % item.id); - replacement in src/hydra-queue-runner/state.hh at line 321
typedef std::pair<BuildID, std::vector<BuildID>> NotificationItem;struct NotificationItem{enum class Type : char {Started,Finished};Type type;BuildID id;std::vector<BuildID> dependentIds;}; - edit in src/lib/Hydra/Helper/PluginHooks.pm at line 8
notifyBuildStarted - edit in src/lib/Hydra/Helper/PluginHooks.pm at line 11
sub notifyBuildStarted {my ($plugins, $build) = @_;foreach my $plugin (@{$plugins}) {eval {$plugin->buildStarted($build);};if ($@) {print STDERR "$plugin->buildStarted: $@\n":}}} - edit in src/lib/Hydra/Plugin.pm at line 23[17.6015][17.6078]
# Called when build $build has started.sub buildStarted {my ($self, $build) = @_;} - replacement in src/script/hydra-notify at line 18
my $cmd = shift @ARGV or die "Syntax: hydra-notify build BUILD-ID [BUILD-IDs...]\n";my $cmd = shift @ARGV or die "Syntax: hydra-notify CMD BUILD-ID [BUILD-IDs...]\n"; - replacement in src/script/hydra-notify at line 20
if ($cmd eq "build") {my $buildId = shift @ARGV or die;my $build = $db->resultset('Builds')->find($buildId)or die "build $buildId does not exist\n";my $buildId = shift @ARGV or die;my $build = $db->resultset('Builds')->find($buildId)or die "build $buildId does not exist\n";if ($cmd eq "build-finished") { - edit in src/script/hydra-notify at line 31
} elsif ($cmd eq "build-started") {notifyBuildStarted(\@plugins, $build);