Skip to content

Commit 0a21265

Browse files
committed
with connectrpc
1 parent e924996 commit 0a21265

File tree

23 files changed

+1170
-373
lines changed

23 files changed

+1170
-373
lines changed

apps/event-queue/package.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
"with-env": "dotenv -e ../../.env --"
1313
},
1414
"dependencies": {
15+
"@bufbuild/protobuf": "^2.9.0",
16+
"@connectrpc/connect": "^2.1.0",
17+
"@connectrpc/connect-node": "^2.1.0",
1518
"@ctrlplane/db": "workspace:*",
1619
"@ctrlplane/events": "workspace:*",
1720
"@ctrlplane/logger": "workspace:*",
@@ -32,6 +35,7 @@
3235
"@t3-oss/env-core": "catalog:",
3336
"dotenv": "^16.4.5",
3437
"kafkajs": "^2.2.4",
38+
"murmurhash-js": "^1.0.0",
3539
"ts-is-present": "catalog:",
3640
"workerpool": "^9.3.4",
3741
"zod": "catalog:"
@@ -40,6 +44,7 @@
4044
"@ctrlplane/eslint-config": "workspace:^",
4145
"@ctrlplane/prettier-config": "workspace:^",
4246
"@ctrlplane/tsconfig": "workspace:*",
47+
"@types/murmurhash-js": "^1.0.6",
4348
"@types/node": "catalog:node22",
4449
"eslint": "catalog:",
4550
"prettier": "catalog:",

apps/event-queue/src/config.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,13 @@ export const env = createEnv({
3232
GITHUB_BOT_CLIENT_ID: z.string().optional(),
3333
GITHUB_BOT_CLIENT_SECRET: z.string().optional(),
3434
PORT: z.number().default(3124),
35+
36+
WORKSPACE_ENGINE_STATEFUL_SET_NAME: z.string().default("workspace-engine"),
37+
WORKSPACE_ENGINE_HEADLESS_SERVICE: z
38+
.string()
39+
.default("workspace-engine-headless"),
40+
WORKSPACE_ENGINE_NAMESPACE: z.string().default("ctrlplane"),
41+
WORKSPACE_ENGINE_PORT: z.number().default(50051),
3542
},
3643
runtimeEnv: process.env,
3744
});

apps/event-queue/src/index.ts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,12 @@
11
import { createServer } from "node:http";
22
import type { IMemberAssignment } from "kafkajs";
3-
import { Kafka } from "kafkajs";
43

54
import { logger } from "@ctrlplane/logger";
65

76
import { env } from "./config.js";
87
import { getHandler, parseKafkaMessage } from "./events/index.js";
8+
import { kafka, topic } from "./workspace-engine/url.js";
99

10-
const kafka = new Kafka({
11-
clientId: "ctrlplane-events",
12-
brokers: env.KAFKA_BROKERS,
13-
});
14-
15-
const topic = "ctrlplane-events";
1610
const consumer = kafka.consumer({ groupId: "ctrlplane-events" });
1711

