NCW iOS CI: Forgejo Actions on-demand simulator build pipeline #8
Open
mohlec
wants to merge 66 commits from
ncw/main into main
pull from: ncw/main
merge into: slash:main
slash:main
slash:fix/cmt-direct-dispatch-and-cleanup-endpoint
slash:mm-65820-archived-channel-handling
slash:build-beta-767
slash:MM-68292-receive-push-wipe
slash:rf-split/app-bugfixes-and-tests
slash:interactiveMessages
slash:build-release-766
slash:release-2.41
slash:ios-ring
slash:claude/mattermost-ios-session-registration-bnyJz
slash:ios-bg-task-db-lock
slash:MM-68767-zero-persistence
slash:rf-split/detox-tests
slash:rf-split/maestro
slash:interactive-dialog-legacy-remove
slash:build-beta-760
slash:build-release-759
slash:feature/datetime-complete
slash:migrate_RF_to_detox
slash:ci/cache-detox-app-builds
slash:build-release-758
slash:MM-68208_persistence
slash:ci-lpt-shard-distribution
slash:build-beta-757
slash:cursor/webhook-thread-highlight-fix-52c4
slash:MM-68208_rebased
slash:build-release-756
slash:build-beta-755
slash:build-release-754
slash:build-beta-753
slash:ringtone-asaad
slash:build-beta-752
slash:build-beta-751
slash:cursor-cloud-agent-setup
slash:SEC-9886-2
slash:cursor/mattermost-mobile-qa-agent-efde
slash:cursor/mattermost-mobile-qa-agent-d27c
slash:snyk-fix-988b65e65bf85453152d5b0276636d7d
slash:snyk-fix-19dbc4258aa0556d56be9276b60893c8
slash:coderabbitai/chat/dac883a
slash:MM-68208
slash:cursor/mattermost-mobile-qa-agent-e0c4
slash:build-beta-750
slash:MM-68219-show-placeholder-for-redacted-files
slash:build-release-749
slash:release-2.40
slash:mbe-phase-4
slash:chore-bump-main-1777627980
slash:build-release-747
slash:build-beta-746
slash:new-arch
slash:build-beta-745
slash:build-release-744
slash:cursor/fix-rnn-statusbar-destroy-5939
slash:SEC-9886
slash:cursor/env-setup-f815
slash:build-release-743
slash:release-2.39
slash:build-beta-742
slash:build-release-741
slash:build-release-740
slash:release-2.38
slash:snyk-fix-61e86c25fd9b9e15f5c53298f7440574
slash:snyk-fix-a1aaa772775a9c6c5888cda4a7cb08b0
slash:snyk-fix-6fba8da38d181984baaa321cc38fbe28
slash:MM-66467_andre
slash:cursor/e2e-tests-failure-9184
slash:chore-bump-main-1775207895
slash:build-release-738
slash:build-release-737
slash:snyk-fix-c2a70920cfe9225d93344ec125391730
slash:build-release-736
slash:MM-67525-bump-min-version
slash:snyk-fix-fe86bbb2ea53915e691acd623d91bfff
slash:feat/auto-dark-theme
slash:build-beta-735
slash:mm-67970
slash:build-release-734
slash:build-release-733
slash:snyk-fix-925a29efd1bf5bb71f731c323c245586
slash:ci/test-parallel-jest
slash:fix/remove-duplicate-npm-ci-in-test-coverage
slash:snyk-fix-0adbb8cf6cbee5a33f488b56e2dbe669
slash:snyk-fix-0ad8b113fece121698158f5992d9aaeb
slash:build-beta-732
slash:MM-67999_Intune_bad_access
slash:build-release-731
slash:mm-67947
slash:send-logs-observe
slash:snyk-fix-3ee677198a31e9561a1356fcbbbbe774
slash:MM-63211-thread-read-state
slash:build-beta-730
slash:test-errors
slash:ddil
slash:snyk-fix-19e4472bc68ed6738f091e7e36464e3e
slash:cursor/development-environment-setup-5b36
slash:build-beta-729
slash:snyk-fix-1b10ae617f6e53f210234e8e0ff50089
slash:release-2.37
slash:MM-67446-generate-key-packages
slash:dependabot/github_actions/dot-github/actions/prepare-android-build/github-actions-updates-3d3880b510
slash:build-release-728
slash:build-release-727
slash:cherry-pick-commit-83e5b60
slash:build-beta-726
slash:nasimoes-bucket-names
slash:nasimoes-buckets-names
slash:build-release-725
slash:claude/fix-intune-image-loading-iNGHS
slash:firebasekey
slash:snyk-fix-c68b979c649eb0780928263346b4ff03
slash:snyk-fix-1ed55dd449652897a83b7cf92d3b25bb
slash:MM-66934-register-e2ee-device
slash:MM-66935-device-list
slash:MM-67680
slash:build-beta-724
slash:dependabot/npm_and_yarn/detox/multi-f3131ff0cc
slash:snyk-fix-d6b0c9dcdaa3feead615322b7c5f2e8c
slash:MM-66935-db-changes
slash:build-release-723
slash:MM-66932-add-rust-openmls
slash:build-release-722
slash:build-release-721
slash:build-beta-720
slash:snyk-fix-297e16db3537057951e7cea9ce4a3c79
slash:dependabot/bundler/fastlane/faraday-1.10.5
slash:snyk-fix-28ec685968a572a633878056854664d7
slash:build-release-719
slash:build-beta-718
slash:build-release-717
slash:test-maestro-expo-router
slash:build-beta-716
slash:snyk-fix-110ee7c82cebd8ab816df103507c1f66
slash:build-release-715
slash:snyk-fix-b97259bf2744c67ca50fcf5ff554b6bd
slash:build-beta-714
slash:snyk-fix-70bfa9a9626fa5a4484e652b03400e8c
slash:build-release-713
slash:build-release-712
slash:release-2.36
slash:build-release-711
slash:dependabot/npm_and_yarn/detox/lodash-4.17.23
slash:build-release-710
slash:chore-bump-release-2.36-1768974302
slash:build-release-708
slash:build-release-ios-707
slash:build-release-707
slash:build-release-706
slash:fix/MM-67224-temp-simulator-build
slash:build-beta-705
slash:test-maestro-test-login-sharing
slash:chore-bump-main-1767949602
slash:dependabot/npm_and_yarn/detox/multi-95605b0008
slash:build-release-703
slash:build-release-702
slash:build-beta-701
slash:build-release-700
slash:chore-bump-main-1767344703
slash:chore-bump-main-1766739867
slash:long-description
slash:build-beta-697
slash:snyk-fix-4e77e13c32e44370ca3dc355fead8f67
slash:build-release-696
slash:dependabot/bundler/fastlane/aws-sdk-s3-1.208.0
slash:test-simulator-build
slash:fix/MM-66825-16kb-pagesize
slash:fix/MM-66825-16kb-pagesize-patch
slash:build-release-695
slash:build-beta-694
slash:build-release-693
slash:release-2.35
slash:release-2.35-network-client-upgrade
slash:dependabot/npm_and_yarn/detox/form-data-4.0.5
slash:MM-66633
slash:chore-bump-main-1764925431
slash:test-helpers-api-general
slash:dependabot/npm_and_yarn/detox/multi-0d56c1933b
slash:chore-bump-main-1764320625
slash:build-release-690
slash:MM-64341-rebase
slash:build-beta-689
slash:build-release-688
slash:fix-pending-dialog-sS4Hm
slash:feat/MM-65147-upgrade-react-native-0773-with-AppDelegate-swift
slash:e2e-test-fix-edited-post
slash:build-beta-687
slash:mm-65959-fips-about-mobile
slash:intune
slash:build-beta-686
slash:build-release-685
slash:release-2.34
slash:build-release-684
slash:build-beta-683
slash:chore-bump-main-1761296616
slash:checklist-rename
slash:feature/checklists
slash:build-release-681
slash:build-release-680
slash:release-2.33
slash:build-beta-679
slash:back_to_the_icon
slash:feat/MM-65121-low-connectivity-banner
slash:chore-bump-main-1760087014
slash:addCSRFHeader
slash:build-release-677
slash:build-beta-676
slash:snyk-fix-1b71c16d4c24b9a87a5222b12dbe0ed4
slash:build-release-675
slash:build-release-674
slash:dependabot/npm_and_yarn/multi-9c21807227
slash:chore-bump-main-1758877411
slash:feat/MM-65625-introduce-floating-banner
slash:add-manual-trigger-to-build-apps
slash:build-release-672
slash:build-beta-671
slash:snyk-fix-9587c6ad973a55f7a610e3efbe787d37
slash:snyk-fix-8896a6ece0d1a91279f7459c81331aa7
slash:playbooksUpdatePostDBChanges
slash:dependabot/bundler/rexml-3.4.2
slash:build-beta-670
slash:cleanup
slash:build-beta-669
slash:build-release-668
slash:release-2.32
slash:chore-bump-main-1756458205
slash:permalink-typescript-defination-e2e
slash:test-MM-63199-fake-files-to-trigger-coverage-drop
slash:build-beta-666
slash:build-release-665
slash:release-2.30
slash:build-release-664
slash:release-2.31
slash:revert-9058-automated-cherry-pick-of-mattermost-mobile-#9055-upstream-release-2.31
slash:build-beta-662
slash:build-beta-661
slash:automated-cherry-pick-of-mattermost-mobile-#9053-upstream-release-2.31
slash:build-beta-660
slash:build-release-659
slash:build-release-658
slash:build-release-657
slash:build-beta-656
slash:build-release-655
slash:build-beta-654
slash:build-beta-653
slash:build-beta-652
slash:ch_MM-64358
slash:build-beta-651
slash:chore-bump-main-1750410201
slash:notifyFailios
slash:release-2.29
slash:revert-8801-urgent-message-badge-color
slash:build-release-648
slash:test-pr
slash:urgent-message-badge-color-db
slash:build-beta-647
slash:snyk-fix-c44c26fd4946ba37a30bfa4771eb3654
slash:build-release-646
slash:feature_edit_attachment
slash:build-beta-645
slash:build-release-644
slash:release-2.28
slash:build-release-643
slash:chore-bump-main-1748595791
slash:build-beta-641
slash:build-release-640
slash:build-beta-639
slash:build-release-638
slash:MM-63935-abac-end-user-indicators-db-changes
slash:build-beta-637
slash:style/MM-64202-remove-className
slash:chore/MM-64202-update-expo-image
slash:video-names
slash:build-release-636
slash:chore-bump-main-1746176590
slash:snyk-fix-8b7470a418c481ec2990390dde04f8e1
slash:build-release-634
slash:build-release-633
slash:build-release-632
slash:release-2.27
slash:build-beta-631
slash:build-release-630
slash:build-release-629
slash:build-release-627
slash:build-beta-626
slash:build-release-625
slash:build-beta-624
slash:cpa_wmdb
slash:build-release-623
slash:channel_banner
slash:build-beta-622
slash:scheduled-post-using-teamid
slash:build-release-621
slash:build-release-620
slash:release-2.26
slash:MM-63431
slash:build-beta-619
slash:build-release-618
slash:build-release-617
slash:chore-bump-release-2.26-1742537061
slash:build-release-615
slash:scheduled_post_tabs
slash:build-beta-614
slash:ci/MM-63199-temp-code-coverage-tracking
slash:build-release-613
slash:2.25SendMessageLogs
slash:tnir-use-node-22
slash:chore-bump-main-1741338190
slash:fix-cross-team-scroll
slash:feature/permalink-preview
slash:build-beta-611
slash:build-release-610
slash:build-beta-609
slash:build-release-608
slash:build-release-607
slash:release-2.25
slash:ci/MM-63212-actions-cache-brownout_goose
slash:schedule_post_list
slash:build-release-606
slash:build-beta-605
slash:build-release-604
slash:build-release-603
slash:build-beta-602
slash:build-release-601
slash:build-release-600
slash:build-release-599
slash:fixRemovingAttachments
slash:build-beta-598
slash:build-release-597
slash:fix_mfa
slash:scheduled_post_error_message
slash:build-beta-596
slash:build-release-595
slash:build-beta-594
slash:build-release-593
slash:release-2.24
slash:mobile-draft-test
slash:snyk-fix-a36b4770a1d3f0d3fef3e0078e4609ae
slash:build-beta-592
slash:build-beta-591
slash:build-release-590
slash:test-improve-test-request-metrics-improvements
slash:build-beta-588
slash:build-release-587
slash:release-2.23
slash:build-release-586
slash:build-release-585
slash:build-beta-584
slash:build-beta-583
slash:build-release-582
slash:build-release-581
slash:build-release-580
slash:build-beta-579
slash:build-release-578
slash:build-beta-577
slash:build-release-576
slash:plugins
slash:build-beta-575
slash:snyk-fix-a611d7570b4b634f4c566d827a8e2fc2
slash:build-release-574
slash:release-2.22
slash:doNotMergeBuildOnlyAddingAudio
slash:build-release-573
slash:build-beta-572
slash:build-beta-571
slash:buildsFor7963
slash:build-release-570
slash:build-beta-569
slash:test-date-formatting-comparison
slash:build-release-568
slash:build-beta-567
slash:build-beta-566
slash:build-release-565
slash:release-2.21
slash:build-release-564
slash:release-2.20
slash:build-beta-563
slash:build-release-562
slash:custom-emoji-picker
slash:build-beta-561
slash:build-beta-560
slash:release-2.19
slash:test-automated-qa-low-bandwidth
slash:MM-57994
slash:release-2.18
slash:chore-bump-main-1720170233
slash:build-beta-ios-530
slash:release-2.17
slash:doNotMergeBuildOnly
slash:amyblais-patch-1
slash:build-beta-android-520
slash:release-2.16
slash:release-2.15
slash:release-2.15i18n
slash:release-2.14
slash:release-2.13
slash:release-2.12
slash:release-2.13-i18n
slash:MM-44122
slash:release-2.11
slash:release-2.10
slash:release-2.10-7613
slash:release-2.11-7613
slash:fix-weblate-merge-conflictsnov23
slash:fix-weblate-merge-conflicts
slash:test
slash:gm_conversion_on_reconnect_fix
slash:release-2.9
slash:build-pr-7639-9f249df
slash:release-2.8
slash:release-2.7
slash:release-2.6
slash:release-2.5
slash:release-2.4
slash:unsigned
slash:MM-48225
slash:chore/main/update-notice-txt-2023-05-01
slash:amyblais-patch-2
slash:chore/main/update-notice-txt-2023-04-24
slash:chore/main/update-notice-txt-2023-04-17
slash:release-2.3
slash:chore/main/update-notice-txt-2023-04-12
slash:release-2.2
slash:onboarding-text-update
slash:release-2.1
slash:release-2.0
slash:MM-47655-add-people-screen-main
slash:mm-44652-channel-notification-setting
slash:weblate-mattermost-mattermost-mobile-v2
slash:voice-message
slash:MM-49868_revert_openid_packaging_changes
slash:MM-45625-disalbe-search-until-term-added
slash:release-1.55
slash:MM-47428_thread_view
slash:MM-44517-commonmark
slash:MM-48420-virtualize-integration-selector-options
slash:app-framework-followup
slash:MM-47468-clear-DM-search-bar
slash:app-framework-followup-with-integration-selector
slash:v1
slash:MM-47655-add-people-screen
slash:modularize-members-new
slash:release-1.56
slash:ios-pr-sentry
slash:MM-48050-quote-modifier-cursor-position
slash:gitpod
slash:modularize-members
slash:voice-message-upload
slash:recent-searches-for-navigation
slash:release-1.54
slash:release-1.53
slash:hh_ship-commonmark-fork
slash:release-1.52
slash:release-1.51
slash:release-1.50
slash:release-1.49
slash:match
slash:release-1.48
slash:release-1.47
slash:release-1.46
slash:release-1.45
slash:release-1.44
slash:MM-30493U
slash:release-1.43
slash:release-1.42
slash:release-1.41
slash:release-1.40
slash:release-1.39
slash:release-1.38
slash:release-1.37
slash:release-1.36
slash:release-1.35
slash:release-1.34
slash:release-1.33
slash:release-1.32
slash:release-1.31
slash:release-1.30
slash:release-1.29
slash:release-1.28
slash:release-1.27
slash:release-1.26
slash:release-1.25
slash:release-1.24
slash:release-1.23
slash:release-1.22
slash:release-1.21
slash:release-1.20
slash:release-1.19
slash:release-1.18
slash:release-1.17
slash:release-1.16
slash:release-1.15
slash:release-1.15-backup
slash:release-1.14
slash:release-1.13
slash:release-1.12
slash:release-1.11
slash:release-1.10
slash:release-1.9
slash:release-1.8
slash:release-1.7
slash:release-1.6
slash:release-1.5
slash:release-1.4
slash:release-1.3
slash:release-1.2
slash:release-1.1
slash:release-1.0.1
No reviewers
Labels
Clear labels
No items
No labels
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set.
Reference
slash/slash-mobile!8
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "ncw/main"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Adds the NCW-specific iOS simulator build pipeline via Forgejo Actions, with full documentation.
What's included
.forgejo/workflows/build-ios.yml—workflow_dispatch-only CI job that runs on thencwmacmacOS runner (macoslabel). Builds a Debug simulator.app, zips it, and publishes it as a rolling pre-release tagios-sim-lateston the Forgejo releases page via the API.docs/ncw-ios-ci.md— Full setup and operations guide covering: triggering builds, downloading and loading artifacts into the simulator, runner machine details, initial runner install from source (no upstream macOS binary), launchd service config, SSH deploy key setup, PATH quirks, and troubleshooting runbook.CLAUDE.md— Added callout linking to the new CI doc alongside the existing iOS Simulator Setup guide.ios/Podfile.lock,package-lock.json— Updated to reflect local pod install state and correct 2.40.0 package version.Key design decisions
workflow_dispatch) — the Mac is not always on; no push/PR auto-buildsupload-artifact— the mirrored action atgit.ncwcom.com/actions/upload-artifactis only reachable from the git server's loopback, not from the Mac runner over the networkTest plan
ios-sim-latestrelease created with.zipasset attached.apploads in iOS Simulator via drag-and-dropbundleInDebug=true is a RN <=0.70 property — ignored by the new RNGP. Set debuggableVariants=[] in the react{} block so RNGP bundles JS for all variants including debug. Removes the Metro server requirement.- NtfyPushService: Android foreground service that maintains a persistent SSE connection to push.ncwcom.com and shows local notifications when messages arrive via ntfy. Survives app backgrounding/kill. - NtfyBootReceiver: restarts the service after device reboot - NtfyModule/NtfyPackage: RN bridge to get device UUID and start service - push_notifications.ts: on Android, registers ntfy:UUID token with Mattermost instead of FCM. Mattermost -> push proxy -> ntfy -> SSE -> device. - Token format: ntfy:{uuid} — Mattermost splits on : giving platform=ntfyBridge now forwards Mattermost 'clear' pushes as mm-clear tagged ntfy events with ch:{channel_id}. Notifications are posted with the channel id as tag and cancelled when the matching clear arrives. The foreground service notification (FG_NOTIF_ID) is never cancelled.Root cause: the Server screen's componentDidAppear listener calls NetworkManager.invalidateClient(url) to clean up if a user manually backs out of a connection attempt. But useDidMount also unconditionally calls PushNotifications.registerIfNeeded(), which on a fresh install triggers the native iOS 'Allow Notifications' permission prompt. That system alert causes a foreground/background transition which re-fires componentDidAppear on the still-mounted Server screen sitting underneath the Login screen - deleting the just-created network client while the user is still typing their password. By the time the user taps Log In, NetworkManager.getClient(serverUrl) throws '<url> client not found' since the client was invalidated out from under them. The request never reaches the network layer, matching confirmed server-side logs showing zero incoming login attempts. Fixed by tracking whether the user has already successfully connected (hasConnectedRef) and skipping the invalidation once they have - the original intent (clean up a stale client on manual back-navigation) is preserved, but a post-connect re-fire caused by an unrelated OS-level foreground event no longer tears down the active client. Reproduced 100% of the time on fresh TestFlight installs by two independent testers; root-caused via server-side log correlation (zero incoming requests despite correct credentials) plus code trace. Also fixes unrelated pre-existing TypeScript errors that were blocking the pre-commit hook: - app/init/push_notifications.ts: missing logWarning import - types/api/posts.d.ts: custom_jitsi missing from PostType union (per the documented pattern in CLAUDE.md for adding custom post types) - app/components/post_list/post/body/jitsi_meeting/index.tsx: use ensureString() instead of ?? '' for post.props fields, since NonNullable<unknown> resolves to {} not string - header.test.tsx: add missing required currentChannelId to base test propsRelative paths ('./Slash_Chat.ipa') were unreliable across different fastlane invocation contexts (Dir.pwd during action execution didn't always match the repo root the shell was cd'd into). Use File.expand_path relative to __dir__ (fastlane/) to derive an absolute path that works regardless of invocation cwd.View command line instructions
Manual merge helper
Use this merge commit message when completing the merge manually.
Checkout
From your project repository, check out a new branch and test the changes.Merge
Merge the changes and update on Forgejo.Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.