feat: Implement admin router and orchestrator for managing profiles and builds

- Added `adminRouter` for handling profile management, including listing, upserting, and updating statuses.
- Introduced `BuildRunner` interface and `PnpmBuildRunner` class for executing build commands.
- Created `GatewayOrchestrator` to manage profile states, reconcile processes, and handle build queues.
- Implemented `Pm2ProcessManager` for managing processes using PM2.
- Developed `GatewayProfileRepository` for interacting with the database to manage profiles.
- Added utility functions for resolving workspace roots and managing process definitions.
- Included tests for profile reconciliation logic.
This commit is contained in:
2026-01-01 10:38:28 +00:00
parent 79819c4a1b
commit b46249dcbc
18 changed files with 2151 additions and 7 deletions
+23
View File
@@ -36,6 +36,26 @@ const buildCaller = () => {
}),
sendTalkMessage: async () => {},
};
const profiles = {
listProfiles: async () => [],
getProfile: async () => null,
upsertProfile: async () => {
throw new Error('not used');
},
updateStatus: async () => null,
updateBuildStatus: async () => null,
listReservedToStart: async () => [],
findQueuedBuild: async () => null,
updateLastError: async () => {},
};
const orchestrator = {
start: () => {},
stop: async () => {},
reconcileNow: async () => {},
runScheduleNow: async () => {},
runBuildQueueNow: async () => {},
listRuntimeStates: async () => [],
};
const caller = appRouter.createCaller(
createGatewayApiContext({
users,
@@ -46,6 +66,9 @@ const buildCaller = () => {
kakaoClient,
oauthSessions,
publicBaseUrl: 'http://localhost',
profiles,
orchestrator,
requestHeaders: {},
})
);
return { caller, oauthSessions };