From f7f4dde0e961f2f647a2e7234aea8cd65c96cc49 Mon Sep 17 00:00:00 2001 From: DanL0 Date: Thu, 26 Jun 2025 12:05:23 +0200 Subject: [PATCH 1/4] fix move CLI version checks --- .changeset/wet-colts-peel.md | 5 +++ packages/devtools-move/jest/config.test.ts | 36 +++++++++++++++++++ packages/devtools-move/package.json | 3 +- .../devtools-move/tasks/move/utils/config.ts | 20 +++++++---- 4 files changed, 56 insertions(+), 8 deletions(-) create mode 100644 .changeset/wet-colts-peel.md create mode 100644 packages/devtools-move/jest/config.test.ts diff --git a/.changeset/wet-colts-peel.md b/.changeset/wet-colts-peel.md new file mode 100644 index 0000000000..12fe8b3123 --- /dev/null +++ b/.changeset/wet-colts-peel.md @@ -0,0 +1,5 @@ +--- +"@layerzerolabs/devtools-move": patch +--- + +fix move CLI version checks diff --git a/packages/devtools-move/jest/config.test.ts b/packages/devtools-move/jest/config.test.ts new file mode 100644 index 0000000000..e6edf09072 --- /dev/null +++ b/packages/devtools-move/jest/config.test.ts @@ -0,0 +1,36 @@ +import { expect } from 'chai' +import { isVersionGreaterOrEqualTo, isVersionLessThanOrEqualTo } from '../tasks/move/utils/config' + +describe('tasks/move/utils/config', () => { + describe('isVersionGreaterOrEqualTo', () => { + it('works', () => { + expect(isVersionGreaterOrEqualTo('6.0.1', '6.0.1')).to.equal(true) + expect(isVersionGreaterOrEqualTo('6.0.1', '6.0.0')).to.equal(true) + expect(isVersionGreaterOrEqualTo('6.0.1', '5.0.0')).to.equal(true) + expect(isVersionGreaterOrEqualTo('7.5.0', '6.0.1')).to.equal(true) + expect(isVersionGreaterOrEqualTo('6.0.1', '7.0.0')).to.equal(false) + expect(isVersionGreaterOrEqualTo('5.0.0', '6.0.1')).to.equal(false) + expect(isVersionGreaterOrEqualTo('5.0.0', '7.0.0')).to.equal(false) + expect(isVersionGreaterOrEqualTo('7.0.0', '6.0.1')).to.equal(true) + expect(isVersionGreaterOrEqualTo('7.0.0', '5.0.0')).to.equal(true) + expect(isVersionGreaterOrEqualTo('7.0.0', '7.0.0')).to.equal(true) + expect(isVersionGreaterOrEqualTo('7.0.0', '8.0.0')).to.equal(false) + }) + }) + + describe('isVersionLessThanOrEqualTo', () => { + it('works', () => { + expect(isVersionLessThanOrEqualTo('6.0.1', '6.0.1')).to.equal(true) + expect(isVersionLessThanOrEqualTo('6.0.1', '6.0.0')).to.equal(false) + expect(isVersionLessThanOrEqualTo('6.0.1', '5.0.0')).to.equal(false) + expect(isVersionLessThanOrEqualTo('7.5.0', '6.0.1')).to.equal(false) + expect(isVersionLessThanOrEqualTo('6.0.1', '7.0.0')).to.equal(true) + expect(isVersionLessThanOrEqualTo('5.0.0', '6.0.1')).to.equal(true) + expect(isVersionLessThanOrEqualTo('5.0.0', '7.0.0')).to.equal(true) + expect(isVersionLessThanOrEqualTo('7.0.0', '6.0.1')).to.equal(false) + expect(isVersionLessThanOrEqualTo('7.0.0', '5.0.0')).to.equal(false) + expect(isVersionLessThanOrEqualTo('7.0.0', '7.0.0')).to.equal(true) + expect(isVersionLessThanOrEqualTo('7.0.0', '8.0.0')).to.equal(true) + }) + }) +}) diff --git a/packages/devtools-move/package.json b/packages/devtools-move/package.json index aeed6b9abd..9125691975 100644 --- a/packages/devtools-move/package.json +++ b/packages/devtools-move/package.json @@ -30,7 +30,8 @@ "clean": "rm -rf dist", "dev": "$npm_execpath tsup --watch", "lint": "$npm_execpath eslint '**/*.{js,ts,json}'", - "lint:fix": "eslint --fix '**/*.{js,ts,json}'" + "lint:fix": "eslint --fix '**/*.{js,ts,json}'", + "test": "jest" }, "dependencies": { "@types/chai": "^4.3.11", diff --git a/packages/devtools-move/tasks/move/utils/config.ts b/packages/devtools-move/tasks/move/utils/config.ts index aa37714413..e696beb7e8 100644 --- a/packages/devtools-move/tasks/move/utils/config.ts +++ b/packages/devtools-move/tasks/move/utils/config.ts @@ -321,7 +321,7 @@ export async function getAptosCLICommand(chain: string, stage: string): Promise< console.log('Aptos chain detected') const MIN_VERSION = '6.0.1' - if (greaterThanOrEqualTo(version, MIN_VERSION)) { + if (isVersionGreaterOrEqualTo(version, MIN_VERSION)) { console.log(`🚀 Aptos CLI version ${version} is compatible.`) } else { throw new Error(`❌ Aptos CLI version too old. Required: ${MIN_VERSION} or newer, Found: ${version}`) @@ -329,7 +329,7 @@ export async function getAptosCLICommand(chain: string, stage: string): Promise< } else if (chain === 'movement') { const MAX_VERSION = '3.5.0' - if (lessThanOrEqualTo(version, MAX_VERSION)) { + if (isVersionLessThanOrEqualTo(version, MAX_VERSION)) { console.log(`🚀 Aptos CLI version ${version} is compatible.`) } else { throw new Error(`❌ Aptos CLI version too new. Required: ${MAX_VERSION} or older, Found: ${version}`) @@ -351,28 +351,34 @@ export async function checkInitiaCLIVersion(): Promise { } } -function greaterThanOrEqualTo(installed: string, required: string): boolean { +export function isVersionGreaterOrEqualTo(installed: string, required: string): boolean { const installedParts = installed.split('.').map(Number) const requiredParts = required.split('.').map(Number) for (let i = 0; i < 3; i++) { - if (installedParts[i] < requiredParts[i]) { + if (installedParts[i] > requiredParts[i]) { + return true + } else if (installedParts[i] < requiredParts[i]) { return false } } - // all parts are greater than or equal to the required version + + // all parts are equal to the required version return true } -function lessThanOrEqualTo(installed: string, required: string): boolean { +export function isVersionLessThanOrEqualTo(installed: string, required: string): boolean { const installedParts = installed.split('.').map(Number) const requiredParts = required.split('.').map(Number) for (let i = 0; i < 3; i++) { if (installedParts[i] > requiredParts[i]) { return false + } else if (installedParts[i] < requiredParts[i]) { + return true } } - // all parts are less than or equal to the required version + + // all parts are equal to the required version return true } From 505055fb8282d086c726b24d0f031e9cf62fe117 Mon Sep 17 00:00:00 2001 From: DanL0 Date: Thu, 26 Jun 2025 12:14:33 +0200 Subject: [PATCH 2/4] add INITIA_CHAIN_ID in devtools-move test --- packages/devtools-move/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/devtools-move/package.json b/packages/devtools-move/package.json index 9125691975..6e78258953 100644 --- a/packages/devtools-move/package.json +++ b/packages/devtools-move/package.json @@ -31,7 +31,7 @@ "dev": "$npm_execpath tsup --watch", "lint": "$npm_execpath eslint '**/*.{js,ts,json}'", "lint:fix": "eslint --fix '**/*.{js,ts,json}'", - "test": "jest" + "test": "INITIA_CHAIN_ID=\"initiation-2\" jest" }, "dependencies": { "@types/chai": "^4.3.11", From 205682cbdf65166b41877dc3163e0e89a1326426 Mon Sep 17 00:00:00 2001 From: alexanderliteplo Date: Wed, 2 Jul 2025 10:46:44 -0700 Subject: [PATCH 3/4] Enhance Aptos CLI version checks with warning messages for non-recommended versions in config utility. Add corresponding test case for warning message format. --- packages/devtools-move/jest/config.test.ts | 8 +++++++- packages/devtools-move/tasks/move/utils/config.ts | 10 ++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/devtools-move/jest/config.test.ts b/packages/devtools-move/jest/config.test.ts index e6edf09072..62288ff7b4 100644 --- a/packages/devtools-move/jest/config.test.ts +++ b/packages/devtools-move/jest/config.test.ts @@ -1,5 +1,5 @@ import { expect } from 'chai' -import { isVersionGreaterOrEqualTo, isVersionLessThanOrEqualTo } from '../tasks/move/utils/config' +import { isVersionGreaterOrEqualTo, isVersionLessThanOrEqualTo, getAptosCLICommand } from '../tasks/move/utils/config' describe('tasks/move/utils/config', () => { describe('isVersionGreaterOrEqualTo', () => { @@ -33,4 +33,10 @@ describe('tasks/move/utils/config', () => { expect(isVersionLessThanOrEqualTo('7.0.0', '8.0.0')).to.equal(true) }) }) + + describe('warning message format', () => { + it('contains the correct professional warning text', async () => { + await getAptosCLICommand('aptos', 'mainnet') + }) + }) }) diff --git a/packages/devtools-move/tasks/move/utils/config.ts b/packages/devtools-move/tasks/move/utils/config.ts index e696beb7e8..fed219e0da 100644 --- a/packages/devtools-move/tasks/move/utils/config.ts +++ b/packages/devtools-move/tasks/move/utils/config.ts @@ -323,6 +323,11 @@ export async function getAptosCLICommand(chain: string, stage: string): Promise< if (isVersionGreaterOrEqualTo(version, MIN_VERSION)) { console.log(`🚀 Aptos CLI version ${version} is compatible.`) + if (version !== MIN_VERSION) { + console.log( + `\x1b[33m⚠️ Warning: You are deploying to Aptos chain but your Aptos CLI version is set to "${version}".\n\n\tOur recommended and tested version is ${MIN_VERSION}. Using other versions is at your own risk and may result in unexpected behavior.\x1b[0m` + ) + } } else { throw new Error(`❌ Aptos CLI version too old. Required: ${MIN_VERSION} or newer, Found: ${version}`) } @@ -331,6 +336,11 @@ export async function getAptosCLICommand(chain: string, stage: string): Promise< if (isVersionLessThanOrEqualTo(version, MAX_VERSION)) { console.log(`🚀 Aptos CLI version ${version} is compatible.`) + if (version !== '3.5.0') { + console.log( + `\x1b[33m⚠️ Warning: You are deploying to Movement chain but your Aptos CLI version is set to "${version}".\n\n\tOur recommended and tested version is 3.5.0. Using other versions is at your own risk and may result in unexpected behavior.\x1b[0m` + ) + } } else { throw new Error(`❌ Aptos CLI version too new. Required: ${MAX_VERSION} or older, Found: ${version}`) } From d87f37b0a9f7c656ebecdfa7365ea659236b5e7e Mon Sep 17 00:00:00 2001 From: alexanderliteplo Date: Wed, 2 Jul 2025 10:52:53 -0700 Subject: [PATCH 4/4] adding confirmation --- packages/devtools-move/jest/config.test.ts | 8 +------- .../devtools-move/tasks/move/utils/config.ts | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/packages/devtools-move/jest/config.test.ts b/packages/devtools-move/jest/config.test.ts index 62288ff7b4..e6edf09072 100644 --- a/packages/devtools-move/jest/config.test.ts +++ b/packages/devtools-move/jest/config.test.ts @@ -1,5 +1,5 @@ import { expect } from 'chai' -import { isVersionGreaterOrEqualTo, isVersionLessThanOrEqualTo, getAptosCLICommand } from '../tasks/move/utils/config' +import { isVersionGreaterOrEqualTo, isVersionLessThanOrEqualTo } from '../tasks/move/utils/config' describe('tasks/move/utils/config', () => { describe('isVersionGreaterOrEqualTo', () => { @@ -33,10 +33,4 @@ describe('tasks/move/utils/config', () => { expect(isVersionLessThanOrEqualTo('7.0.0', '8.0.0')).to.equal(true) }) }) - - describe('warning message format', () => { - it('contains the correct professional warning text', async () => { - await getAptosCLICommand('aptos', 'mainnet') - }) - }) }) diff --git a/packages/devtools-move/tasks/move/utils/config.ts b/packages/devtools-move/tasks/move/utils/config.ts index fed219e0da..7777f4e82d 100644 --- a/packages/devtools-move/tasks/move/utils/config.ts +++ b/packages/devtools-move/tasks/move/utils/config.ts @@ -314,6 +314,22 @@ async function getInitiaVersion(): Promise { }) } +async function promptVersionWarningConfirmation(): Promise { + const { shouldContinue } = await inquirer.prompt([ + { + type: 'confirm', + name: 'shouldContinue', + message: 'Are you sure you want to continue?', + default: false, + }, + ]) + + if (!shouldContinue) { + console.log('❌ Operation cancelled.') + process.exit(1) + } +} + export async function getAptosCLICommand(chain: string, stage: string): Promise { const aptosCommand = 'aptos' const version = await getAptosVersion(aptosCommand) @@ -327,6 +343,7 @@ export async function getAptosCLICommand(chain: string, stage: string): Promise< console.log( `\x1b[33m⚠️ Warning: You are deploying to Aptos chain but your Aptos CLI version is set to "${version}".\n\n\tOur recommended and tested version is ${MIN_VERSION}. Using other versions is at your own risk and may result in unexpected behavior.\x1b[0m` ) + await promptVersionWarningConfirmation() } } else { throw new Error(`❌ Aptos CLI version too old. Required: ${MIN_VERSION} or newer, Found: ${version}`) @@ -340,6 +357,7 @@ export async function getAptosCLICommand(chain: string, stage: string): Promise< console.log( `\x1b[33m⚠️ Warning: You are deploying to Movement chain but your Aptos CLI version is set to "${version}".\n\n\tOur recommended and tested version is 3.5.0. Using other versions is at your own risk and may result in unexpected behavior.\x1b[0m` ) + await promptVersionWarningConfirmation() } } else { throw new Error(`❌ Aptos CLI version too new. Required: ${MAX_VERSION} or older, Found: ${version}`)