From a3a6d19c658c7326c1a9ea5596ad5074f9a9ba52 Mon Sep 17 00:00:00 2001 From: Nick-1234531 Date: Wed, 19 Nov 2025 14:33:08 +0530 Subject: [PATCH 1/4] upload log file for multiple sessions at the end --- package.json | 2 +- src/tasks/finalizeBuild.ts | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index ec9d3c72..8ca6ef5d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lambdatest/smartui-cli", - "version": "4.1.46", + "version": "4.1.47", "description": "A command line interface (CLI) to run SmartUI tests on LambdaTest", "files": [ "dist/**/*" diff --git a/src/tasks/finalizeBuild.ts b/src/tasks/finalizeBuild.ts index 247a004c..e53d9468 100644 --- a/src/tasks/finalizeBuild.ts +++ b/src/tasks/finalizeBuild.ts @@ -33,7 +33,11 @@ export default (ctx: Context): ListrTask Date: Wed, 19 Nov 2025 15:49:24 +0530 Subject: [PATCH 2/4] upload logs for buildId once --- src/lib/httpClient.ts | 29 +++++++++++++++++++++++++++++ src/tasks/finalizeBuild.ts | 11 ++++++----- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/lib/httpClient.ts b/src/lib/httpClient.ts index 00de738a..73cc391f 100644 --- a/src/lib/httpClient.ts +++ b/src/lib/httpClient.ts @@ -536,6 +536,19 @@ export default class httpClient { }, ctx.log) } + getS3PreSignedURLForCaps(ctx: Context, capsBuildId: string, capsProjectToken: string) { + return this.request({ + url: `/loguploadurl`, + method: 'POST', + headers: { 'Content-Type': 'application/json', + projectToken: capsProjectToken !== '' ? capsProjectToken : this.projectToken + }, + data: { + buildId: capsBuildId + } + }, ctx.log) + } + getS3PresignedURLForSnapshotUpload(ctx: Context, snapshotName: string, snapshotUuid: string) { return this.request({ url: `/snapshotuploadurl`, @@ -628,6 +641,22 @@ export default class httpClient { }, ctx.log); } + sendCliLogsToLSRSForCaps(ctx: Context, capsBuildId: string, capsProjectToken: string) { + const logContent = fs.readFileSync(constants.LOG_FILE_PATH, 'utf-8'); + return this.request({ + url: `/upload/logs`, + method: 'POST', + headers: { 'Content-Type': 'application/json', + projectToken: capsProjectToken !== '' ? capsProjectToken : this.projectToken + }, + data: { + buildId: capsBuildId, + logContent: logContent, + skipLogging: true + } + }, ctx.log); + } + uploadSnapshotToS3(ctx: Context, uploadURL: string, snapshot: Snapshot) { return this.request({ url: uploadURL, diff --git a/src/tasks/finalizeBuild.ts b/src/tasks/finalizeBuild.ts index e53d9468..ae31524f 100644 --- a/src/tasks/finalizeBuild.ts +++ b/src/tasks/finalizeBuild.ts @@ -34,10 +34,10 @@ export default (ctx: Context): ListrTask(); for (const [sessionId, capabilities] of ctx.sessionCapabilitiesMap.entries()) { - sessionCounter++; try { const buildId = capabilities?.buildId || ''; const projectToken = capabilities?.projectToken || ''; @@ -61,16 +61,17 @@ export default (ctx: Context): ListrTask Date: Wed, 19 Nov 2025 15:51:26 +0530 Subject: [PATCH 3/4] minor change --- src/tasks/finalizeBuild.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/tasks/finalizeBuild.ts b/src/tasks/finalizeBuild.ts index ae31524f..1e6243ac 100644 --- a/src/tasks/finalizeBuild.ts +++ b/src/tasks/finalizeBuild.ts @@ -33,7 +33,6 @@ export default (ctx: Context): ListrTask(); @@ -60,7 +59,6 @@ export default (ctx: Context): ListrTask Date: Wed, 19 Nov 2025 18:39:12 +0530 Subject: [PATCH 4/4] fixed race conditions --- src/lib/httpClient.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/httpClient.ts b/src/lib/httpClient.ts index 73cc391f..69e8a4d4 100644 --- a/src/lib/httpClient.ts +++ b/src/lib/httpClient.ts @@ -611,7 +611,7 @@ export default class httpClient { } uploadLogs(ctx: Context, uploadURL: string) { - const fileStream = fs.createReadStream(constants.LOG_FILE_PATH); + const logContent = fs.readFileSync(constants.LOG_FILE_PATH); const { size } = fs.statSync(constants.LOG_FILE_PATH); return this.request({ @@ -621,7 +621,7 @@ export default class httpClient { 'Content-Type': 'text/plain', 'Content-Length': size, }, - data: fileStream, + data: logContent, maxBodyLength: Infinity, // prevent axios from limiting the body size maxContentLength: Infinity, // prevent axios from limiting the content size }, ctx.log)