From 4d7df7347cd97c56d197c0ad0344cf1df4039b1f Mon Sep 17 00:00:00 2001 From: parthkirsan Date: Sat, 6 Sep 2025 22:14:50 +0530 Subject: [PATCH 1/3] log improvement for start server --- src/commander/capture.ts | 14 ++++++++++++++ src/commander/exec.ts | 15 +++++++++++++++ src/commander/mergeBranch.ts | 15 +++++++++++++++ src/commander/mergeBuild.ts | 13 +++++++++++++ src/commander/server.ts | 12 ++++++++++++ src/commander/stopServer.ts | 7 +++++++ src/commander/upload.ts | 12 ++++++++++++ src/commander/uploadFigma.ts | 37 ++++++++++++++++++++++++++++++++++++ src/index.ts | 30 ++++++++++++++--------------- src/lib/constants.ts | 1 + src/lib/ctx.ts | 9 +++++---- src/lib/logger.ts | 28 +++++++++++++++++++++++++++ src/lib/server.ts | 4 ++-- src/types.ts | 1 + 14 files changed, 177 insertions(+), 21 deletions(-) diff --git a/src/commander/capture.ts b/src/commander/capture.ts index ba67936d..ac87a568 100644 --- a/src/commander/capture.ts +++ b/src/commander/capture.ts @@ -9,6 +9,7 @@ import createBuild from '../tasks/createBuild.js' import captureScreenshots from '../tasks/captureScreenshots.js' import finalizeBuild from '../tasks/finalizeBuild.js' import { validateWebStaticConfig } from '../lib/schemaValidation.js' +import constants from '../lib/constants.js'; const command = new Command(); @@ -29,6 +30,19 @@ command console.log(`Error: The '--buildName' option cannot be an empty string.`); process.exit(1); } + + try { + if (fs.existsSync(constants.LOG_FILE_PATH)) { + fs.unlinkSync(constants.LOG_FILE_PATH); + } + } catch (err) {} + + try { + if (fs.existsSync(constants.LOG_FILE_PATH_STOP)) { + fs.unlinkSync(constants.LOG_FILE_PATH_STOP); + } + } catch (err) {} + let ctx: Context = ctxInit(command.optsWithGlobals()); ctx.isSnapshotCaptured = true diff --git a/src/commander/exec.ts b/src/commander/exec.ts index adf91e80..bb45f833 100644 --- a/src/commander/exec.ts +++ b/src/commander/exec.ts @@ -12,6 +12,8 @@ import processSnapshots from '../tasks/processSnapshot.js' import finalizeBuild from '../tasks/finalizeBuild.js' import snapshotQueue from '../lib/snapshotQueue.js' import startTunnel from '../tasks/startTunnel.js' +import fs from 'fs'; +import constants from '../lib/constants.js'; const command = new Command(); @@ -31,6 +33,19 @@ command console.log(`Error: The '--buildName' option cannot be an empty string.`); process.exit(1); } + + try { + if (fs.existsSync(constants.LOG_FILE_PATH)) { + fs.unlinkSync(constants.LOG_FILE_PATH); + } + } catch (err) {} + + try { + if (fs.existsSync(constants.LOG_FILE_PATH_STOP)) { + fs.unlinkSync(constants.LOG_FILE_PATH_STOP); + } + } catch (err) {} + let ctx: Context = ctxInit(command.optsWithGlobals()); if (!which.sync(execCommand[0], { nothrow: true })) { diff --git a/src/commander/mergeBranch.ts b/src/commander/mergeBranch.ts index 0dcd8900..d078ffff 100644 --- a/src/commander/mergeBranch.ts +++ b/src/commander/mergeBranch.ts @@ -6,6 +6,8 @@ import ctxInit from '../lib/ctx.js'; import fetchBranchInfo from '../tasks/fetchBranchInfo.js' import mergeBuilds from '../tasks/mergeBuilds.js' import getGitInfo from '../tasks/getGitInfo.js' +import constants from '../lib/constants.js'; +import fs from 'fs'; const command = new Command(); @@ -16,6 +18,19 @@ command .requiredOption('--target ', 'Target branch to merge into') .action(async function(this: Command, options: { source: string, target: string }) { const { source, target } = options; + + try { + if (fs.existsSync(constants.LOG_FILE_PATH)) { + fs.unlinkSync(constants.LOG_FILE_PATH); + } + } catch (err) {} + + try { + if (fs.existsSync(constants.LOG_FILE_PATH_STOP)) { + fs.unlinkSync(constants.LOG_FILE_PATH_STOP); + } + } catch (err) {} + let ctx: Context = ctxInit(command.optsWithGlobals()); if (!source || source.trim() === '') { diff --git a/src/commander/mergeBuild.ts b/src/commander/mergeBuild.ts index 513e3624..49fc88d3 100644 --- a/src/commander/mergeBuild.ts +++ b/src/commander/mergeBuild.ts @@ -6,6 +6,8 @@ import ctxInit from '../lib/ctx.js'; import fetchBuildInfo from '../tasks/fetchBuildInfo.js' import mergeBuilds from '../tasks/mergeBuilds.js' import getGitInfo from '../tasks/getGitInfo.js' +import constants from '../lib/constants.js'; +import fs from 'fs'; const command = new Command(); @@ -16,6 +18,17 @@ command .requiredOption('--target ', 'Target build to merge into') .action(async function(this: Command, options: { source: string, target: string }) { const { source, target } = options; + + try { + if (fs.existsSync(constants.LOG_FILE_PATH)) { + fs.unlinkSync(constants.LOG_FILE_PATH); + } + } catch (err) {} + try { + if (fs.existsSync(constants.LOG_FILE_PATH_STOP)) { + fs.unlinkSync(constants.LOG_FILE_PATH_STOP); + } + } catch (err) {} let ctx: Context = ctxInit(command.optsWithGlobals()); if (!source || source.trim() === '') { diff --git a/src/commander/server.ts b/src/commander/server.ts index 81781622..91c25ccc 100644 --- a/src/commander/server.ts +++ b/src/commander/server.ts @@ -8,6 +8,8 @@ import getGitInfo from '../tasks/getGitInfo.js'; import createBuildExec from '../tasks/createBuildExec.js'; import snapshotQueue from '../lib/snapshotQueue.js'; import { startPolling, startPingPolling } from '../lib/utils.js'; +import fs from 'fs'; +import constants from '../lib/constants.js'; const command = new Command(); @@ -23,6 +25,16 @@ command console.log(`Error: The '--buildName' option cannot be an empty string.`); process.exit(1); } + try { + if (fs.existsSync(constants.LOG_FILE_PATH)) { + fs.unlinkSync(constants.LOG_FILE_PATH); + } + } catch (err) {} + try { + if (fs.existsSync(constants.LOG_FILE_PATH_STOP)) { + fs.unlinkSync(constants.LOG_FILE_PATH_STOP); + } + } catch (err) {} let ctx: Context = ctxInit(command.optsWithGlobals()); ctx.snapshotQueue = new snapshotQueue(ctx); ctx.totalSnapshots = 0 diff --git a/src/commander/stopServer.ts b/src/commander/stopServer.ts index 3aae301e..accbd0ae 100644 --- a/src/commander/stopServer.ts +++ b/src/commander/stopServer.ts @@ -1,6 +1,8 @@ import { Command } from 'commander'; import axios from 'axios'; // Import axios for HTTP requests import chalk from 'chalk' +import { Context } from '../types.js' +import ctxInit from '../lib/ctx.js' const command = new Command(); @@ -15,7 +17,9 @@ command .action(async function(this: Command) { try { const serverAddress = getSmartUIServerAddress(); + let ctx: Context = ctxInit(command.optsWithGlobals()); console.log(chalk.yellow(`Stopping server at ${serverAddress} from terminal...`)); + ctx.log_stop.debug(`Stopping server at ${serverAddress} from terminal...`); // Send POST request to the /stop endpoint with the correct headers const response = await axios.post(`${serverAddress}/stop`, { timeout: 15000 }, { @@ -28,8 +32,11 @@ command if (response.status === 200) { console.log(chalk.green('Server stopped successfully')); console.log(chalk.green(`Response: ${JSON.stringify(response.data)}`)); // Log response data if needed + ctx.log_stop.info('Server stopped successfully'); + ctx.log_stop.debug(`Response: ${JSON.stringify(response.data)}`); } else { console.log(chalk.red('Failed to stop server')); + ctx.log.error('Failed to stop server'); } } catch (error: any) { // Handle any errors during the HTTP request diff --git a/src/commander/upload.ts b/src/commander/upload.ts index 1729bf01..6cd4ccbb 100644 --- a/src/commander/upload.ts +++ b/src/commander/upload.ts @@ -30,6 +30,18 @@ command .option('--userName ', 'Specify the LT username') .option('--accessKey ', 'Specify the LT accesskey') .action(async function(directory, _, command) { + + try { + if (fs.existsSync(constants.LOG_FILE_PATH)) { + fs.unlinkSync(constants.LOG_FILE_PATH); + } + } catch (err) {} + try { + if (fs.existsSync(constants.LOG_FILE_PATH_STOP)) { + fs.unlinkSync(constants.LOG_FILE_PATH_STOP); + } + } catch (err) {} + const options = command.optsWithGlobals(); if (options.buildName === '') { console.log(`Error: The '--buildName' option cannot be an empty string.`); diff --git a/src/commander/uploadFigma.ts b/src/commander/uploadFigma.ts index 7dd7ec93..d6827c25 100644 --- a/src/commander/uploadFigma.ts +++ b/src/commander/uploadFigma.ts @@ -12,6 +12,7 @@ import uploadWebFigma from '../tasks/uploadWebFigma.js' import uploadAppFigma from '../tasks/uploadAppFigma.js' import { verifyFigmaWebConfig } from '../lib/config.js' import chalk from 'chalk'; +import constants from '../lib/constants.js'; const uploadFigma = new Command(); @@ -26,6 +27,18 @@ uploadFigma .option('--markBaseline', 'Mark the uploaded images as baseline') .option('--buildName ', 'Name of the build') .action(async function (file, _, command) { + + try { + if (fs.existsSync(constants.LOG_FILE_PATH)) { + fs.unlinkSync(constants.LOG_FILE_PATH); + } + } catch (err) {} + try { + if (fs.existsSync(constants.LOG_FILE_PATH_STOP)) { + fs.unlinkSync(constants.LOG_FILE_PATH_STOP); + } + } catch (err) {} + let ctx: Context = ctxInit(command.optsWithGlobals()); ctx.isSnapshotCaptured = true; @@ -77,6 +90,19 @@ uploadWebFigmaCommand .option('--buildName ', 'Name of the build') .option('--fetch-results [filename]', 'Fetch results and optionally specify an output file, e.g., .json') .action(async function (file, _, command) { + + try { + if (fs.existsSync(constants.LOG_FILE_PATH)) { + fs.unlinkSync(constants.LOG_FILE_PATH); + } + } catch (err) {} + + try { + if (fs.existsSync(constants.LOG_FILE_PATH_STOP)) { + fs.unlinkSync(constants.LOG_FILE_PATH_STOP); + } + } catch (err) {} + let ctx: Context = ctxInit(command.optsWithGlobals()); if (!fs.existsSync(file)) { @@ -144,6 +170,17 @@ uploadWebFigmaCommand .option('--buildName ', 'Name of the build') .option('--fetch-results [filename]', 'Fetch results and optionally specify an output file, e.g., .json') .action(async function (file, _, command) { + + try { + if (fs.existsSync(constants.LOG_FILE_PATH)) { + fs.unlinkSync(constants.LOG_FILE_PATH); + } + } catch (err) {} + try { + if (fs.existsSync(constants.LOG_FILE_PATH_STOP)) { + fs.unlinkSync(constants.LOG_FILE_PATH_STOP); + } + } catch (err) {} let ctx: Context = ctxInit(command.optsWithGlobals()); if (!fs.existsSync(file)) { diff --git a/src/index.ts b/src/index.ts index a791be80..dee5bd2b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,7 +3,7 @@ import commander from './commander/commander.js' import getEnv from './lib/env.js' import httpClient from './lib/httpClient.js' -import logger from './lib/logger.js' +// import logger from './lib/logger.js' import chalk from 'chalk' import pkgJSON from './../package.json' import constants from './lib/constants.js'; @@ -11,24 +11,24 @@ import fs from 'fs'; (async function() { let client = new httpClient(getEnv()); - let log = logger; + // let log = logger; try { // Delete log file - fs.unlinkSync(constants.LOG_FILE_PATH); - let { data: { latestVersion, deprecated, additionalDescription } } = await client.checkUpdate(log); - log.info(`\nLambdaTest SmartUI CLI v${pkgJSON.version}`); - log.info(chalk.yellow(`${additionalDescription}`)); - if (deprecated){ - log.warn(`This version is deprecated. A new version ${latestVersion} is available!`); - } - else if (pkgJSON.version !== latestVersion){ - log.info(chalk.green(`A new version ${latestVersion} is available!`)); - } - else log.info(chalk.gray('https://www.npmjs.com/package/@lambdatest/smartui-cli\n')); + // fs.unlinkSync(constants.LOG_FILE_PATH); + // let { data: { latestVersion, deprecated, additionalDescription } } = await client.checkUpdate(log); + // console.log(`\nLambdaTest SmartUI CLI v${pkgJSON.version}`); + // console.log(chalk.yellow(`${additionalDescription}`)); + // if (deprecated){ + // console.warn(`This version is deprecated. A new version ${latestVersion} is available!`); + // } + // else if (pkgJSON.version !== latestVersion){ + // console.log(chalk.green(`A new version ${latestVersion} is available!`)); + // } + // else console.log(chalk.gray('https://www.npmjs.com/package/@lambdatest/smartui-cli\n')); } catch (error) { - log.debug(error); - log.info(chalk.gray('https://www.npmjs.com/package/@lambdatest/smartui-cli\n')); + console.error(error); + console.log(chalk.gray('https://www.npmjs.com/package/@lambdatest/smartui-cli\n')); } commander.parse(); diff --git a/src/lib/constants.ts b/src/lib/constants.ts index b81f8dca..1972f581 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -131,6 +131,7 @@ export default { // log file path LOG_FILE_PATH: '.smartui.log', + LOG_FILE_PATH_STOP: '.smartui_stop.log', // Disallowed file extension FILE_EXTENSION_ZIP: '.zip', diff --git a/src/lib/ctx.ts b/src/lib/ctx.ts index e6faa1c0..47d351da 100644 --- a/src/lib/ctx.ts +++ b/src/lib/ctx.ts @@ -2,7 +2,7 @@ import { Context, Env, WebConfig, MobileConfig, basicAuth, tunnelConfig } from ' import constants from './constants.js' import { version } from '../../package.json' import { validateConfig, validateConfigForScheduled } from './schemaValidation.js' -import logger from './logger.js' +import logger, { logger_stop } from './logger.js' import getEnv from './env.js' import httpClient from './httpClient.js' import fs from 'fs' @@ -102,13 +102,14 @@ export default (options: Record): Context => { } //if config.waitForPageRender has value and if its less than 30000 then make it to 30000 default - if (config.waitForPageRender && config.waitForPageRender < 30000) { - config.waitForPageRender = 30000; - } + // if (config.waitForPageRender && config.waitForPageRender < 30000) { + // config.waitForPageRender = 30000; + // } return { env: env, log: logger, + log_stop: logger_stop, client: new httpClient(env), config: { web: webConfig, diff --git a/src/lib/logger.ts b/src/lib/logger.ts index 2d8376a6..89eee8f0 100644 --- a/src/lib/logger.ts +++ b/src/lib/logger.ts @@ -49,4 +49,32 @@ const logger = createLogger({ })] }); +const logger_stop = createLogger({ + format: format.combine( + format.timestamp(), + format.printf(info => { + let contextString = Object.values(logContext).join(' | '); + let message = (typeof info.message === 'object') ? stringify(info.message) : info.message.trim(); + switch (info.level) { + case 'warn': + message = chalk.yellow(message); + break; + case 'error': + message = chalk.red(message); + break; + } + return (info.level === 'info') ? message : `[${contextString}:${info.level}] ` + message; + }) + ), + transports: [ + new transports.Console({ + level: logLevel() + }), + new transports.File({ + level: 'debug', + filename: constants.LOG_FILE_PATH_STOP + })] +}); + export default logger +export { logger_stop } diff --git a/src/lib/server.ts b/src/lib/server.ts index 29145264..7e2ef11b 100644 --- a/src/lib/server.ts +++ b/src/lib/server.ts @@ -107,7 +107,7 @@ export default async (ctx: Context): Promise; try { if(ctx.config.delayedUpload){ - ctx.log.debug("started after processing because of delayedUpload") + ctx.log_stop.debug("started after processing because of delayedUpload") ctx.snapshotQueue?.startProcessingfunc() } await new Promise((resolve) => { @@ -135,7 +135,7 @@ export default async (ctx: Context): Promise; server?: FastifyInstance; client: httpClient; From 42465c9ca3c0123855f655b1a8a9c15e770263f9 Mon Sep 17 00:00:00 2001 From: parthkirsan Date: Sat, 13 Sep 2025 23:35:38 +0530 Subject: [PATCH 2/3] improve cli loggign --- src/commander/capture.ts | 20 +++++++++++++- src/commander/exec.ts | 21 +++++++++++++++ src/commander/mergeBranch.ts | 19 +++++++++++++- src/commander/mergeBuild.ts | 19 +++++++++++++- src/commander/server.ts | 19 +++++++++++++- src/commander/upload.ts | 19 +++++++++++++- src/commander/uploadFigma.ts | 51 +++++++++++++++++++++++++++++++++--- src/index.ts | 28 -------------------- 8 files changed, 160 insertions(+), 36 deletions(-) diff --git a/src/commander/capture.ts b/src/commander/capture.ts index ac87a568..a0bfc757 100644 --- a/src/commander/capture.ts +++ b/src/commander/capture.ts @@ -10,6 +10,8 @@ import captureScreenshots from '../tasks/captureScreenshots.js' import finalizeBuild from '../tasks/finalizeBuild.js' import { validateWebStaticConfig } from '../lib/schemaValidation.js' import constants from '../lib/constants.js'; +import pkgJSON from '../../package.json' +import chalk from 'chalk' const command = new Command(); @@ -43,7 +45,23 @@ command } } catch (err) {} - let ctx: Context = ctxInit(command.optsWithGlobals()); + let ctx: Context = ctxInit(command.optsWithGlobals()); + try { + let { data: { latestVersion, deprecated, additionalDescription } } = await ctx.client.checkUpdate(ctx.log); + console.log(`\nLambdaTest SmartUI CLI v${pkgJSON.version}`); + console.log(chalk.yellow(`${additionalDescription}`)); + if (deprecated){ + console.warn(`This version is deprecated. A new version ${latestVersion} is available!`); + } + else if (pkgJSON.version !== latestVersion){ + console.log(chalk.green(`A new version ${latestVersion} is available!`)); + } + else console.log(chalk.gray('https://www.npmjs.com/package/@lambdatest/smartui-cli\n')); + } catch (error) { + // console.error(error); + console.log(chalk.gray('https://www.npmjs.com/package/@lambdatest/smartui-cli\n')); + } + ctx.isSnapshotCaptured = true if (!fs.existsSync(file)) { diff --git a/src/commander/exec.ts b/src/commander/exec.ts index bb45f833..faff4221 100644 --- a/src/commander/exec.ts +++ b/src/commander/exec.ts @@ -14,6 +14,8 @@ import snapshotQueue from '../lib/snapshotQueue.js' import startTunnel from '../tasks/startTunnel.js' import fs from 'fs'; import constants from '../lib/constants.js'; +import pkgJSON from '../../package.json' +import chalk from 'chalk' const command = new Command(); @@ -48,6 +50,25 @@ command let ctx: Context = ctxInit(command.optsWithGlobals()); + try { + let { data: { latestVersion, deprecated, additionalDescription } } = await ctx.client.checkUpdate(ctx.log); + console.log(`\nLambdaTest SmartUI CLI v${pkgJSON.version}`); + console.log(chalk.yellow(`${additionalDescription}`)); + if (deprecated){ + console.warn(`This version is deprecated. A new version ${latestVersion} is available!`); + } + else if (pkgJSON.version !== latestVersion){ + console.log(chalk.green(`A new version ${latestVersion} is available!`)); + } + else console.log(chalk.gray('https://www.npmjs.com/package/@lambdatest/smartui-cli\n')); + } catch (error) { + // console.error(error); + console.log(chalk.gray('https://www.npmjs.com/package/@lambdatest/smartui-cli\n')); + } + + + + if (!which.sync(execCommand[0], { nothrow: true })) { ctx.log.error(`Error: Command not found "${execCommand[0]}"`); return diff --git a/src/commander/mergeBranch.ts b/src/commander/mergeBranch.ts index d078ffff..2dd50548 100644 --- a/src/commander/mergeBranch.ts +++ b/src/commander/mergeBranch.ts @@ -8,6 +8,8 @@ import mergeBuilds from '../tasks/mergeBuilds.js' import getGitInfo from '../tasks/getGitInfo.js' import constants from '../lib/constants.js'; import fs from 'fs'; +import pkgJSON from '../../package.json' +import chalk from 'chalk' const command = new Command(); @@ -31,7 +33,22 @@ command } } catch (err) {} - let ctx: Context = ctxInit(command.optsWithGlobals()); + let ctx: Context = ctxInit(command.optsWithGlobals()); + try { + let { data: { latestVersion, deprecated, additionalDescription } } = await ctx.client.checkUpdate(ctx.log); + console.log(`\nLambdaTest SmartUI CLI v${pkgJSON.version}`); + console.log(chalk.yellow(`${additionalDescription}`)); + if (deprecated){ + console.warn(`This version is deprecated. A new version ${latestVersion} is available!`); + } + else if (pkgJSON.version !== latestVersion){ + console.log(chalk.green(`A new version ${latestVersion} is available!`)); + } + else console.log(chalk.gray('https://www.npmjs.com/package/@lambdatest/smartui-cli\n')); + } catch (error) { + // console.error(error); + console.log(chalk.gray('https://www.npmjs.com/package/@lambdatest/smartui-cli\n')); + } if (!source || source.trim() === '') { ctx.log.error('Error: The --source option cannot be empty.'); diff --git a/src/commander/mergeBuild.ts b/src/commander/mergeBuild.ts index 49fc88d3..126eaacb 100644 --- a/src/commander/mergeBuild.ts +++ b/src/commander/mergeBuild.ts @@ -8,6 +8,8 @@ import mergeBuilds from '../tasks/mergeBuilds.js' import getGitInfo from '../tasks/getGitInfo.js' import constants from '../lib/constants.js'; import fs from 'fs'; +import pkgJSON from '../../package.json' +import chalk from 'chalk' const command = new Command(); @@ -29,7 +31,22 @@ command fs.unlinkSync(constants.LOG_FILE_PATH_STOP); } } catch (err) {} - let ctx: Context = ctxInit(command.optsWithGlobals()); + let ctx: Context = ctxInit(command.optsWithGlobals()); + try { + let { data: { latestVersion, deprecated, additionalDescription } } = await ctx.client.checkUpdate(ctx.log); + console.log(`\nLambdaTest SmartUI CLI v${pkgJSON.version}`); + console.log(chalk.yellow(`${additionalDescription}`)); + if (deprecated){ + console.warn(`This version is deprecated. A new version ${latestVersion} is available!`); + } + else if (pkgJSON.version !== latestVersion){ + console.log(chalk.green(`A new version ${latestVersion} is available!`)); + } + else console.log(chalk.gray('https://www.npmjs.com/package/@lambdatest/smartui-cli\n')); + } catch (error) { + // console.error(error); + console.log(chalk.gray('https://www.npmjs.com/package/@lambdatest/smartui-cli\n')); + } if (!source || source.trim() === '') { ctx.log.error('Error: The --source option cannot be empty.'); diff --git a/src/commander/server.ts b/src/commander/server.ts index 91c25ccc..f062e122 100644 --- a/src/commander/server.ts +++ b/src/commander/server.ts @@ -10,6 +10,8 @@ import snapshotQueue from '../lib/snapshotQueue.js'; import { startPolling, startPingPolling } from '../lib/utils.js'; import fs from 'fs'; import constants from '../lib/constants.js'; +import pkgJSON from '../../package.json' +import chalk from 'chalk' const command = new Command(); @@ -35,7 +37,22 @@ command fs.unlinkSync(constants.LOG_FILE_PATH_STOP); } } catch (err) {} - let ctx: Context = ctxInit(command.optsWithGlobals()); + let ctx: Context = ctxInit(command.optsWithGlobals()); + try { + let { data: { latestVersion, deprecated, additionalDescription } } = await ctx.client.checkUpdate(ctx.log); + console.log(`\nLambdaTest SmartUI CLI v${pkgJSON.version}`); + console.log(chalk.yellow(`${additionalDescription}`)); + if (deprecated){ + console.warn(`This version is deprecated. A new version ${latestVersion} is available!`); + } + else if (pkgJSON.version !== latestVersion){ + console.log(chalk.green(`A new version ${latestVersion} is available!`)); + } + else console.log(chalk.gray('https://www.npmjs.com/package/@lambdatest/smartui-cli\n')); + } catch (error) { + // console.error(error); + console.log(chalk.gray('https://www.npmjs.com/package/@lambdatest/smartui-cli\n')); + } ctx.snapshotQueue = new snapshotQueue(ctx); ctx.totalSnapshots = 0 ctx.isStartExec = true diff --git a/src/commander/upload.ts b/src/commander/upload.ts index 6cd4ccbb..1fb4a61f 100644 --- a/src/commander/upload.ts +++ b/src/commander/upload.ts @@ -10,6 +10,8 @@ import createBuild from '../tasks/createBuild.js'; import uploadScreenshots from '../tasks/uploadScreenshots.js'; import finalizeBuild from '../tasks/finalizeBuild.js'; import constants from '../lib/constants.js'; +import pkgJSON from '../../package.json' +import chalk from 'chalk' const command = new Command(); @@ -47,7 +49,22 @@ command console.log(`Error: The '--buildName' option cannot be an empty string.`); process.exit(1); } - let ctx: Context = ctxInit(command.optsWithGlobals()); + let ctx: Context = ctxInit(command.optsWithGlobals()); + try { + let { data: { latestVersion, deprecated, additionalDescription } } = await ctx.client.checkUpdate(ctx.log); + console.log(`\nLambdaTest SmartUI CLI v${pkgJSON.version}`); + console.log(chalk.yellow(`${additionalDescription}`)); + if (deprecated){ + console.warn(`This version is deprecated. A new version ${latestVersion} is available!`); + } + else if (pkgJSON.version !== latestVersion){ + console.log(chalk.green(`A new version ${latestVersion} is available!`)); + } + else console.log(chalk.gray('https://www.npmjs.com/package/@lambdatest/smartui-cli\n')); + } catch (error) { + // console.error(error); + console.log(chalk.gray('https://www.npmjs.com/package/@lambdatest/smartui-cli\n')); + } ctx.isSnapshotCaptured = true if (!fs.existsSync(directory)) { diff --git a/src/commander/uploadFigma.ts b/src/commander/uploadFigma.ts index d6827c25..ad7cd0c4 100644 --- a/src/commander/uploadFigma.ts +++ b/src/commander/uploadFigma.ts @@ -13,6 +13,7 @@ import uploadAppFigma from '../tasks/uploadAppFigma.js' import { verifyFigmaWebConfig } from '../lib/config.js' import chalk from 'chalk'; import constants from '../lib/constants.js'; +import pkgJSON from '../../package.json' const uploadFigma = new Command(); @@ -39,7 +40,22 @@ uploadFigma } } catch (err) {} - let ctx: Context = ctxInit(command.optsWithGlobals()); + let ctx: Context = ctxInit(command.optsWithGlobals()); + try { + let { data: { latestVersion, deprecated, additionalDescription } } = await ctx.client.checkUpdate(ctx.log); + console.log(`\nLambdaTest SmartUI CLI v${pkgJSON.version}`); + console.log(chalk.yellow(`${additionalDescription}`)); + if (deprecated){ + console.warn(`This version is deprecated. A new version ${latestVersion} is available!`); + } + else if (pkgJSON.version !== latestVersion){ + console.log(chalk.green(`A new version ${latestVersion} is available!`)); + } + else console.log(chalk.gray('https://www.npmjs.com/package/@lambdatest/smartui-cli\n')); + } catch (error) { + // console.error(error); + console.log(chalk.gray('https://www.npmjs.com/package/@lambdatest/smartui-cli\n')); + } ctx.isSnapshotCaptured = true; if (!fs.existsSync(file)) { @@ -103,7 +119,22 @@ uploadWebFigmaCommand } } catch (err) {} - let ctx: Context = ctxInit(command.optsWithGlobals()); + let ctx: Context = ctxInit(command.optsWithGlobals()); + try { + let { data: { latestVersion, deprecated, additionalDescription } } = await ctx.client.checkUpdate(ctx.log); + console.log(`\nLambdaTest SmartUI CLI v${pkgJSON.version}`); + console.log(chalk.yellow(`${additionalDescription}`)); + if (deprecated){ + console.warn(`This version is deprecated. A new version ${latestVersion} is available!`); + } + else if (pkgJSON.version !== latestVersion){ + console.log(chalk.green(`A new version ${latestVersion} is available!`)); + } + else console.log(chalk.gray('https://www.npmjs.com/package/@lambdatest/smartui-cli\n')); + } catch (error) { + // console.error(error); + console.log(chalk.gray('https://www.npmjs.com/package/@lambdatest/smartui-cli\n')); + } if (!fs.existsSync(file)) { console.log(`Error: figma-web config file ${file} not found.`); @@ -182,7 +213,21 @@ uploadWebFigmaCommand } } catch (err) {} let ctx: Context = ctxInit(command.optsWithGlobals()); - + try { + let { data: { latestVersion, deprecated, additionalDescription } } = await ctx.client.checkUpdate(ctx.log); + console.log(`\nLambdaTest SmartUI CLI v${pkgJSON.version}`); + console.log(chalk.yellow(`${additionalDescription}`)); + if (deprecated){ + console.warn(`This version is deprecated. A new version ${latestVersion} is available!`); + } + else if (pkgJSON.version !== latestVersion){ + console.log(chalk.green(`A new version ${latestVersion} is available!`)); + } + else console.log(chalk.gray('https://www.npmjs.com/package/@lambdatest/smartui-cli\n')); + } catch (error) { + // console.error(error); + console.log(chalk.gray('https://www.npmjs.com/package/@lambdatest/smartui-cli\n')); + } if (!fs.existsSync(file)) { console.log(`Error: figma-app config file ${file} not found.`); return; diff --git a/src/index.ts b/src/index.ts index dee5bd2b..a51bc65b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,35 +1,7 @@ #!/usr/bin/env node import commander from './commander/commander.js' -import getEnv from './lib/env.js' -import httpClient from './lib/httpClient.js' -// import logger from './lib/logger.js' -import chalk from 'chalk' -import pkgJSON from './../package.json' -import constants from './lib/constants.js'; -import fs from 'fs'; (async function() { - let client = new httpClient(getEnv()); - // let log = logger; - - try { - // Delete log file - // fs.unlinkSync(constants.LOG_FILE_PATH); - // let { data: { latestVersion, deprecated, additionalDescription } } = await client.checkUpdate(log); - // console.log(`\nLambdaTest SmartUI CLI v${pkgJSON.version}`); - // console.log(chalk.yellow(`${additionalDescription}`)); - // if (deprecated){ - // console.warn(`This version is deprecated. A new version ${latestVersion} is available!`); - // } - // else if (pkgJSON.version !== latestVersion){ - // console.log(chalk.green(`A new version ${latestVersion} is available!`)); - // } - // else console.log(chalk.gray('https://www.npmjs.com/package/@lambdatest/smartui-cli\n')); - } catch (error) { - console.error(error); - console.log(chalk.gray('https://www.npmjs.com/package/@lambdatest/smartui-cli\n')); - } - commander.parse(); })(); From f1af2e5891f4544050ff67405a12b81c4c73658c Mon Sep 17 00:00:00 2001 From: parthkirsan Date: Sat, 13 Sep 2025 23:45:36 +0530 Subject: [PATCH 3/3] rebase code --- src/lib/server.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/lib/server.ts b/src/lib/server.ts index 7e2ef11b..0972d3b4 100644 --- a/src/lib/server.ts +++ b/src/lib/server.ts @@ -140,14 +140,16 @@ export default async (ctx: Context): Promise