Skip to content

Commit 835c4f8

Browse files
committed
Merge branch 'main' into travel/cancellation-policy
2 parents 74f81ab + 49128c8 commit 835c4f8

File tree

95 files changed

+1849
-1536
lines changed

Some content is hidden

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

95 files changed

+1849
-1536
lines changed

.env.staging

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ EXPENSIFY_PARTNER_PASSWORD=e21965746fd75f82bb66
66
PUSHER_APP_KEY=268df511a204fbb60884
77
USE_WEB_PROXY=false
88
ENVIRONMENT=staging
9-
SEND_CRASH_REPORTS=true
9+
SEND_CRASH_REPORTS=true

.github/workflows/cherryPick.yml

+1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ jobs:
3939
with:
4040
ref: staging
4141
token: ${{ secrets.OS_BOTIFY_TOKEN }}
42+
submodules: true
4243

4344
- name: Set up git for OSBotify
4445
id: setupGitForOSBotify

.github/workflows/compareNDandODbuilds.yml

+67-22
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ on:
66
jobs:
77
buildHybridAppAndroid:
88
name: Build HybridApp Android
9-
runs-on: macos-15-xlarge
9+
runs-on: ubuntu-latest-xl
1010
steps:
1111
- name: Checkout
1212
uses: actions/checkout@v4
@@ -30,23 +30,65 @@ jobs:
3030
with:
3131
IS_HYBRID_BUILD: 'true'
3232

33+
- name: Run grunt build
34+
run: |
35+
cd Mobile-Expensify
36+
npm run grunt:build:shared
37+
38+
- name: Setup Java
39+
uses: actions/setup-java@v4
40+
with:
41+
distribution: 'oracle'
42+
java-version: '17'
43+
44+
- name: Setup Ruby
45+
uses: ruby/setup-ruby@v1.190.0
46+
with:
47+
bundler-cache: true
48+
49+
- name: Install New Expensify Gems
50+
run: bundle install
51+
52+
- name: Install 1Password CLI
53+
uses: 1password/install-cli-action@v1
54+
55+
- name: Load files from 1Password
56+
env:
57+
OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }}
58+
run: |
59+
op document get --output ./upload-key.keystore upload-key.keystore
60+
op document get --output ./android-fastlane-json-key.json android-fastlane-json-key.json
61+
# Copy the keystore to the Android directory for Fullstory
62+
cp ./upload-key.keystore Mobile-Expensify/Android
63+
64+
- name: Load Android upload keystore credentials from 1Password
65+
id: load-credentials
66+
uses: 1password/load-secrets-action@v2
67+
with:
68+
export-env: false
69+
env:
70+
OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }}
71+
ANDROID_UPLOAD_KEYSTORE_PASSWORD: op://Mobile-Deploy-CI/Repository-Secrets/ANDROID_UPLOAD_KEYSTORE_PASSWORD
72+
ANDROID_UPLOAD_KEYSTORE_ALIAS: op://Mobile-Deploy-CI/Repository-Secrets/ANDROID_UPLOAD_KEYSTORE_ALIAS
73+
ANDROID_UPLOAD_KEY_PASSWORD: op://Mobile-Deploy-CI/Repository-Secrets/ANDROID_UPLOAD_KEY_PASSWORD
74+
3375
- name: Build Android Release
3476
working-directory: Mobile-Expensify/Android
3577
run: |
36-
if ! ./gradlew --profile assembleRelease
37-
then
38-
echo "❌ Android HybridApp failed to build: Please reach out to Contributor+ and/or Expensify engineers for help in #expensify-open-source to resolve."
39-
exit 1
40-
else
41-
echo "✅ Build succeeded. Printing Gradle profile report:"
42-
# Print the latest generated profile report
43-
PROFILE_REPORT=$(find build/reports/profile -maxdepth 1 -type f)
44-
cat "$PROFILE_REPORT"
45-
fi
78+
./gradlew --profile assembleRelease \
79+
-Pandroid.injected.signing.store.file="./upload-key.keystore" \
80+
-Pandroid.injected.signing.store.password=${{ steps.load-credentials.outputs.ANDROID_UPLOAD_KEYSTORE_PASSWORD }} \
81+
-Pandroid.injected.signing.key.alias=${{ steps.load-credentials.outputs.ANDROID_UPLOAD_KEYSTORE_ALIAS }} \
82+
-Pandroid.injected.signing.key.password=${{ steps.load-credentials.outputs.ANDROID_UPLOAD_KEY_PASSWORD }}
83+
84+
echo "Printing Gradle profile report:"
85+
# Print the latest generated profile report
86+
PROFILE_REPORT=$(find build/reports/profile -maxdepth 1 -type f)
87+
cat "$PROFILE_REPORT"
4688
4789
buildStandaloneAndroid:
4890
name: Build Standalone Android
49-
runs-on: macos-15-xlarge
91+
runs-on: ubuntu-latest-xl
5092
steps:
5193
- name: Checkout
5294
uses: actions/checkout@v4
@@ -62,16 +104,19 @@ jobs:
62104
with:
63105
IS_HYBRID_BUILD: 'false'
64106

