use of org.jboss.pnc.spi.coordinator.BuildSetTask in project pnc by project-ncl.
the class DefaultBuildCoordinator method build.
/**
* Run a build of BuildConfigurationSet with BuildConfigurations in specific versions.
*
* The set of the BuildConfigurations to be executed is determined by the buildConfigurationSet entity. If there is
* a revision of a BuildConfiguration available in the buildConfigurationAuditedsMap parameter, then this revision
* is executed. If it's not available, latest revision of the BuildConfiguration will be executed.
*
* @param buildConfigurationSet The set of the configurations to be executed
* @param buildConfigurationAuditedsMap A map BuildConfiguration::id:BuildConfigurationAudited of specific revisions
* of BuildConfigurations contained in the buildConfigurationSet
* @param user The user who triggered the build.
* @param buildOptions Customization of a build specified by user
*
* @return The new build set task
* @throws CoreException Thrown if there is a problem initializing the build
*/
@Override
public BuildSetTask build(BuildConfigurationSet buildConfigurationSet, Map<Integer, BuildConfigurationAudited> buildConfigurationAuditedsMap, User user, BuildOptions buildOptions) throws CoreException {
synchronized (buildMethodLock) {
BuildSetTask buildSetTask = buildTasksInitializer.createBuildSetTask(buildConfigurationSet, buildConfigurationAuditedsMap, user, buildOptions, this::buildRecordIdSupplier, buildQueue.getUnfinishedTasks());
updateBuildSetTaskStatus(buildSetTask, BuildSetStatus.NEW);
validateAndEnqueueBuildConfigurationSetTasks(buildConfigurationSet, buildOptions, buildSetTask);
return buildSetTask;
}
}
use of org.jboss.pnc.spi.coordinator.BuildSetTask in project pnc by project-ncl.
the class DefaultBuildCoordinator method handleErroneousFinish.
private void handleErroneousFinish(BuildTask failedTask) {
BuildSetTask taskSet = failedTask.getBuildSetTask();
if (taskSet != null) {
log.debug("Finishing tasks in set {}, after failedTask {}.", taskSet, failedTask);
taskSet.getBuildTasks().stream().filter(t -> isDependentOn(failedTask, t)).filter(t -> !t.getStatus().isCompleted()).forEach(t -> finishDueToFailedDependency(failedTask, t));
}
}
use of org.jboss.pnc.spi.coordinator.BuildSetTask in project pnc by project-ncl.
the class ProjectBuilder method buildProjectsAndWaitForUpdates.
private BuildSetTask buildProjectsAndWaitForUpdates(BuildConfigurationSet buildConfigurationSet, BuildCoordinator buildCoordinator, int nStatusUpdates, Consumer<BuildStatusChangedEvent> onStatusUpdate, List<BuildStatusChangedEvent> receivedStatuses, List<BuildSetStatusChangedEvent> receivedSetStatuses) throws InterruptedException, CoreException {
Consumer<BuildStatusChangedEvent> onStatusUpdateInternal = (statusUpdate) -> {
log.debug("Received status change event [" + (i++) + "]: {}.", statusUpdate);
receivedStatuses.add(statusUpdate);
onStatusUpdate.accept(statusUpdate);
};
final Semaphore semaphore = registerReleaseListenersAndAcquireSemaphore(onStatusUpdateInternal, nStatusUpdates);
final Semaphore buildSetSemaphore = registerBuildSetListeners(receivedSetStatuses, BUILD_SET_STATUS_UPDATES);
BuildOptions buildOptions = new BuildOptions();
buildOptions.setRebuildMode(RebuildMode.FORCE);
BuildSetTask buildSetTask = buildCoordinator.build(buildConfigurationSet, MockUser.newTestUser(1), buildOptions);
assertBuildStartedSuccessfully(buildSetTask);
log.info("Waiting to receive all {} status updates...", nStatusUpdates);
waitForStatusUpdates(nStatusUpdates, semaphore, "");
log.debug("All status updates should be received. Semaphore has {} free entries.", semaphore.availablePermits());
log.info("Waiting to receive all {} build set status updates...", BUILD_SET_STATUS_UPDATES);
waitForStatusUpdates(BUILD_SET_STATUS_UPDATES, buildSetSemaphore, "build set task: " + buildSetTask);
log.debug("All status updates should be received. Semaphore has {} free entries.", semaphore.availablePermits());
return buildSetTask;
}
use of org.jboss.pnc.spi.coordinator.BuildSetTask in project pnc by project-ncl.
the class ProjectBuilder method buildProjectsAndVerifyResult.
private void buildProjectsAndVerifyResult(BuildConfigurationSet buildConfigurationSet, BuildCoordinator buildCoordinator, int nStatusUpdates, Verifier verifier) throws InterruptedException, CoreException {
log.info("Building configuration set {}", buildConfigurationSet.getName());
List<BuildStatusChangedEvent> receivedStatuses = new CopyOnWriteArrayList<>();
List<BuildSetStatusChangedEvent> receivedSetStatuses = new CopyOnWriteArrayList<>();
BuildSetTask buildSetTask = buildProjectsAndWaitForUpdates(buildConfigurationSet, buildCoordinator, nStatusUpdates, x -> {
}, receivedStatuses, receivedSetStatuses);
log.info("Checking if received all status updates...");
verifier.verify(receivedStatuses, buildSetTask);
}
use of org.jboss.pnc.spi.coordinator.BuildSetTask in project pnc by project-ncl.
the class ReadDependenciesTest method createDependenciesTestCase.
@Test
public void createDependenciesTestCase() throws DatastoreException {
BuildConfigurationSet buildConfigurationSet = configurationBuilder.buildConfigurationSet(1);
User user = User.Builder.newBuilder().id(1).username("test-user").build();
BuildSetTask buildSetTask = null;
try {
buildSetTask = createBuildSetTask(buildConfigurationSet, user);
} catch (CoreException e) {
Assert.fail(e.getMessage());
}
Assert.assertEquals("Missing build tasks in set.", 5, buildSetTask.getBuildTasks().size());
BuildTask buildTask2 = buildSetTask.getBuildTasks().stream().filter(task -> task.getBuildConfigurationAudited().getId().equals(2)).findFirst().get();
Assert.assertEquals("Wrong number of dependencies.", 2, buildTask2.getDependencies().size());
}
Aggregations