1812
let ready = false;
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { createClient } from "@connectrpc/connect";
2+
import { createGrpcTransport } from "@connectrpc/connect-node";
3+
4+
import { ReleaseTargetService } from "./gen/release_targets_pb.js";
5+
import { getUrl } from "./url.js";
6+
7+
const createTransport = async (workspaceId: string) => {
8+
const baseUrl = await getUrl(workspaceId);
9+
const transport = createGrpcTransport({ baseUrl });
10+
return transport;
11+
};
12+
13+
export const releaseTargetClient = async (workspaceId: string) => {
14+
const transport = await createTransport(workspaceId);
15+
16+
const releaseTarget = createClient(ReleaseTargetService, transport);
17+
18+
return { releaseTarget };
19+
};
Lines changed: 301 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,301 @@
1+
// @generated by protoc-gen-es v2.9.0
2+
// @generated from file release_targets.proto (package workspace, syntax proto3)
3+
/* eslint-disable */
4+
5+
import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2";
6+
import type { JsonObject, Message } from "@bufbuild/protobuf";
7+
8+
/**
9+
* Describes the file release_targets.proto.
10+
*/
11+
export declare const file_release_targets: GenFile;
12+
13+
/**
14+
* @generated from message workspace.Resource
15+
*/
16+
export declare type Resource = Message<"workspace.Resource"> & {
17+
/**
18+
* @generated from field: string id = 1;
19+
*/
20+
id: string;
21+
22+
/**
23+
* @generated from field: string name = 2;
24+
*/
25+
name: string;
26+
27+
/**
28+
* @generated from field: string version = 3;
29+
*/
30+
version: string;
31+
32+
/**
33+
* @generated from field: string kind = 4;
34+
*/
35+
kind: string;
36+
37+
/**
38+
* @generated from field: string identifier = 5;
39+
*/
40+
identifier: string;
41+
42+
/**
43+
* ISO8601 string or RFC3339 timestamp
44+
*
45+
* @generated from field: string created_at = 6;
46+
*/
47+
createdAt: string;
48+
49+
/**
50+
* @generated from field: string workspace_id = 7;
51+
*/
52+
workspaceId: string;
53+
54+
/**
55+
* nullable
56+
*
57+
* @generated from field: string provider_id = 8;
58+
*/
59+
providerId: string;
60+
61+
/**
62+
* config can be a deeply nested object, so we use google.protobuf.Struct
63+
*
64+
* @generated from field: google.protobuf.Struct config = 9;
65+
*/
66+
config?: JsonObject;
67+
68+
/**
69+
* nullable, ISO8601 string or RFC3339 timestamp
70+
*
71+
* @generated from field: string locked_at = 10;
72+
*/
73+
lockedAt: string;
74+
75+
/**
76+
* nullable, ISO8601 string or RFC3339 timestamp
77+
*
78+
* @generated from field: string updated_at = 11;
79+
*/
80+
updatedAt: string;
81+
82+
/**
83+
* nullable, ISO8601 string or RFC3339 timestamp
84+
*
85+
* @generated from field: string deleted_at = 12;
86+
*/
87+
deletedAt: string;
88+
89+
/**
90+
* @generated from field: map<string, string> metadata = 13;
91+
*/
92+
metadata: { [key: string]: string };
93+
};
94+
95+
/**
96+
* Describes the message workspace.Resource.
97+
* Use `create(ResourceSchema)` to create a new message.
98+
*/
99+
export declare const ResourceSchema: GenMessage<Resource>;
100+
101+
/**
102+
* @generated from message workspace.Environment
103+
*/
104+
export declare type Environment = Message<"workspace.Environment"> & {
105+
/**
106+
* @generated from field: string id = 1;
107+
*/
108+
id: string;
109+
110+
/**
111+
* @generated from field: string name = 2;
112+
*/
113+
name: string;
114+
115+
/**
116+
* @generated from field: string description = 3;
117+
*/
118+
description: string;
119+
120+
/**
121+
* @generated from field: string system_id = 4;
122+
*/
123+
systemId: string;
124+
125+
/**
126+
* @generated from field: google.protobuf.Struct resource_selector = 5;
127+
*/
128+
resourceSelector?: JsonObject;
129+
130+
/**
131+
* @generated from field: string created_at = 6;
132+
*/
133+
createdAt: string;
134+
};
135+
136+
/**
137+
* Describes the message workspace.Environment.
138+
* Use `create(EnvironmentSchema)` to create a new message.
139+
*/
140+
export declare const EnvironmentSchema: GenMessage<Environment>;
141+
142+
/**
143+
* @generated from message workspace.Deployment
144+
*/
145+
export declare type Deployment = Message<"workspace.Deployment"> & {
146+
/**
147+
* @generated from field: string id = 1;
148+
*/
149+
id: string;
150+
151+
/**
152+
* @generated from field: string name = 2;
153+
*/
154+
name: string;
155+
156+
/**
157+
* @generated from field: string slug = 3;
158+
*/
159+
slug: string;
160+
161+
/**
162+
* @generated from field: string description = 4;
163+
*/
164+
description: string;
165+
166+
/**
167+
* @generated from field: string system_id = 5;
168+
*/
169+
systemId: string;
170+
171+
/**
172+
* @generated from field: optional string job_agent_id = 6;
173+
*/
174+
jobAgentId?: string;
175+
176+
/**
177+
* @generated from field: optional google.protobuf.Struct job_agent_config = 7;
178+
*/
179+
jobAgentConfig?: JsonObject;
180+
181+
/**
182+
* @generated from field: optional google.protobuf.Struct resource_selector = 8;
183+
*/
184+
resourceSelector?: JsonObject;
185+
186+
/**
187+
* ISO8601 string or RFC3339 timestamp
188+
*
189+
* @generated from field: string created_at = 9;
190+
*/
191+
createdAt: string;
192+
};
193+
194+
/**
195+
* Describes the message workspace.Deployment.
196+
* Use `create(DeploymentSchema)` to create a new message.
197+
*/
198+
export declare const DeploymentSchema: GenMessage<Deployment>;
199+
200+
/**
201+
* @generated from message workspace.ReleaseTarget
202+
*/
203+
export declare type ReleaseTarget = Message<"workspace.ReleaseTarget"> & {
204+
/**
205+
* @generated from field: string id = 1;
206+
*/
207+
id: string;
208+
209+
/**
210+
* @generated from field: string resource_id = 2;
211+
*/
212+
resourceId: string;
213+
214+
/**
215+
* @generated from field: string environment_id = 3;
216+
*/
217+
environmentId: string;
218+
219+
/**
220+
* @generated from field: string deployment_id = 4;
221+
*/
222+
deploymentId: string;
223+
224+
/**
225+
* @generated from field: string created_at = 5;
226+
*/
227+
createdAt: string;
228+
229+
/**
230+
* @generated from field: workspace.Environment environment = 6;
231+
*/
232+
environment?: Environment;
233+
234+
/**
235+
* @generated from field: workspace.Deployment deployment = 7;
236+
*/
237+
deployment?: Deployment;
238+
};
239+
240+
/**
241+
* Describes the message workspace.ReleaseTarget.
242+
* Use `create(ReleaseTargetSchema)` to create a new message.
243+
*/
244+
export declare const ReleaseTargetSchema: GenMessage<ReleaseTarget>;
245+
246+
/**
247+
* @generated from message workspace.ComputeReleaseTargetsRequest
248+
*/
249+
export declare type ComputeReleaseTargetsRequest = Message<"workspace.ComputeReleaseTargetsRequest"> & {
250+
/**
251+
* @generated from field: repeated workspace.Environment environments = 1;
252+
*/
253+
environments: Environment[];
254+
255+
/**
256+
* @generated from field: repeated workspace.Deployment deployments = 2;
257+
*/
258+
deployments: Deployment[];
259+
260+
/**
261+
* @generated from field: repeated workspace.Resource resources = 3;
262+
*/
263+
resources: Resource[];
264+
};
265+
266+
/**
267+
* Describes the message workspace.ComputeReleaseTargetsRequest.
268+
* Use `create(ComputeReleaseTargetsRequestSchema)` to create a new message.
269+
*/
270+
export declare const ComputeReleaseTargetsRequestSchema: GenMessage<ComputeReleaseTargetsRequest>;
271+
272+
/**
273+
* @generated from message workspace.ComputeReleaseTargetsResponse
274+
*/
275+
export declare type ComputeReleaseTargetsResponse = Message<"workspace.ComputeReleaseTargetsResponse"> & {
276+
/**
277+
* @generated from field: repeated workspace.ReleaseTarget release_targets = 1;
278+
*/
279+
releaseTargets: ReleaseTarget[];
280+
};
281+
282+
/**
283+
* Describes the message workspace.ComputeReleaseTargetsResponse.
284+
* Use `create(ComputeReleaseTargetsResponseSchema)` to create a new message.
285+
*/
286+
export declare const ComputeReleaseTargetsResponseSchema: GenMessage<ComputeReleaseTargetsResponse>;
287+
288+
/**
289+
* @generated from service workspace.ReleaseTargetService
290+
*/
291+
export declare const ReleaseTargetService: GenService<{
292+
/**
293+
* @generated from rpc workspace.ReleaseTargetService.Compute
294+
*/
295+
compute: {
296+
methodKind: "unary";
297+
input: typeof ComputeReleaseTargetsRequestSchema;
298+
output: typeof ComputeReleaseTargetsResponseSchema;
299+
},
300+
}>;
301+

0 commit comments

Comments
 (0)