diff --git a/.env.staging b/.env.staging
index c789087ebded..c0daddc3420e 100644
--- a/.env.staging
+++ b/.env.staging
@@ -7,3 +7,4 @@ PUSHER_APP_KEY=268df511a204fbb60884
USE_WEB_PROXY=false
ENVIRONMENT=staging
SEND_CRASH_REPORTS=true
+INLINE_RUNTIME_CHUNK=false
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 0dd10af71747..d7e35bb5894d 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -68,7 +68,6 @@ This is a checklist for PR authors. Please make sure to complete all tasks and c
- [ ] I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
- [ ] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
- [ ] I tested this PR with a [High Traffic account](https://github.com/Expensify/App/blob/main/contributingGuides/CONTRIBUTING.md#high-traffic-accounts) against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).
-
- [ ] I included screenshots or videos for tests on [all platforms](https://github.com/Expensify/App/blob/main/contributingGuides/CONTRIBUTING.md#make-sure-you-can-test-on-all-platforms)
- [ ] I ran the tests on **all platforms** & verified they passed on:
- [ ] iOS / native
@@ -167,23 +166,45 @@ The reviewer will copy/paste it into a new comment and complete it after the aut
-### Screenshots
-
+### Screenshots/Videos
+
+Web
+
+
+
+
+
+
+Mobile Web - Chrome
+
+
+
+
+
+
+Mobile Web - Safari
+
+
+
+
+
+
+Desktop
+
+
-#### Web
-
+
+
+
+iOS
-#### Mobile Web - Chrome
-
+
-#### Mobile Web - Safari
-
+
-#### Desktop
-
+
+Android
-#### iOS
-
+
-#### Android
-
+
diff --git a/.github/actions/composite/setupNode/action.yml b/.github/actions/composite/setupNode/action.yml
index 95e187ff4d3a..d475acf5380f 100644
--- a/.github/actions/composite/setupNode/action.yml
+++ b/.github/actions/composite/setupNode/action.yml
@@ -4,10 +4,6 @@ description: Set up Node
runs:
using: composite
steps:
- - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
- with:
- fetch-depth: 0
-
- uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516
with:
node-version-file: '.nvmrc'
diff --git a/.github/actions/javascript/reviewerChecklist/index.js b/.github/actions/javascript/reviewerChecklist/index.js
index a594fa69d1a1..962c12a13ac1 100644
--- a/.github/actions/javascript/reviewerChecklist/index.js
+++ b/.github/actions/javascript/reviewerChecklist/index.js
@@ -66,7 +66,7 @@ function checkIssueForCompletedChecklist(numberOfChecklistItems) {
for (let i = 0; i < combinedComments.length; i++) {
// Skip all other comments if we already found the reviewer checklist
if (foundReviewerChecklist) {
- return;
+ break;
}
const whitespace = /([\n\r])/gm;
diff --git a/.github/actions/javascript/reviewerChecklist/reviewerChecklist.js b/.github/actions/javascript/reviewerChecklist/reviewerChecklist.js
index 7fb27e5b5a5a..1f942ce66fd6 100644
--- a/.github/actions/javascript/reviewerChecklist/reviewerChecklist.js
+++ b/.github/actions/javascript/reviewerChecklist/reviewerChecklist.js
@@ -56,7 +56,7 @@ function checkIssueForCompletedChecklist(numberOfChecklistItems) {
for (let i = 0; i < combinedComments.length; i++) {
// Skip all other comments if we already found the reviewer checklist
if (foundReviewerChecklist) {
- return;
+ break;
}
const whitespace = /([\n\r])/gm;
diff --git a/.github/workflows/e2ePerformanceRegressionTests.yml b/.github/workflows/e2ePerformanceRegressionTests.yml
index a59eb8c0dbff..ad6425d4ec90 100644
--- a/.github/workflows/e2ePerformanceRegressionTests.yml
+++ b/.github/workflows/e2ePerformanceRegressionTests.yml
@@ -7,10 +7,15 @@ on:
jobs:
e2e-tests:
if: ${{ github.event.label.name == 'e2e' }}
- name: "Run e2e performance regression tests"
+ name: Run e2e performance regression tests
# Although the tests will run on an android emulator, using macOS as its more performant
runs-on: macos-12
steps:
+ # This action checks-out the repository, so the workflow can access it.
+ - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
+ with:
+ fetch-depth: 0
+
- uses: Expensify/App/.github/actions/composite/setupNode@main
- uses: ruby/setup-ruby@eae47962baca661befdfd24e4d6c34ade04858f7
@@ -43,7 +48,7 @@ jobs:
disable-animations: false
script: echo "Generated AVD snapshot for caching."
-# Note: if the android build fails the logs can be incomplete. It can help to run the build once manually to get a full log
+ # Note: if the android build fails the logs can be incomplete. It can help to run the build once manually to get a full log
- name: Preheat build system
env:
JAVA_HOME: ${{ env.JAVA_HOME_11_X64 }}
@@ -76,4 +81,3 @@ jobs:
name: test-failure-logs
path: e2e/.results
retention-days: 5
-
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index 0af8907b085d..f0bcf63b6955 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -11,6 +11,11 @@ jobs:
if: ${{ github.actor != 'OSBotify' || github.event_name == 'workflow_call' }}
runs-on: ubuntu-latest
steps:
+ # This action checks-out the repository, so the workflow can access it.
+ - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
+ with:
+ fetch-depth: 0
+
- uses: Expensify/App/.github/actions/composite/setupNode@main
- run: npm run lint
diff --git a/.github/workflows/platformDeploy.yml b/.github/workflows/platformDeploy.yml
index 6aa397758ea2..5b61a294ca5b 100644
--- a/.github/workflows/platformDeploy.yml
+++ b/.github/workflows/platformDeploy.yml
@@ -31,6 +31,11 @@ jobs:
if: ${{ fromJSON(needs.validateActor.outputs.IS_DEPLOYER) }}
runs-on: ubuntu-latest
steps:
+ # This action checks-out the repository, so the workflow can access it.
+ - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
+ with:
+ fetch-depth: 0
+
- uses: Expensify/App/.github/actions/composite/setupNode@main
- uses: ruby/setup-ruby@eae47962baca661befdfd24e4d6c34ade04858f7
@@ -100,6 +105,11 @@ jobs:
if: ${{ fromJSON(needs.validateActor.outputs.IS_DEPLOYER) }}
runs-on: macos-12
steps:
+ # This action checks-out the repository, so the workflow can access it.
+ - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
+ with:
+ fetch-depth: 0
+
- uses: Expensify/App/.github/actions/composite/setupNode@main
- name: Decrypt Developer ID Certificate
@@ -135,6 +145,11 @@ jobs:
if: ${{ fromJSON(needs.validateActor.outputs.IS_DEPLOYER) }}
runs-on: macos-12
steps:
+ # This action checks-out the repository, so the workflow can access it.
+ - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
+ with:
+ fetch-depth: 0
+
- uses: Expensify/App/.github/actions/composite/setupNode@main
- uses: ruby/setup-ruby@eae47962baca661befdfd24e4d6c34ade04858f7
@@ -219,6 +234,11 @@ jobs:
if: ${{ fromJSON(needs.validateActor.outputs.IS_DEPLOYER) }}
runs-on: ubuntu-latest
steps:
+ # This action checks-out the repository, so the workflow can access it.
+ - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
+ with:
+ fetch-depth: 0
+
- uses: Expensify/App/.github/actions/composite/setupNode@main
- name: Setup Cloudflare CLI
@@ -340,6 +360,11 @@ jobs:
if: ${{ always() }}
needs: [android, desktop, iOS, web]
steps:
+ # This action checks-out the repository, so the workflow can access it.
+ - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
+ with:
+ fetch-depth: 0
+
- uses: Expensify/App/.github/actions/composite/setupNode@main
- name: Set version
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 90e6e06e75d2..72dde5fe38cf 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -39,6 +39,11 @@ jobs:
chunk: ${{fromJson(needs.config.outputs.MATRIX)}}
steps:
+ # This action checks-out the repository, so the workflow can access it.
+ - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
+ with:
+ fetch-depth: 0
+
- uses: Expensify/App/.github/actions/composite/setupNode@main
# If automatic signing is enabled, iOS builds will fail, so ensure we always have the proper profile specified
diff --git a/.github/workflows/testBuild.yml b/.github/workflows/testBuild.yml
new file mode 100644
index 000000000000..c6ac7cd7e964
--- /dev/null
+++ b/.github/workflows/testBuild.yml
@@ -0,0 +1,211 @@
+name: Build and deploy apps for testing
+
+on:
+ workflow_dispatch:
+ pull_request_target:
+ types: [opened, synchronize]
+
+env:
+ DEVELOPER_DIR: /Applications/Xcode_14.0.1.app/Contents/Developer
+
+jobs:
+ validateActor:
+ runs-on: ubuntu-latest
+ outputs:
+ IS_TEAM_MEMBER: ${{ fromJSON(steps.isUserDeployer.outputs.isTeamMember) }}
+ steps:
+ - id: isUserDeployer
+ uses: tspascoal/get-user-teams-membership@baf2e6adf4c3b897bd65a7e3184305c165aec872
+ with:
+ GITHUB_TOKEN: ${{ secrets.OS_BOTIFY_TOKEN }}
+ username: ${{ github.actor }}
+ team: mobile-deployers
+
+ android:
+ name: Build and deploy Android for testing
+ needs: validateActor
+ if: ${{ fromJSON(needs.validateActor.outputs.IS_TEAM_MEMBER) }}
+ runs-on: ubuntu-latest
+ steps:
+ # This action checks-out the repository, so the workflow can access it.
+ - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
+ with:
+ ref: ${{ github.event.pull_request.head.sha }}
+
+ - uses: Expensify/App/.github/actions/composite/setupNode@main
+
+ - uses: ruby/setup-ruby@eae47962baca661befdfd24e4d6c34ade04858f7
+ with:
+ ruby-version: '2.7'
+ bundler-cache: true
+
+ - name: Decrypt keystore
+ run: cd android/app && gpg --quiet --batch --yes --decrypt --passphrase="$LARGE_SECRET_PASSPHRASE" --output my-upload-key.keystore my-upload-key.keystore.gpg
+ env:
+ LARGE_SECRET_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }}
+
+ - name: Decrypt json key
+ run: cd android/app && gpg --quiet --batch --yes --decrypt --passphrase="$LARGE_SECRET_PASSPHRASE" --output android-fastlane-json-key.json android-fastlane-json-key.json.gpg
+ env:
+ LARGE_SECRET_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }}
+
+ - name: Run Fastlane beta test
+ id: runFastlaneBetaTest
+ run: bundle exec fastlane android build_internal
+ env:
+ S3_ACCESS_KEY: ${{ secrets.AWS_ACCESS_KEY_ID }}
+ S3_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+ S3_BUCKET: ad-hoc-expensify-cash
+ S3_REGION: us-east-1
+ PULL_REQUEST_NUMBER: ${{ github.event.number }}
+
+ - uses: actions/upload-artifact@v3
+ with:
+ name: android
+ path: ./android_paths.json
+
+ iOS:
+ name: Build and deploy iOS for testing
+ needs: validateActor
+ if: ${{ fromJSON(needs.validateActor.outputs.IS_TEAM_MEMBER) }}
+ runs-on: macos-12
+ steps:
+ # This action checks-out the repository, so the workflow can access it.
+ - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
+ with:
+ ref: ${{ github.event.pull_request.head.sha }}
+
+ - uses: Expensify/App/.github/actions/composite/setupNode@main
+
+ - uses: ruby/setup-ruby@eae47962baca661befdfd24e4d6c34ade04858f7
+ with:
+ ruby-version: '2.7'
+ bundler-cache: true
+
+ - name: Install cocoapods
+ uses: nick-invision/retry@0711ba3d7808574133d713a0d92d2941be03a350
+ with:
+ timeout_minutes: 10
+ max_attempts: 5
+ command: cd ios && pod install
+
+ - name: Decrypt profile
+ run: cd ios && gpg --quiet --batch --yes --decrypt --passphrase="$LARGE_SECRET_PASSPHRASE" --output chat_expensify_adhoc.mobileprovision chat_expensify_adhoc.mobileprovision.gpg
+ env:
+ LARGE_SECRET_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }}
+
+ - name: Decrypt certificate
+ run: cd ios && gpg --quiet --batch --yes --decrypt --passphrase="$LARGE_SECRET_PASSPHRASE" --output Certificates.p12 Certificates.p12.gpg
+ env:
+ LARGE_SECRET_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }}
+
+ - name: Run Fastlane
+ run: bundle exec fastlane ios build_internal
+ env:
+ S3_ACCESS_KEY: ${{ secrets.AWS_ACCESS_KEY_ID }}
+ S3_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+ S3_BUCKET: ad-hoc-expensify-cash
+ S3_REGION: us-east-1
+ PULL_REQUEST_NUMBER: ${{ github.event.number }}
+
+ - uses: actions/upload-artifact@v3
+ with:
+ name: ios
+ path: ./ios_paths.json
+
+ desktop:
+ name: Build and deploy Desktop for testing
+ needs: validateActor
+ if: ${{ fromJSON(needs.validateActor.outputs.IS_TEAM_MEMBER) }}
+ runs-on: macos-12
+ steps:
+ # This action checks-out the repository, so the workflow can access it.
+ - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
+ with:
+ fetch-depth: 0
+
+ - uses: Expensify/App/.github/actions/composite/setupNode@main
+
+ - name: Decrypt Developer ID Certificate
+ run: cd desktop && gpg --quiet --batch --yes --decrypt --passphrase="$DEVELOPER_ID_SECRET_PASSPHRASE" --output developer_id.p12 developer_id.p12.gpg
+ env:
+ DEVELOPER_ID_SECRET_PASSPHRASE: ${{ secrets.DEVELOPER_ID_SECRET_PASSPHRASE }}
+
+ - name: Build desktop app for testing
+ run: npm run desktop-build-internal -- --publish always
+ env:
+ CSC_LINK: ${{ secrets.CSC_LINK }}
+ CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
+ APPLE_ID: ${{ secrets.APPLE_ID }}
+ APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
+ AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
+ AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+
+ # web:
+ # name: Build and deploy Web
+ # needs: validateActor
+ # if: ${{ fromJSON(needs.validateActor.outputs.IS_TEAM_MEMBER) }}
+ # runs-on: ubuntu-latest
+ # steps:
+ # - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
+ # with:
+ # fetch-depth: 0
+ # ref: ${{ github.event.pull_request.head.sha }}
+
+ # - uses: Expensify/App/.github/actions/composite/setupNode@main
+
+ # - name: Configure AWS Credentials
+ # # Version: 1.5.5
+ # uses: aws-actions/configure-aws-credentials@e97d7fbc8e0e5af69631c13daa0f4b5a8d88165b
+ # with:
+ # aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
+ # aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+ # aws-region: us-east-1
+
+ # - name: Build web for staging
+ # run: npm run build-staging
+
+ # - name: Build docs
+ # run: npm run storybook-build
+ # continue-on-error: true
+
+ # - name: Deploy to S3 for internal testing
+ # run: aws s3 cp --recursive --acl public-read "$GITHUB_WORKSPACE"/dist s3://ad-hoc-expensify-cash/web/"$PULL_REQUEST_NUMBER"
+ # env:
+ # PULL_REQUEST_NUMBER: ${{ github.event.number }}
+
+ postGithubComment:
+ runs-on: ubuntu-latest
+ name: Post a GitHub comment with app download links for testing
+ needs: [android, ios]
+ steps:
+ - name: Checkout
+ uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
+ with:
+ ref: ${{ github.event.pull_request.head.ref }}
+
+ - uses: actions/download-artifact@v3
+
+ - name: Read JSONs with paths
+ id: set_var
+ run: |
+ content_android="$(cat ./android/android_paths.json)"
+ content_android="${content_android//'%'/'%25'}"
+ content_android="${content_android//$'\n'/'%0A'}"
+ content_android="${content_android//$'\r'/'%0D'}"
+ echo "android_paths=$content_android" >> "$GITHUB_OUTPUT"
+ content_ios="$(cat ./ios/ios_paths.json)"
+ content_ios="${content_ios//'%'/'%25'}"
+ content_ios="${content_ios//$'\n'/'%0A'}"
+ content_ios="${content_ios//$'\r'/'%0D'}"
+ echo "ios_paths=$content_ios" >> "$GITHUB_OUTPUT"
+
+ - name: Publish links to apps for download
+ run: |
+ gh pr comment --body \
+ "Use the links below to test this build in android and iOS. Happy testing!
+ | android :robot: | iOS :apple: |
+ | ------------- | ------------- |
+ | ${{fromJson(steps.set_var.outputs.android_paths).html_path}} | ${{fromJson(steps.set_var.outputs.ios_paths).html_path}} |"
+ env:
+ GITHUB_TOKEN: ${{ secrets.OS_BOTIFY_TOKEN }}
diff --git a/.github/workflows/validateGithubActions.yml b/.github/workflows/validateGithubActions.yml
index 4e51d785d6b0..b583ba31f2bc 100644
--- a/.github/workflows/validateGithubActions.yml
+++ b/.github/workflows/validateGithubActions.yml
@@ -10,6 +10,11 @@ jobs:
if: github.actor != 'OSBotify'
runs-on: ubuntu-latest
steps:
+ # This action checks-out the repository, so the workflow can access it.
+ - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
+ with:
+ fetch-depth: 0
+
- uses: Expensify/App/.github/actions/composite/setupNode@main
# Rebuild all the actions on this branch and check for a diff. Fail if there is one,
diff --git a/.github/workflows/verifyPodfile.yml b/.github/workflows/verifyPodfile.yml
index 17d80ca7e055..84f52d09997a 100644
--- a/.github/workflows/verifyPodfile.yml
+++ b/.github/workflows/verifyPodfile.yml
@@ -10,6 +10,11 @@ jobs:
if: github.actor != 'OSBotify'
runs-on: ubuntu-latest
steps:
+ # This action checks-out the repository, so the workflow can access it.
+ - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
+ with:
+ fetch-depth: 0
+
- uses: Expensify/App/.github/actions/composite/setupNode@main
- run: ./.github/scripts/verifyPodfile.sh
diff --git a/.github/workflows/warnCPLabel.yml b/.github/workflows/warnCPLabel.yml
index 1d57ae38f718..c488bb1836d6 100644
--- a/.github/workflows/warnCPLabel.yml
+++ b/.github/workflows/warnCPLabel.yml
@@ -16,9 +16,9 @@ jobs:
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
body: |
- :warning: :warning: **Heads up! This pull request has the `CP Staging` label.** :warning: :warning:
- Merging it will cause it to be immediately deployed to staging, _even if the [open `StagingDeployCash` deploy checklist](https://github.com/Expensify/App/issues?q=is%3Aopen+is%3Aissue+label%3AStagingDeployCash) is locked._
-
+ :warning: :warning: **Heads up! This pull request has the `CP Staging` label** :warning: :warning:
+ If you applied the `CP Staging` label before the PR was merged, the PR will be be immediately deployed to staging even if the [open `StagingDeployCash` deploy checklist](https://github.com/Expensify/App/issues?q=is%3Aopen+is%3Aissue+label%3AStagingDeployCash) is locked.
+ However if you applied the `CP Staging` after the PR was merged it's possible it won't be CP'ed automatically. If you need it to be CP'ed to staging, tag a member of @Expensify/mobile-deployers to CP it manually, otherwise you can wait for it to go out with the next deploy.
- if: ${{ failure() }}
uses: Expensify/App/.github/actions/composite/announceFailedWorkflowInSlack@main
with:
diff --git a/Gemfile b/Gemfile
index c41a21c6604f..d8b9c135680d 100644
--- a/Gemfile
+++ b/Gemfile
@@ -3,3 +3,7 @@ source "https://rubygems.org"
gem "cocoapods", "~> 1.11.3"
gem "fastlane", "~> 2"
gem "xcpretty", "~> 0"
+
+
+plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')
+eval_gemfile(plugins_path) if File.exist?(plugins_path)
diff --git a/Gemfile.lock b/Gemfile.lock
index 5ac763189187..95a2611d953c 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -14,6 +14,8 @@ GEM
algoliasearch (1.27.5)
httpclient (~> 2.8, >= 2.8.3)
json (>= 1.5.1)
+ apktools (0.7.4)
+ rubyzip (~> 2.0)
artifactory (3.0.15)
atomos (0.1.3)
aws-eventstream (1.2.0)
@@ -155,6 +157,10 @@ GEM
xcodeproj (>= 1.13.0, < 2.0.0)
xcpretty (~> 0.3.0)
xcpretty-travis-formatter (>= 0.0.3)
+ fastlane-plugin-aws_s3 (2.1.0)
+ apktools (~> 0.7)
+ aws-sdk-s3 (~> 1)
+ mime-types (~> 3.3)
ffi (1.15.5)
fourflusher (2.3.1)
fuzzy_match (2.0.4)
@@ -207,6 +213,9 @@ GEM
json (2.6.2)
jwt (2.5.0)
memoist (0.16.2)
+ mime-types (3.4.1)
+ mime-types-data (~> 3.2015)
+ mime-types-data (3.2022.0105)
mini_magick (4.11.0)
mini_mime (1.1.2)
minitest (5.16.2)
@@ -283,6 +292,7 @@ PLATFORMS
DEPENDENCIES
cocoapods (~> 1.11.3)
fastlane (~> 2)
+ fastlane-plugin-aws_s3
xcpretty (~> 0)
BUNDLED WITH
diff --git a/README.md b/README.md
index d456c5e52af4..61734c2417ed 100644
--- a/README.md
+++ b/README.md
@@ -293,7 +293,7 @@ export default withOnyx({
This application is built with the following principles.
1. **Data Flow** - Ideally, this is how data flows through the app:
1. Server pushes data to the disk of any client (Server -> Pusher event -> Action listening to pusher event -> Onyx).
- >**Note:** Currently the code only does this with report comments. Until we make more server changes, this steps is actually done by the client requesting data from the server via XHR and then storing the response in Onyx.
+ >**Note:** Currently the code only does this with report comments. Until we make more server changes, this step is actually done by the client requesting data from the server via XHR and then storing the response in Onyx.
2. Disk pushes data to the UI (Onyx -> withOnyx() -> React component).
3. UI pushes data to people's brains (React component -> device screen).
4. Brain pushes data into UI inputs (Device input -> React component).
diff --git a/android/app/build.gradle b/android/app/build.gradle
index 99d297b5812b..b24a60ac5067 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -156,8 +156,8 @@ android {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
multiDexEnabled rootProject.ext.multiDexEnabled
- versionCode 1001022907
- versionName "1.2.29-7"
+ versionCode 1001023301
+ versionName "1.2.33-1"
buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
if (isNewArchitectureEnabled()) {
@@ -258,6 +258,11 @@ android {
matchingFallbacks = ['release']
signingConfig signingConfigs.debug
}
+ internalRelease {
+ initWith release
+ matchingFallbacks = ['release']
+ signingConfig signingConfigs.debug
+ }
}
// applicationVariants are e.g. debug, release
diff --git a/android/app/src/debug/assets/airshipconfig.properties b/android/app/src/debug/assets/airshipconfig.properties
new file mode 100644
index 000000000000..490f74552f11
--- /dev/null
+++ b/android/app/src/debug/assets/airshipconfig.properties
@@ -0,0 +1,8 @@
+appKey = uulSSfTDQJ2r0PMpjRrhmQ
+appSecret = D4Bhf0HrQEehrPua74Tyiw
+inProduction = false
+developmentLogLevel = VERBOSE
+
+# Notification Customization
+notificationIcon = ic_notification
+notificationAccentColor = #2EAAE2
\ No newline at end of file
diff --git a/android/app/src/e2eRelease/assets/airshipconfig.properties b/android/app/src/e2eRelease/assets/airshipconfig.properties
new file mode 100644
index 000000000000..194c4577de8b
--- /dev/null
+++ b/android/app/src/e2eRelease/assets/airshipconfig.properties
@@ -0,0 +1,7 @@
+appKey = 55vypj0ARc6cN09MX7ogtQ
+appSecret = EsSaqbdLSvmyC6kSBFJCtQ
+inProduction = true
+
+# Notification Customization
+notificationIcon = ic_notification
+notificationAccentColor = #2EAAE2
\ No newline at end of file
diff --git a/android/app/src/main/assets/airshipconfig.properties b/android/app/src/main/assets/airshipconfig.properties
deleted file mode 100644
index 6e37dfb7465e..000000000000
--- a/android/app/src/main/assets/airshipconfig.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-developmentAppKey = uulSSfTDQJ2r0PMpjRrhmQ
-developmentAppSecret = D4Bhf0HrQEehrPua74Tyiw
-
-productionAppKey = 55vypj0ARc6cN09MX7ogtQ
-productionAppSecret = EsSaqbdLSvmyC6kSBFJCtQ
-
-# Notification Customization
-notificationIcon = ic_notification
-notificationAccentColor = #2EAAE2
diff --git a/android/app/src/main/res/drawable-hdpi/ic_notification.png b/android/app/src/main/res/drawable-hdpi/ic_notification.png
index eb4a29a5eb31..7612112d1bc5 100644
Binary files a/android/app/src/main/res/drawable-hdpi/ic_notification.png and b/android/app/src/main/res/drawable-hdpi/ic_notification.png differ
diff --git a/android/app/src/main/res/drawable-mdpi/ic_notification.png b/android/app/src/main/res/drawable-mdpi/ic_notification.png
index 6bd66d53e897..89accf5424f8 100644
Binary files a/android/app/src/main/res/drawable-mdpi/ic_notification.png and b/android/app/src/main/res/drawable-mdpi/ic_notification.png differ
diff --git a/android/app/src/main/res/drawable-xhdpi/ic_notification.png b/android/app/src/main/res/drawable-xhdpi/ic_notification.png
index 35220f20eb97..a01f2c5e0dc9 100644
Binary files a/android/app/src/main/res/drawable-xhdpi/ic_notification.png and b/android/app/src/main/res/drawable-xhdpi/ic_notification.png differ
diff --git a/android/app/src/main/res/drawable-xxhdpi/ic_notification.png b/android/app/src/main/res/drawable-xxhdpi/ic_notification.png
index 344a154d7fe5..3bb969329c79 100644
Binary files a/android/app/src/main/res/drawable-xxhdpi/ic_notification.png and b/android/app/src/main/res/drawable-xxhdpi/ic_notification.png differ
diff --git a/android/app/src/main/res/drawable-xxxhdpi/ic_notification.png b/android/app/src/main/res/drawable-xxxhdpi/ic_notification.png
index 53d01824530d..697922b1e689 100644
Binary files a/android/app/src/main/res/drawable-xxxhdpi/ic_notification.png and b/android/app/src/main/res/drawable-xxxhdpi/ic_notification.png differ
diff --git a/android/app/src/main/res/mipmap-hdpi/bootsplash_logo.png b/android/app/src/main/res/mipmap-hdpi/bootsplash_logo.png
index 418344ef64a5..2dd985e8eeea 100644
Binary files a/android/app/src/main/res/mipmap-hdpi/bootsplash_logo.png and b/android/app/src/main/res/mipmap-hdpi/bootsplash_logo.png differ
diff --git a/android/app/src/main/res/mipmap-mdpi/bootsplash_logo.png b/android/app/src/main/res/mipmap-mdpi/bootsplash_logo.png
index 88c82f6938cf..7d0644eed692 100644
Binary files a/android/app/src/main/res/mipmap-mdpi/bootsplash_logo.png and b/android/app/src/main/res/mipmap-mdpi/bootsplash_logo.png differ
diff --git a/android/app/src/main/res/mipmap-xhdpi/bootsplash_logo.png b/android/app/src/main/res/mipmap-xhdpi/bootsplash_logo.png
index aad0a60610c8..f2dd3df6e1ad 100644
Binary files a/android/app/src/main/res/mipmap-xhdpi/bootsplash_logo.png and b/android/app/src/main/res/mipmap-xhdpi/bootsplash_logo.png differ
diff --git a/android/app/src/main/res/mipmap-xxhdpi/bootsplash_logo.png b/android/app/src/main/res/mipmap-xxhdpi/bootsplash_logo.png
index 855115119d1e..59538b46ded4 100644
Binary files a/android/app/src/main/res/mipmap-xxhdpi/bootsplash_logo.png and b/android/app/src/main/res/mipmap-xxhdpi/bootsplash_logo.png differ
diff --git a/android/app/src/main/res/mipmap-xxxhdpi/bootsplash_logo.png b/android/app/src/main/res/mipmap-xxxhdpi/bootsplash_logo.png
index 783b32cea53b..9a8a1bbf2640 100644
Binary files a/android/app/src/main/res/mipmap-xxxhdpi/bootsplash_logo.png and b/android/app/src/main/res/mipmap-xxxhdpi/bootsplash_logo.png differ
diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
index 89436352feb8..35d8a1c3cef2 100644
Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
index 807ac49eb556..9a5989a435aa 100644
Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/android/app/src/main/res/values/colors.xml b/android/app/src/main/res/values/colors.xml
index 21e97a75c38a..1b925f61ae28 100644
--- a/android/app/src/main/res/values/colors.xml
+++ b/android/app/src/main/res/values/colors.xml
@@ -1,5 +1,5 @@
- #FFFFFF
+ #061B09
#FFFFFF
#0185ff
#0b1b34
diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml
index 0cad8b818b02..9057ea9c1cc2 100644
--- a/android/app/src/main/res/values/styles.xml
+++ b/android/app/src/main/res/values/styles.xml
@@ -7,15 +7,16 @@
diff --git a/android/app/src/release/assets/airshipconfig.properties b/android/app/src/release/assets/airshipconfig.properties
new file mode 100644
index 000000000000..194c4577de8b
--- /dev/null
+++ b/android/app/src/release/assets/airshipconfig.properties
@@ -0,0 +1,7 @@
+appKey = 55vypj0ARc6cN09MX7ogtQ
+appSecret = EsSaqbdLSvmyC6kSBFJCtQ
+inProduction = true
+
+# Notification Customization
+notificationIcon = ic_notification
+notificationAccentColor = #2EAAE2
\ No newline at end of file
diff --git a/assets/images/expensify-logo-round-clearspace.png b/assets/images/expensify-logo-round-clearspace.png
index 154e1cbfec1c..da0f19dda770 100644
Binary files a/assets/images/expensify-logo-round-clearspace.png and b/assets/images/expensify-logo-round-clearspace.png differ
diff --git a/assets/images/expensify-logo-round.png b/assets/images/expensify-logo-round.png
index 8904b9d80403..59d29ed09530 100644
Binary files a/assets/images/expensify-logo-round.png and b/assets/images/expensify-logo-round.png differ
diff --git a/assets/images/expensify-wordmark.svg b/assets/images/expensify-wordmark.svg
index 68f4231501c2..09fdaf2b4c83 100644
--- a/assets/images/expensify-wordmark.svg
+++ b/assets/images/expensify-wordmark.svg
@@ -1,9 +1,9 @@
-
+
\ No newline at end of file
diff --git a/assets/images/new-expensify-dev.svg b/assets/images/new-expensify-dev.svg
index 4346bdbaeef5..5e36ffebe0d3 100644
--- a/assets/images/new-expensify-dev.svg
+++ b/assets/images/new-expensify-dev.svg
@@ -1,12 +1,46 @@
-
-