Skip to content

Commit e76737d

Browse files
committed
refactor: Use result type when fetching job URLs
1 parent 77a403c commit e76737d

File tree

3 files changed

+42
-16
lines changed

3 files changed

+42
-16
lines changed

src/api.spec.ts

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -451,8 +451,14 @@ describe("API", () => {
451451
vi.advanceTimersByTime(400);
452452
await vi.advanceTimersByTimeAsync(400);
453453

454-
const url = await urlPromise;
455-
expect(url).toStrictEqual("Unable to fetch URL");
454+
const result = await urlPromise;
455+
456+
if (result.success) {
457+
expect.fail();
458+
}
459+
460+
expect(result.success).toStrictEqual(false);
461+
expect(result.reason).toStrictEqual("timeout");
456462

457463
// Logging
458464
assertOnlyCalled(coreDebugLogMock);
@@ -506,8 +512,14 @@ describe("API", () => {
506512
vi.advanceTimersByTime(400);
507513
await vi.advanceTimersByTimeAsync(400);
508514

509-
const url = await urlPromise;
510-
expect(url).toStrictEqual("Unable to fetch URL");
515+
const result = await urlPromise;
516+
517+
if (result.success) {
518+
expect.fail();
519+
}
520+
521+
expect(result.success).toStrictEqual(false);
522+
expect(result.reason).toStrictEqual("timeout");
511523

512524
// Logging
513525
assertOnlyCalled(coreDebugLogMock);
@@ -542,8 +554,16 @@ describe("API", () => {
542554
vi.advanceTimersByTime(400);
543555
await vi.advanceTimersByTimeAsync(400);
544556

545-
const url = await urlPromise;
546-
expect(url).toStrictEqual(inProgressMockData.jobs[0]?.html_url);
557+
const result = await urlPromise;
558+
559+
if (!result.success) {
560+
expect.fail();
561+
}
562+
563+
expect(result.success).toStrictEqual(true);
564+
expect(result.value).toStrictEqual(
565+
inProgressMockData.jobs[0]?.html_url,
566+
);
547567

548568
// Logging
549569
assertOnlyCalled(coreDebugLogMock);

src/api.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -210,14 +210,14 @@ export async function fetchWorkflowRunActiveJobUrl(
210210
export async function fetchWorkflowRunActiveJobUrlRetry(
211211
runId: number,
212212
timeout: number,
213-
): Promise<string> {
213+
): Promise<Result<string>> {
214214
const startTime = Date.now();
215215
let elapsedTime = Date.now() - startTime;
216216

217217
while (elapsedTime < timeout) {
218218
const url = await fetchWorkflowRunActiveJobUrl(runId);
219219
if (url) {
220-
return url;
220+
return { success: true, value: url };
221221
}
222222

223223
core.debug(
@@ -229,7 +229,7 @@ export async function fetchWorkflowRunActiveJobUrlRetry(
229229
}
230230
core.debug(`Timed out while trying to fetch URL for Workflow Run ${runId}`);
231231

232-
return "Unable to fetch URL";
232+
return { success: false, reason: "timeout" };
233233
}
234234

235235
export async function retryOnError<T>(

src/main.ts

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,33 +13,39 @@ async function main(): Promise<void> {
1313
const config = getConfig();
1414
api.init(config);
1515

16-
const activeJobUrl = await api.fetchWorkflowRunActiveJobUrlRetry(
16+
const activeJobUrlResult = await api.fetchWorkflowRunActiveJobUrlRetry(
1717
config.runId,
1818
constants.WORKFLOW_RUN_ACTIVE_JOB_TIMEOUT_MS,
1919
);
20+
if (!activeJobUrlResult.success) {
21+
const elapsedTime = Date.now() - startTime;
22+
const failureMsg = `Timeout exceeded while attempting to find the active job run URL (${elapsedTime}ms)`;
23+
await handleActionFail(failureMsg, config.runId);
24+
return;
25+
}
2026
core.info(
2127
`Awaiting completion of Workflow Run ${config.runId}...\n` +
2228
` ID: ${config.runId}\n` +
23-
` URL: ${activeJobUrl}`,
29+
` URL: ${activeJobUrlResult.value}`,
2430
);
2531

26-
const result = await getWorkflowRunResult({
32+
const runResult = await getWorkflowRunResult({
2733
startTime,
2834
pollIntervalMs: config.pollIntervalMs,
2935
runId: config.runId,
3036
runTimeoutMs: config.runTimeoutSeconds * 1000,
3137
});
32-
if (!result.success) {
38+
if (!runResult.success) {
3339
const elapsedTime = Date.now() - startTime;
3440
const failureMsg =
35-
result.reason === "timeout"
41+
runResult.reason === "timeout"
3642
? `Timeout exceeded while attempting to await run conclusion (${elapsedTime}ms)`
37-
: `An unsupported value was reached: ${result.value}`;
43+
: `An unsupported value was reached: ${runResult.value}`;
3844
await handleActionFail(failureMsg, config.runId);
3945
return;
4046
}
4147

42-
const { status, conclusion } = result.value;
48+
const { status, conclusion } = runResult.value;
4349
if (conclusion === WorkflowRunConclusion.Success) {
4450
core.info(
4551
"Run Completed:\n" +

0 commit comments

Comments
 (0)