Skip to content

Commit 3da51a4

Browse files
authored
Merge branch 'version/mx/10' into moo/moo-2193/fix-geo-locationm
2 parents 9a44ac2 + 61eaf9f commit 3da51a4

7 files changed

Lines changed: 146 additions & 48 deletions

File tree

.github/actions/create-native-bundle/action.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,16 @@ runs:
2323
with:
2424
args: unzip -qq project.zip
2525
- name: "Rename extracted directory"
26-
run: mv Native-Mobile-Resources-mx-version-10 Native-Mobile-Resources-mx10
26+
run: mv Native-Mobile-Resources-mx-version-10 NMR-mx10
2727
shell: bash
2828
- name: "Extract deployment package"
2929
uses: montudor/action-zip@v1.0.0
3030
with:
31-
args: unzip -qq ${{ inputs.mda-file }} -d Native-Mobile-Resources-mx10/deployment
31+
args: unzip -qq ${{ inputs.mda-file }} -d NMR-mx10/deployment
3232
- name: "Create bundle for ${{ inputs.platform }}"
3333
run: |
3434
mkdir -p ${{ inputs.platform }}/assets
35-
cd Native-Mobile-Resources-mx10/deployment/native && \
35+
cd NMR-mx10/deployment/native && \
3636
/tmp/mxbuild/modeler/tools/node/linux-x64/node \
3737
/tmp/mxbuild/modeler/tools/node/node_modules/react-native/cli.js \
3838
bundle --verbose --platform ${{ inputs.platform }} --dev false \

.github/scripts/determine-widget-scope.sh

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ input_workspace="$2"
77
before_commit="$3"
88
current_commit="$4"
99

10+
# List of all native widgets
1011
# Dynamically discover all native widgets from the packages/pluggableWidgets directory
1112
# This ensures we don't miss any widgets when new ones are added
1213
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
@@ -43,39 +44,65 @@ if [ "$event_name" == "pull_request" ]; then
4344
selected_workspaces=$(echo $selected_workspaces | xargs)
4445