107+
- name: Decrypt keystore to sign the APK/AAB
108+
run: gpg --batch --yes --decrypt --passphrase="${{ secrets.LARGE_SECRET_PASSPHRASE }}" --output my-upload-key.keystore my-upload-key.keystore.gpg
109+
working-directory: android/app
110+
65111
- name: Build Android Release
66112
working-directory: android
113+
env:
114+
MYAPP_UPLOAD_STORE_PASSWORD: ${{ secrets.MYAPP_UPLOAD_STORE_PASSWORD }}
115+
MYAPP_UPLOAD_KEY_PASSWORD: ${{ secrets.MYAPP_UPLOAD_KEY_PASSWORD }}
67116
run: |
68-
if ! ./gradlew --profile assembleProductionRelease
69-
then
70-
echo "❌ Android Standalone failed to build: Please reach out to Contributor+ and/or Expensify engineers for help in #expensify-open-source to resolve."
71-
exit 1
72-
else
73-
echo "✅ Build succeeded. Printing Gradle profile report:"
74-
# Print the latest generated profile report
75-
PROFILE_REPORT=$(find build/reports/profile -maxdepth 1 -type f)
76-
cat "$PROFILE_REPORT"
77-
fi
117+
./gradlew --profile assembleProductionRelease
118+
119+
echo "Printing Gradle profile report:"
120+
# Print the latest generated profile report
121+
PROFILE_REPORT=$(find build/reports/profile -maxdepth 1 -type f)
122+
cat "$PROFILE_REPORT"

.github/workflows/createNewVersion.yml

+24-60
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ jobs:
6565
uses: actions/checkout@v4
6666
with:
6767
ref: main
68+
submodules: true
6869
# The OS_BOTIFY_COMMIT_TOKEN is a personal access token tied to osbotify
6970
# This is a workaround to allow pushes to a protected branch
7071
token: ${{ secrets.OS_BOTIFY_COMMIT_TOKEN }}
@@ -75,70 +76,24 @@ jobs:
7576
with:
7677
GPG_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }}
7778

78-
- name: Generate version
79+
- name: Generate new E/App version
7980
id: bumpVersion
8081
uses: ./.github/actions/javascript/bumpVersion
8182
with:
8283
GITHUB_TOKEN: ${{ secrets.OS_BOTIFY_COMMIT_TOKEN }}
8384
SEMVER_LEVEL: ${{ inputs.SEMVER_LEVEL }}
8485

85-
- name: Commit new version
86-
run: |
87-
git add \
88-
./package.json \
89-
./package-lock.json \
90-
./android/app/build.gradle \
91-
./ios/NewExpensify/Info.plist \
92-
./ios/NewExpensifyTests/Info.plist \
93-
./ios/NotificationServiceExtension/Info.plist
94-
git commit -m "Update version to ${{ steps.bumpVersion.outputs.NEW_VERSION }}"
95-
96-
- name: Update main branch
97-
run: git push origin main
98-
99-
- name: Announce failed workflow in Slack
100-
if: ${{ failure() }}
101-
uses: ./.github/actions/composite/announceFailedWorkflowInSlack
102-
with:
103-
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
104-
105-
createNewHybridVersion:
106-
runs-on: macos-latest
107-
needs: [validateActor, createNewVersion]
108-
if: ${{ fromJSON(needs.validateActor.outputs.HAS_WRITE_ACCESS) }}
109-
steps:
110-
- name: Run turnstyle
111-
uses: softprops/turnstyle@49108bdfa571e62371bd2c3094893c547ab3fc03
112-
with:
113-
poll-interval-seconds: 10
114-
env:
115-
GITHUB_TOKEN: ${{ github.token }}
116-
117-
- name: Check out `App` repo
118-
uses: actions/checkout@v4
119-
with:
120-
ref: main
121-
submodules: true
122-
# The OS_BOTIFY_COMMIT_TOKEN is a personal access token tied to osbotify
123-
# This is a workaround to allow pushes to a protected branch
124-
token: ${{ secrets.OS_BOTIFY_COMMIT_TOKEN }}
125-
126-
- name: Update submodule and checkout the main branch
86+
- name: Update Mobile-Expensify submodule with the latest state of the Mobile-Expensify main branch
12787
run: |
128-
git submodule update --init
12988
cd Mobile-Expensify
89+
git fetch --depth=1 origin main
13090
git checkout main
131-
git pull origin main
132-
133-
- name: Setup git for OSBotify
134-
uses: ./.github/actions/composite/setupGitForOSBotify
135-
id: setupGitForOSBotify
136-
with:
137-
GPG_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }}
91+
git reset --hard origin/main
13892
13993
- name: Generate HybridApp version
14094
run: |
14195
cd Mobile-Expensify
96+
14297
# Generate all flavors of the version
14398
SHORT_APP_VERSION=$(echo "$NEW_VERSION" | awk -F'-' '{print $1}')
14499
BUILD_NUMBER=$(echo "$NEW_VERSION" | awk -F'-' '{print $2}')
@@ -167,9 +122,9 @@ jobs:
167122
# Update JS HybridApp Version
168123
sed -i .bak -E "s/\"version\": \"([0-9\.]*)\"/\"version\": \"$FULL_APP_VERSION\"/" $JS_CONFIG_FILE
169124
env:
170-
NEW_VERSION: ${{ needs.createNewVersion.outputs.NEW_VERSION }}
125+
NEW_VERSION: ${{ steps.bumpVersion.outputs.NEW_VERSION }}
171126

