Skip to content

Commit 9c032d1

Browse files
authored
chore: Merge 4.63.0 into master (#6516)
2 parents 1e73388 + f8bfa79 commit 9c032d1

File tree

222 files changed

+79142
-25634
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

222 files changed

+79142
-25634
lines changed

.circleci/config.yml

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ commands:
297297
- run: *update-fastlane-android
298298
- run:
299299
name: Fastlane Play Store Upload
300-
command: bundle exec fastlane android beta official:<< parameters.official >>
300+
command: bundle exec fastlane android beta_circle_ci official:<< parameters.official >>
301301
working_directory: android
302302

303303
# EXPERIMENTAL ONLY
@@ -314,7 +314,7 @@ commands:
314314
- run: *update-fastlane-android
315315
- run:
316316
name: Fastlane Play Store Upload
317-
command: bundle exec fastlane android internal_app_sharing
317+
command: bundle exec fastlane android internal_app_sharing_circle_ci
318318
working_directory: android
319319

320320
# EXPERIMENTAL ONLY
@@ -332,7 +332,7 @@ commands:
332332
- run: *update-fastlane-android
333333
- run:
334334
name: Fastlane Play Store Upload
335-
command: bundle exec fastlane android production
335+
command: bundle exec fastlane android production_circle_ci
336336
working_directory: android
337337

338338
upload-to-testflight:
@@ -354,7 +354,7 @@ commands:
354354
name: Fastlane Tesflight Upload
355355
command: |
356356
echo $APP_STORE_CONNECT_API_KEY_BASE64 | base64 --decode > ./fastlane/app_store_connect_api_key.p8
357-
bundle exec fastlane ios beta official:<< parameters.official >>
357+
bundle exec fastlane ios beta_circle_ci official:<< parameters.official >>
358358
working_directory: ios
359359
- save_cache: *save-gems-cache
360360

@@ -714,14 +714,4 @@ workflows:
714714
requires:
715715
- android-hold-google-play-beta-official
716716

717-
# Android Automatic Experimental
718-
- android-automatic-build-experimental:
719-
filters:
720-
branches:
721-
only:
722-
- develop
723-
requires:
724-
- lint-testunit
725-
- android-google-play-production-experimental:
726-
requires:
727-
- android-automatic-build-experimental
717+

.detoxrc.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ module.exports = {
1010
artifacts: {
1111
plugins: {
1212
screenshot: 'failing',
13-
video: 'all',
13+
video: 'failing',
1414
uiHierarchy: process.env.CI ? undefined : 'enabled'
1515
}
1616
},
Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
name: 'Build Android'
2+
description: 'Builds Android app AAB and uploads manifest and AAB'
3+
inputs:
4+
type:
5+
description: 'Build type: official or experimental'
6+
required: true
7+
VERSIONCODE:
8+
description: 'Version code for build'
9+
required: true
10+
BUGSNAG_KEY:
11+
description: 'Bugsnag API key for build'
12+
required: true
13+
KEYSTORE_EXPERIMENTAL_BASE64:
14+
description: 'Base64 encoded keystore for experimental build'
15+
required: true
16+
KEYSTORE_EXPERIMENTAL:
17+
description: 'Keystore file name for experimental build'
18+
required: true
19+
KEYSTORE_EXPERIMENTAL_PASSWORD:
20+
description: 'Keystore password for experimental build'
21+
required: true
22+
KEYSTORE_EXPERIMENTAL_ALIAS:
23+
description: 'Keystore alias for experimental build'
24+
required: true
25+
GOOGLE_SERVICES_ANDROID:
26+
description: 'Google services JSON for experimental build'
27+
required: true
28+
BUGSNAG_KEY_OFFICIAL:
29+
description: 'Bugsnag API key for official build'
30+
required: true
31+
KEYSTORE_OFFICIAL_BASE64:
32+
description: 'Base64 encoded keystore for official build'
33+
required: true
34+
KEYSTORE_OFFICIAL:
35+
description: 'Keystore file name for official build'
36+
required: true
37+
KEYSTORE_OFFICIAL_PASSWORD:
38+
description: 'Keystore password for official build'
39+
required: true
40+
KEYSTORE_OFFICIAL_ALIAS:
41+
description: 'Keystore alias for official build'
42+
required: true
43+
44+
runs:
45+
using: "composite"
46+
steps:
47+
- name: Set up Ruby and Bundler
48+
uses: ruby/setup-ruby@v1
49+
with:
50+
ruby-version: 2.7.7
51+
bundler-cache: true
52+
53+
- name: Install Fastlane
54+
working-directory: android
55+
run: |
56+
bundle install --path gems
57+
shell: bash
58+
59+
- name: Set up Gradle
60+
uses: gradle/actions/setup-gradle@v4
61+
62+
- name: Cache Gradle
63+
uses: actions/cache@v4
64+
with:
65+
path: |
66+
~/.gradle
67+
android/.gradle
68+
key: gradle-${{ hashFiles('android/**.gradle*', 'android/**/gradle-wrapper.properties') }}
69+
restore-keys: |
70+
gradle-
71+
72+
- name: Decode Keystore
73+
working-directory: android/app
74+
run: |
75+
if [[ "${{ inputs.type }}" == "experimental" ]]; then
76+
echo "${{ inputs.KEYSTORE_EXPERIMENTAL_BASE64 }}" | base64 -d > "${{ inputs.KEYSTORE_EXPERIMENTAL }}"
77+
fi
78+
if [[ "${{ inputs.type }}" == "official" ]]; then
79+
echo "${{ inputs.KEYSTORE_OFFICIAL_BASE64 }}" | base64 -d > "${{ inputs.KEYSTORE_OFFICIAL }}"
80+
fi
81+
shell: bash
82+
83+
- name: Set gradle.properties
84+
working-directory: android
85+
run: |
86+
echo "" > ./gradle.properties
87+
echo -e "org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=1g -Dfile.encoding=UTF-8" >> ./gradle.properties
88+
echo -e "android.useAndroidX=true" >> ./gradle.properties
89+
echo -e "android.enableJetifier=true" >> ./gradle.properties
90+
echo -e "reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64" >> ./gradle.properties
91+
echo -e "newArchEnabled=false" >> ./gradle.properties
92+
echo -e "hermesEnabled=true" >> ./gradle.properties
93+
echo -e "VERSIONCODE=${{ inputs.VERSIONCODE }}" >> ./gradle.properties
94+
95+
if [[ "${{ inputs.type }}" == "experimental" ]]; then
96+
echo -e "APPLICATION_ID=chat.rocket.reactnative" >> ./gradle.properties
97+
echo -e "BugsnagAPIKey=${{ inputs.BUGSNAG_KEY }}" >> ./gradle.properties
98+
echo -e "KEYSTORE=${{ inputs.KEYSTORE_EXPERIMENTAL }}" >> ./gradle.properties
99+
echo -e 'KEYSTORE_PASSWORD=${{ inputs.KEYSTORE_EXPERIMENTAL_PASSWORD }}' >> ./gradle.properties
100+
echo -e "KEY_ALIAS=${{ inputs.KEYSTORE_EXPERIMENTAL_ALIAS }}" >> ./gradle.properties
101+
echo -e 'KEY_PASSWORD=${{ inputs.KEYSTORE_EXPERIMENTAL_PASSWORD }}' >> ./gradle.properties
102+
fi
103+
104+
if [[ "${{ inputs.type }}" == "official" ]]; then
105+
echo -e "APPLICATION_ID=chat.rocket.android" >> ./gradle.properties
106+
echo -e "BugsnagAPIKey=${{ inputs.BUGSNAG_KEY_OFFICIAL }}" >> ./gradle.properties
107+
echo -e "KEYSTORE=${{ inputs.KEYSTORE_OFFICIAL }}" >> ./gradle.properties
108+
echo -e 'KEYSTORE_PASSWORD=${{ inputs.KEYSTORE_OFFICIAL_PASSWORD }}' >> ./gradle.properties
109+
echo -e "KEY_ALIAS=${{ inputs.KEYSTORE_OFFICIAL_ALIAS }}" >> ./gradle.properties
110+
echo -e 'KEY_PASSWORD=${{ inputs.KEYSTORE_OFFICIAL_PASSWORD }}' >> ./gradle.properties
111+
fi
112+
shell: bash
113+
114+
- name: Set Google Services JSON
115+
working-directory: android/app
116+
run: |
117+
if [[ "${{ inputs.GOOGLE_SERVICES_ANDROID }}" ]]; then
118+
echo "${{ inputs.GOOGLE_SERVICES_ANDROID }}" | base64 --decode > google-services.json
119+
fi
120+
shell: bash
121+
122+
- name: Build Android Release AAB
123+
working-directory: android
124+
run: |
125+
if [[ "${{ inputs.type }}" == "experimental" ]]; then
126+
./gradlew bundleExperimentalRelease
127+
fi
128+
if [[ "${{ inputs.type }}" == "official" ]]; then
129+
./gradlew bundleOfficialRelease
130+
fi
131+
shell: bash
132+
133+
- name: Upload sourcemaps/NDK symbols to Bugsnag
134+
run: |
135+
if [[ "${{ inputs.type }}" == "official" ]]; then
136+
yarn bugsnag:upload-android --variant officialRelease --app-manifest android/app/build/intermediates/merged_manifests/officialRelease/processOfficialReleaseManifest/AndroidManifest.xml
137+
yarn bugsnag-cli upload android-aab android/app/build/outputs/bundle/officialRelease/app-official-release.aab
138+
fi
139+
if [[ "${{ inputs.type }}" == "experimental" ]]; then
140+
yarn bugsnag:upload-android --variant experimentalRelease --app-manifest android/app/build/intermediates/merged_manifests/experimentalRelease/processExperimentalReleaseManifest/AndroidManifest.xml
141+
yarn bugsnag-cli upload android-aab android/app/build/outputs/bundle/experimentalRelease/app-experimental-release.aab
142+
fi
143+
shell: bash
144+
145+
- name: Upload Experimental AAB
146+
if: ${{ inputs.type == 'experimental' }}
147+
uses: actions/upload-artifact@v4
148+
with:
149+
name: android-aab-experimental
150+
path: android/app/build/outputs/bundle/experimentalRelease/app-experimental-release.aab
151+
152+
- name: Upload Official AAB
153+
if: ${{ inputs.type == 'official' }}
154+
uses: actions/upload-artifact@v4
155+
with:
156+
name: android-aab-official
157+
path: android/app/build/outputs/bundle/officialRelease/app-official-release.aab

.github/actions/build-ios/action.yml

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
name: 'Build iOS'
2+
description: 'Build iOS app'
3+
inputs:
4+
type:
5+
description: 'Build type: official or experimental'
6+
required: true
7+
VERSIONCODE:
8+
description: 'Version Code'
9+
required: true
10+
APP_STORE_CONNECT_API_KEY_BASE64:
11+
description: 'Base64 encoded App Store Connect API Key'
12+
required: true
13+
BUGSNAG_KEY:
14+
description: 'Bugsnag API Key'
15+
required: true
16+
MATCH_KEYCHAIN_NAME:
17+
description: 'Match Keychain Name'
18+
required: true
19+
MATCH_KEYCHAIN_PASSWORD:
20+
description: 'Match Keychain Password'
21+
required: true
22+
MATCH_PASSWORD:
23+
description: 'Match Password'
24+
required: true
25+
APP_STORE_CONNECT_API_KEY_ID:
26+
description: 'App Store Connect API Key ID'
27+
required: true
28+
APP_STORE_CONNECT_API_KEY_ISSUER_ID:
29+
description: 'App Store Connect API Key Issuer ID'
30+
required: true
31+
FASTLANE_REPO_PAT:
32+
description: 'Fastlane Repo PAT'
33+
required: true
34+
BUGSNAG_KEY_OFFICIAL:
35+
description: 'Bugsnag API Key Official'
36+
required: true
37+
38+
runs:
39+
using: "composite"
40+
steps:
41+
- name: Set up Xcode
42+
uses: maxim-lobanov/setup-xcode@v1
43+
with:
44+
xcode-version: '16.2'
45+
46+
- name: Set up Ruby
47+
uses: ruby/setup-ruby@v1
48+
with:
49+
ruby-version: 2.7.7
50+
bundler-cache: true
51+
52+
- name: Pod Cache
53+
uses: actions/cache@v4
54+
with:
55+
path: |
56+
~/.pods
57+
ios/Pods
58+
key: pods-v1-{{ checksum "ios/Podfile.lock" }}
59+
restore-keys: |
60+
pods-v1-
61+
62+
- name: pod install
63+
run: |
64+
yarn pod-install
65+
shell: bash
66+
67+
- name: Decode p8
68+
run: |
69+
echo ${{ inputs.APP_STORE_CONNECT_API_KEY_BASE64 }} | base64 --decode > ./ios/fastlane/app_store_connect_api_key.p8
70+
shell: bash
71+
72+
- name: Configure Info.plist and build version
73+
working-directory: ios
74+
run: |
75+
agvtool new-version -all ${{ inputs.VERSIONCODE }}
76+
if [[ ${{ inputs.type }} == "official" ]]; then
77+
/usr/libexec/PlistBuddy -c "Set :bugsnag:apiKey ${{ inputs.BUGSNAG_KEY_OFFICIAL }}" ./RocketChatRN/Info.plist
78+
/usr/libexec/PlistBuddy -c "Set :bugsnag:apiKey ${{ inputs.BUGSNAG_KEY_OFFICIAL }}" ./ShareRocketChatRN/Info.plist
79+
/usr/libexec/PlistBuddy -c "Set IS_OFFICIAL YES" ./RocketChatRN/Info.plist
80+
/usr/libexec/PlistBuddy -c "Set IS_OFFICIAL YES" ./ShareRocketChatRN/Info.plist
81+
/usr/libexec/PlistBuddy -c "Set IS_OFFICIAL YES" ./NotificationService/Info.plist
82+
fi
83+
if [[ ${{ inputs.type }} == "experimental" ]]; then
84+
/usr/libexec/PlistBuddy -c "Set :bugsnag:apiKey ${{ inputs.BUGSNAG_KEY }}" ./RocketChatRN/Info.plist
85+
/usr/libexec/PlistBuddy -c "Set :bugsnag:apiKey ${{ inputs.BUGSNAG_KEY }}" ./ShareRocketChatRN/Info.plist
86+
/usr/libexec/PlistBuddy -c "Set IS_OFFICIAL NO" ./RocketChatRN/Info.plist
87+
/usr/libexec/PlistBuddy -c "Set IS_OFFICIAL NO" ./ShareRocketChatRN/Info.plist
88+
/usr/libexec/PlistBuddy -c "Set IS_OFFICIAL NO" ./NotificationService/Info.plist
89+
fi
90+
shell: bash
91+
92+
- name: Build iOS app
93+
working-directory: ios
94+
run: |
95+
if [[ ${{ inputs.type }} == "official" ]]; then
96+
bundle exec fastlane ios build_official
97+
fi
98+
if [[ ${{ inputs.type }} == "experimental" ]]; then
99+
bundle exec fastlane ios build_experimental
100+
fi
101+
env:
102+
MATCH_KEYCHAIN_NAME: ${{ inputs.MATCH_KEYCHAIN_NAME }}
103+
MATCH_KEYCHAIN_PASSWORD: ${{ inputs.MATCH_KEYCHAIN_PASSWORD }}
104+
MATCH_PASSWORD: ${{ inputs.MATCH_PASSWORD }}
105+
APP_STORE_CONNECT_API_KEY_ID: ${{ inputs.APP_STORE_CONNECT_API_KEY_ID }}
106+
APP_STORE_CONNECT_API_KEY_ISSUER_ID: ${{ inputs.APP_STORE_CONNECT_API_KEY_ISSUER_ID }}
107+
FASTLANE_REPO_PAT: ${{ inputs.FASTLANE_REPO_PAT }}
108+
shell: bash
109+
110+
- name: Upload IPA artifact
111+
uses: actions/upload-artifact@v4
112+
if: ${{ inputs.type == 'experimental' }}
113+
with:
114+
name: ios-build-experimental
115+
path: ios/Rocket.Chat.ipa
116+
117+
- name: Upload IPA artifact
118+
uses: actions/upload-artifact@v4
119+
if: ${{ inputs.type == 'official' }}
120+
with:
121+
name: ios-build-official
122+
path: ios/Rocket.Chat.ipa
123+
124+
- name: Upload Rocket.Chat.app.dSYM.zip
125+
uses: actions/upload-artifact@v4
126+
if: ${{ inputs.type == 'experimental' }}
127+
with:
128+
name: ios-build-experimental-dSYM
129+
path: ios/Rocket.Chat.app.dSYM.zip
130+
131+
- name: Upload Rocket.Chat.app.dSYM.zip
132+
uses: actions/upload-artifact@v4
133+
if: ${{ inputs.type == 'official' }}
134+
with:
135+
name: ios-build-official-dSYM
136+
path: ios/Rocket.Chat.app.dSYM.zip
137+
138+
- name: Upload RocketChatRN/Info.plist
139+
uses: actions/upload-artifact@v4
140+
if: ${{ inputs.type == 'experimental' }}
141+
with:
142+
name: ios-build-experimental-info-plist
143+
path: ios/RocketChatRN/Info.plist
144+
145+
- name: Upload RocketChatRN/Info.plist
146+
uses: actions/upload-artifact@v4
147+
if: ${{ inputs.type == 'official' }}
148+
with:
149+
name: ios-build-official-info-plist
150+
path: ios/RocketChatRN/Info.plist

0 commit comments

Comments
 (0)