Skip to content

Commit 7c116d7

Browse files
resolve merge conflicts
2 parents aab15e5 + 7a42c6a commit 7c116d7

195 files changed

Lines changed: 1908 additions & 1482 deletions

File tree

Some content is hidden

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

.github/workflows/createNewVersion.yml

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,18 @@ jobs:
129129
./iOS/SmartScanExtension/Info.plist \
130130
./iOS/NotificationServiceExtension/Info.plist
131131
git commit -m "Update version to ${{ steps.bumpVersion.outputs.NEW_VERSION }}"
132-
git push origin main
132+
if ! git push origin main; then
133+
echo "Race condition! Mobile-Expensify main was updated while this workflow was running, so push failed. Fetching remote, rebasing, and retrying push once."
134+
git fetch origin main --depth=1
135+
if ! git rebase origin/main; then
136+
echo "::error:: Rebase failed while retrying Mobile-Expensify push"
137+
exit 1
138+
fi
139+
if ! git push origin main; then
140+
echo "::error:: Mobile-Expensify change failed to push after rebase"
141+
exit 1
142+
fi
143+
fi
133144
134145
- name: Commit new E/App version
135146
run: |
@@ -146,7 +157,18 @@ jobs:
146157
run: |
147158
git add Mobile-Expensify
148159
git commit -m "Update Mobile-Expensify submodule version to ${{ steps.bumpVersion.outputs.NEW_VERSION }}"
149-
git push origin main
160+
if ! git push origin main; then
161+
echo "Race condition! E/App main was updated while this workflow was running, so push failed. Fetching remote, rebasing, and retrying push once."
162+
git fetch origin main --depth=1
163+
if ! git rebase origin/main; then
164+
echo "::error:: Rebase failed while retrying Mobile-Expensify push"
165+
exit 1
166+
fi
167+
if ! git push origin main; then
168+
echo "::error:: Mobile-Expensify change failed to push after rebase"
169+
exit 1
170+
fi
171+
fi
150172
151173
- name: Announce failed workflow in Slack
152174
if: ${{ failure() }}

.github/workflows/deploy.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -599,7 +599,7 @@ jobs:
599599

600600
- name: 🚀 Create release 🚀
601601
run: |
602-
gh release create ${{ needs.prep.outputs.TAG }} ${{ github.ref == 'refs/heads/staging' && '--prerelease' }} \
602+
gh release create ${{ needs.prep.outputs.TAG }} ${{ github.ref == 'refs/heads/staging' && '--prerelease' || '' }} \
603603
--repo ${{ github.repository }} \
604604
--title ${{ needs.prep.outputs.TAG }} \
605605
--generate-notes \

Gemfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ ruby ">= 3.3.4"
66
gem "cocoapods", "= 1.15.2"
77
gem 'activesupport', '>= 6.1.7.5', '!= 7.1.0'
88
gem 'xcodeproj', '< 1.26.0'
9-
gem "fastlane", "~> 2", ">= 2.222.0"
9+
gem "fastlane", "~> 2", ">= 2.227.1"
1010
gem "xcpretty", "~> 0"
1111

1212

