diff --git a/.github/workflows/Build.yml b/.github/workflows/Build.yml index 22e740794..2974a232f 100644 --- a/.github/workflows/Build.yml +++ b/.github/workflows/Build.yml @@ -56,6 +56,6 @@ jobs: - name: "Installing dependencies" run: pnpm install - name: "Running build for development" - run: pnpm -r --filter=$(if [ "${{ steps.files.outputs.global_files }}" = "" ] && ${{ github.event_name == 'pull_request' }}; then echo '...[origin/main]'; else echo '**'; fi) run build + run: pnpm -r --filter='!native-widgets' --filter=$(if [ "${{ steps.files.outputs.global_files }}" = "" ] && ${{ github.event_name == 'pull_request' }}; then echo '...[origin/main]'; else echo '**'; fi) run build env: NODE_OPTIONS: --max_old_space_size=8192 diff --git a/packages/jsActions/mobile-resources-native/CHANGELOG.md b/packages/jsActions/mobile-resources-native/CHANGELOG.md index dfffbadbe..741f53e4b 100644 --- a/packages/jsActions/mobile-resources-native/CHANGELOG.md +++ b/packages/jsActions/mobile-resources-native/CHANGELOG.md @@ -6,6 +6,25 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ## [Unreleased] +## [11.4.1] Native Mobile Resources - 2026-3-14 + +## [2.0.2] GalleryTextFilter + +### Fixed + +- Fixed VoiceOver/TalkBack not announcing the clear text button. + +## [1.1.1] Switch + +### Added + +- Added the ability to change the position of the label in horizontal view from the left side of the switch to the right side. + +### Fixed + +- We fixed an issue where the validation message was rendered inside the view container of the switch, which caused incorrect styling of the switch. +- Fixed an issue where two overlapping tracks were seen in IOS, giving a inconsistent look to switch. + ## [11.4.0] Native Mobile Resources - 2026-3-5 - We fixed native file system module reference. diff --git a/packages/jsActions/mobile-resources-native/SiemensMendixNativeMobileResources__11.4.0__READMEOSS_2026-03-05__03-42-15.html b/packages/jsActions/mobile-resources-native/SiemensMendixNativeMobileResources__11.4.1__READMEOSS_2026-03-13__06-57-53.html similarity index 99% rename from packages/jsActions/mobile-resources-native/SiemensMendixNativeMobileResources__11.4.0__READMEOSS_2026-03-05__03-42-15.html rename to packages/jsActions/mobile-resources-native/SiemensMendixNativeMobileResources__11.4.1__READMEOSS_2026-03-13__06-57-53.html index 734466a12..c777820d1 100644 --- a/packages/jsActions/mobile-resources-native/SiemensMendixNativeMobileResources__11.4.0__READMEOSS_2026-03-05__03-42-15.html +++ b/packages/jsActions/mobile-resources-native/SiemensMendixNativeMobileResources__11.4.1__READMEOSS_2026-03-13__06-57-53.html @@ -141,7 +141,7 @@
Siemens Third-Party Software Disclosure Document

