Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
1cc7a30
refactor: move upsert release targets to selector utility
adityachoudhari26 Apr 16, 2025
5713612
nit
adityachoudhari26 Apr 16, 2025
00cb1fb
clean up pass 1
jsbroks Apr 17, 2025
e9cd60f
add jsdocs explaining the query function
jsbroks Apr 17, 2025
6d3ea3d
more cleanup
jsbroks Apr 17, 2025
f66dd59
more cleanup
jsbroks Apr 17, 2025
ecf630f
more clean up
jsbroks Apr 17, 2025
6564bf2
more clean up
jsbroks Apr 17, 2025
ab0fb8f
clean up more
jsbroks Apr 17, 2025
de8d23f
more cleanup
adityachoudhari26 Apr 17, 2025
0d5013b
typecheck
adityachoudhari26 Apr 17, 2025
2d932c3
pass deployments variable
jsbroks Apr 17, 2025
8861635
fix lint retunring
jsbroks Apr 17, 2025
3691408
update more resources selectors
jsbroks Apr 17, 2025
e7ef4e3
move stuff around
adityachoudhari26 Apr 17, 2025
121a044
Merge branch 'move-upsert-release-targets' of github.com:sizzldev/ctr…
adityachoudhari26 Apr 17, 2025
48f218d
fixes
adityachoudhari26 Apr 17, 2025
9a1903b
Merge branch 'main' into move-upsert-release-targets
jsbroks Apr 17, 2025
742377e
clean up
jsbroks Apr 17, 2025
17b2617
updating env and deployment shoudl recompute all resources
adityachoudhari26 Apr 17, 2025
b1789d3
Merge branch 'move-upsert-release-targets' of github.com:sizzldev/ctr…
adityachoudhari26 Apr 17, 2025
41e3331
cleanup
adityachoudhari26 Apr 17, 2025
5efb1ae
Merge branch 'main' of github.com:sizzldev/ctrlplane into move-upsert…
adityachoudhari26 Apr 17, 2025
576bd88
merge version selectors correctly
adityachoudhari26 Apr 17, 2025
b0ec1a5
nit
adityachoudhari26 Apr 18, 2025
ae254d5
rabbit
adityachoudhari26 Apr 18, 2025
5d0287c
nit
adityachoudhari26 Apr 18, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions apps/event-worker/src/utils/dispatch-evaluate-jobs.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import type * as schema from "@ctrlplane/db/schema";

import { Channel, getQueue } from "@ctrlplane/events";

export const dispatchEvaluateJobs = async (rts: schema.ReleaseTarget[]) => {
const jobs = rts.map((rt) => ({
name: `${rt.resourceId}-${rt.environmentId}-${rt.deploymentId}`,
data: rt,
}));
await getQueue(Channel.EvaluateReleaseTarget).addBulk(jobs);
};
68 changes: 0 additions & 68 deletions apps/event-worker/src/utils/replace-release-targets.ts

This file was deleted.

12 changes: 4 additions & 8 deletions apps/event-worker/src/workers/new-deployment-version.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import { eq } from "@ctrlplane/db";
import { db } from "@ctrlplane/db/client";
import * as schema from "@ctrlplane/db/schema";
import { Channel, createWorker, getQueue } from "@ctrlplane/events";
import { Channel, createWorker } from "@ctrlplane/events";

import { dispatchEvaluateJobs } from "../utils/dispatch-evaluate-jobs.js";