4546
# Build the final scope and widgets output
47+
# Note: widgets output is used for both BUILDING and the widget TEST MATRIX
48+
# When only JS actions change, widgets_to_test is empty (no widget tests needed)
49+
# but we still need to build all widgets for the test project
4650
if [[ -n "$selected_workspaces" ]] && [[ "$js_actions_changed" == "true" ]]; then
4751
# Both widgets and JS actions changed
4852
# Convert space-separated widget names to JSON array format
4953
widget_array=$(echo "$selected_workspaces" | sed 's/ /","/g')
5054
echo "scope=--all --include '$selected_workspaces mobile-resources-native nanoflow-actions-native'" >> $GITHUB_OUTPUT
51-
echo "widgets=[\"$widget_array\",\"mobile-resources-native\",\"nanoflow-actions-native\"]" >> $GITHUB_OUTPUT
55+
echo "widgets=[\"$widget_array\"]" >> $GITHUB_OUTPUT
56+
echo "widgets_to_test=[\"$widget_array\"]" >> $GITHUB_OUTPUT
57+
echo "js_actions_changed=true" >> $GITHUB_OUTPUT
5258
elif [[ -n "$selected_workspaces" ]] && [[ "$js_actions_changed" == "false" ]]; then
5359
# Only widgets changed
5460
widget_array=$(echo "$selected_workspaces" | sed 's/ /","/g')
5561
echo "scope=--all --include '$selected_workspaces'" >> $GITHUB_OUTPUT
5662
echo "widgets=[\"$widget_array\"]" >> $GITHUB_OUTPUT
63+
echo "widgets_to_test=[\"$widget_array\"]" >> $GITHUB_OUTPUT
64+
echo "js_actions_changed=false" >> $GITHUB_OUTPUT
5765
elif [[ -z "$selected_workspaces" ]] && [[ "$js_actions_changed" == "true" ]]; then
58-
# Only JS actions changed
59-
echo "scope=--all --include 'mobile-resources-native nanoflow-actions-native'" >> $GITHUB_OUTPUT
60-
echo "widgets=[\"mobile-resources-native\",\"nanoflow-actions-native\"]" >> $GITHUB_OUTPUT
66+
# Only JS actions changed - need to build ALL widgets because JS action tests
67+
# require the full test project with all widgets to function properly
68+
# But widget tests should NOT run (empty widgets_to_test)
69+
echo "scope=--all --include '*-native mobile-resources-native nanoflow-actions-native'" >> $GITHUB_OUTPUT
70+
echo "widgets=${all_widgets}" >> $GITHUB_OUTPUT
71+
echo "widgets_to_test=[]" >> $GITHUB_OUTPUT
72+
echo "js_actions_changed=true" >> $GITHUB_OUTPUT
6173
else
6274
# No specific changes detected in widgets or JS actions, run everything
6375
echo "scope=--all --include '*-native mobile-resources-native nanoflow-actions-native'" >> $GITHUB_OUTPUT
64-
echo "widgets=${all_widgets_and_js}" >> $GITHUB_OUTPUT
76+
echo "widgets=${all_widgets}" >> $GITHUB_OUTPUT
77+
echo "widgets_to_test=${all_widgets}" >> $GITHUB_OUTPUT
78+
echo "js_actions_changed=true" >> $GITHUB_OUTPUT
6579
fi
6680
else
6781
if [ -n "$input_workspace" ] && [ "$input_workspace" != "*-native" ] && [ "$input_workspace" != "js-actions" ]; then
82+
# Specific widget(s) selected
6883
selected_workspaces=$(echo "$input_workspace" | sed 's/,/ /g')
6984
echo "scope=--all --include '${selected_workspaces}'" >> $GITHUB_OUTPUT
7085
echo "widgets=[\"$input_workspace\"]" >> $GITHUB_OUTPUT
86+
echo "widgets_to_test=[\"$input_workspace\"]" >> $GITHUB_OUTPUT
87+
echo "js_actions_changed=false" >> $GITHUB_OUTPUT
7188
elif [ "$input_workspace" == "js-actions" ]; then
72-
echo "scope=--all --include 'mobile-resources-native nanoflow-actions-native'" >> $GITHUB_OUTPUT
73-
echo "widgets=[\"mobile-resources-native\",\"nanoflow-actions-native\"]" >> $GITHUB_OUTPUT
89+
# JS actions selected - need to build ALL widgets because JS action tests
90+
# require the full test project with all widgets to function properly
91+
# But widget tests should NOT run (empty widgets_to_test)
92+
echo "scope=--all --include '*-native mobile-resources-native nanoflow-actions-native'" >> $GITHUB_OUTPUT
93+
echo "widgets=${all_widgets}" >> $GITHUB_OUTPUT
94+
echo "widgets_to_test=[]" >> $GITHUB_OUTPUT
95+
echo "js_actions_changed=true" >> $GITHUB_OUTPUT
7496
else
97+
# All widgets (*-native) or default - run everything
7598
echo "scope=--all --include '*-native mobile-resources-native nanoflow-actions-native'" >> $GITHUB_OUTPUT
76-
echo "widgets=${all_widgets_and_js}" >> $GITHUB_OUTPUT
99+
echo "widgets=${all_widgets}" >> $GITHUB_OUTPUT
100+
echo "widgets_to_test=${all_widgets}" >> $GITHUB_OUTPUT
101+
echo "js_actions_changed=true" >> $GITHUB_OUTPUT
77102
fi
78103
fi
79104

80-
echo "Determined scope: $(cat $GITHUB_OUTPUT | grep scope= | cut -d= -f2)"
81-
echo "Widgets: $(cat $GITHUB_OUTPUT | grep widgets= | cut -d= -f2)"
105+
echo "Determined scope: $(cat $GITHUB_OUTPUT | grep 'scope=' | cut -d= -f2)"
106+
echo "Widgets to build: $(cat $GITHUB_OUTPUT | grep '^widgets=' | cut -d= -f2)"
107+
echo "Widgets to test: $(cat $GITHUB_OUTPUT | grep 'widgets_to_test=' | cut -d= -f2)"
108+
echo "JS actions changed: $(cat $GITHUB_OUTPUT | grep 'js_actions_changed=' | cut -d= -f2)"