English / English
Note to Resellers: Please diff --git a/packages/jsActions/mobile-resources-native/package.json b/packages/jsActions/mobile-resources-native/package.json index 03b951f59..e71fb538c 100644 --- a/packages/jsActions/mobile-resources-native/package.json +++ b/packages/jsActions/mobile-resources-native/package.json @@ -1,7 +1,7 @@ { "name": "mobile-resources-native", "moduleName": "Native Mobile Resources", - "version": "11.4.0", + "version": "11.4.1", "license": "Apache-2.0", "copyright": "© Mendix Technology BV 2022. All rights reserved.", "repository": { @@ -9,6 +9,8 @@ "url": "https://github.com/mendix/native-widgets.git" }, "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.7.0", "marketplaceId": 109513 }, diff --git a/packages/jsActions/nanoflow-actions-native/package.json b/packages/jsActions/nanoflow-actions-native/package.json index 1daf925e1..172156e96 100644 --- a/packages/jsActions/nanoflow-actions-native/package.json +++ b/packages/jsActions/nanoflow-actions-native/package.json @@ -9,6 +9,8 @@ "url": "https://github.com/mendix/native-widgets.git" }, "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.7.0", "marketplaceId": 109515 }, diff --git a/packages/pluggableWidgets/gallery-text-filter-native/CHANGELOG.md b/packages/pluggableWidgets/gallery-text-filter-native/CHANGELOG.md index 4a7ced181..6f4026144 100644 --- a/packages/pluggableWidgets/gallery-text-filter-native/CHANGELOG.md +++ b/packages/pluggableWidgets/gallery-text-filter-native/CHANGELOG.md @@ -6,6 +6,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ## [Unreleased] +## [2.0.2] - 2026-3-14 + ### Fixed - Fixed VoiceOver/TalkBack not announcing the clear text button. diff --git a/packages/pluggableWidgets/switch-native/CHANGELOG.md b/packages/pluggableWidgets/switch-native/CHANGELOG.md index d9f4b9e93..b46672bf7 100644 --- a/packages/pluggableWidgets/switch-native/CHANGELOG.md +++ b/packages/pluggableWidgets/switch-native/CHANGELOG.md @@ -6,6 +6,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ## [Unreleased] +## [1.1.1] - 2026-3-14 + ### Added - Added the ability to change the position of the label in horizontal view from the left side of the switch to the right side. diff --git a/scripts/release/marketplaceRelease.js b/scripts/release/marketplaceRelease.js index 8657cd544..32db3cf2f 100644 --- a/scripts/release/marketplaceRelease.js +++ b/scripts/release/marketplaceRelease.js @@ -18,13 +18,12 @@ main().catch(e => { }); async function main() { - const pkgPath = join(process.cwd(), "package.json"); const { name, widgetName, version, marketplace: { minimumMXVersion, marketplaceId } - } = require(pkgPath); + } = packageMetadata(); console.log(`Starting release process for tag ${process.env.TAG}`); @@ -53,30 +52,47 @@ async function uploadModuleToAppStore(pkgName, marketplaceId, version, minimumMX async function getGithubAssetUrl() { console.log("Retrieving informations from Github Tag"); - const request = await fetch("GET", "https://api.github.com/repos/mendix/native-widgets/releases?per_page=10"); - const data = (await request) ?? []; - const releaseId = data.find(info => info.tag_name === process.env.TAG)?.id; - if (!releaseId) { - throw new Error(`Could not find release with tag ${process.env.TAG} on GitHub`); - } - const assetsRequest = await fetch( - "GET", - `https://api.github.com/repos/mendix/native-widgets/releases/${releaseId}/assets` - ); - const assetsData = (await assetsRequest) ?? []; - const downloadUrl = assetsData.find(asset => asset.name.endsWith(".mpk"))?.browser_download_url; - if (!downloadUrl) { - throw new Error(`Could not retrieve MPK url from GitHub release with tag ${process.env.TAG}`); + const tag = process.env.TAG; + // Use direct tag lookup endpoint instead of listing releases + // This avoids pagination issues and is more reliable + const maxRetries = 5; + const retryDelayMs = 5000; + + for (let attempt = 1; attempt <= maxRetries; attempt++) { + console.log(`Attempt ${attempt}/${maxRetries}: Fetching release for tag ${tag}`); + + const releaseData = await fetch( + "GET", + `https://api.github.com/repos/mendix/native-widgets/releases/tags/${tag}` + ); + + if (releaseData && releaseData.id) { + console.log(`Found release: ${releaseData.name} (id: ${releaseData.id})`); + const downloadUrl = releaseData.assets?.find(asset => asset.name.endsWith(".mpk"))?.browser_download_url; + if (!downloadUrl) { + throw new Error(`Could not retrieve MPK url from GitHub release with tag ${tag}`); + } + return downloadUrl; + } + + if (attempt < maxRetries) { + console.log(`Release not found yet, waiting ${retryDelayMs / 1000}s before retry...`); + await new Promise(resolve => setTimeout(resolve, retryDelayMs)); + } } - return downloadUrl; + + throw new Error(`Could not find release with tag ${tag} on GitHub after ${maxRetries} attempts`); } async function createDraft(marketplaceId, version, minimumMXVersion) { console.log(`Creating draft in the Mendix Marketplace...`); console.log(`ID: ${marketplaceId} - Version: ${version} - MXVersion: ${minimumMXVersion}`); const [major, minor, patch] = version.split("."); + const { marketplace } = packageMetadata(); try { const body = { + Name: marketplace.name, + Description: marketplace.description, VersionMajor: major ?? 1, VersionMinor: minor ?? 0, VersionPatch: patch ?? 0, @@ -143,6 +159,12 @@ async function fetch(method, url, body, additionalHeaders) { } else if (response.status === 503) { throw new Error(`Fetching Failed. "${url}" is unreachable (Code ${response.status}).`); } else if (response.status !== 200 && response.status !== 201) { + try { + const responseBody = await response.text(); + console.error(`Failed API response code: ${response.status} content: ${responseBody}`); + } catch { + console.error(`Failed to parse error response body.`); + } throw new Error(`Fetching Failed (Code ${response.status}). ${response.statusText}`); } else if (response.ok) { return response.json(); @@ -150,3 +172,9 @@ async function fetch(method, url, body, additionalHeaders) { throw new Error(`Fetching Failed (Code ${response.status}). ${response.statusText}`); } } + +function packageMetadata() { + const pkgPath = join(process.cwd(), "package.json"); + const { name, widgetName, version, marketplace } = require(pkgPath); + return { name, widgetName, version, marketplace }; +}