Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
67 commits
Select commit Hold shift + click to select a range
f913368
fix(intro-screen-native): scroll to correct initial slide on mount
UrazAkgultan Jul 3, 2025
01f415d
chore(intro-screen-native): bump version and update chagelog
UrazAkgultan Jul 3, 2025
a7950c7
test(intro-screen-native): fix test
UrazAkgultan Jul 4, 2025
8d38a54
test(intro-screen-native): fix test
UrazAkgultan Jul 8, 2025
3320bfa
test(intro-screen-native): fix test
UrazAkgultan Jul 8, 2025
6cbd6b1
fix(intro-screen-native): downgrade jest
UrazAkgultan Jul 9, 2025
681c7a1
[MOO-1887]: Fix initial slide positioning in IntroScreen widget (#281)
UrazAkgultan Jul 9, 2025
e0c7886
Revert "Moo 1800/update dependencies (#262)"
Jul 17, 2025
5f8b807
set minMxVersion
Jul 17, 2025
bfd9237
chore: changelog
Jul 17, 2025
f4c6a19
chore: upgrade react-native-video to 6.10.0
vadymv-mendix Jul 24, 2025
171e48c
fix(intro-screen-native): scroll to correct initial slide on mount
UrazAkgultan Jul 3, 2025
3c91f06
chore(intro-screen-native): bump version and update chagelog
UrazAkgultan Jul 3, 2025
a55ed39
test(intro-screen-native): fix test
UrazAkgultan Jul 4, 2025
43edccd
test(intro-screen-native): fix test
UrazAkgultan Jul 8, 2025
8256a9e
test(intro-screen-native): fix test
UrazAkgultan Jul 8, 2025
589717f
fix(intro-screen-native): downgrade jest
UrazAkgultan Jul 9, 2025
13687c6
fix: fix initial slide positioning in IntroScreen widget (#281)
UrazAkgultan Jul 9, 2025
ee34f0a
[MOO-1939] Use same react-native-video version as native template doe…
NikolaSimsic Jul 31, 2025
792a7c2
Update mx/10.24 branch (#292)
UrazAkgultan Jul 31, 2025
0d7c0a0
fix: the safe area view by changing layout of views
stelselim Aug 6, 2025
7e7df6c
fix: update docs
stelselim Aug 6, 2025
8d8c994
[MOO-1997] Fix Safe Area (#294)
NikolaSimsic Aug 6, 2025
2e70a95
Merge branch 'version/mx/10' of github.com:mendix/native-widgets into…
NikolaSimsic Aug 18, 2025
dbf8c70
Use API 35
NikolaSimsic Jul 17, 2025
1d6a767
Update all android screenshots
NikolaSimsic Jul 18, 2025
ad7fd39
Update screenshot
NikolaSimsic Jul 21, 2025
bb435fe
Cache tool setup to save resources
NikolaSimsic Jul 21, 2025
504bed5
Remove scripts/test/e2e-native.js
NikolaSimsic Jul 22, 2025
aba8a62
Use nick-fields@retry action for Start Runtime
NikolaSimsic Jul 22, 2025
817d194
Add caching into 'Start runtime'
NikolaSimsic Jul 22, 2025
da9dbba
Add wait time for Clipboard test before image
NikolaSimsic Jul 24, 2025
d0b799a
Add name for specific run
NikolaSimsic Jul 24, 2025
cb73793
Trigger on PR
NikolaSimsic Jul 24, 2025
f63254f
Refactor tooling setup
NikolaSimsic Jul 24, 2025
caeb871
Move not used code into separate action
NikolaSimsic Jul 24, 2025
54e1dae
Refactor archiving results
NikolaSimsic Jul 25, 2025
7dc7640
Resolve review findings
NikolaSimsic Aug 8, 2025
49aab17
Update screenshots
NikolaSimsic Aug 14, 2025
afd4f02
Avoid using iOS 26.0 in workflow
NikolaSimsic Aug 15, 2025
c6684e6
Update config
NikolaSimsic Aug 18, 2025
63e0e50
Use mx-version/10 instead of main
NikolaSimsic Aug 18, 2025
b70f0ec
Rename checked out folder
NikolaSimsic Aug 18, 2025
abe66cf
Remove duplicate download and use only mda
NikolaSimsic Aug 18, 2025
44456e3
Trigger on PR
NikolaSimsic Aug 19, 2025
0959ebc
Run at 4am
NikolaSimsic Aug 19, 2025
0cec854
fix: [MOO-2022] Fix location permission issue on iOS
YogendraShelke Aug 21, 2025
c750097
fix: lint
YogendraShelke Aug 22, 2025
6013930
[MOO-2010] Backport CI to version 10 (#300)
NikolaSimsic Aug 22, 2025
dd77bd4
Fix: [MOO-2022] location permission issue on iOS (#306)
YogendraShelke Aug 22, 2025
c0331fe
feat: use dispatcher to trigger pipeline on both branches
NikolaSimsic Aug 22, 2025
166388d
[MOO-2036] Trigger Native Widgets e2e on both branches as nightly - m…
NikolaSimsic Aug 22, 2025
6588020
Force cleanup workspace
NikolaSimsic Sep 2, 2025
3fd642d
feat: force clean workspace
NikolaSimsic Sep 2, 2025
45f92d9
feat: improve artifacts download from specific run
NikolaSimsic Sep 2, 2025
4ddc3c5
feat: fix git lock
NikolaSimsic Sep 2, 2025
1565372
feat: revert to state before fresh-checkout
NikolaSimsic Sep 2, 2025
034850a
feat: use ubuntu-22.04 and macos-15 everywhere
NikolaSimsic Sep 3, 2025
ffd7455
feat: resolve review finding
NikolaSimsic Sep 3, 2025
a001372
feat: include js actions when triggered from PR
NikolaSimsic Sep 3, 2025
9ff4fc9
[MOO-2052] Fix Git lock issue in ios test execution (#320)
NikolaSimsic Sep 4, 2025
43e0592
fix: use correct branch when cloning test project
Sep 9, 2025
49ee88a
chore(mobile-resources-native): update changelogs
MendixMobile Sep 9, 2025
45ad7fc
chore: bump nanoflow-commons
YogendraShelke Sep 10, 2025
debaeec
chore: bump nanoflow-commons (#332)
YogendraShelke Sep 10, 2025
5d63e4e
fix: native-widgets pipeline 10.24 (#331)
karahanharunn Sep 10, 2025
248dc56
chore(mobile-resources-native): update changelogs
MendixMobile Sep 10, 2025
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
40 changes: 40 additions & 0 deletions .github/actions/archive-test-results/action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
name: Archive Test Results
description: Archive runtime logs, screenshots, and artifacts from test runs
inputs:
platform:
description: Platform (android or ios)
required: true
test-type:
description: Test type (widget name or js-actions)
required: true
workspace-path:
description: Workspace path for artifacts
required: false
default: ${{ github.workspace }}

runs:
using: composite
steps:
- name: Archive runtime logs
uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 #v4
if: always()
with:
name: ${{ inputs.platform }}-runtime-logs-${{ inputs.test-type }}
path: log/*.log
if-no-files-found: ignore

- name: Archive test screenshots
uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 #v4
if: always()
with:
name: ${{ inputs.platform }}-screenshots-${{ inputs.test-type }}
path: ${{ inputs.workspace-path }}/maestro/images/actual/${{ inputs.platform }}/**/*.png
if-no-files-found: ignore

- name: Archive artifacts
uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 #v4
if: always()
with:
name: ${{ inputs.platform }}-artifacts-${{ inputs.test-type }}
path: packages/pluggableWidgets/**/artifacts/
if-no-files-found: ignore
9 changes: 6 additions & 3 deletions .github/actions/create-native-bundle/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +16,23 @@ runs:
apt install curl -y
shell: bash
- name: "Download test project"
run: curl -L -o project.zip https://github.com/mendix/Native-Mobile-Resources/archive/refs/heads/main.zip
run: curl -L -o project.zip https://github.com/mendix/Native-Mobile-Resources/archive/refs/heads/mx-version/10.zip
shell: bash
- name: "Extract test project"
uses: montudor/[email protected]
with:
args: unzip -qq project.zip
- name: "Rename extracted directory"
run: mv Native-Mobile-Resources-mx-version-10 Native-Mobile-Resources-mx10
shell: bash
- name: "Extract deployment package"
uses: montudor/[email protected]
with:
args: unzip -qq ${{ inputs.mda-file }} -d Native-Mobile-Resources-main/deployment
args: unzip -qq ${{ inputs.mda-file }} -d Native-Mobile-Resources-mx10/deployment
- name: "Create bundle for ${{ inputs.platform }}"
run: |
mkdir -p ${{ inputs.platform }}/assets
cd Native-Mobile-Resources-main/deployment/native && \
cd Native-Mobile-Resources-mx10/deployment/native && \
/tmp/mxbuild/modeler/tools/node/linux-x64/node \
/tmp/mxbuild/modeler/tools/node/node_modules/react-native/cli.js \
bundle --verbose --platform ${{ inputs.platform }} --dev false \
Expand Down
21 changes: 21 additions & 0 deletions .github/actions/setup-maestro/action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
name: "Setup Maestro"
description: "Install and cache Maestro"
runs:
using: "composite"
steps:
- name: "Cache Maestro"
uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf # v4
with:
path: $HOME/.local/bin/maestro
key: maestro-${{ runner.os }}-v1

- name: "Install Maestro"
shell: bash
run: |
if [ ! -f "$HOME/.local/bin/maestro/bin/maestro" ]; then
mkdir -p $HOME/.local/bin
curl -L "https://github.com/mobile-dev-inc/maestro/releases/latest/download/maestro.zip" -o maestro.zip
unzip maestro.zip -d $HOME/.local/bin
chmod +x $HOME/.local/bin/maestro/bin/maestro
fi
echo "$HOME/.local/bin" >> $GITHUB_PATH
30 changes: 30 additions & 0 deletions .github/actions/setup-node-with-cache/action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: 'Setup Node with Cached Dependencies'
description: 'Set up Node.js and install dependencies with caching'
runs:
using: 'composite'
steps:
- name: "Set up node"
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4
with:
node-version-file: .nvmrc

- name: "Cache yarn dependencies"
uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf # v4
with:
path: |
.yarn/cache
.yarn/unplugged
.yarn/install-state.gz
node_modules
key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock', '.yarnrc.yml') }}
restore-keys: |
${{ runner.os }}-yarn-

- name: "Install dependencies"
shell: bash
run: |
if [ ! -d "node_modules" ]; then
yarn install --immutable
else
echo "Dependencies already installed from cache"
fi
10 changes: 10 additions & 0 deletions .github/actions/setup-python/action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
name: "Setup Python Common"
description: "Setup Python and install dependencies"
runs:
using: "composite"
steps:
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
with:
python-version: '3.12'
- run: pip install PyYAML httplib2
shell: bash
42 changes: 42 additions & 0 deletions .github/actions/setup-tools/action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: "Setup Tools"
description: "Common setup for widget and js test jobs"
inputs:
mendix_version:
description: "Mendix version"
required: true
outputs:
java-path:
description: "Path to the installed Java"
value: ${{ steps.setup-java.outputs.path }}
runs:
using: "composite"
steps:
- name: "Setup Python and dependencies"
uses: ./.github/actions/setup-python

- name: "Setup Node and dependencies"
uses: ./.github/actions/setup-node-with-cache

- name: "Setup Java 21"
id: setup-java
uses: actions/setup-java@3a4f6e1af504cf6a31855fa899c6aa5355ba6c12 #v4
with:
distribution: "temurin"
java-version: "21"

- name: "Cache Mendix runtime"
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 #v4
with:
path: tmp/runtime.tar.gz
key: mendix-runtime-${{ inputs.mendix_version }}

- name: "Cache m2ee-tools"
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 #v4
with:
path: tmp/m2ee
key: m2ee-tools-v1

- name: "Install Maestro"
uses: ./.github/actions/setup-maestro


14 changes: 14 additions & 0 deletions .github/actions/setup-xcode-cli-tools/action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
name: "Setup Xcode CLI Tools"
description: "Ensure Xcode CLI tools are configured"
runs:
using: "composite"
steps:
- name: "Verify and set Xcode CLI tools"
shell: bash
run: |
if ! xcode-select --print-path; then
echo "Xcode CLI tools not set. Setting them now."
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
else
echo "Xcode CLI tools are already configured."
fi
51 changes: 0 additions & 51 deletions .github/actions/start-runtime/action.yml

This file was deleted.

76 changes: 76 additions & 0 deletions .github/actions/use-arficats-from-specific-run/action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
name: "Download Artifact from Specific Run"
description: "Download an artifact from a specific workflow run using GitHub CLI"
inputs:
artifact_name:
description: "Name of the artifact to download"
required: true
run_id:
description: "Workflow run ID"
required: true
output_dir:
description: "Directory to extract the artifact"
required: true
platform:
description: "Platform (android or ios)"
required: true
github_token:
description: "GitHub token for authentication"
required: true
runs:
using: "composite"
steps:
- name: "Install GitHub CLI"
shell: bash
run: |
if ! command -v gh &> /dev/null; then
if [[ "$RUNNER_OS" == "Linux" ]]; then
sudo apt update
sudo apt install -y gh
elif [[ "$RUNNER_OS" == "macOS" ]]; then
brew install gh
fi
fi
- name: "Authenticate GitHub CLI"
shell: bash
run: |
unset GITHUB_TOKEN
echo "${{ inputs.github_token }}" | gh auth login --with-token
- name: "Fetch artifact URL"
id: fetch-artifacts
shell: bash
run: |
echo "Fetching artifacts for run ID: ${{ inputs.run_id }}"
echo "Looking for artifact: ${{ inputs.artifact_name }}"
echo "Note: Use the full run ID from the URL (e.g., 17402124525), not the run number from the UI (e.g., #1269)"

# Check if the run exists
if ! gh api "repos/${{ github.repository }}/actions/runs/${{ inputs.run_id }}" > /dev/null 2>&1; then
echo "Error: Run ID ${{ inputs.run_id }} not found or not accessible"
echo "Make sure you're using the full run ID from the URL, not the run number displayed in the UI"
exit 1
fi

# Get the artifact URL
url=$(gh api "repos/${{ github.repository }}/actions/runs/${{ inputs.run_id }}/artifacts" --jq '.artifacts[] | select(.name == "${{ inputs.artifact_name }}") | .archive_download_url' 2>/dev/null || echo "")

if [ -z "$url" ]; then
echo "Error: Artifact '${{ inputs.artifact_name }}' not found in run ${{ inputs.run_id }}"
echo "Available artifacts in this run:"
gh api "repos/${{ github.repository }}/actions/runs/${{ inputs.run_id }}/artifacts" --jq '.artifacts[].name' 2>/dev/null || echo "No artifacts found or run not accessible"
exit 1
fi

echo "Found artifact URL: $url"
echo "artifacts_url=$url" >> $GITHUB_ENV
- name: "Download and extract artifact"
if: env.artifacts_url != ''
shell: bash
run: |
echo "Downloading artifact from: $artifacts_url"
curl -L -H "Authorization: token ${{ inputs.github_token }}" -o ${{ inputs.platform }}-app.zip "$artifacts_url"

echo "Extracting artifact to: ${{ inputs.output_dir }}"
unzip ${{ inputs.platform }}-app.zip -d ${{ inputs.output_dir }}

echo "Contents of ${{ inputs.output_dir }}:"
ls -la ${{ inputs.output_dir }}/
33 changes: 27 additions & 6 deletions .github/scripts/determine-widget-scope.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ current_commit="$4"
# List of all native widgets
all_widgets='["accordion-native","activity-indicator-native","animation-native","app-events-native","background-gradient-native","background-image-native","badge-native","bar-chart-native","barcode-scanner-native","bottom-sheet-native","carousel-native","color-picker-native","column-chart-native","feedback-native","floating-action-button-native","gallery-native","gallery-text-filter-native","image-native","intro-screen-native","line-chart-native","listview-swipe-native","maps-native","pie-doughnut-chart-native","popup-menu-native","progress-bar-native","progress-circle-native","qr-code-native","radio-buttons-native","range-slider-native","rating-native","repeater-native","safe-area-view-native","signature-native","slider-native","switch-native","toggle-buttons-native","video-player-native","web-view-native"]'

# Combined widgets and JS actions for default cases
all_widgets_and_js='["accordion-native","activity-indicator-native","animation-native","app-events-native","background-gradient-native","background-image-native","badge-native","bar-chart-native","barcode-scanner-native","bottom-sheet-native","carousel-native","color-picker-native","column-chart-native","feedback-native","floating-action-button-native","gallery-native","gallery-text-filter-native","image-native","intro-screen-native","line-chart-native","listview-swipe-native","maps-native","pie-doughnut-chart-native","popup-menu-native","progress-bar-native","progress-circle-native","qr-code-native","radio-buttons-native","range-slider-native","rating-native","repeater-native","safe-area-view-native","signature-native","slider-native","switch-native","toggle-buttons-native","video-player-native","web-view-native","mobile-resources-native","nanoflow-actions-native"]'

if [ "$event_name" == "pull_request" ]; then
if git cat-file -e "$before_commit" 2>/dev/null; then
changed_files=$(git diff --name-only "$before_commit" "$current_commit")
Expand All @@ -19,24 +22,42 @@ if [ "$event_name" == "pull_request" ]; then
fi

selected_workspaces=""
js_actions_changed=false

for file in $changed_files; do
if [[ $file == packages/pluggableWidgets/* ]]; then
widget=$(echo $file | cut -d'/' -f3)
if [[ ! $selected_workspaces =~ $widget ]]; then
selected_workspaces="$selected_workspaces $widget"
fi
elif [[ $file == packages/jsActions/mobile-resources-native/* ]] || [[ $file == packages/jsActions/nanoflow-actions-native/* ]]; then
js_actions_changed=true
fi
done

# Trim leading and trailing spaces from selected_workspaces
selected_workspaces=$(echo $selected_workspaces | xargs)

if [[ -n "$selected_workspaces" ]]; then
# Build the final scope and widgets output
if [[ -n "$selected_workspaces" ]] && [[ "$js_actions_changed" == "true" ]]; then
# Both widgets and JS actions changed
# Convert space-separated widget names to JSON array format
widget_array=$(echo "$selected_workspaces" | sed 's/ /","/g')
echo "scope=--all --include '$selected_workspaces mobile-resources-native nanoflow-actions-native'" >> $GITHUB_OUTPUT
echo "widgets=[\"$widget_array\",\"mobile-resources-native\",\"nanoflow-actions-native\"]" >> $GITHUB_OUTPUT
elif [[ -n "$selected_workspaces" ]] && [[ "$js_actions_changed" == "false" ]]; then
# Only widgets changed
widget_array=$(echo "$selected_workspaces" | sed 's/ /","/g')
echo "scope=--all --include '$selected_workspaces'" >> $GITHUB_OUTPUT
echo "widgets=[\"$selected_workspaces\"]" >> $GITHUB_OUTPUT
echo "widgets=[\"$widget_array\"]" >> $GITHUB_OUTPUT
elif [[ -z "$selected_workspaces" ]] && [[ "$js_actions_changed" == "true" ]]; then
# Only JS actions changed
echo "scope=--all --include 'mobile-resources-native nanoflow-actions-native'" >> $GITHUB_OUTPUT
echo "widgets=[\"mobile-resources-native\",\"nanoflow-actions-native\"]" >> $GITHUB_OUTPUT
else
echo "scope=--all --include '*-native'" >> $GITHUB_OUTPUT
echo "widgets=${all_widgets}" >> $GITHUB_OUTPUT
# No specific changes detected in widgets or JS actions, run everything
echo "scope=--all --include '*-native mobile-resources-native nanoflow-actions-native'" >> $GITHUB_OUTPUT
echo "widgets=${all_widgets_and_js}" >> $GITHUB_OUTPUT
fi
else
if [ -n "$input_workspace" ] && [ "$input_workspace" != "*-native" ] && [ "$input_workspace" != "js-actions" ]; then
Expand All @@ -47,8 +68,8 @@ else
echo "scope=--all --include 'mobile-resources-native nanoflow-actions-native'" >> $GITHUB_OUTPUT
echo "widgets=[\"mobile-resources-native\",\"nanoflow-actions-native\"]" >> $GITHUB_OUTPUT
else
echo "scope=--all --include '*-native'" >> $GITHUB_OUTPUT
echo "widgets=${all_widgets}" >> $GITHUB_OUTPUT
echo "scope=--all --include '*-native mobile-resources-native nanoflow-actions-native'" >> $GITHUB_OUTPUT
echo "widgets=${all_widgets_and_js}" >> $GITHUB_OUTPUT
fi
fi

Expand Down
Loading