Gemfile.lock

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ GEM
8181
highline (~> 2.0.0)
8282
concurrent-ruby (1.3.3)
8383
declarative (0.0.20)
84-
digest-crc (0.6.5)
84+
digest-crc (0.7.0)
8585
rake (>= 12.0.0, < 14.0.0)
8686
domain_name (0.6.20240107)
8787
dotenv (2.8.1)
@@ -118,8 +118,8 @@ GEM
118118
faraday-retry (1.0.3)
119119
faraday_middleware (1.2.1)
120120
faraday (~> 1.0)
121-
fastimage (2.3.1)
122-
fastlane (2.225.0)
121+
fastimage (2.4.0)
122+
fastlane (2.227.1)
123123
CFPropertyList (>= 2.3, < 4.0.0)
124124
addressable (>= 2.8, < 3.0.0)
125125
artifactory (~> 3.0)
@@ -159,7 +159,7 @@ GEM
159159
tty-spinner (>= 0.8.0, < 1.0.0)
160160
word_wrap (~> 1.0.0)
161161
xcodeproj (>= 1.13.0, < 2.0.0)
162-
xcpretty (~> 0.3.0)
162+
xcpretty (~> 0.4.1)
163163
xcpretty-travis-formatter (>= 0.0.3, < 2.0.0)
164164
fastlane-plugin-aws_s3 (2.1.0)
165165
apktools (~> 0.7)
@@ -197,12 +197,12 @@ GEM
197197
google-apis-core (>= 0.11.0, < 2.a)
198198
google-apis-storage_v1 (0.31.0)
199199
google-apis-core (>= 0.11.0, < 2.a)
200-
google-cloud-core (1.7.1)
200+
google-cloud-core (1.8.0)
201201
google-cloud-env (>= 1.0, < 3.a)
202202
google-cloud-errors (~> 1.0)
203203
google-cloud-env (1.6.0)
204204
faraday (>= 0.17.3, < 3.0)
205-
google-cloud-errors (1.4.0)
205+
google-cloud-errors (1.5.0)
206206
google-cloud-storage (1.47.0)
207207
addressable (~> 2.8)
208208
digest-crc (~> 0.4)
@@ -218,7 +218,7 @@ GEM
218218
os (>= 0.9, < 2.0)
219219
signet (>= 0.16, < 2.a)
220220
highline (2.0.3)
221-
http-cookie (1.0.7)
221+
http-cookie (1.0.8)
222222
domain_name (~> 0.5)
223223
httpclient (2.8.3)
224224
i18n (1.14.5)
@@ -241,9 +241,9 @@ GEM
241241
naturally (2.2.1)
242242
netrc (0.11.0)
243243
nkf (0.2.0)
244-
optparse (0.5.0)
244+
optparse (0.6.0)
245245
os (1.1.4)
246-
plist (3.7.1)
246+
plist (3.7.2)
247247
public_suffix (4.0.7)
248248
rake (13.2.1)
249249
representable (3.2.0)
@@ -252,7 +252,7 @@ GEM
252252
uber (< 0.2.0)
253253
retriable (3.1.2)
254254
rexml (3.3.9)
255-
rouge (2.0.7)
255+
rouge (3.28.0)
256256
ruby-macho (2.5.1)
257257
ruby2_keywords (0.0.5)
258258
rubyzip (2.3.2)
@@ -288,8 +288,8 @@ GEM
288288
colored2 (~> 3.1)
289289
nanaimo (~> 0.3.0)
290290
rexml (>= 3.3.6, < 4.0)
291-
xcpretty (0.3.0)
292-
rouge (~> 2.0.7)
291+
xcpretty (0.4.1)
292+
rouge (~> 3.28.0)
293293
xcpretty-travis-formatter (1.0.1)
294294
xcpretty (~> 0.2, >= 0.0.7)
295295

@@ -303,7 +303,7 @@ PLATFORMS
303303
DEPENDENCIES
304304
activesupport (>= 6.1.7.5, != 7.1.0)
305305
cocoapods (= 1.15.2)
306-
fastlane (~> 2, >= 2.222.0)
306+
fastlane (~> 2, >= 2.227.1)
307307
fastlane-plugin-aws_s3
308308
fastlane-plugin-firebase_app_distribution
309309
xcodeproj (< 1.26.0)

Mobile-Expensify

