From b803d0d5ec34e24de6954314081613a09aff3a65 Mon Sep 17 00:00:00 2001 From: ElenaDiachenko Date: Tue, 12 Nov 2024 08:59:46 +0200 Subject: [PATCH 01/10] fix/defaultTargets_updating --- packages/sdk-android/src/runner.ts | 6 ++++- packages/sdk-tizen/src/deviceManager.ts | 6 ++++- packages/sdk-utils/src/target.ts | 28 ++++++++++++++++++++++- packages/sdk-webos/src/deviceManager.ts | 30 ++----------------------- 4 files changed, 39 insertions(+), 31 deletions(-) diff --git a/packages/sdk-android/src/runner.ts b/packages/sdk-android/src/runner.ts index 386527fec..8d51d7658 100644 --- a/packages/sdk-android/src/runner.ts +++ b/packages/sdk-android/src/runner.ts @@ -61,7 +61,7 @@ import { } from './deviceManager'; import { ANDROID_COLORS, ANDROID_STRINGS, ANDROID_STYLES, CLI_ANDROID_ADB } from './constants'; import { runReactNativeAndroid, packageReactNativeAndroid, generateEnvVarsFile } from '@rnv/sdk-react-native'; -import { getEntryFile } from '@rnv/sdk-utils'; +import { getEntryFile, updateDefaultTargets } from '@rnv/sdk-utils'; import { Context, getContext } from './getContext'; export const packageAndroid = async () => { @@ -120,6 +120,10 @@ export const getAndroidDeviceToRunOn = async () => { choices, }); if (chosenTarget) { + // update defaultTarget in .rnv/renative.json + if (!target) { + await updateDefaultTargets(c, chosenTarget); + } const dev = activeDevices.find((d) => d.name === chosenTarget); if (dev) return dev; diff --git a/packages/sdk-tizen/src/deviceManager.ts b/packages/sdk-tizen/src/deviceManager.ts index 5ca657ef2..99a30e715 100644 --- a/packages/sdk-tizen/src/deviceManager.ts +++ b/packages/sdk-tizen/src/deviceManager.ts @@ -24,6 +24,7 @@ import { import { CLI_SDB_TIZEN, CLI_TIZEN, CLI_TIZEN_EMULATOR } from './constants'; import { TizenDevice, TizenSecurityConfig } from './types'; +import { updateDefaultTargets } from '@rnv/sdk-utils'; const xml2js = require('xml2js'); @@ -105,7 +106,10 @@ export const launchTizenTarget = async (name: string | true, hideDevices?: boole : 'which emulator or device would you like to launch?', choices, }); - + if (chosenEmulator) { + // update defaultTarget in .rnv/renative.json + await updateDefaultTargets(c, chosenEmulator); + } name = chosenEmulator; } if (name && typeof name === 'string') { diff --git a/packages/sdk-utils/src/target.ts b/packages/sdk-utils/src/target.ts index 64974e030..c4a2acb57 100644 --- a/packages/sdk-utils/src/target.ts +++ b/packages/sdk-utils/src/target.ts @@ -1,4 +1,4 @@ -import { getContext, inquirerPrompt } from '@rnv/core'; +import { RnvContext, getContext, inquirerPrompt, logInfo, writeFileSync } from '@rnv/core'; export const getTargetWithOptionalPrompt = async () => { const ctx = getContext(); @@ -31,3 +31,29 @@ export const getTargetWithOptionalPrompt = async () => { } return target; }; + +export const updateDefaultTargets = async (c: RnvContext, selectedTarget: string) => { + const defaultTarget = c.runtime.target; + const { confirm } = await inquirerPrompt({ + type: 'confirm', + name: 'confirm', + message: `Your default target for platform ${c.platform} is ${ + !defaultTarget ? 'not defined' : `set to ${defaultTarget}` + }. Do you want to ${!defaultTarget ? 'set' : `update `} it to ${selectedTarget} `, + }); + if (!confirm) return; + + const workspaceConfig = c.files.workspace.config; + + if (workspaceConfig && c.platform) { + if (!workspaceConfig.defaultTargets) workspaceConfig.defaultTargets = {}; + + workspaceConfig.defaultTargets[c.platform] = selectedTarget; + + c.files.workspace.config = workspaceConfig; + writeFileSync(c.paths.workspace.config, workspaceConfig); + } + logInfo( + `Your default target for platform ${c.platform} has been updated successfully in ${c.paths.workspace.config}` + ); +}; diff --git a/packages/sdk-webos/src/deviceManager.ts b/packages/sdk-webos/src/deviceManager.ts index 85bf59ff3..5460a5b90 100644 --- a/packages/sdk-webos/src/deviceManager.ts +++ b/packages/sdk-webos/src/deviceManager.ts @@ -21,7 +21,6 @@ import { getAppFolder, getContext, logError, - writeFileSync, } from '@rnv/core'; import { WebosDevice } from './types'; import { @@ -33,7 +32,7 @@ import { CLI_WEBOS_ARES_DEVICE_INFO, } from './constants'; import semver from 'semver'; -import { isUrlLocalhost } from '@rnv/sdk-utils'; +import { isUrlLocalhost, updateDefaultTargets } from '@rnv/sdk-utils'; export const launchWebOSimulator = async (target: string | boolean) => { logTask('launchWebOSimulator', `${target}`); @@ -175,7 +174,7 @@ const launchAppOnSimulator = async (c: RnvContext, appPath: string) => { selectedSimulator = availableEmulatorVersions[0]; logInfo(`Found simulator ${chalk().bold.white(selectedSimulator)} in ${simulatorDirPath}`); } - await _updateDefaultTargets(c, selectedSimulator); + await updateDefaultTargets(c, selectedSimulator); } const regex = /\d+(\.\d+)?/g; @@ -194,31 +193,6 @@ const launchAppOnSimulator = async (c: RnvContext, appPath: string) => { ); }; -const _updateDefaultTargets = async (c: RnvContext, selectedSimulator: string) => { - const defaultTarget = c.runtime.target; - const { confirm } = await inquirerPrompt({ - type: 'confirm', - name: 'confirm', - message: `Your default target for platform ${c.platform} is ${ - !defaultTarget ? 'not defined' : `set to ${defaultTarget}` - }. Do you want to ${!defaultTarget ? 'set' : `update `} it to ${selectedSimulator} `, - }); - if (!confirm) return; - - const workspaceConfig = c.files.workspace.config; - - if (workspaceConfig && c.platform) { - if (!workspaceConfig.defaultTargets) workspaceConfig.defaultTargets = {}; - - workspaceConfig.defaultTargets[c.platform] = selectedSimulator; - - c.files.workspace.config = workspaceConfig; - writeFileSync(c.paths.workspace.config, workspaceConfig); - } - logInfo( - `Your default target for platform ${c.platform} has been updated successfully in ${c.paths.workspace.config}` - ); -}; // Used for actual devices const installAndLaunchApp = async (target: string, appPath: string, tId: string) => { try { From e491e5a480e8756bd78782518456cd6a93e05394 Mon Sep 17 00:00:00 2001 From: ElenaDiachenko Date: Tue, 12 Nov 2024 09:28:59 +0200 Subject: [PATCH 02/10] add default workspace config --- .../src/tasks/workspace/taskWorkspaceConfigure.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts index 3d5235da6..8164749c9 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts @@ -37,7 +37,17 @@ export default createTask({ copyFileSync(oldGlobalConfigPath, paths.workspace.config); } else { logInfo(`${paths.workspace.dir}/${RnvFileName.renative} file missing! Creating one for you...`); - writeFileSync(paths.workspace.config, '{}'); + const defaultWorkspaceCnf = { + sdks: { + ANDROID_SDK: '/Users//Library/Android/sdk', + ANDROID_NDK: '/Users//Library/Android/sdk/ndk-bundle', + IOS_SDK: 'No need. Just install Xcode', + TIZEN_SDK: '/Users//tizen-studio', + WEBOS_SDK: '/Users//Library/webOS_TV_SDK', + KAIOS_SDK: '/Applications/Kaiosrt.app', + }, + }; + writeFileSync(paths.workspace.config, JSON.stringify(defaultWorkspaceCnf, null, 2)); } } From 38184175a8405b3f13f9d191e1962332d48209dc Mon Sep 17 00:00:00 2001 From: ElenaDiachenko Date: Thu, 14 Nov 2024 11:37:02 +0200 Subject: [PATCH 03/10] fix --- packages/sdk-android/src/runner.ts | 2 +- .../sdk-apple/src/__tests__/runner.test.ts | 28 +++++----- packages/sdk-apple/src/runner.ts | 40 +-------------- packages/sdk-tizen/src/deviceManager.ts | 23 ++++++--- packages/sdk-utils/src/target.ts | 51 ++++++++++++------- 5 files changed, 68 insertions(+), 76 deletions(-) diff --git a/packages/sdk-android/src/runner.ts b/packages/sdk-android/src/runner.ts index 8d51d7658..6159223ae 100644 --- a/packages/sdk-android/src/runner.ts +++ b/packages/sdk-android/src/runner.ts @@ -120,7 +120,7 @@ export const getAndroidDeviceToRunOn = async () => { choices, }); if (chosenTarget) { - // update defaultTarget in .rnv/renative.json + // update defaultTarget if (!target) { await updateDefaultTargets(c, chosenTarget); } diff --git a/packages/sdk-apple/src/__tests__/runner.test.ts b/packages/sdk-apple/src/__tests__/runner.test.ts index ec8c99c40..8c284e3b7 100644 --- a/packages/sdk-apple/src/__tests__/runner.test.ts +++ b/packages/sdk-apple/src/__tests__/runner.test.ts @@ -2,6 +2,7 @@ import { inquirerPrompt, getContext, createRnvContext, logSuccess } from '@rnv/c import type { PromptParams } from '@rnv/core'; import { getIosDeviceToRunOn } from '../runner'; import { getAppleDevices } from '../deviceManager'; +import { updateDefaultTargets } from '@rnv/sdk-utils'; const simJson = [ { @@ -33,6 +34,7 @@ const devicesJson = [ ]; jest.mock('@rnv/core'); +jest.mock('@rnv/sdk-utils'); jest.mock('../deviceManager'); jest.mock('chalk', () => ({ bold: { @@ -97,22 +99,17 @@ describe('getIosDeviceToRunOn', () => { [name as string]: true, }; } - if (type === 'list') { - // Testing the addition of global/project value should be handled in another UT - if (choices?.includes("Don't update")) { - const choiceIndex = choices.findIndex((c) => c === "Don't update"); - return { - [name as string]: - (choices![choiceIndex] as { name: string; value: any }).value || choices![choiceIndex], - }; - } // By default first value returned (aka the first simulator from the list in this case) return { [name as string]: (choices![0] as { name: string; value: any }).value || choices![0], }; } }); + jest.mocked(updateDefaultTargets).mockImplementation(async (ctx, currentTarget) => { + if (!ctx.platform) return; + ctx.runtime.target = currentTarget; + }); // WHEN const deviceArgs = await getIosDeviceToRunOn(ctx); //THEN @@ -139,14 +136,19 @@ describe('getIosDeviceToRunOn', () => { ctx.files.workspace.config = {}; ctx.runtime.target = 'iPhone 14'; jest.mocked(getAppleDevices).mockResolvedValueOnce(simJson); - jest.mocked(inquirerPrompt).mockImplementation(async ({ type, name, choices }: PromptParams) => { - if (type === 'list' && choices?.includes('Update global default target for platform ios')) { - return { [name as string]: 'Update global default target for platform ios' }; - } + jest.mocked(inquirerPrompt).mockImplementation(async ({ name, choices }: PromptParams) => { return { [name as string]: (choices![0] as { name: string; value: any }).value || choices![0], }; }); + jest.mocked(updateDefaultTargets).mockImplementation(async (ctx, currentTarget) => { + if (!ctx.platform) return; + const configGlobal = ctx.files.workspace.config || {}; + configGlobal.defaultTargets = configGlobal.defaultTargets || {}; + configGlobal.defaultTargets[ctx.platform] = currentTarget; + ctx.files.workspace.config = configGlobal; + ctx.runtime.target = currentTarget; + }); // WHEN const deviceArgs = await getIosDeviceToRunOn(ctx); // THEN diff --git a/packages/sdk-apple/src/runner.ts b/packages/sdk-apple/src/runner.ts index 9788fa626..ef4e97d9b 100644 --- a/packages/sdk-apple/src/runner.ts +++ b/packages/sdk-apple/src/runner.ts @@ -45,7 +45,7 @@ import { import { registerDevice } from './fastlane'; import { Context, getContext } from './getContext'; import { parsePrivacyManifest } from './privacyManifestParser'; -import { getAppId } from '@rnv/sdk-utils'; +import { getAppId, updateDefaultTargets } from '@rnv/sdk-utils'; export const packageBundleForXcode = () => { return packageReactNativeIOS(); @@ -176,43 +176,7 @@ export const getIosDeviceToRunOn = async (c: Context) => { })), }); desiredSim = currentTarget; - const localOverridden = !!c.files.project.configLocal?.defaultTargets?.[c.platform]; - - const actionLocalUpdate = `Update ${chalk().green('project')} default target for platform ${c.platform}`; - const actionGlobalUpdate = `Update ${chalk().green('global')}${ - localOverridden ? ` and ${chalk().green('project')}` : '' - } default target for platform ${c.platform}`; - const actionNoUpdate = "Don't update"; - - const { chosenAction } = await inquirerPrompt({ - message: 'What to do next?', - type: 'list', - name: 'chosenAction', - choices: [actionLocalUpdate, actionGlobalUpdate, actionNoUpdate], - warningMessage: `Your default target for platform ${c.platform} is set to ${c.runtime.target}.`, - }); - - c.runtime.target = currentTarget.name; - - if (chosenAction === actionLocalUpdate || (chosenAction === actionGlobalUpdate && localOverridden)) { - const configLocal = c.files.project.configLocal || {}; - if (!configLocal.defaultTargets) configLocal.defaultTargets = {}; - configLocal.defaultTargets[c.platform] = currentTarget.name; - - c.files.project.configLocal = configLocal; - writeFileSync(c.paths.project.configLocal, configLocal); - } - - if (chosenAction === actionGlobalUpdate) { - const configGlobal = c.files.workspace.config; - if (configGlobal) { - if (!configGlobal.defaultTargets) configGlobal.defaultTargets = {}; - configGlobal.defaultTargets[c.platform] = currentTarget.name; - - c.files.workspace.config = configGlobal; - writeFileSync(c.paths.workspace.config, configGlobal); - } - } + await updateDefaultTargets(c, currentTarget.name); } if (!desiredSim?.isDevice) { const target = c.runtime.target?.replace(/(\s+)/g, '\\$1'); diff --git a/packages/sdk-tizen/src/deviceManager.ts b/packages/sdk-tizen/src/deviceManager.ts index 99a30e715..26c00b86b 100644 --- a/packages/sdk-tizen/src/deviceManager.ts +++ b/packages/sdk-tizen/src/deviceManager.ts @@ -73,7 +73,11 @@ const formatXMLObject = ( return {}; }; -export const launchTizenTarget = async (name: string | true, hideDevices?: boolean): Promise => { +export const launchTizenTarget = async ( + name: string | true, + hideDevices?: boolean, + updateDefault = false +): Promise => { const c = getContext(); logDefault(`launchTizenTarget:${name}`); if (name === true) { @@ -122,11 +126,16 @@ export const launchTizenTarget = async (name: string | true, hideDevices?: boole return new Promise(() => logInfo('Device is launched.')); } try { - await executeAsync( - `${c.cli[CLI_TIZEN_EMULATOR]} launch --name ${name}`, - ExecOptionsPresets.SPINNER_FULL_ERROR_SUMMARY - ); - return true; + if (updateDefault) { + await runTizenSimOrDevice(); + return true; + } else { + await executeAsync( + `${c.cli[CLI_TIZEN_EMULATOR]} launch --name ${name}`, + ExecOptionsPresets.SPINNER_FULL_ERROR_SUMMARY + ); + return true; + } } catch (e) { if (typeof e === 'string') { if (e.includes(ERROR_MSG.UNKNOWN_VM)) { @@ -432,7 +441,7 @@ export const runTizenSimOrDevice = async () => { if (!tId) return Promise.reject(`Tizen platform requires "id" filed in platforms.tizen`); const askForEmulator = async () => { if (!target) { - launchTizenTarget(true); + launchTizenTarget(true, undefined, true); return; } const { startEmulator } = await inquirerPrompt({ diff --git a/packages/sdk-utils/src/target.ts b/packages/sdk-utils/src/target.ts index c4a2acb57..14c9a8bac 100644 --- a/packages/sdk-utils/src/target.ts +++ b/packages/sdk-utils/src/target.ts @@ -1,4 +1,4 @@ -import { RnvContext, getContext, inquirerPrompt, logInfo, writeFileSync } from '@rnv/core'; +import { RnvContext, chalk, getContext, inquirerPrompt, writeFileSync } from '@rnv/core'; export const getTargetWithOptionalPrompt = async () => { const ctx = getContext(); @@ -32,28 +32,45 @@ export const getTargetWithOptionalPrompt = async () => { return target; }; -export const updateDefaultTargets = async (c: RnvContext, selectedTarget: string) => { +export const updateDefaultTargets = async (c: RnvContext, currentTarget: string) => { + if (!c.platform) return; + const localOverridden = !!c.files.project.configLocal?.defaultTargets?.[c.platform]; const defaultTarget = c.runtime.target; - const { confirm } = await inquirerPrompt({ - type: 'confirm', - name: 'confirm', - message: `Your default target for platform ${c.platform} is ${ + const actionLocalUpdate = `Update ${chalk().green('project')} default target for platform ${c.platform}`; + const actionGlobalUpdate = `Update ${chalk().green('global')}${ + localOverridden ? ` and ${chalk().green('project')}` : '' + } default target for platform ${c.platform}`; + const actionNoUpdate = "Don't update"; + + const { chosenAction } = await inquirerPrompt({ + message: 'What to do next?', + type: 'list', + name: 'chosenAction', + choices: [actionLocalUpdate, actionGlobalUpdate, actionNoUpdate], + warningMessage: `Your default target for platform ${c.platform} is ${ !defaultTarget ? 'not defined' : `set to ${defaultTarget}` - }. Do you want to ${!defaultTarget ? 'set' : `update `} it to ${selectedTarget} `, + }. `, }); - if (!confirm) return; - const workspaceConfig = c.files.workspace.config; + c.runtime.target = currentTarget; + + if (chosenAction === actionLocalUpdate || (chosenAction === actionGlobalUpdate && localOverridden)) { + const configLocal = c.files.project.configLocal || {}; + if (!configLocal.defaultTargets) configLocal.defaultTargets = {}; + configLocal.defaultTargets[c.platform] = currentTarget; - if (workspaceConfig && c.platform) { - if (!workspaceConfig.defaultTargets) workspaceConfig.defaultTargets = {}; + c.files.project.configLocal = configLocal; + writeFileSync(c.paths.project.configLocal, JSON.stringify(configLocal, null, 2)); + } - workspaceConfig.defaultTargets[c.platform] = selectedTarget; + if (chosenAction === actionGlobalUpdate) { + const configGlobal = c.files.workspace.config; + if (configGlobal) { + if (!configGlobal.defaultTargets) configGlobal.defaultTargets = {}; + configGlobal.defaultTargets[c.platform] = currentTarget; - c.files.workspace.config = workspaceConfig; - writeFileSync(c.paths.workspace.config, workspaceConfig); + c.files.workspace.config = configGlobal; + writeFileSync(c.paths.workspace.config, JSON.stringify(configGlobal, null, 2)); + } } - logInfo( - `Your default target for platform ${c.platform} has been updated successfully in ${c.paths.workspace.config}` - ); }; From bc069a0f2c591c47e38d20c953c9e55e55316189 Mon Sep 17 00:00:00 2001 From: ElenaDiachenko Date: Thu, 14 Nov 2024 18:01:39 +0200 Subject: [PATCH 04/10] fix webos --- packages/sdk-utils/src/target.ts | 2 +- packages/sdk-webos/src/deviceManager.ts | 42 +++++++++++++++++++------ 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/packages/sdk-utils/src/target.ts b/packages/sdk-utils/src/target.ts index 14c9a8bac..159707b92 100644 --- a/packages/sdk-utils/src/target.ts +++ b/packages/sdk-utils/src/target.ts @@ -49,7 +49,7 @@ export const updateDefaultTargets = async (c: RnvContext, currentTarget: string) choices: [actionLocalUpdate, actionGlobalUpdate, actionNoUpdate], warningMessage: `Your default target for platform ${c.platform} is ${ !defaultTarget ? 'not defined' : `set to ${defaultTarget}` - }. `, + }.`, }); c.runtime.target = currentTarget; diff --git a/packages/sdk-webos/src/deviceManager.ts b/packages/sdk-webos/src/deviceManager.ts index 5460a5b90..af4c55185 100644 --- a/packages/sdk-webos/src/deviceManager.ts +++ b/packages/sdk-webos/src/deviceManager.ts @@ -1,4 +1,5 @@ import path from 'path'; +import { isString } from 'lodash'; import { getRealPath, fsReadFileSync, @@ -131,6 +132,7 @@ const parseDevices = (c: RnvContext, devicesResponse: string): Promise { logDefault('launchAppOnSimulator'); const defaultTarget = c.runtime.target; + const { target } = c.program.opts(); const webosSdkPath = getRealPath(c.buildConfig?.sdks?.WEBOS_SDK); if (!webosSdkPath) { @@ -163,17 +165,31 @@ const launchAppOnSimulator = async (c: RnvContext, appPath: string) => { selectedSimulator = defaultTarget; logInfo(`Found default simulator ${chalk().bold.white(selectedSimulator)} in ${simulatorDirPath}`); } else { - if (availableEmulatorVersions.length > 1) { - ({ selectedSimulator } = await inquirerPrompt({ - name: 'selectedSimulator', - type: 'list', - choices: availableEmulatorVersions, - message: `Found several installed simulators. Choose which one to use:`, - })); - } else { - selectedSimulator = availableEmulatorVersions[0]; - logInfo(`Found simulator ${chalk().bold.white(selectedSimulator)} in ${simulatorDirPath}`); + if (availableEmulatorVersions.length) { + if (isString(target) && availableEmulatorVersions.includes(target)) { + ({ selectedSimulator } = await inquirerPrompt({ + name: 'selectedSimulator', + type: 'list', + choices: availableEmulatorVersions, + message: `Found installed simulators. Choose which one to use:`, + })); + } else { + logInfo( + `The target ${ + !target || target === true + ? 'is not specified' + : `is specified, but no such target is available: ${chalk().magenta(target)}` + }. Will try to find available one` + ); + ({ selectedSimulator } = await inquirerPrompt({ + name: 'selectedSimulator', + type: 'list', + choices: availableEmulatorVersions, + message: `Found installed simulators. Choose which one to use:`, + })); + } } + await updateDefaultTargets(c, selectedSimulator); } @@ -345,6 +361,12 @@ export const runWebosSimOrDevice = async () => { return logError(`${error}`); } } + } else if (c.program.opts().target && !device) { + try { + return await launchAppOnSimulator(c, appLocation); + } catch (error) { + return logError(`${error}`); + } } else { const target_name = devices.find((device) => { return device.device.includes(c.program.opts().target) || device.name.includes(c.program.opts().target); From ff1530b30f9ada445808e68df5dd1089670f6232 Mon Sep 17 00:00:00 2001 From: ElenaDiachenko Date: Fri, 15 Nov 2024 15:41:59 +0200 Subject: [PATCH 05/10] fix tizen --- packages/sdk-tizen/src/deviceManager.ts | 32 +++++++++++++++---------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/packages/sdk-tizen/src/deviceManager.ts b/packages/sdk-tizen/src/deviceManager.ts index 26c00b86b..013551908 100644 --- a/packages/sdk-tizen/src/deviceManager.ts +++ b/packages/sdk-tizen/src/deviceManager.ts @@ -86,8 +86,9 @@ export const launchTizenTarget = async ( const devices_lines = devices.split('\n'); const devicesArr = devices_lines.slice(1).map((line: string) => line.split(' ')[0]); // devices array with only their ip - const allDownloadedEmulators = emulators.split('\n'); // all tizen, tizenwatch and tizenmobile emulators - + const allDownloadedEmulators = emulators.split('\n').map((em) => em.trim()); // all tizen, tizenwatch and tizenmobile emulators + console.log('allDownloadedEmulators', allDownloadedEmulators); + console.log('emulators.split(', emulators.split('\n')); const specificEmulators = await getEmulatorType(allDownloadedEmulators, c.platform as string); const specificDevices = await getDeviceType(devicesArr, c.platform as string); @@ -110,11 +111,17 @@ export const launchTizenTarget = async ( : 'which emulator or device would you like to launch?', choices, }); - if (chosenEmulator) { + + if ( + chosenEmulator && + (c.files.project.configLocal?.defaultTargets?.[c.platform!] || + c.files.workspace.config?.defaultTargets?.[c.platform!] !== chosenEmulator) + ) { // update defaultTarget in .rnv/renative.json await updateDefaultTargets(c, chosenEmulator); } name = chosenEmulator; + c.runtime.target = chosenEmulator; } if (name && typeof name === 'string') { const ipRegex = /^(?:\d{1,3}\.){3}\d{1,3}:\d{1,5}$/; @@ -452,7 +459,7 @@ export const runTizenSimOrDevice = async () => { if (startEmulator) { isRunningEmulator = true; - const defaultTarget = c.files.workspace.config?.defaultTargets?.[platform]; + const defaultTarget = c.runtime.target; if (!defaultTarget) { logError('No default target found for tizen. please provide one using -t option'); return; @@ -495,10 +502,10 @@ Please create one and then edit the default target from ${c.paths.workspace.dir} hasDevice = true; } catch (e) { if (typeof e === 'string' && e.includes('No device matching')) { - if (target) { + if (c.runtime.target) { isRunningEmulator = true; - await launchTizenTarget(target); - hasDevice = await _waitForEmulatorToBeReady(target); + await launchTizenTarget(c.runtime.target); + hasDevice = await _waitForEmulatorToBeReady(c.runtime.target); } else { return Promise.reject('Not target specified. (-t)'); } @@ -525,7 +532,7 @@ Please create one and then edit the default target from ${c.paths.workspace.dir} logError(err); } - if (!target) { + if (!c.runtime.target) { return Promise.reject('Not target specified. (-t)'); } @@ -533,8 +540,8 @@ Please create one and then edit the default target from ${c.paths.workspace.dir} await launchTizenTarget(true); } else { isRunningEmulator = true; - await launchTizenTarget(target); - hasDevice = await _waitForEmulatorToBeReady(target); + await launchTizenTarget(c.runtime.target); + hasDevice = await _waitForEmulatorToBeReady(c.runtime.target); } } @@ -579,8 +586,9 @@ Please create one and then edit the default target from ${c.paths.workspace.dir} // try to launch it, see if it's a emulator that's not started yet isRunningEmulator = true; await launchTizenTarget(target); - await _waitForEmulatorToBeReady(target); - deviceID = target; + const currentTarget = c.runtime.target || target; + await _waitForEmulatorToBeReady(currentTarget); + deviceID = currentTarget; return continueLaunching(); } catch (e) { return askForEmulator(); From 1b7722a95fb99850c27691071ce2c9ea19c35edb Mon Sep 17 00:00:00 2001 From: ElenaDiachenko Date: Fri, 15 Nov 2024 15:55:04 +0200 Subject: [PATCH 06/10] clean code --- packages/sdk-tizen/src/deviceManager.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/sdk-tizen/src/deviceManager.ts b/packages/sdk-tizen/src/deviceManager.ts index 013551908..d75f7a394 100644 --- a/packages/sdk-tizen/src/deviceManager.ts +++ b/packages/sdk-tizen/src/deviceManager.ts @@ -87,8 +87,7 @@ export const launchTizenTarget = async ( const devicesArr = devices_lines.slice(1).map((line: string) => line.split(' ')[0]); // devices array with only their ip const allDownloadedEmulators = emulators.split('\n').map((em) => em.trim()); // all tizen, tizenwatch and tizenmobile emulators - console.log('allDownloadedEmulators', allDownloadedEmulators); - console.log('emulators.split(', emulators.split('\n')); + const specificEmulators = await getEmulatorType(allDownloadedEmulators, c.platform as string); const specificDevices = await getDeviceType(devicesArr, c.platform as string); From 9171858de4044bfa4ff65cf4e648bdd5df5d2744 Mon Sep 17 00:00:00 2001 From: ElenaDiachenko Date: Thu, 21 Nov 2024 14:24:46 +0200 Subject: [PATCH 07/10] fix tizen --- packages/sdk-tizen/src/__tests__/deviceManager.test.ts | 5 +++++ packages/sdk-tizen/src/deviceManager.ts | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/sdk-tizen/src/__tests__/deviceManager.test.ts b/packages/sdk-tizen/src/__tests__/deviceManager.test.ts index 29573b6ac..b0c9fccbd 100644 --- a/packages/sdk-tizen/src/__tests__/deviceManager.test.ts +++ b/packages/sdk-tizen/src/__tests__/deviceManager.test.ts @@ -19,6 +19,7 @@ const ERROR_MSG = { }; jest.mock('@rnv/core'); +jest.mock('@rnv/sdk-utils'); beforeEach(() => { jest.clearAllMocks(); @@ -135,6 +136,7 @@ describe('launchTizenTarget', () => { value: '111.111.111:11111', }, ], + default: 'emulatorTizen', }); expect(executeAsync).toHaveBeenCalledWith( 'tizen-emulator launch --name emulatorTizen', @@ -163,6 +165,7 @@ describe('launchTizenTarget', () => { name: 'chosenEmulator', type: 'list', message: 'which emulator would you like to launch?', + default: 'emulatorTizen', choices: [ { key: 'emulatorTizen', @@ -202,6 +205,7 @@ describe('launchTizenTarget', () => { { key: 'emulatorTizen', name: 'emulatorTizen', value: 'emulatorTizen' }, { key: '111.111.111.111:11111', name: '111.111.111.111:11111', value: '111.111.111.111:11111' }, ], + default: 'emulatorTizen', }); expect(result).toBe(true); }); @@ -242,6 +246,7 @@ describe('launchTizenTarget', () => { value: '111.111.111.111:11111', }, ], + default: 'emulatorTizen', }); expect(executeAsync).toHaveBeenCalledWith( 'tizen-emulator launch --name emulatorTizen', diff --git a/packages/sdk-tizen/src/deviceManager.ts b/packages/sdk-tizen/src/deviceManager.ts index d75f7a394..4a3fc48ed 100644 --- a/packages/sdk-tizen/src/deviceManager.ts +++ b/packages/sdk-tizen/src/deviceManager.ts @@ -109,6 +109,7 @@ export const launchTizenTarget = async ( ? 'which emulator would you like to launch?' : 'which emulator or device would you like to launch?', choices, + default: choices.find((it) => it.key.includes('samsung'))?.key || choices[0].key, }); if ( @@ -553,7 +554,10 @@ Please create one and then edit the default target from ${c.paths.workspace.dir} if (platform !== 'tizenwatch' && platform !== 'tizenmobile' && hasDevice) { // change id for for emulator because tizen 8+ fails to run app with - await execCLI(CLI_TIZEN, `run -p ${isRunningEmulator ? tId.split('.')[0] : tId} -t ${deviceID}`); + await execCLI( + CLI_TIZEN, + `run -p ${isRunningEmulator && !deviceID.includes('samsung') ? tId.split('.')[0] : tId} -t ${deviceID}` + ); } else if ((platform === 'tizenwatch' || platform === 'tizenmobile') && hasDevice) { const packageID = tId.split('.'); await execCLI(CLI_TIZEN, `run -p ${packageID[0]} -t ${deviceID}`); From 3230fc6a9ed910aec95999c5552184353dfd3753 Mon Sep 17 00:00:00 2001 From: ElenaDiachenko Date: Sun, 24 Nov 2024 16:54:10 +0200 Subject: [PATCH 08/10] fix webos and kaios --- packages/sdk-kaios/src/deviceManager.ts | 17 +++++++++++++---- packages/sdk-webos/src/deviceManager.ts | 18 ++++++++++-------- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/packages/sdk-kaios/src/deviceManager.ts b/packages/sdk-kaios/src/deviceManager.ts index a65799dfa..5c135db61 100644 --- a/packages/sdk-kaios/src/deviceManager.ts +++ b/packages/sdk-kaios/src/deviceManager.ts @@ -11,12 +11,14 @@ import { logWarning, chalk, } from '@rnv/core'; +import { updateDefaultTargets } from '@rnv/sdk-utils'; import path from 'path'; export const launchKaiOSSimulator = async (target: string | boolean) => { const c = getContext(); logDefault(`launchKaiOSSimulator: ${target}`); - + if (!c.platform) return; + const defaultTarget = c.buildConfig.defaultTargets?.[c.platform]; const kaiosSdkPath = getRealPath(c.buildConfig?.sdks?.KAIOS_SDK); if (!kaiosSdkPath) { @@ -35,11 +37,18 @@ export const launchKaiOSSimulator = async (target: string | boolean) => { choices: availableSimulatorVersions, }); target = selectedSimulator; + if (!defaultTarget || defaultTarget !== selectedSimulator) { + await updateDefaultTargets(c, selectedSimulator); + } } else if (typeof target === 'string' && !availableSimulatorVersions.includes(target)) { logWarning( - `Target with name ${chalk().red(target)} does not exist. You can update it here: ${chalk().cyan( - c.paths.dotRnv.config - )}` + `${ + defaultTarget && !c.program.opts().target + ? `The default target specified in ${chalk().cyan(c.paths.dotRnv.config)} or ${chalk().cyan( + c.paths.project.configLocal + )}` + : 'Target' + } with name ${chalk().red(target)} does not exist.` ); await launchKaiOSSimulator(true); return true; diff --git a/packages/sdk-webos/src/deviceManager.ts b/packages/sdk-webos/src/deviceManager.ts index af4c55185..f4d19609f 100644 --- a/packages/sdk-webos/src/deviceManager.ts +++ b/packages/sdk-webos/src/deviceManager.ts @@ -264,7 +264,7 @@ export const listWebOSTargets = async () => { export const runWebosSimOrDevice = async () => { const c = getContext(); - const { device } = c.program.opts(); + const { device, target } = c.program.opts(); const platDir = getAppFolder(); if (!platDir) { @@ -294,8 +294,14 @@ export const runWebosSimOrDevice = async () => { // List all devices const devicesResponse = await execCLI(CLI_WEBOS_ARES_DEVICE_INFO, '-D'); + const devices = await parseDevices(c, devicesResponse); + console.log('devices', devices); const activeDevices = devices.filter((d) => d.active); + console.log('activeDevices', activeDevices); + const target_name = devices.find((device) => { + return device.device.includes(target) || device.name.includes(target); + })?.name; if (device) { // Running on a device @@ -336,7 +342,7 @@ export const runWebosSimOrDevice = async () => { const tv = actualDevices[0]; return installAndLaunchApp(tv.name, appPath, tId); } - } else if (!c.program.opts().target) { + } else if (!target) { // No target specified if (activeDevices.length === 1) { // One device present @@ -361,19 +367,15 @@ export const runWebosSimOrDevice = async () => { return logError(`${error}`); } } - } else if (c.program.opts().target && !device) { + } else if (target && !target_name) { try { return await launchAppOnSimulator(c, appLocation); } catch (error) { return logError(`${error}`); } } else { - const target_name = devices.find((device) => { - return device.device.includes(c.program.opts().target) || device.name.includes(c.program.opts().target); - })?.name; - if (!target_name) { - return Promise.reject(`Target ${c.program.opts().target} doesn't exist.`); + return Promise.reject(`Target ${target} doesn't exist.`); } return installAndLaunchApp(target_name, appPath, tId); } From f06d9d4f2caf3a0777f6ad6711458e12dda8f6ed Mon Sep 17 00:00:00 2001 From: ElenaDiachenko Date: Sun, 24 Nov 2024 17:05:06 +0200 Subject: [PATCH 09/10] clean code --- packages/sdk-webos/src/deviceManager.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/sdk-webos/src/deviceManager.ts b/packages/sdk-webos/src/deviceManager.ts index f4d19609f..f58be5d75 100644 --- a/packages/sdk-webos/src/deviceManager.ts +++ b/packages/sdk-webos/src/deviceManager.ts @@ -296,9 +296,7 @@ export const runWebosSimOrDevice = async () => { const devicesResponse = await execCLI(CLI_WEBOS_ARES_DEVICE_INFO, '-D'); const devices = await parseDevices(c, devicesResponse); - console.log('devices', devices); const activeDevices = devices.filter((d) => d.active); - console.log('activeDevices', activeDevices); const target_name = devices.find((device) => { return device.device.includes(target) || device.name.includes(target); })?.name; From 21e8a8b6196821744d25bab84bb9ee3d8f2c81ff Mon Sep 17 00:00:00 2001 From: ElenaDiachenko Date: Tue, 26 Nov 2024 14:51:31 +0200 Subject: [PATCH 10/10] removed kaios default target update functionality --- packages/sdk-kaios/src/deviceManager.ts | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/packages/sdk-kaios/src/deviceManager.ts b/packages/sdk-kaios/src/deviceManager.ts index 5c135db61..a65799dfa 100644 --- a/packages/sdk-kaios/src/deviceManager.ts +++ b/packages/sdk-kaios/src/deviceManager.ts @@ -11,14 +11,12 @@ import { logWarning, chalk, } from '@rnv/core'; -import { updateDefaultTargets } from '@rnv/sdk-utils'; import path from 'path'; export const launchKaiOSSimulator = async (target: string | boolean) => { const c = getContext(); logDefault(`launchKaiOSSimulator: ${target}`); - if (!c.platform) return; - const defaultTarget = c.buildConfig.defaultTargets?.[c.platform]; + const kaiosSdkPath = getRealPath(c.buildConfig?.sdks?.KAIOS_SDK); if (!kaiosSdkPath) { @@ -37,18 +35,11 @@ export const launchKaiOSSimulator = async (target: string | boolean) => { choices: availableSimulatorVersions, }); target = selectedSimulator; - if (!defaultTarget || defaultTarget !== selectedSimulator) { - await updateDefaultTargets(c, selectedSimulator); - } } else if (typeof target === 'string' && !availableSimulatorVersions.includes(target)) { logWarning( - `${ - defaultTarget && !c.program.opts().target - ? `The default target specified in ${chalk().cyan(c.paths.dotRnv.config)} or ${chalk().cyan( - c.paths.project.configLocal - )}` - : 'Target' - } with name ${chalk().red(target)} does not exist.` + `Target with name ${chalk().red(target)} does not exist. You can update it here: ${chalk().cyan( + c.paths.dotRnv.config + )}` ); await launchKaiOSSimulator(true); return true;