mirror of
https://github.com/Dokploy/dokploy.git
synced 2026-06-20 06:35:22 +02:00
* feat: add builds concurrency management for servers - Introduced a new `BuildsConcurrency` component to manage the number of concurrent builds for both local and remote servers, gated by license validity. - Implemented backend logic to resolve effective builds concurrency based on server settings and organization licenses. - Added unit tests for concurrency resolution logic to ensure correct behavior under various licensing scenarios. - Updated database schema to include `buildsConcurrency` field for servers and web server settings. - Refactored deployment queue to support in-memory job processing with configurable concurrency limits. This feature enhances deployment flexibility and control for enterprise users. * refactor: enhance deployment cancellation logic and improve Railpack build isolation - Reintroduced the `initCancelDeployments` function in the server initialization sequence to ensure deployments can be canceled effectively. - Updated the Railpack build command to use a unique builder name for each build, preventing conflicts during concurrent deployments. - Enhanced the cancellation logic to reset application and compose statuses to "idle" after canceling running deployments, improving system reliability. * test: add buildsConcurrency setting to server configuration tests - Introduced a new `buildsConcurrency` property in the server configuration tests to ensure proper handling of concurrent builds in deployment scenarios. * feat: implement builds concurrency management and validation - Added `assertBuildsConcurrencyAllowed` function to validate concurrency settings based on license status. - Updated `resolveBuildsConcurrency` to reflect new concurrency limits for free and enterprise tiers. - Enhanced `BuildsConcurrency` component to manage concurrent builds for servers, with UI adjustments for better user experience. - Introduced a new settings page for managing concurrent builds across servers, ensuring proper handling of deployments. - Updated database schema to support increased maximum concurrency values for servers and web server settings.
78 lines
2.3 KiB
TypeScript
78 lines
2.3 KiB
TypeScript
import {
|
|
deployApplication,
|
|
deployCompose,
|
|
deployPreviewApplication,
|
|
rebuildApplication,
|
|
rebuildCompose,
|
|
rebuildPreviewApplication,
|
|
updateApplicationStatus,
|
|
updateCompose,
|
|
updatePreviewDeployment,
|
|
} from "@dokploy/server";
|
|
import type { InMemoryJob } from "./in-memory-queue";
|
|
|
|
/**
|
|
* Processes a single deployment job. Shared by the in-memory queue worker and
|
|
* (in cloud) the direct background execution path.
|
|
*/
|
|
export const processDeploymentJob = async (job: InMemoryJob) => {
|
|
try {
|
|
if (job.data.applicationType === "application") {
|
|
await updateApplicationStatus(job.data.applicationId, "running");
|
|
|
|
if (job.data.type === "redeploy") {
|
|
await rebuildApplication({
|
|
applicationId: job.data.applicationId,
|
|
titleLog: job.data.titleLog,
|
|
descriptionLog: job.data.descriptionLog,
|
|
});
|
|
} else if (job.data.type === "deploy") {
|
|
await deployApplication({
|
|
applicationId: job.data.applicationId,
|
|
titleLog: job.data.titleLog,
|
|
descriptionLog: job.data.descriptionLog,
|
|
});
|
|
}
|
|
} else if (job.data.applicationType === "compose") {
|
|
await updateCompose(job.data.composeId, {
|
|
composeStatus: "running",
|
|
});
|
|
if (job.data.type === "deploy") {
|
|
await deployCompose({
|
|
composeId: job.data.composeId,
|
|
titleLog: job.data.titleLog,
|
|
descriptionLog: job.data.descriptionLog,
|
|
});
|
|
} else if (job.data.type === "redeploy") {
|
|
await rebuildCompose({
|
|
composeId: job.data.composeId,
|
|
titleLog: job.data.titleLog,
|
|
descriptionLog: job.data.descriptionLog,
|
|
});
|
|
}
|
|
} else if (job.data.applicationType === "application-preview") {
|
|
await updatePreviewDeployment(job.data.previewDeploymentId, {
|
|
previewStatus: "running",
|
|
});
|
|
|
|
if (job.data.type === "redeploy") {
|
|
await rebuildPreviewApplication({
|
|
applicationId: job.data.applicationId,
|
|
titleLog: job.data.titleLog,
|
|
descriptionLog: job.data.descriptionLog,
|
|
previewDeploymentId: job.data.previewDeploymentId,
|
|
});
|
|
} else if (job.data.type === "deploy") {
|
|
await deployPreviewApplication({
|
|
applicationId: job.data.applicationId,
|
|
titleLog: job.data.titleLog,
|
|
descriptionLog: job.data.descriptionLog,
|
|
previewDeploymentId: job.data.previewDeploymentId,
|
|
});
|
|
}
|
|
}
|
|
} catch (error) {
|
|
console.log("Error", error);
|
|
}
|
|
};
|