From 242972853e4efbe9dc459dea8957b1ab9dea0b8b Mon Sep 17 00:00:00 2001 From: Yogendra Shelke Date: Thu, 6 Aug 2026 09:12:58 +0530 Subject: [PATCH 1/2] chore: automate set module version --- .../mobile-resources-native/package.json | 4 +- .../nanoflow-actions-native/package.json | 4 +- scripts/release/build-mpk.ts | 2 + scripts/release/module-automation/commons.js | 5 ++ .../module-automation/moduleVersion.ts | 60 +++++++++++++++++++ 5 files changed, 71 insertions(+), 4 deletions(-) create mode 100644 scripts/release/module-automation/moduleVersion.ts diff --git a/packages/jsActions/mobile-resources-native/package.json b/packages/jsActions/mobile-resources-native/package.json index 5f9b30884..7ecdeb8e9 100644 --- a/packages/jsActions/mobile-resources-native/package.json +++ b/packages/jsActions/mobile-resources-native/package.json @@ -11,7 +11,7 @@ "marketplace": { "name": "Native Mobile Resources", "description": "Download this module to access a rich set of widgets and nanoflow actions created for native mobile, including authentication, network, platform, and more. A must-have for native mobile development!", - "minimumMXVersion": "11.12.0", + "minimumMXVersion": "11.12.3", "marketplaceId": 109513 }, "testProject": { @@ -51,4 +51,4 @@ "mendix": "11.8.0", "rimraf": "^6.1.2" } -} \ No newline at end of file +} diff --git a/packages/jsActions/nanoflow-actions-native/package.json b/packages/jsActions/nanoflow-actions-native/package.json index 5a1c3f852..88a14ff40 100644 --- a/packages/jsActions/nanoflow-actions-native/package.json +++ b/packages/jsActions/nanoflow-actions-native/package.json @@ -11,7 +11,7 @@ "marketplace": { "name": "Nanoflow Commons", "description": "The Nanoflow Commons module contains commonly used nanoflow actions that are usable across web, hybrid mobile, and native mobile apps, such as: client activities, geo location, local storage, & more.", - "minimumMXVersion": "11.12.0", + "minimumMXVersion": "11.12.3", "marketplaceId": 109515 }, "testProject": { @@ -37,4 +37,4 @@ "@mendix/pluggable-widgets-tools": "*", "mendix": "11.8.0" } -} \ No newline at end of file +} diff --git a/scripts/release/build-mpk.ts b/scripts/release/build-mpk.ts index 37c1f7d7a..afff1c9ef 100644 --- a/scripts/release/build-mpk.ts +++ b/scripts/release/build-mpk.ts @@ -126,6 +126,7 @@ async function createNativeMobileResourcesModule(): Promise { log(`Native widget folders found: ${nativeWidgetFolders.length}`); const moduleInfo = { ...(await getPackageInfo(moduleFolder)), + version: inputs.version, moduleNameInModeler: "NativeMobileResources", moduleFolderNameInModeler: "nativemobileresources" }; @@ -157,6 +158,7 @@ async function createNanoflowCommonsModule(): Promise { log(`Temp folder: ${tmpFolder}`); const moduleInfo = { ...(await getPackageInfo(moduleFolder)), + version: inputs.version, moduleNameInModeler: "NanoflowCommons", moduleFolderNameInModeler: "nanoflowcommons" }; diff --git a/scripts/release/module-automation/commons.js b/scripts/release/module-automation/commons.js index fe3eac13b..9b0836b22 100644 --- a/scripts/release/module-automation/commons.js +++ b/scripts/release/module-automation/commons.js @@ -219,6 +219,11 @@ async function cloneRepo(githubUrl, localFolder, branchName) { async function createMPK(tmpFolder, moduleInfo, excludeFilesRegExp) { console.log("Creating module MPK.."); + // Required lazily: createWidgetRelease.js loads this module under plain node, which + // cannot resolve a .ts file. Only the ts-node entry points reach createMPK. + const { setModuleVersion } = require("./moduleVersion"); + await setModuleVersion(tmpFolder, moduleInfo.moduleNameInModeler, moduleInfo.version, moduleInfo.minimumMXVersion); + await createModuleMpkInDocker( tmpFolder, moduleInfo.moduleNameInModeler, diff --git a/scripts/release/module-automation/moduleVersion.ts b/scripts/release/module-automation/moduleVersion.ts new file mode 100644 index 000000000..c99993701 --- /dev/null +++ b/scripts/release/module-automation/moduleVersion.ts @@ -0,0 +1,60 @@ +import { basename, dirname } from "path"; +import { exec } from "child_process"; +import { readdir } from "fs/promises"; +import { join } from "path"; + +type CommandResult = { + code: number | null; + output: string; +}; + +function runCommand(command: string, workingDirectory: string): Promise { + return new Promise(resolve => { + exec(command, { cwd: workingDirectory }, (error, stdout, stderr) => { + const output = `${stdout}${stderr}`.trim(); + resolve({ code: error ? (error as unknown as { code?: number }).code ?? 1 : 0, output }); + }); + }); +} + +function dockerMxCommand(mendixVersion: string, projectFile: string, mxArguments: string): string { + return ( + `docker run -t -v ${dirname(projectFile)}:/source --rm mxbuild:${mendixVersion} ` + + `bash -c "mx ${mxArguments.replace("{project}", `/source/${basename(projectFile)}`)}"` + ); +} + +async function findProjectFile(projectDir: string): Promise { + const entries = await readdir(projectDir, { withFileTypes: true }); + const projectFile = entries.find(entry => entry.isFile() && entry.name.endsWith(".mpr")); + if (!projectFile) { + throw new Error(`No .mpr file found in ${projectDir}`); + } + return join(projectDir, projectFile.name); +} + +export async function setModuleVersion( + projectDir: string, + moduleName: string, + version: string, + mendixVersion: string +): Promise { + if (!/^\d+\.\d+\.\d+$/.test(version ?? "")) { + throw new Error(`Cannot set module version: "${version}" is not a SemVer major.minor.patch version`); + } + const projectFile = await findProjectFile(projectDir); + + const command = dockerMxCommand( + mendixVersion, + projectFile, + `set-module-version {project} ${moduleName} ${version}` + ); + const { code, output } = await runCommand(command, dirname(projectFile)); + if (code === 0) { + console.log(`Set module "${moduleName}" version to ${version} via mx set-module-version.`); + } else { + throw new Error( + `Failed to set version ${version} of module "${moduleName}" in ${projectFile}. Error: ${output || ""}` + ); + } +} From 3f415668878fbab2cdfda92485b173a525165722 Mon Sep 17 00:00:00 2001 From: Yogendra Shelke Date: Fri, 7 Aug 2026 17:32:35 +0530 Subject: [PATCH 2/2] chore: update mendix version to 11.12.3 for CI --- configs/e2e/mendix-versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configs/e2e/mendix-versions.json b/configs/e2e/mendix-versions.json index 76a4c8cd2..f29ceecd6 100644 --- a/configs/e2e/mendix-versions.json +++ b/configs/e2e/mendix-versions.json @@ -1,3 +1,3 @@ { - "latest": "11.12.0" + "latest": "11.12.3" }