diff --git a/src/db.ts b/src/db.ts index 948a476..c3cab78 100644 --- a/src/db.ts +++ b/src/db.ts @@ -1,5 +1,4 @@ import * as dynamodb from "@aws-sdk/client-dynamodb"; -import os from "os"; import { z } from "zod"; import { Context } from "./createContext"; import { env } from "./env"; @@ -84,7 +83,7 @@ async function updateTaskStatusInDynamoDB( status: string, isStart: boolean ) { - const workerId = process.env.PARALLELIZER_WORKER_ID || os.hostname(); + const workerId = env.PARALLELIZER_WORKER_ID; const timestamp = new Date().toISOString(); let updateExpression = "set #status = :status, #taskDisplayName = :taskDisplayName, #timestamp = :timestamp, #workerId = :workerId"; diff --git a/src/env.ts b/src/env.ts index edfd9cd..4ea855d 100644 --- a/src/env.ts +++ b/src/env.ts @@ -1,8 +1,10 @@ -import { z } from "zod"; import { Env } from "@(-.-)/env"; +import { hostname } from "os"; +import { z } from "zod"; const envSchema = z.object({ PARALLELIZER_DYNAMODB_TABLE: z.string().default("parallelizer"), + PARALLELIZER_WORKER_ID: z.string().default(hostname()), }); const env = Env(envSchema); diff --git a/src/main.ts b/src/main.ts index c69b7df..13df698 100644 --- a/src/main.ts +++ b/src/main.ts @@ -130,6 +130,7 @@ yargs(process.argv.slice(2)) VisibilityTimeout: 30, }) ); + let errorMessage = ""; if (receiveMessageResponse.Messages?.length) { const message = receiveMessageResponse.Messages[0]; const body = Task.parse(JSON.parse(message.Body!)); @@ -163,7 +164,10 @@ yargs(process.argv.slice(2)) console.log(`::group::${title}`); const durationTracker = createDurationTracker(); try { - await execa(command[0], command.slice(1), { stdio: "inherit" }); + await execa(command[0], command.slice(1), { + stdio: "inherit", + env: { PARALLELIZER_TASK_ID: body.id }, + }); await updateTaskStatusInDynamoDB( ctx, job.id, @@ -177,9 +181,7 @@ yargs(process.argv.slice(2)) } catch (error) { const duration = durationTracker.formatDuration(); console.log(`Task ${body.id} failed in ${duration}s`); - console.log( - `::error title=${body.displayName} (${body.id}) failed::${error}` - ); + errorMessage = `::error title=${body.displayName} (${body.id}) failed::${error}`; console.error("Error running command:", error); process.exitCode = 1; failed++; @@ -192,6 +194,9 @@ yargs(process.argv.slice(2)) ); } finally { console.log(`::endgroup::`); + if (errorMessage) { + console.log(errorMessage); + } clearInterval(visibilityTimeoutHandle); await sqsClient.send( new sqs.DeleteMessageCommand({