README.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -458,20 +458,21 @@ You can only build HybridApp if you have been granted access to [`Mobile-Expensi
458458
## Getting started with HybridApp
459459
460460
1. If you haven't, please follow [these instructions](https://github.com/Expensify/App?tab=readme-ov-file#getting-started) to setup the NewDot local environment.
461-
2. Run `git submodule update --init --progress --depth 100` to download the `Mobile-Expensify` sourcecode.
462-
- If you have access to `Mobile-Expensify` and the command fails, add this to your `~/.gitconfig` file:
461+
2. In the root directory, run `git submodule init`
462+
3. Run `git submodule update`
463+
- If this takes too long, try `git submodule update --init --progress --depth 100` (Note: this makes it difficult to checkout remote branches in the submodule)
464+
- If you have access to `Mobile-Expensify` and the command fails, add this to your `~/.gitconfig` file:
463465

464466
```
465467
[url "https://github.com/"]
466468
insteadOf = ssh://git@github.com/
467469
```
468-
- To prevent `Mobile-Expensify` submodule commit hash changes from appearing in `git status`, configure Git to ignore them by adding this to your local `.git/config`:
470+
- To prevent `Mobile-Expensify` submodule commit hash changes from appearing in `git status`, configure Git to ignore them by adding this to your local `.git/config` (This ensures that submodule changes are ignored unless you deliberately update them):
469471
```
470472
[submodule "Mobile-Expensify"]
471473
ignore = all
472474
```
473-
This ensures that submodule changes are ignored unless you deliberately update them.
474-
3. Run `git config --global submodule.recurse true` in order to have the submodule updated when you pull App
475+
4. Run `git config --global submodule.recurse true` in order to have the submodule updated when you pull App
475476

476477

477478
> [!Note]
@@ -939,4 +940,4 @@ Onyx derived values are special Onyx keys which contain values derived from othe
939940
940941
3. **Document derived values**
941942
- Explain the purpose and dependencies
942-
- Document any special cases or performance considerations
943+
- Document any special cases or performance considerations

android/app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,8 @@ android {
114114
minSdkVersion rootProject.ext.minSdkVersion
115115
targetSdkVersion rootProject.ext.targetSdkVersion
116116
multiDexEnabled rootProject.ext.multiDexEnabled
117-
versionCode 1009012903
118-
versionName "9.1.29-3"
117+
versionCode 1009013000
118+
versionName "9.1.30-0"
119119
// Supported language variants must be declared here to avoid from being removed during the compilation.
120120
// This also helps us to not include unnecessary language variants in the APK.
121121
resConfigs "en", "es"

desktop/main.ts

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
/* eslint-disable no-console */
21
import {exec} from 'child_process';
32
import {app, BrowserWindow, clipboard, dialog, ipcMain, Menu, shell} from 'electron';
43
import type {BaseWindow, BrowserView, MenuItem, MenuItemConstructorOptions, WebContents, WebviewTag} from 'electron';
@@ -138,119 +137,92 @@ const preferredLocale: Locale = CONST.LOCALES.DEFAULT;
138137
const appProtocol = CONST.DEEPLINK_BASE_URL.replace('://', '');
139138

140139
const quitAndInstallWithUpdate = () => {
141-
console.debug('[dev] Attempting to quit and install update');
142140
if (!downloadedVersion) {
143-
console.debug('[dev] No downloaded version available, skipping quit and install');
144141
return;
145142
}
146-
console.debug(`[dev] Setting hasUpdate flag and installing version: ${downloadedVersion}`);
147143
hasUpdate = true;
148144
autoUpdater.quitAndInstall();
149145
};
150146

151147
const verifyAndInstallLatestVersion = (browserWindow: BrowserWindow): void => {
152-
console.debug('[dev] Starting verifyAndInstallLatestVersion process');
153-
154148
if (!browserWindow || browserWindow.isDestroyed()) {
155-
console.debug('[dev] Browser window is invalid or destroyed, skipping update check');
156149
return;
157150
}
158151

159152
// Prevent multiple simultaneous updates
160153
if (isUpdateInProgress) {
161-
console.debug('[dev] Update already in progress, skipping new update check');
162154
return;
163155
}
164156

165-
console.debug('[dev] Setting isUpdateInProgress flag and starting update check');
166157
isUpdateInProgress = true;
167158

168159
autoUpdater
169160
.checkForUpdates()
170161
.then((result) => {
171-
console.debug('[dev] Update check completed', result?.updateInfo);
172-
173162
if (!browserWindow || browserWindow.isDestroyed()) {
174-
console.debug('[dev] Browser window became invalid during update check, aborting');
175163
isUpdateInProgress = false;
176164
return;
177165
}
178166

179167
if (result?.updateInfo.version === downloadedVersion) {
180-
console.debug(`[dev] Found matching version ${downloadedVersion}, proceeding with installation`);
181168
return quitAndInstallWithUpdate();
182169
}
183170

184-
console.debug('[dev] New version found, starting download');
185171
return autoUpdater.downloadUpdate().then(() => {
186-
console.debug('[dev] Download completed, proceeding with installation');
187172
return quitAndInstallWithUpdate();
188173
});
189174
})
190175
.catch((error) => {
191-
console.debug('[dev] Error during update check or download:', error);
192176
log.error('Error during update check or download:', error);
193177
})
194178
.finally(() => {
195-
console.debug('[dev] Update process completed, resetting isUpdateInProgress flag');
196179
isUpdateInProgress = false;
197180
});
198181
};
199182

200183
/** Menu Item callback to trigger an update check */
201184
const manuallyCheckForUpdates = (menuItem?: MenuItem, browserWindow?: BaseWindow) => {
202-
console.debug('[dev] Starting manual update check process');
203-
204185
// Prevent multiple simultaneous updates
205186
if (isUpdateInProgress) {
206-
console.debug('[dev] Update already in progress, skipping manual update check');
207187
return;
208188
}
209189

210190
if (menuItem) {
211-
console.debug('[dev] Disabling menu item during update check');
212191
// Disable item until the check (and download) is complete
213192
// eslint-disable-next-line no-param-reassign -- menu item flags like enabled or visible can be dynamically toggled by mutating the object
214193
menuItem.enabled = false;
215194
}
216195

217-
console.debug('[dev] Setting isUpdateInProgress flag and starting manual update check');
218196
isUpdateInProgress = true;
219197

220198
autoUpdater
221199
.checkForUpdates()
222200
.catch((error: unknown) => {
223-
console.debug('[dev] Error during manual update check:', error);
224201
isSilentUpdating = false;
225202
return {error};
226203
})
227204
.then((result) => {
228-
console.debug('[dev] Manual update check completed', result);
229205
const downloadPromise = result && 'downloadPromise' in result ? result.downloadPromise : undefined;
230206

231207
if (!browserWindow) {
232-
console.debug('[dev] No browser window available, skipping update dialogs');
233208
return;
234209
}
235210

236211
if (downloadPromise) {
237-
console.debug('[dev] Update available, showing info dialog');
238212
dialog.showMessageBox(browserWindow, {
239213
type: 'info',
240214
message: translate(preferredLocale, 'checkForUpdatesModal.available.title'),
241215
detail: translate(preferredLocale, 'checkForUpdatesModal.available.message', {isSilentUpdating}),
242216
buttons: [translate(preferredLocale, 'checkForUpdatesModal.available.soundsGood')],
243217
});
244218
} else if (result && 'error' in result && result.error) {
245-
console.debug('[dev] Update check failed, showing error dialog');
246219
dialog.showMessageBox(browserWindow, {
247220
type: 'error',
248221
message: translate(preferredLocale, 'checkForUpdatesModal.error.title'),
249222
detail: translate(preferredLocale, 'checkForUpdatesModal.error.message'),
250223
buttons: [translate(preferredLocale, 'checkForUpdatesModal.notAvailable.okay')],
251224
});
252225
} else {
253-
console.debug('[dev] No update available, showing info dialog');
254226
dialog.showMessageBox(browserWindow, {
255227
type: 'info',
256228
message: translate(preferredLocale, 'checkForUpdatesModal.notAvailable.title'),
@@ -264,13 +236,11 @@ const manuallyCheckForUpdates = (menuItem?: MenuItem, browserWindow?: BaseWindow
264236
return downloadPromise;
265237
})
266238
.finally(() => {
267-
console.debug('[dev] Manual update check completed, resetting flags');
268239
isSilentUpdating = false;
269240
isUpdateInProgress = false;
270241
if (!menuItem) {
271242
return;
272243
}
273-
console.debug('[dev] Re-enabling menu item');
274244
// eslint-disable-next-line no-param-reassign
275245
menuItem.enabled = true;
276246
});
@@ -340,7 +310,6 @@ const mainWindow = (): Promise<void> => {
340310

341311
// Prod and staging set the icon in the electron-builder config, so only update it here for dev
342312
if (__DEV__) {
343-
console.debug('CONFIG: ', CONFIG);
344313
app.dock.setIcon(`${__dirname}/../icon-dev.png`);
345314
app.setName('New Expensify Dev');
346315
}
@@ -686,21 +655,17 @@ const mainWindow = (): Promise<void> => {
686655
});
687656

688657
app.on('before-quit', () => {
689-
console.debug('[dev] Application is preparing to quit');
690658
// Adding __DEV__ check because we want links to be handled by dev app only while it's running
691659
// https://github.com/Expensify/App/issues/15965#issuecomment-1483182952
692660
if (__DEV__) {
693-
console.debug('[dev] Removing protocol client in dev mode');
694661
app.removeAsDefaultProtocolClient(appProtocol);
695662
}
696663

697664
// Clean up update listeners and reset flags
698-
console.debug('[dev] Cleaning up update listeners and resetting flags');
699665
autoUpdater.removeAllListeners();
700666
isUpdateInProgress = false;
701667
isSilentUpdating = false;
702668

703-
console.debug('[dev] Setting quitting flag to true');
704669
quitting = true;
705670
});
706671
app.on('activate', () => {

0 commit comments

Comments
 (0)