.github/workflows/NativePipeline.yml

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ jobs:
8888
outputs:
8989
scope: ${{ steps.scope.outputs.scope }}
9090
widgets: ${{ steps.scope.outputs.widgets }}
91+
widgets_to_test: ${{ steps.scope.outputs.widgets_to_test }}
92+
js_actions_changed: ${{ steps.scope.outputs.js_actions_changed }}
9193
steps:
9294
- name: "Check out code"
9395
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
@@ -101,7 +103,9 @@ jobs:
101103
- name: "Debug Scope Output"
102104
run: |
103105
echo "Scope is: ${{ steps.scope.outputs.scope }}"
104-
echo "Widgets or js actions are: ${{ steps.scope.outputs.widgets }}"
106+
echo "Widgets to build: ${{ steps.scope.outputs.widgets }}"
107+
echo "Widgets to test: ${{ steps.scope.outputs.widgets_to_test }}"
108+
echo "JS actions changed: ${{ steps.scope.outputs.js_actions_changed }}"
105109
mendix-version:
106110
runs-on: ubuntu-24.04
107111
outputs:
@@ -214,23 +218,20 @@ jobs:
214218
run: yarn install --immutable
215219
- name: "Force rebuild resources"
216220
run: |
217-
# Build JS actions if needed
218-
if [ "${{ github.event.inputs.workspace }}" = "js-actions" ] || \
221+
# Build JS actions if needed (when js_actions_changed is true OR when workspace explicitly includes them)
222+
if [ "${{ needs.scope.outputs.js_actions_changed }}" = "true" ] || \
223+
[ "${{ github.event.inputs.workspace }}" = "js-actions" ] || \
219224
[ "${{ github.event.inputs.workspace }}" = "*-native" ] || \
220225
[ "${{ github.event_name }}" = "schedule" ]; then
221226
yarn workspace mobile-resources-native run build
222227
yarn workspace nanoflow-actions-native run build
223228
fi
224229
225-
# Build widgets if needed (any specific widget, *-native, or nightly)
226-
if [ "${{ github.event.inputs.workspace }}" != "js-actions" ] || \
227-
[ "${{ github.event.inputs.workspace }}" = "*-native" ] || \
228-
[ "${{ github.event_name }}" = "schedule" ]; then
230+
# Build widgets from scope
229231
widgets=$(echo '${{ needs.scope.outputs.widgets }}' | jq -r '.[]')
230232
for w in $widgets; do
231233
yarn workspace $w run build
232234
done
233-
fi
234235
- name: "Unit test"
235236
run: yarn workspaces foreach ${{ needs.scope.outputs.scope }} run test
236237
- name: "Upload JS actions resources artifact"
@@ -269,8 +270,8 @@ jobs:
269270
uses: montudor/action-zip@0852c26906e00f8a315c704958823928d8018b28 # v1.0.0
270271
with:
271272
args: unzip -qq project.zip -d .
272-
- name: "Rename extracted directory" # Doing this since mxbuild fails with - path too long
273-
run: mv Native-Mobile-Resources-mx-version-10 Native-Mobile-Resources-mx10
273+
- name: "Rename test project directory"
274+
run: mv Native-Mobile-Resources-mx-version-10 NMR-mx10
274275
- name: "Download resources artifact"
275276
uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7
276277
with:
@@ -284,28 +285,28 @@ jobs:
284285
run: |
285286
if compgen -G 'resources/pluggableWidgets/**/dist/*/*.mpk' > /dev/null; then
286287
for oldPath in resources/pluggableWidgets/**/dist/*/*.mpk; do
287-
newPath=Native-Mobile-Resources-mx10/widgets/$(basename $oldPath)
288+
newPath=NMR-mx10/widgets/$(basename $oldPath)
288289
mv -f $oldPath $newPath
289290
done
290-
mx update-widgets --loose-version-check Native-Mobile-Resources-mx10/NativeComponentsTestProject.mpr
291+
mx update-widgets --loose-version-check NMR-mx10/NativeComponentsTestProject.mpr
291292
fi
292293
- name: "Move mobile-resources"
293294
shell: bash
294295
run: |
295296
if compgen -G 'resources/jsActions/mobile-resources-native/dist/*' > /dev/null; then
296-
rm -rf Native-Mobile-Resources-mx10/javascriptsource/nativemobileresources/actions/node_modules
297-
mv -f resources/jsActions/mobile-resources-native/dist/* Native-Mobile-Resources-mx10/javascriptsource/nativemobileresources/actions/
297+
rm -rf NMR-mx10/javascriptsource/nativemobileresources/actions/node_modules
298+
mv -f resources/jsActions/mobile-resources-native/dist/* NMR-mx10/javascriptsource/nativemobileresources/actions/
298299
fi
299300
- name: "Move nanoflow-actions"
300301
shell: bash
301302
run: |
302303
if compgen -G 'resources/jsActions/nanoflow-actions-native/dist/*' > /dev/null; then
303-
rm -rf Native-Mobile-Resources-mx10/javascriptsource/nanoflowcommons/actions/node_modules
304-
mv -f resources/jsActions/nanoflow-actions-native/dist/* Native-Mobile-Resources-mx10/javascriptsource/nanoflowcommons/actions/
304+
rm -rf NMR-mx10/javascriptsource/nanoflowcommons/actions/node_modules
305+
mv -f resources/jsActions/nanoflow-actions-native/dist/* NMR-mx10/javascriptsource/nanoflowcommons/actions/
305306
fi
306307
- name: "Force rebuild test project"
307308
run: |
308-
mxbuild -o automation.mda --loose-version-check Native-Mobile-Resources-mx10/NativeComponentsTestProject.mpr
309+
mxbuild -o automation.mda --loose-version-check NMR-mx10/NativeComponentsTestProject.mpr
309310
- name: "Upload MDA"
310311
uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 #v4
311312
with:
@@ -490,14 +491,14 @@ jobs:
490491

491492
android-widget-tests:
492493
needs: [scope, mendix-version, project, android-app]
493-
# Run if project succeeds and either android-app succeeds OR we're using custom artifacts (android-app was skipped)
494-
if: ${{ (github.event.inputs.workspace != 'js-actions' || github.event_name == 'schedule') && always() && needs.project.result == 'success' && (needs.android-app.result == 'success' || needs.android-app.result == 'skipped') }}
494+
# Run if widgets need testing (widgets_to_test is not empty) and project succeeds
495+
if: ${{ needs.scope.outputs.widgets_to_test != '[]' && always() && needs.project.result == 'success' && (needs.android-app.result == 'success' || needs.android-app.result == 'skipped') }}
495496
runs-on: ubuntu-24.04
496497
timeout-minutes: 60
497498
strategy:
498499
max-parallel: 5
499500
matrix:
500-
widget: ${{ fromJson(needs.scope.outputs.widgets) }}
501+
widget: ${{ fromJson(needs.scope.outputs.widgets_to_test) }}
501502
fail-fast: false
502503
steps:
503504
- name: "Check out code"
@@ -566,14 +567,14 @@ jobs:
566567

567568
ios-widget-tests:
568569
needs: [scope, mendix-version, project, ios-app]
569-
# Run if project succeeds and either ios-app succeeds OR we're using custom artifacts (ios-app was skipped)
570-
if: ${{ (github.event.inputs.workspace != 'js-actions' || github.event_name == 'schedule') && always() && needs.project.result == 'success' && (needs.ios-app.result == 'success' || needs.ios-app.result == 'skipped') }}
570+
# Run if widgets need testing (widgets_to_test is not empty) and project succeeds
571+
if: ${{ needs.scope.outputs.widgets_to_test != '[]' && always() && needs.project.result == 'success' && (needs.ios-app.result == 'success' || needs.ios-app.result == 'skipped') }}
571572
runs-on: macos-15
572573
timeout-minutes: 60
573574
strategy:
574575
max-parallel: 5
575576
matrix:
576-
widget: ${{ fromJson(needs.scope.outputs.widgets) }}
577+
widget: ${{ fromJson(needs.scope.outputs.widgets_to_test) }}
577578
fail-fast: false
578579
steps:
579580
- name: "Force cleanup workspace"
@@ -662,8 +663,8 @@ jobs:
662663

663664
android-js-tests:
664665
needs: [scope, mendix-version, project, android-app]
665-
# Run if project succeeds and either android-app succeeds OR we're using custom artifacts (android-app was skipped)
666-
if: ${{ (github.event.inputs.workspace == '*-native' || github.event_name == 'schedule' || github.event.inputs.workspace == 'js-actions' || contains(needs.scope.outputs.widgets, 'mobile-resources-native') || contains(needs.scope.outputs.widgets, 'nanoflow-actions-native')) && always() && needs.project.result == 'success' && (needs.android-app.result == 'success' || needs.android-app.result == 'skipped') }}
666+
# Run if JS actions changed and project succeeds and either android-app succeeds OR we're using custom artifacts (android-app was skipped)
667+
if: ${{ needs.scope.outputs.js_actions_changed == 'true' && always() && needs.project.result == 'success' && (needs.android-app.result == 'success' || needs.android-app.result == 'skipped') }}
667668
runs-on: ubuntu-24.04
668669
timeout-minutes: 90
669670
steps:
@@ -732,8 +733,8 @@ jobs:
732733

733734
ios-js-tests:
734735
needs: [scope, mendix-version, project, ios-app]
735-
# Run if project succeeds and either ios-app succeeds OR we're using custom artifacts (ios-app was skipped)
736-
if: ${{ (github.event.inputs.workspace == '*-native' || github.event_name == 'schedule' || github.event.inputs.workspace == 'js-actions' || contains(needs.scope.outputs.widgets, 'mobile-resources-native') || contains(needs.scope.outputs.widgets, 'nanoflow-actions-native')) && always() && needs.project.result == 'success' && (needs.ios-app.result == 'success' || needs.ios-app.result == 'skipped') }}
736+
# Run if JS actions changed and project succeeds and either ios-app succeeds OR we're using custom artifacts (ios-app was skipped)
737+
if: ${{ needs.scope.outputs.js_actions_changed == 'true' && always() && needs.project.result == 'success' && (needs.ios-app.result == 'success' || needs.ios-app.result == 'skipped') }}
737738
runs-on: macos-15
738739
timeout-minutes: 90
739740
steps:
@@ -830,7 +831,7 @@ jobs:
830831

831832
- name: "Download Android screenshots"
832833
run: |
833-
widgets=$(echo '${{ needs.scope.outputs.widgets }}' | jq -r '.[]')
834+
widgets=$(echo '${{ needs.scope.outputs.widgets_to_test }}' | jq -r '.[]')
834835
mkdir -p images/actual/android/
835836
for widget in $widgets; do
836837
echo "Downloading android-screenshots-${widget}"
@@ -844,7 +845,7 @@ jobs:
844845
845846
- name: "Download iOS screenshots"
846847
run: |
847-
widgets=$(echo '${{ needs.scope.outputs.widgets }}' | jq -r '.[]')
848+
widgets=$(echo '${{ needs.scope.outputs.widgets_to_test }}' | jq -r '.[]')
848849
mkdir -p images/actual/ios/
849850
for widget in $widgets; do
850851
echo "Downloading ios-screenshots-${widget}"

configs/e2e/mendix-versions.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
"latest": "10.24.4.77222"
2+
"latest": "10.24.14.90436"
33
}

packages/jsActions/nanoflow-actions-native/CHANGELOG.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,13 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
88

99
- We fixed an issue with @react-native-community/geolocation where Android devices had difficulty obtaining precise location data.
1010

11+
### Fixed
12+
13+
- We've fixed a synchronization issue with Base64 images generated by the Signature widget.
14+
1115
## [5.2.0] Nanoflow Commons - 2026-1-23
1216

1317
- We've migrated from using @react-native-community/geolocation to react-native-permissions for handling location permissions.
14-
-
1518

1619
## [5.1.6] Nanoflow Commons - 2025-12-05
1720

packages/jsActions/nanoflow-actions-native/e2e/specs/maestro/Confirmation.yaml

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
appId: "${APP_ID}"
2+
platform: "${PLATFORM}"
23
---
34
- runFlow:
45
file: "../../../../../../maestro/Precondition.yaml"
@@ -14,8 +15,24 @@ appId: "${APP_ID}"
1415
id: "container1"
1516
- inputText: "11"
1617
- tapOn: "Show confirmation "
17-
- assertVisible: "Yolo"
18-
- assertVisible: "11"
18+
- runFlow:
19+
when:
20+
platform: android
21+
commands:
22+
- assertVisible: "Yolo"
23+
- assertVisible: "11"
24+
- runFlow:
25+
when:
26+
platform: ios
27+
commands:
28+
- assertVisible:
29+
text: ".*Yolo.*"
30+
optional: true
31+
- assertVisible:
32+
text: ".*11.*"
33+
optional: true
34+
- takeScreenshot:
35+
path: "maestro/images/actual/${PLATFORM}/confirmation"
1936
- tapOn: "OK"
2037
- assertVisible: "Confirmed!"
2138

0 commit comments

Comments
 (0)