/**
* Worker that processes new deployment version events.
Expand All @@ -18,12 +20,6 @@ export const newDeploymentVersionWorker = createWorker(
const releaseTargets = await db.query.releaseTarget.findMany({
where: eq(schema.releaseTarget.deploymentId, version.deploymentId),
});

await getQueue(Channel.EvaluateReleaseTarget).addBulk(
releaseTargets.map((rt) => ({
name: `${rt.resourceId}-${rt.environmentId}-${rt.deploymentId}`,
data: rt,
})),
);
await dispatchEvaluateJobs(releaseTargets);
},
);
57 changes: 20 additions & 37 deletions apps/event-worker/src/workers/new-deployment.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,22 @@
import { eq, selector, takeFirst } from "@ctrlplane/db";
import { eq, selector } from "@ctrlplane/db";
import { db } from "@ctrlplane/db/client";
import * as schema from "@ctrlplane/db/schema";
import { Channel, createWorker, getQueue } from "@ctrlplane/events";
import { Channel, createWorker } from "@ctrlplane/events";
import { logger } from "@ctrlplane/logger";

import { replaceReleaseTargets } from "../utils/replace-release-targets.js";
import { dispatchEvaluateJobs } from "../utils/dispatch-evaluate-jobs.js";

const log = logger.child({ module: "new-deployment" });

const recomputeReleaseTargets = async (
deployment: schema.Deployment,
resources: schema.Resource[],
) => {
const computeBuilder = selector().compute();
await computeBuilder.deployments([deployment]).resourceSelectors();
return computeBuilder.resources(resources).releaseTargets();
};

/**
* Worker that processes new deployment events.
*
Expand All @@ -24,43 +33,17 @@ export const newDeploymentWorker = createWorker(
Channel.NewDeployment,
async (job) => {
try {
await selector()
.compute()
.deployments([job.data.id])
.resourceSelectors()
.replace();

const system = await db
.select()
.from(schema.system)
.where(eq(schema.system.id, job.data.systemId))
.then(takeFirst);
const { workspaceId } = system;
const environments = await db.query.environment.findMany({
where: eq(schema.environment.systemId, job.data.systemId),
with: { computedResources: { with: { resource: true } } },
});

const computedDeploymentResources = await db
.select()
.from(schema.computedDeploymentResource)
.innerJoin(
schema.resource,
eq(schema.computedDeploymentResource.resourceId, schema.resource.id),
)
.where(eq(schema.computedDeploymentResource.deploymentId, job.data.id));
const resources = computedDeploymentResources.map((r) => r.resource);

const releaseTargetPromises = resources.map(async (r) =>
replaceReleaseTargets(db, r),
const resources = environments.flatMap((e) =>
e.computedResources.map((r) => r.resource),
);
const fulfilled = await Promise.all(releaseTargetPromises);
const rts = fulfilled.flat();

await selector()
.compute()
.allPolicies(workspaceId)
.releaseTargetSelectors()
.replace();

const evaluateJobs = rts.map((rt) => ({ name: rt.id, data: rt }));
await getQueue(Channel.EvaluateReleaseTarget).addBulk(evaluateJobs);
const releaseTargets = await recomputeReleaseTargets(job.data, resources);
await dispatchEvaluateJobs(releaseTargets);
} catch (error) {
log.error("Error upserting release targets", { error });
throw error;
Expand Down
34 changes: 12 additions & 22 deletions apps/event-worker/src/workers/new-resource.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
import type * as schema from "@ctrlplane/db/schema";

import { selector } from "@ctrlplane/db";
import { db } from "@ctrlplane/db/client";
import { Channel, createWorker, getQueue } from "@ctrlplane/events";
import { Channel, createWorker } from "@ctrlplane/events";

import { replaceReleaseTargets } from "../utils/replace-release-targets.js";
import { dispatchEvaluateJobs } from "../utils/dispatch-evaluate-jobs.js";

const queue = getQueue(Channel.EvaluateReleaseTarget);
const recomputeReleaseTargets = async (resource: schema.Resource) => {
const computeBuilder = selector().compute();
const { workspaceId } = resource;
await computeBuilder.allResourceSelectors(workspaceId);
return computeBuilder.resources([resource]).releaseTargets();
};

/**
* Worker that processes new resource events.
Expand All @@ -21,23 +27,7 @@ const queue = getQueue(Channel.EvaluateReleaseTarget);
export const newResourceWorker = createWorker(
Channel.NewResource,
async ({ data: resource }) => {
const cb = selector().compute();

await Promise.all([
cb.allEnvironments(resource.workspaceId).resourceSelectors().replace(),
cb.allDeployments(resource.workspaceId).resourceSelectors().replace(),
]);

const rts = await replaceReleaseTargets(db, resource);
await cb
.allPolicies(resource.workspaceId)
.releaseTargetSelectors()
.replace();

const jobs = rts.map((rt) => ({
name: `${rt.resourceId}-${rt.environmentId}-${rt.deploymentId}`,
data: rt,
}));
await queue.addBulk(jobs);
const releaseTargets = await recomputeReleaseTargets(resource);
await dispatchEvaluateJobs(releaseTargets);
},
);
11 changes: 4 additions & 7 deletions apps/event-worker/src/workers/update-deployment-variable.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import { eq } from "@ctrlplane/db";
import { db } from "@ctrlplane/db/client";
import * as schema from "@ctrlplane/db/schema";
import { Channel, createWorker, getQueue } from "@ctrlplane/events";
import { Channel, createWorker } from "@ctrlplane/events";

import { dispatchEvaluateJobs } from "../utils/dispatch-evaluate-jobs.js";

/**
* Worker that handles deployment variable changes
Expand All @@ -27,11 +29,6 @@ export const updateDeploymentVariableWorker = createWorker(
where: eq(schema.releaseTarget.deploymentId, variable.deploymentId),
});

await getQueue(Channel.EvaluateReleaseTarget).addBulk(
releaseTargets.map((rt) => ({
name: `${rt.resourceId}-${rt.environmentId}-${rt.deploymentId}`,
data: rt,
})),
);
await dispatchEvaluateJobs(releaseTargets);
},
);
Loading
Loading