Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/wet-colts-peel.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@layerzerolabs/devtools-move": patch
---

fix move CLI version checks
36 changes: 36 additions & 0 deletions packages/devtools-move/jest/config.test.ts
Original file line number Diff line number Diff line change
@@ -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)
})
})
})
3 changes: 2 additions & 1 deletion packages/devtools-move/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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": "INITIA_CHAIN_ID=\"initiation-2\" jest"
},
"dependencies": {
"@types/chai": "^4.3.11",
Expand Down
48 changes: 41 additions & 7 deletions packages/devtools-move/tasks/move/utils/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -314,23 +314,51 @@ async function getInitiaVersion(): Promise<string> {
})
}

async function promptVersionWarningConfirmation(): Promise<void> {
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<string> {
const aptosCommand = 'aptos'
const version = await getAptosVersion(aptosCommand)
if (chain === 'aptos') {
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.`)
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`
)
await promptVersionWarningConfirmation()
}
} else {
throw new Error(`❌ Aptos CLI version too old. Required: ${MIN_VERSION} or newer, Found: ${version}`)
}
} 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.`)
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`
)
await promptVersionWarningConfirmation()
}
} else {
throw new Error(`❌ Aptos CLI version too new. Required: ${MAX_VERSION} or older, Found: ${version}`)
}
Expand All @@ -351,28 +379,34 @@ export async function checkInitiaCLIVersion(): Promise<void> {
}
}

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
}