Skip to content

Commit 0209269

Browse files
committed
feat: add process route
1 parent c4c541e commit 0209269

File tree

6 files changed

+60
-24
lines changed

6 files changed

+60
-24
lines changed

deno.jsonc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"@probot/pino": "npm:@probot/pino@^2.5.0",
1717
"@std/assert": "jsr:@std/assert@1",
1818
"@std/http": "jsr:@std/http@1",
19-
"@wei/probot-scheduler": "jsr:@wei/[email protected].9",
19+
"@wei/probot-scheduler": "jsr:@wei/[email protected].10",
2020
"bullmq": "npm:bullmq@^5.21.2",
2121
"express": "npm:express@^4.21.1",
2222
"ioredis": "npm:ioredis@^5.4.1",

deno.lock

Lines changed: 4 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/index.ts

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
import express from "express";
22
import { createNodeMiddleware, createProbot } from "probot";
3-
import { JobPriority } from "@wei/probot-scheduler";
3+
import {
4+
createSchedulerService,
5+
JobPriority,
6+
RepositoryMetadataSchemaType,
7+
RepositorySchemaType,
8+
} from "@wei/probot-scheduler";
49
import createSchedulerApp from "@/src/app.ts";
510
import { appConfig } from "@/src/configs/app-config.ts";
611
import log from "@/src/utils/logger.ts";
@@ -21,21 +26,29 @@ const probot = createProbot({
2126
log,
2227
},
2328
});
29+
// deno-lint-ignore require-await
30+
async function getRepositorySchedule(
31+
repository: RepositorySchemaType,
32+
currentMetadata?: RepositoryMetadataSchemaType,
33+
) {
34+
return {
35+
repository_id: repository.id,
36+
cron: currentMetadata?.cron ?? getRandomCronSchedule(),
37+
job_priority: currentMetadata?.job_priority ?? JobPriority.Normal,
38+
};
39+
}
2440
const schedulerApp = createSchedulerApp.bind(null, probot, {
2541
// Optional: Skip the initial full sync
2642
skipFullSync,
2743

2844
redisClient,
2945

3046
// Define custom repository scheduling
31-
// deno-lint-ignore require-await
32-
getRepositorySchedule: async (repository, currentMetadata) => {
33-
return {
34-
repository_id: repository.id,
35-
cron: currentMetadata?.cron ?? getRandomCronSchedule(),
36-
job_priority: currentMetadata?.job_priority ?? JobPriority.Normal,
37-
};
38-
},
47+
getRepositorySchedule,
48+
});
49+
const schedulerService = createSchedulerService(probot, {
50+
redisClient,
51+
getRepositorySchedule,
3952
});
4053

4154
const server = express();
@@ -47,7 +60,7 @@ server.use(
4760
webhooksPath: "/",
4861
}),
4962
);
50-
server.use("/", createRouter(probot));
63+
server.use("/", createRouter(probot, schedulerService));
5164

5265
server.listen(appConfig.port, () => {
5366
log.info(`[Express] Server is running on port ${appConfig.port}`);

src/router/index.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
import type { Request, Response } from "express";
22
import type { Probot } from "probot";
33
import express from "express";
4+
import { createSchedulerService } from "@wei/probot-scheduler";
45
import getStatsHandlers from "@/src/router/stats.ts";
56
import getRepoHandlers from "@/src/router/repo-handler.ts";
67

7-
const createRouter = (app: Probot) => {
8+
const createRouter = (
9+
app: Probot,
10+
schedulerService: ReturnType<typeof createSchedulerService>,
11+
) => {
812
const router = express.Router();
913

1014
router.get("/", (_req: Request, res: Response) => {
@@ -18,9 +22,12 @@ const createRouter = (app: Probot) => {
1822
const { probotStatsHandler } = getStatsHandlers(app);
1923
router.get("/probot/stats", probotStatsHandler);
2024

21-
const { checkHandler } = getRepoHandlers(app);
25+
const { checkHandler, processHandler } = getRepoHandlers(
26+
app,
27+
schedulerService,
28+
);
2229
router.get("/check/:owner/:repo", checkHandler);
23-
// TODO Add process route
30+
router.get("/process/:owner/:repo", processHandler);
2431

2532
return router;
2633
};

src/router/repo-handler.ts

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,19 @@ import type { Request, Response } from "express";
22
import type { Probot } from "probot";
33
import { appConfig } from "@/src/configs/app-config.ts";
44
import { getPullConfig } from "@/src/utils/get-pull-config.ts";
5-
import { JobPriority, RepositoryModel } from "@wei/probot-scheduler";
5+
import {
6+
createSchedulerService,
7+
JobPriority,
8+
RepositoryModel,
9+
} from "@wei/probot-scheduler";
610

7-
function getRepoHandlers(app: Probot) {
11+
function getRepoHandlers(
12+
app: Probot,
13+
schedulerService: ReturnType<typeof createSchedulerService>,
14+
) {
815
async function checkHandler(req: Request, res: Response) {
916
const full_name = `${req.params.owner}/${req.params.repo}`;
10-
app.log.info(`[${full_name}] Checking ${appConfig.configFilename}`);
17+
app.log.info({ full_name }, `Checking ${appConfig.configFilename}`);
1118

1219
try {
1320
// Get Octokit
@@ -57,8 +64,18 @@ function getRepoHandlers(app: Probot) {
5764
}
5865
}
5966

67+
async function processHandler(req: Request, res: Response) {
68+
const full_name = `${req.params.owner}/${req.params.repo}`;
69+
app.log.info({ full_name }, `Processing`);
70+
71+
await schedulerService.processRepository({ fullName: full_name }, true);
72+
73+
res.json({ status: "queued" });
74+
}
75+
6076
return {
6177
checkHandler,
78+
processHandler,
6279
};
6380
}
6481

src/worker.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createWorker } from "@wei/probot-scheduler";
1+
import { createSchedulerWorker } from "@wei/probot-scheduler";
22
import { Redis } from "ioredis";
33
import { appConfig } from "@/src/configs/app-config.ts";
44
import RepoJobProcessor from "@/src/processor/index.ts";
@@ -7,7 +7,7 @@ const redisClient = new Redis(appConfig.redisConfig!, {
77
maxRetriesPerRequest: null,
88
});
99

10-
const worker = createWorker(
10+
const worker = createSchedulerWorker(
1111
RepoJobProcessor,
1212
{
1313
connection: redisClient,

0 commit comments

Comments
 (0)