172-
- name: Commit new version
127+
- name: Commit new Mobile-Expensify version
173128
run: |
174129
cd Mobile-Expensify
175130
git add \
@@ -178,16 +133,25 @@ jobs:
178133
./iOS/Expensify/Expensify-Info.plist\
179134
./iOS/SmartScanExtension/Info.plist \
180135
./iOS/NotificationServiceExtension/Info.plist
181-
git commit -m "Update version to ${{ needs.createNewVersion.outputs.NEW_VERSION }}"
136+
git commit -m "Update version to ${{ steps.bumpVersion.outputs.NEW_VERSION }}"
137+
git push origin main
182138
183-
- name: Update main branch on Mobile-Expensify and App
139+
- name: Commit new E/App version
140+
run: |
141+
git add \
142+
./package.json \
143+
./package-lock.json \
144+
./android/app/build.gradle \
145+
./ios/NewExpensify/Info.plist \
146+
./ios/NewExpensifyTests/Info.plist \
147+
./ios/NotificationServiceExtension/Info.plist
148+
git commit -m "Update version to ${{ steps.bumpVersion.outputs.NEW_VERSION }}"
149+
150+
- name: Update Mobile-Expensify submodule in E/App
184151
run: |
185-
cd Mobile-Expensify
186-
git push origin main
187-
cd ..
188152
git add Mobile-Expensify
189-
git commit -m "Update Mobile-Expensify to ${{ needs.createNewVersion.outputs.NEW_VERSION }}"
190-
git push origin main
153+
git commit -m "Update Mobile-Expensify submodule version to ${{ steps.bumpVersion.outputs.NEW_VERSION }}"
154+
git push origin main
191155
192156
- name: Announce failed workflow in Slack
193157
if: ${{ failure() }}

.github/workflows/deploy.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ jobs:
322322
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
323323
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
324324
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
325-
GCP_GEOLOCATION_API_KEY: $${{ secrets.GCP_GEOLOCATION_API_KEY_PRODUCTION }}
325+
GCP_GEOLOCATION_API_KEY: ${{ secrets.GCP_GEOLOCATION_API_KEY_PRODUCTION }}
326326

327327
- name: Upload desktop sourcemaps artifact
328328
uses: actions/upload-artifact@v4

.github/workflows/testBuild.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ jobs:
270270
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
271271
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
272272
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
273-
GCP_GEOLOCATION_API_KEY: $${{ secrets.GCP_GEOLOCATION_API_KEY_STAGING }}
273+
GCP_GEOLOCATION_API_KEY: ${{ secrets.GCP_GEOLOCATION_API_KEY_STAGING }}
274274

275275
web:
276276
name: Build and deploy Web

Mobile-Expensify

android/app/build.gradle

+2-2
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,8 @@ android {
110110
minSdkVersion rootProject.ext.minSdkVersion
111111
targetSdkVersion rootProject.ext.targetSdkVersion
112112
multiDexEnabled rootProject.ext.multiDexEnabled
113-
versionCode 1009009200
114-
versionName "9.0.92-0"
113+
versionCode 1009009301
114+
versionName "9.0.93-1"
115115
// Supported language variants must be declared here to avoid from being removed during the compilation.
116116
// This also helps us to not include unnecessary language variants in the APK.
117117
resConfigs "en", "es"

0 commit comments

Comments
 (0)