Skip to content

Commit 44b1789

Browse files
committed
merge main
2 parents bc26dfc + ddfa1e4 commit 44b1789

File tree

40 files changed

+459
-93
lines changed

40 files changed

+459
-93
lines changed

.github/actions/createOrUpdateStagingDeploy/index.js

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -195,14 +195,33 @@ const {execSync} = __nccwpck_require__(3129);
195195
* @returns {Array}
196196
*/
197197
function getPullRequestsMergedBetween(fromRef, toRef) {
198-
const command = `git log --format="%s" ${fromRef}...${toRef}`;
198+
const command = `git log --format="{[%B]}" ${fromRef}...${toRef}`;
199199
console.log('Getting pull requests merged between the following refs:', fromRef, toRef);
200200
console.log('Running command: ', command);
201201
const localGitLogs = execSync(command).toString();
202-
return _.map(
203-
[...localGitLogs.matchAll(/Merge pull request #(\d{1,6}) from (?!Expensify\/(?:master|main|version-))/g)],
202+
203+
// Parse the git log into an array of commit messages between the two refs
204+
const commitMessages = _.map(
205+
[...localGitLogs.matchAll(/{\[([\s\S]*?)\]}/gm)],
204206
match => match[1],
205207
);
208+
console.log(`A list of commits made between ${fromRef} and ${toRef}:\n${commitMessages}`);
209+
210+
// We need to find which commit messages correspond to merge commits and get PR numbers.
211+
// Additionally, we omit merge commits made while cherry picking using negative lookahead in the regexp.
212+
const pullRequestIDs = _.reduce(commitMessages, (mergedPRs, commitMessage) => {
213+
const mergeCommits = [
214+
...commitMessage.matchAll(/Merge pull request #(\d{1,6}) from (?!(?:Expensify\/(?:master|main|version-))|(?:([\s\S]*?)\(cherry picked from commit .*\)\s*))/gm),
215+
];
216+
217+
// Get the PR number of the first match (there should not be multiple matches in one commit message)
218+
if (_.size(mergeCommits)) {
219+
mergedPRs.push(mergeCommits[0][1]);
220+
}
221+
return mergedPRs;
222+
}, []);
223+
console.log(`A list of pull requests merged between ${fromRef} and ${toRef}:\n${pullRequestIDs}`);
224+
return pullRequestIDs;
206225
}
207226

208227
module.exports = {

.github/actions/getDeployPullRequestList/index.js

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,14 +117,33 @@ const {execSync} = __nccwpck_require__(3129);
117117
* @returns {Array}
118118
*/
119119
function getPullRequestsMergedBetween(fromRef, toRef) {
120-
const command = `git log --format="%s" ${fromRef}...${toRef}`;
120+
const command = `git log --format="{[%B]}" ${fromRef}...${toRef}`;
121121
console.log('Getting pull requests merged between the following refs:', fromRef, toRef);
122122
console.log('Running command: ', command);
123123
const localGitLogs = execSync(command).toString();
124-
return _.map(
125-
[...localGitLogs.matchAll(/Merge pull request #(\d{1,6}) from (?!Expensify\/(?:master|main|version-))/g)],
124+
125+
// Parse the git log into an array of commit messages between the two refs
126+
const commitMessages = _.map(
127+
[...localGitLogs.matchAll(/{\[([\s\S]*?)\]}/gm)],
126128
match => match[1],
127129
);
130+
console.log(`A list of commits made between ${fromRef} and ${toRef}:\n${commitMessages}`);
131+
132+
// We need to find which commit messages correspond to merge commits and get PR numbers.
133+
// Additionally, we omit merge commits made while cherry picking using negative lookahead in the regexp.
134+
const pullRequestIDs = _.reduce(commitMessages, (mergedPRs, commitMessage) => {
135+
const mergeCommits = [
136+
...commitMessage.matchAll(/Merge pull request #(\d{1,6}) from (?!(?:Expensify\/(?:master|main|version-))|(?:([\s\S]*?)\(cherry picked from commit .*\)\s*))/gm),
137+
];
138+
139+
// Get the PR number of the first match (there should not be multiple matches in one commit message)
140+
if (_.size(mergeCommits)) {
141+
mergedPRs.push(mergeCommits[0][1]);
142+
}
143+
return mergedPRs;
144+
}, []);
145+
console.log(`A list of pull requests merged between ${fromRef} and ${toRef}:\n${pullRequestIDs}`);
146+
return pullRequestIDs;
128147
}
129148

130149
module.exports = {

.github/libs/GitUtils.js

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,33 @@ const {execSync} = require('child_process');
99
* @returns {Array}
1010
*/
1111
function getPullRequestsMergedBetween(fromRef, toRef) {
12-
const command = `git log --format="%s" ${fromRef}...${toRef}`;
12+
const command = `git log --format="{[%B]}" ${fromRef}...${toRef}`;
1313
console.log('Getting pull requests merged between the following refs:', fromRef, toRef);
1414
console.log('Running command: ', command);
1515
const localGitLogs = execSync(command).toString();
16-
return _.map(
17-
[...localGitLogs.matchAll(/Merge pull request #(\d{1,6}) from (?!Expensify\/(?:master|main|version-))/g)],
16+
17+
// Parse the git log into an array of commit messages between the two refs
18+
const commitMessages = _.map(
19+
[...localGitLogs.matchAll(/{\[([\s\S]*?)\]}/gm)],
1820
match => match[1],
1921
);
22+
console.log(`A list of commits made between ${fromRef} and ${toRef}:\n${commitMessages}`);
23+
24+
// We need to find which commit messages correspond to merge commits and get PR numbers.
25+
// Additionally, we omit merge commits made while cherry picking using negative lookahead in the regexp.
26+
const pullRequestIDs = _.reduce(commitMessages, (mergedPRs, commitMessage) => {
27+
const mergeCommits = [
28+
...commitMessage.matchAll(/Merge pull request #(\d{1,6}) from (?!(?:Expensify\/(?:master|main|version-))|(?:([\s\S]*?)\(cherry picked from commit .*\)\s*))/gm),
29+
];
30+
31+
// Get the PR number of the first match (there should not be multiple matches in one commit message)
32+
if (_.size(mergeCommits)) {
33+
mergedPRs.push(mergeCommits[0][1]);
34+
}
35+
return mergedPRs;
36+
}, []);
37+
console.log(`A list of pull requests merged between ${fromRef} and ${toRef}:\n${pullRequestIDs}`);
38+
return pullRequestIDs;
2039
}
2140

2241
module.exports = {

android/app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,8 @@ android {
149149
minSdkVersion rootProject.ext.minSdkVersion
150150
targetSdkVersion rootProject.ext.targetSdkVersion
151151
multiDexEnabled rootProject.ext.multiDexEnabled
152-
versionCode 1001011608
153-
versionName "1.1.16-8"
152+
versionCode 1001011702
153+
versionName "1.1.17-2"
154154
}
155155
splits {
156156
abi {

android/app/src/main/java/com/expensify/chat/MainApplication.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import androidx.multidex.MultiDexApplication;
66
import com.facebook.react.PackageList;
77
import com.facebook.react.ReactApplication;
8+
import com.existfragger.rnimagesize.RNImageSizePackage;
89
import com.google.firebase.crashlytics.FirebaseCrashlytics;
910
import com.facebook.react.ReactInstanceManager;
1011
import com.facebook.react.ReactNativeHost;

android/settings.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
rootProject.name = 'NewExpensify'
2+
include ':react-native-image-size'
3+
project(':react-native-image-size').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-image-size/android')
24
include ':react-native-config'
35
project(':react-native-config').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-config/android')
46
apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)

ios/NewExpensify/Info.plist

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
<key>CFBundlePackageType</key>
1818
<string>APPL</string>
1919
<key>CFBundleShortVersionString</key>
20-
<string>1.1.16</string>
20+
<string>1.1.17</string>
2121
<key>CFBundleSignature</key>
2222
<string>????</string>
2323
<key>CFBundleURLTypes</key>
@@ -31,7 +31,7 @@
3131
</dict>
3232
</array>
3333
<key>CFBundleVersion</key>
34-
<string>1.1.16.8</string>
34+
<string>1.1.17.2</string>
3535
<key>ITSAppUsesNonExemptEncryption</key>
3636
<false/>
3737
<key>LSApplicationQueriesSchemes</key>

ios/NewExpensifyTests/Info.plist

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@
1515
<key>CFBundlePackageType</key>
1616
<string>BNDL</string>
1717
<key>CFBundleShortVersionString</key>
18-
<string>1.1.16</string>
18+
<string>1.1.17</string>
1919
<key>CFBundleSignature</key>
2020
<string>????</string>
2121
<key>CFBundleVersion</key>
22-
<string>1.1.16.8</string>
22+
<string>1.1.17.2</string>
2323
</dict>
2424
</plist>

ios/Podfile.lock

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,15 @@ PODS:
179179
- GoogleUtilities/Logger
180180
- hermes-engine (0.7.2)
181181
- libevent (2.1.12)
182+
- libwebp (1.2.1):
183+
- libwebp/demux (= 1.2.1)
184+
- libwebp/mux (= 1.2.1)
185+
- libwebp/webp (= 1.2.1)
186+
- libwebp/demux (1.2.1):
187+
- libwebp/webp
188+
- libwebp/mux (1.2.1):
189+
- libwebp/demux
190+
- libwebp/webp (1.2.1)
182191
- nanopb (2.30908.0):
183192
- nanopb/decode (= 2.30908.0)
184193
- nanopb/encode (= 2.30908.0)
@@ -509,6 +518,10 @@ PODS:
509518
- React-Core
510519
- RNDateTimePicker (3.5.2):
511520
- React-Core
521+
- RNFastImage (8.5.11):
522+
- React-Core
523+
- SDWebImage (~> 5.11.1)
524+
- SDWebImageWebPCoder (~> 0.8.4)
512525
- RNFBAnalytics (12.3.0):
513526
- Firebase/Analytics (= 8.4.0)
514527
- React-Core
@@ -563,6 +576,12 @@ PODS:
563576
- React-Core
564577
- RNSVG (12.1.0):
565578
- React
579+
- SDWebImage (5.11.1):
580+
- SDWebImage/Core (= 5.11.1)
581+
- SDWebImage/Core (5.11.1)
582+
- SDWebImageWebPCoder (0.8.4):
583+
- libwebp (~> 1.0)
584+
- SDWebImage/Core (~> 5.10)
566585
- urbanairship-react-native (11.0.2):
567586
- Airship (= 14.4.2)
568587
- React-Core
@@ -646,6 +665,7 @@ DEPENDENCIES:
646665
- "RNCMaskedView (from `../node_modules/@react-native-masked-view/masked-view`)"
647666
- "RNCPicker (from `../node_modules/@react-native-picker/picker`)"
648667
- "RNDateTimePicker (from `../node_modules/@react-native-community/datetimepicker`)"
668+
- RNFastImage (from `../node_modules/react-native-fast-image`)
649669
- "RNFBAnalytics (from `../node_modules/@react-native-firebase/analytics`)"
650670
- "RNFBApp (from `../node_modules/@react-native-firebase/app`)"
651671
- "RNFBCrashlytics (from `../node_modules/@react-native-firebase/crashlytics`)"
@@ -685,12 +705,15 @@ SPEC REPOS:
685705
- GoogleUtilities
686706
- hermes-engine
687707
- libevent
708+
- libwebp
688709
- nanopb
689710
- Onfido
690711
- OpenSSL-Universal
691712
- Plaid
692713
- PromisesObjC
693714
- Protobuf
715+
- SDWebImage
716+
- SDWebImageWebPCoder
694717
- YogaKit
695718

696719
EXTERNAL SOURCES:
@@ -794,6 +817,8 @@ EXTERNAL SOURCES:
794817
:path: "../node_modules/@react-native-picker/picker"
795818
RNDateTimePicker:
796819
:path: "../node_modules/@react-native-community/datetimepicker"
820+
RNFastImage:
821+
:path: "../node_modules/react-native-fast-image"
797822
RNFBAnalytics:
798823
:path: "../node_modules/@react-native-firebase/analytics"
799824
RNFBApp:
@@ -825,7 +850,7 @@ SPEC CHECKSUMS:
825850
CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99
826851
DoubleConversion: cf9b38bf0b2d048436d9a82ad2abe1404f11e7de
827852
FBLazyVector: 7b423f9e248eae65987838148c36eec1dbfe0b53
828-
FBReactNativeSpec: 1d564cbdef3e1546843d1f1ceb0e4463b7993e3a
853+
FBReactNativeSpec: 3930028959767285f556bd187e13b896deee31fe
829854
Firebase: 54cdc8bc9c9b3de54f43dab86e62f5a76b47034f
830855
FirebaseABTesting: c3e48ebf5e7e5c674c5a131c68e941d7921d83dc
831856
FirebaseAnalytics: 4751d6a49598a2b58da678cc07df696bcd809ab9
@@ -849,6 +874,7 @@ SPEC CHECKSUMS:
849874
GoogleUtilities: 3df19e3c24f7bbc291d8b5809aa6b0d41e642437
850875
hermes-engine: 7d97ba46a1e29bacf3e3c61ecb2804a5ddd02d4f
851876
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
877+
libwebp: 98a37e597e40bfdb4c911fc98f2c53d0b12d05fc
852878
nanopb: a0ba3315591a9ae0a16a309ee504766e90db0c96
853879
Onfido: 116a268e4cb8b767c15285e8071c2e8304673cdf
854880
onfido-react-native-sdk: b8f1b7cbe1adab6479d735275772390161630dcd
@@ -900,6 +926,7 @@ SPEC CHECKSUMS:
900926
RNCMaskedView: 138134c4d8a9421b4f2bf39055a79aa05c2d47b1
901927
RNCPicker: 6780c753e9e674065db90d9c965920516402579d
902928
RNDateTimePicker: c9911be59b1f8670b9f244b85af3a7c295e175ed
929+
RNFastImage: 1f2cab428712a4baaf78d6169eaec7f622556dd7
903930
RNFBAnalytics: 8ba84c2d31c64374d054c8621b998f25145ffddc
904931
RNFBApp: 64c90ab78b6010ed5c3ade026dfe5ff6442c21fd
905932
RNFBCrashlytics: 1de18b8cc36d9bcf86407c4a354399228cc84a61
@@ -910,6 +937,8 @@ SPEC CHECKSUMS:
910937
RNReanimated: 833ebd229b31e18a8933ebd0cd744a0f47d88c42
911938
RNScreens: e8e8dd0588b5da0ab57dcca76ab9b2d8987757e0
912939
RNSVG: ce9d996113475209013317e48b05c21ee988d42e
940+
SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d
941+
SDWebImageWebPCoder: f93010f3f6c031e2f8fb3081ca4ee6966c539815
913942
urbanairship-react-native: 60b4b4235838ff109a2639b639e2ef01d54ad455
914943
Yoga: a7de31c64fe738607e7a3803e3f591a4b1df7393
915944
YogaKit: f782866e155069a2cca2517aafea43200b01fd5a

package-lock.json

Lines changed: 16 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "new.expensify",
3-
"version": "1.1.16-8",
3+
"version": "1.1.17-2",
44
"author": "Expensify, Inc.",
55
"homepage": "https://new.expensify.com",
66
"description": "New Expensify is the next generation of Expensify: a reimagination of payments based atop a foundation of chat.",
@@ -79,11 +79,13 @@
7979
"react-native-collapsible": "^1.6.0",
8080
"react-native-config": "^1.4.0",
8181
"react-native-document-picker": "^5.1.0",
82+
"react-native-fast-image": "^8.5.11",
8283
"react-native-gesture-handler": "1.9.0",
8384
"react-native-google-places-autocomplete": "^2.4.1",
8485
"react-native-haptic-feedback": "^1.13.0",
8586
"react-native-image-pan-zoom": "^2.1.12",
8687
"react-native-image-picker": "^4.0.3",
88+
"react-native-image-size": "^1.1.3",
8789
"react-native-keyboard-spacer": "^0.4.1",
8890
"react-native-modal": "^11.10.0",
8991
"react-native-onyx": "git+https://github.com/Expensify/react-native-onyx.git#00bcc1520cf6cf7846d8aa40b5161bd1f407341f",
@@ -103,6 +105,7 @@
103105
"react-web-config": "^1.0.0",
104106
"rn-fetch-blob": "^0.12.0",
105107
"save": "^2.4.0",
108+
"smoothscroll-polyfill": "^0.4.4",
106109
"underscore": "^1.13.1",
107110
"urbanairship-react-native": "^11.0.2"
108111
},

src/App.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import OnyxProvider from './components/OnyxProvider';
1010
import HTMLEngineProvider from './components/HTMLEngineProvider';
1111
import ComposeProviders from './components/ComposeProviders';
1212
import SafeArea from './components/SafeArea';
13+
import initializeiOSSafariAutoScrollback from './libs/iOSSafariAutoScrollback';
1314

1415
LogBox.ignoreLogs([
1516
// Basically it means that if the app goes in the background and back to foreground on Android,
@@ -40,4 +41,6 @@ const App = () => (
4041

4142
App.displayName = 'App';
4243

44+
initializeiOSSafariAutoScrollback();
45+
4346
export default App;

src/CONST.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
const CLOUDFRONT_URL = 'https://d2k5nsl2zxldvw.cloudfront.net';
22
const NEW_EXPENSIFY_URL = 'https://new.expensify.com';
33
const PLATFORM_OS_MACOS = 'Mac OS';
4+
const ANDROID_PACKAGE_NAME = 'com.expensify.chat';
45

56
const CONST = {
7+
ANDROID_PACKAGE_NAME,
68
ANIMATED_TRANSITION: 300,
79

810
// 50 megabytes in bytes
911
API_MAX_ATTACHMENT_SIZE: 52428800,
1012
AVATAR_MAX_ATTACHMENT_SIZE: 3145728,
1113
APP_DOWNLOAD_LINKS: {
12-
ANDROID: 'https://play.google.com/store/apps/details?id=com.expensify.chat',
14+
ANDROID: `https://play.google.com/store/apps/details?id=${ANDROID_PACKAGE_NAME}`,
1315
IOS: 'https://apps.apple.com/us/app/expensify-cash/id1530278510',
1416
DESKTOP: `${NEW_EXPENSIFY_URL}/NewExpensify.dmg`,
1517
},
@@ -178,8 +180,8 @@ const CONST = {
178180
TERMS_URL: 'https://use.expensify.com/terms',
179181
PRIVACY_URL: 'https://use.expensify.com/privacy',
180182
LICENSES_URL: 'https://use.expensify.com/licenses',
181-
PLAY_STORE_URL: 'https://play.google.com/store/apps/details?id=com.expensify.chat&hl=en',
182-
ADD_SECONDARY_LOGIN_URL: 'settings?param={%22section%22:%22account%22}',
183+
PLAY_STORE_URL: `https://play.google.com/store/apps/details?id=${ANDROID_PACKAGE_NAME}&hl=en`,
184+
ADD_SECONDARY_LOGIN_URL: encodeURI('settings?param={"section":"account","openModal":"secondaryLogin"}'),
183185
MANAGE_CARDS_URL: 'domain_companycards',
184186
FEES_URL: 'https://use.expensify.com/fees',
185187
CFPB_PREPAID_URL: 'https://cfpb.gov/prepaid',

0 commit comments

Comments
 (0)