From 550a81313154bce42653b084da01c4098c63155f Mon Sep 17 00:00:00 2001 From: situchan Date: Tue, 6 Jan 2026 21:40:04 +0600 Subject: [PATCH 1/2] Revert "Merge pull request #76670 from allroundexperts/revert-75601-feat-75198" This reverts commit 62183cdbb6b75351f26608d6b5f6f2cd365f8ee8, reversing changes made to d220185de53995c87fc027ecefe6b673f29b71cf. --- .../actions/composite/setupNode/action.yml | 26 +----- .../markPullRequestsAsDeployed/action.yml | 3 - .../markPullRequestsAsDeployed/index.js | 3 +- .../markPullRequestsAsDeployed.ts | 3 +- .../postTestBuildComment/action.yml | 6 -- .../javascript/postTestBuildComment/index.js | 17 ++-- .../postTestBuildComment.ts | 17 ++-- .github/workflows/checkE2ETestCode.yml | 2 - .github/workflows/checkSVGCompression.yml | 2 - .github/workflows/deploy.yml | 80 ++----------------- .github/workflows/e2ePerformanceTests.yml | 2 - .github/workflows/lint-changed.yml | 2 - .github/workflows/lint.yml | 2 - .github/workflows/postDeployComments.yml | 14 ---- .github/workflows/prettier.yml | 2 - .github/workflows/testBuild.yml | 77 +----------------- .github/workflows/typecheck.yml | 2 - contributingGuides/SETUP_WEB.md | 2 +- contributingGuides/philosophies/DEPLOYING.md | 24 +----- eslint.config.mjs | 1 + package.json | 4 - tests/unit/markPullRequestsAsDeployedTest.ts | 8 -- tests/unit/postTestBuildComment.ts | 38 ++++----- tsconfig.json | 1 - 24 files changed, 46 insertions(+), 292 deletions(-) diff --git a/.github/actions/composite/setupNode/action.yml b/.github/actions/composite/setupNode/action.yml index c12ef3636066..00fb5d7283f3 100644 --- a/.github/actions/composite/setupNode/action.yml +++ b/.github/actions/composite/setupNode/action.yml @@ -6,10 +6,6 @@ inputs: description: "Indicates if node is set up for hybrid app" required: false default: 'false' - IS_DESKTOP_BUILD: - description: "Indicates if node is set up for desktop app" - required: false - default: 'false' outputs: cache-hit: @@ -27,9 +23,7 @@ runs: with: node-version-file: '.nvmrc' cache: npm - cache-dependency-path: | - normalized-package-lock.json - desktop/package-lock.json + cache-dependency-path: normalized-package-lock.json - id: cache-node-modules # v4 @@ -46,14 +40,6 @@ runs: path: Mobile-Expensify/node_modules key: ${{ runner.os }}-node-modules-${{ hashFiles('Mobile-Expensify/package-lock.json', 'Mobile-Expensify/patches/**') }} - - id: cache-desktop-node-modules - if: inputs.IS_DESKTOP_BUILD == 'true' - # v4 - uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 - with: - path: desktop/node_modules - key: ${{ runner.os }}-desktop-node-modules-${{ hashFiles('desktop/package-lock.json', 'desktop/patches/**') }} - - name: Remove ND node_modules if needed for hybrid app build if: inputs.IS_HYBRID_BUILD == 'true' && steps.cache-node-modules.outputs.cache-hit == 'true' && steps.cache-old-dot-node-modules.outputs.cache-hit != 'true' shell: bash @@ -65,12 +51,4 @@ runs: with: timeout_minutes: 30 max_attempts: 3 - command: npm ci - - - name: Install node packages for desktop submodule - if: inputs.IS_DESKTOP_BUILD == 'true' && steps.cache-desktop-node-modules.outputs.cache-hit != 'true' - uses: nick-fields/retry@3f757583fb1b1f940bc8ef4bf4734c8dc02a5847 - with: - timeout_minutes: 30 - max_attempts: 3 - command: cd desktop && npm ci + command: npm ci \ No newline at end of file diff --git a/.github/actions/javascript/markPullRequestsAsDeployed/action.yml b/.github/actions/javascript/markPullRequestsAsDeployed/action.yml index f7af5e586968..b8a39af6c3ae 100644 --- a/.github/actions/javascript/markPullRequestsAsDeployed/action.yml +++ b/.github/actions/javascript/markPullRequestsAsDeployed/action.yml @@ -20,9 +20,6 @@ inputs: ANDROID: description: "Android job result ('success', 'failure', 'cancelled', or 'skipped')" required: true - DESKTOP: - description: "Desktop job result ('success', 'failure', 'cancelled', or 'skipped')" - required: true IOS: description: "iOS job result ('success', 'failure', 'cancelled', or 'skipped')" required: true diff --git a/.github/actions/javascript/markPullRequestsAsDeployed/index.js b/.github/actions/javascript/markPullRequestsAsDeployed/index.js index d8d7a926f00b..a13c54e6b1ae 100644 --- a/.github/actions/javascript/markPullRequestsAsDeployed/index.js +++ b/.github/actions/javascript/markPullRequestsAsDeployed/index.js @@ -12840,7 +12840,6 @@ async function run() { const isProd = ActionUtils.getJSONInput('IS_PRODUCTION_DEPLOY', { required: true }); const version = core.getInput('DEPLOY_VERSION', { required: true }); const androidResult = getDeployTableMessage(core.getInput('ANDROID', { required: true })); - const desktopResult = getDeployTableMessage(core.getInput('DESKTOP', { required: true })); const iOSResult = getDeployTableMessage(core.getInput('IOS', { required: true })); const webResult = getDeployTableMessage(core.getInput('WEB', { required: true })); const date = core.getInput('DATE'); @@ -12852,7 +12851,7 @@ async function run() { message += `on ${date}`; } message += `šŸš€`; - message += `\n\nplatform | result\n---|---\nšŸ–„ desktop šŸ–„|${desktopResult}`; + message += `\n\nplatform | result\n---|---`; message += `\nšŸ•ø web šŸ•ø|${webResult}`; message += `\nšŸ¤– android šŸ¤–|${androidResult}\nšŸŽ iOS šŸŽ|${iOSResult}`; if (note) { diff --git a/.github/actions/javascript/markPullRequestsAsDeployed/markPullRequestsAsDeployed.ts b/.github/actions/javascript/markPullRequestsAsDeployed/markPullRequestsAsDeployed.ts index 93131cb8125e..bf7ce3c35f44 100644 --- a/.github/actions/javascript/markPullRequestsAsDeployed/markPullRequestsAsDeployed.ts +++ b/.github/actions/javascript/markPullRequestsAsDeployed/markPullRequestsAsDeployed.ts @@ -103,7 +103,6 @@ async function run() { const version = core.getInput('DEPLOY_VERSION', {required: true}); const androidResult = getDeployTableMessage(core.getInput('ANDROID', {required: true}) as PlatformResult); - const desktopResult = getDeployTableMessage(core.getInput('DESKTOP', {required: true}) as PlatformResult); const iOSResult = getDeployTableMessage(core.getInput('IOS', {required: true}) as PlatformResult); const webResult = getDeployTableMessage(core.getInput('WEB', {required: true}) as PlatformResult); @@ -117,7 +116,7 @@ async function run() { message += `on ${date}`; } message += `šŸš€`; - message += `\n\nplatform | result\n---|---\nšŸ–„ desktop šŸ–„|${desktopResult}`; + message += `\n\nplatform | result\n---|---`; message += `\nšŸ•ø web šŸ•ø|${webResult}`; message += `\nšŸ¤– android šŸ¤–|${androidResult}\nšŸŽ iOS šŸŽ|${iOSResult}`; diff --git a/.github/actions/javascript/postTestBuildComment/action.yml b/.github/actions/javascript/postTestBuildComment/action.yml index ad97aa9015f4..ea2c75475f9e 100644 --- a/.github/actions/javascript/postTestBuildComment/action.yml +++ b/.github/actions/javascript/postTestBuildComment/action.yml @@ -16,9 +16,6 @@ inputs: ANDROID: description: "Android job result ('success', 'failure', 'cancelled', or 'skipped')" required: false - DESKTOP: - description: "Desktop job result ('success', 'failure', 'cancelled', or 'skipped')" - required: false IOS: description: "iOS job result ('success', 'failure', 'cancelled', or 'skipped')" required: false @@ -28,9 +25,6 @@ inputs: ANDROID_LINK: description: "Link for the Android build" required: false - DESKTOP_LINK: - description: "Link for the desktop build" - required: false IOS_LINK: description: "Link for the iOS build" required: false diff --git a/.github/actions/javascript/postTestBuildComment/index.js b/.github/actions/javascript/postTestBuildComment/index.js index eb1ade0901c4..3a31cd257a72 100644 --- a/.github/actions/javascript/postTestBuildComment/index.js +++ b/.github/actions/javascript/postTestBuildComment/index.js @@ -11585,12 +11585,11 @@ const github_1 = __nccwpck_require__(5438); const CONST_1 = __importDefault(__nccwpck_require__(9873)); const GithubUtils_1 = __importDefault(__nccwpck_require__(9296)); function getTestBuildMessage(appPr, mobileExpensifyPr) { - const inputs = ['ANDROID', 'DESKTOP', 'IOS', 'WEB']; + const inputs = ['ANDROID', 'IOS', 'WEB']; const names = { [inputs[0]]: 'Android', - [inputs[1]]: 'Desktop', - [inputs[2]]: 'iOS', - [inputs[3]]: 'Web', + [inputs[1]]: 'iOS', + [inputs[2]]: 'Web', }; const result = inputs.reduce((acc, platform) => { const input = core.getInput(platform, { required: false }); @@ -11619,17 +11618,17 @@ function getTestBuildMessage(appPr, mobileExpensifyPr) { }; return acc; }, {}); - const message = `:test_tube::test_tube: Use the links below to test this adhoc build on Android, iOS${appPr ? ', Desktop, and Web' : ''}. Happy testing! :test_tube::test_tube: + const message = `:test_tube::test_tube: Use the links below to test this adhoc build on Android, iOS${appPr ? ', and Web' : ''}. Happy testing! :test_tube::test_tube: Built from${appPr ? ` App PR Expensify/App#${appPr}` : ''}${mobileExpensifyPr ? ` Mobile-Expensify PR Expensify/Mobile-Expensify#${mobileExpensifyPr}` : ''}. | Android :robot: | iOS :apple: | | ------------- | ------------- | | ${result.ANDROID.link} | ${result.IOS.link} | | ${result.ANDROID.qrCode} | ${result.IOS.qrCode} | -| Desktop :computer: | Web :spider_web: | -| ------------- | ------------- | -| ${result.DESKTOP.link} | ${result.WEB.link} | -| ${result.DESKTOP.qrCode} | ${result.WEB.qrCode} | +| Web :spider_web: | +| ------------- | +| ${result.WEB.link} | +| ${result.WEB.qrCode} | --- diff --git a/.github/actions/javascript/postTestBuildComment/postTestBuildComment.ts b/.github/actions/javascript/postTestBuildComment/postTestBuildComment.ts index 8a825cf8e09c..a2278e10fce5 100644 --- a/.github/actions/javascript/postTestBuildComment/postTestBuildComment.ts +++ b/.github/actions/javascript/postTestBuildComment/postTestBuildComment.ts @@ -5,12 +5,11 @@ import CONST from '@github/libs/CONST'; import GithubUtils from '@github/libs/GithubUtils'; function getTestBuildMessage(appPr?: number, mobileExpensifyPr?: number): string { - const inputs = ['ANDROID', 'DESKTOP', 'IOS', 'WEB'] as const; + const inputs = ['ANDROID', 'IOS', 'WEB'] as const; const names = { [inputs[0]]: 'Android', - [inputs[1]]: 'Desktop', - [inputs[2]]: 'iOS', - [inputs[3]]: 'Web', + [inputs[1]]: 'iOS', + [inputs[2]]: 'Web', }; const result = inputs.reduce( @@ -47,17 +46,17 @@ function getTestBuildMessage(appPr?: number, mobileExpensifyPr?: number): string {} as Record, {link: string; qrCode: string}>, ); - const message = `:test_tube::test_tube: Use the links below to test this adhoc build on Android, iOS${appPr ? ', Desktop, and Web' : ''}. Happy testing! :test_tube::test_tube: + const message = `:test_tube::test_tube: Use the links below to test this adhoc build on Android, iOS${appPr ? ', and Web' : ''}. Happy testing! :test_tube::test_tube: Built from${appPr ? ` App PR Expensify/App#${appPr}` : ''}${mobileExpensifyPr ? ` Mobile-Expensify PR Expensify/Mobile-Expensify#${mobileExpensifyPr}` : ''}. | Android :robot: | iOS :apple: | | ------------- | ------------- | | ${result.ANDROID.link} | ${result.IOS.link} | | ${result.ANDROID.qrCode} | ${result.IOS.qrCode} | -| Desktop :computer: | Web :spider_web: | -| ------------- | ------------- | -| ${result.DESKTOP.link} | ${result.WEB.link} | -| ${result.DESKTOP.qrCode} | ${result.WEB.qrCode} | +| Web :spider_web: | +| ------------- | +| ${result.WEB.link} | +| ${result.WEB.qrCode} | --- diff --git a/.github/workflows/checkE2ETestCode.yml b/.github/workflows/checkE2ETestCode.yml index 60ca53e2699f..25c2be16c28b 100644 --- a/.github/workflows/checkE2ETestCode.yml +++ b/.github/workflows/checkE2ETestCode.yml @@ -19,8 +19,6 @@ jobs: - name: Setup Node uses: ./.github/actions/composite/setupNode - with: - IS_DESKTOP_BUILD: 'true' - name: Verify e2e tests compile correctly run: npm run e2e-test-runner-build diff --git a/.github/workflows/checkSVGCompression.yml b/.github/workflows/checkSVGCompression.yml index 5947a04a454d..534c5aaf367d 100644 --- a/.github/workflows/checkSVGCompression.yml +++ b/.github/workflows/checkSVGCompression.yml @@ -26,8 +26,6 @@ jobs: - name: Setup Node uses: ./.github/actions/composite/setupNode - with: - IS_DESKTOP_BUILD: true - name: Compress SVG check uses: ./.github/actions/javascript/checkSVGCompression diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 7b2806975575..12044de11aff 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -293,70 +293,6 @@ jobs: GITHUB_TOKEN: ${{ github.token }} SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} - desktop: - name: Build and deploy Desktop - needs: prep - runs-on: macos-14-large - steps: - - name: Checkout - # v4 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - - - name: Setup Node - uses: ./.github/actions/composite/setupNode - with: - IS_DESKTOP_BUILD: true - - # v6.0.0 - - name: Setup Python for node-gyp - id: setup-python - uses: actions/setup-python@18566f86b301499665bd3eb1a2247e0849c64fa5 - with: - python-version: '3.12' - cache: 'pip' - cache-dependency-path: desktop/requirements.txt - - - name: Ensure setuptools for node-gyp - run: pip install --upgrade -r desktop/requirements.txt - - - name: Load Desktop credentials from 1Password - id: load-credentials - # v2 - uses: 1password/load-secrets-action@581a835fb51b8e7ec56b71cf2ffddd7e68bb25e0 - with: - export-env: false - env: - OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }} - DESKTOP_CERTIFICATE_BASE64: "op://${{ vars.OP_VAULT }}/Desktop Certificates.p12/CSC_LINK" - DESKTOP_CERTIFICATE_PASSWORD: "op://${{ vars.OP_VAULT }}/Desktop Certificates.p12/CSC_KEY_PASSWORD" - - - name: Build desktop app - run: ${{ github.ref == 'refs/heads/production' && 'npm run desktop-build' || 'npm run desktop-build-staging' }} - env: - CSC_LINK: ${{ steps.load-credentials.outputs.DESKTOP_CERTIFICATE_BASE64 }} - CSC_KEY_PASSWORD: ${{ steps.load-credentials.outputs.DESKTOP_CERTIFICATE_PASSWORD }} - APPLE_ID: ${{ secrets.APPLE_ID }} - APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} - APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - GCP_GEOLOCATION_API_KEY: ${{ secrets.GCP_GEOLOCATION_API_KEY_PRODUCTION }} - S3_BUCKET: ${{ github.ref == 'refs/heads/production' && vars.PRODUCTION_S3_BUCKET || vars.STAGING_S3_BUCKET }} - - - name: Upload desktop sourcemaps artifact - # v4 - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 - with: - name: desktop-sourcemaps-artifact - path: ./desktop/dist/www/merged-source-map.js.map - - - name: Upload desktop build artifact - # v4 - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 - with: - name: desktop-build-artifact - path: ./desktop-build/NewExpensify.dmg - ios: name: Build and deploy iOS HybridApp needs: prep @@ -625,7 +561,7 @@ jobs: name: Post a Slack message when any platform fails to build or deploy runs-on: ubuntu-latest if: ${{ failure() }} - needs: [android, desktop, ios, web] + needs: [android, ios, web] steps: - name: Checkout # v4 @@ -641,7 +577,7 @@ jobs: outputs: IS_AT_LEAST_ONE_PLATFORM_DEPLOYED: ${{ steps.checkDeploymentSuccessOnAtLeastOnePlatform.outputs.IS_AT_LEAST_ONE_PLATFORM_DEPLOYED }} IS_ALL_PLATFORMS_DEPLOYED: ${{ steps.checkDeploymentSuccessOnAllPlatforms.outputs.IS_ALL_PLATFORMS_DEPLOYED }} - needs: [android, desktop, ios, web] + needs: [android, ios, web] if: ${{ always() }} steps: - name: Check deployment success on at least one platform @@ -650,7 +586,6 @@ jobs: isAtLeastOnePlatformDeployed="false" if [ "${{ needs.iOS.result }}" == "success" ] || \ [ "${{ needs.android.result }}" == "success" ] || \ - [ "${{ needs.desktop.result }}" == "success" ] || \ [ "${{ needs.web.result }}" == "success" ]; then isAtLeastOnePlatformDeployed="true" fi @@ -663,7 +598,6 @@ jobs: isAllPlatformsDeployed="false" if [ "${{ needs.iOS.result }}" == "success" ] && \ [ "${{ needs.android.result }}" == "success" ] && \ - [ "${{ needs.desktop.result }}" == "success" ] && \ [ "${{ needs.web.result }}" == "success" ]; then isAllPlatformsDeployed="true" fi @@ -711,10 +645,9 @@ jobs: env: GITHUB_TOKEN: ${{ github.token }} - - name: Rename web and desktop sourcemaps artifacts before assets upload in order to have unique ReleaseAsset.name + - name: Rename web sourcemaps artifacts before assets upload in order to have unique ReleaseAsset.name continue-on-error: true run: | - mv ./desktop-sourcemaps-artifact/merged-source-map.js.map ./desktop-sourcemaps-artifact/desktop-merged-source-map.js.map mv ./web-sourcemaps-artifact/merged-source-map.js.map ./web-sourcemaps-artifact/web-merged-source-map.js.map - name: Upload artifacts to GitHub Release @@ -725,8 +658,6 @@ jobs: ./android-build-artifact/Expensify-release.aab#android.aab ./android-apk-artifact/Expensify.apk#android.apk ./android-sourcemap-artifact/index.android.bundle.map#android-sourcemap.js.map - ./desktop-sourcemaps-artifact/desktop-merged-source-map.js.map#desktop-sourcemap.js.map - ./desktop-build-artifact/NewExpensify.dmg#desktop.dmg ./ios-build-artifact/Expensify.ipa#ios.ipa ./ios-sourcemap-artifact/main.jsbundle.map#ios-sourcemap.js.map ./web-sourcemaps-artifact/web-merged-source-map.js.map#web-sourcemap.js.map @@ -786,7 +717,7 @@ jobs: name: Post a Slack message when all platforms deploy successfully runs-on: ubuntu-latest if: ${{ always() && fromJSON(needs.checkDeploymentSuccess.outputs.IS_ALL_PLATFORMS_DEPLOYED) }} - needs: [prep, android, desktop, ios, web, checkDeploymentSuccess, createRelease] + needs: [prep, android, ios, web, checkDeploymentSuccess, createRelease] steps: - name: 'Announces the deploy in the #announce Slack room' # v3 @@ -843,7 +774,7 @@ jobs: postGithubComments: uses: ./.github/workflows/postDeployComments.yml if: ${{ always() && fromJSON(needs.checkDeploymentSuccess.outputs.IS_AT_LEAST_ONE_PLATFORM_DEPLOYED) }} - needs: [prep, android, desktop, ios, web, checkDeploymentSuccess, createRelease] + needs: [prep, android, ios, web, checkDeploymentSuccess, createRelease] secrets: inherit with: version: ${{ needs.prep.outputs.APP_VERSION }} @@ -851,4 +782,3 @@ jobs: android: ${{ needs.android.result }} ios: ${{ needs.ios.result }} web: ${{ needs.web.result }} - desktop: ${{ needs.desktop.result }} diff --git a/.github/workflows/e2ePerformanceTests.yml b/.github/workflows/e2ePerformanceTests.yml index de82e002c96b..822deea3edd6 100644 --- a/.github/workflows/e2ePerformanceTests.yml +++ b/.github/workflows/e2ePerformanceTests.yml @@ -113,8 +113,6 @@ jobs: - name: Setup Node uses: ./.github/actions/composite/setupNode - with: - IS_DESKTOP_BUILD: 'true' - name: Make zip directory for everything to send to AWS Device Farm run: mkdir zip diff --git a/.github/workflows/lint-changed.yml b/.github/workflows/lint-changed.yml index 62971f8627ff..a4c79d6f1351 100644 --- a/.github/workflows/lint-changed.yml +++ b/.github/workflows/lint-changed.yml @@ -54,8 +54,6 @@ jobs: - name: Setup Node uses: ./.github/actions/composite/setupNode - with: - IS_DESKTOP_BUILD: true - name: Remove E/App version from package-lock.json shell: bash diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index a41635bfa918..b72d68929d5f 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -23,8 +23,6 @@ jobs: - name: Setup Node uses: ./.github/actions/composite/setupNode - with: - IS_DESKTOP_BUILD: true - name: Remove E/App version from package-lock.json shell: bash diff --git a/.github/workflows/postDeployComments.yml b/.github/workflows/postDeployComments.yml index 1b653085c114..35123e3d1504 100644 --- a/.github/workflows/postDeployComments.yml +++ b/.github/workflows/postDeployComments.yml @@ -23,10 +23,6 @@ on: description: Web deploy status required: true type: string - desktop: - description: Desktop deploy status - required: true - type: string secrets: OS_BOTIFY_TOKEN: description: Token for accessing Mobile-Expensify repository @@ -71,15 +67,6 @@ on: - failure - cancelled - skipped - desktop: - description: Desktop deploy status - required: true - type: choice - options: - - success - - failure - - cancelled - - skipped date: description: The date when this deploy occurred required: false @@ -118,7 +105,6 @@ jobs: DEPLOY_VERSION: ${{ inputs.version }} GITHUB_TOKEN: ${{ secrets.OS_BOTIFY_TOKEN }} ANDROID: ${{ inputs.android }} - DESKTOP: ${{ inputs.desktop }} IOS: ${{ inputs.ios }} WEB: ${{ inputs.web }} DATE: ${{ inputs.date }} diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml index a358d6ef8227..1c66f8649ac9 100644 --- a/.github/workflows/prettier.yml +++ b/.github/workflows/prettier.yml @@ -23,8 +23,6 @@ jobs: - name: Setup Node uses: ./.github/actions/composite/setupNode - with: - IS_DESKTOP_BUILD: true - name: Verify there's no Prettier diff run: | diff --git a/.github/workflows/testBuild.yml b/.github/workflows/testBuild.yml index 6897e796e3ca..e189817609e9 100644 --- a/.github/workflows/testBuild.yml +++ b/.github/workflows/testBuild.yml @@ -22,10 +22,6 @@ on: description: Should build web app? type: boolean default: true - DESKTOP: - description: Should build desktop app? - type: boolean - default: true IOS: description: Should build iOS app? type: boolean @@ -182,75 +178,6 @@ jobs: body: `🚧 @${{ github.actor }} has triggered a test Expensify/Mobile-Expensify build. You can view the [workflow run here](${workflowURL}).` }); - desktop: - name: Build and deploy Desktop for testing - if: ${{ inputs.DESKTOP && needs.prep.outputs.APP_PR_NUMBER }} - needs: [prep] - runs-on: macos-14-large - env: - PULL_REQUEST_NUMBER: ${{ needs.prep.outputs.APP_PR_NUMBER }} - steps: - - name: Checkout - # v4 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 - with: - ref: ${{ needs.prep.outputs.APP_REF }} - - - name: Create .env.adhoc file based on staging and add PULL_REQUEST_NUMBER env to it - run: | - cp .env.staging .env.adhoc - sed -i '' 's/ENVIRONMENT=staging/ENVIRONMENT=adhoc/' .env.adhoc - echo "PULL_REQUEST_NUMBER=$PULL_REQUEST_NUMBER" >> .env.adhoc - - - name: Setup Node - uses: ./.github/actions/composite/setupNode - with: - IS_DESKTOP_BUILD: true - - # v6.0.0 - - name: Setup python for node-gyp - id: setup-python - uses: actions/setup-python@18566f86b301499665bd3eb1a2247e0849c64fa5 - with: - python-version: '3.12' - cache: 'pip' - cache-dependency-path: desktop/requirements.txt - - - name: Ensure setuptools for node-gyp - run: pip install --upgrade -r desktop/requirements.txt - - - name: Load Desktop credentials from 1Password - id: load-credentials - # v2 - uses: 1password/load-secrets-action@581a835fb51b8e7ec56b71cf2ffddd7e68bb25e0 - with: - export-env: false - env: - OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }} - DESKTOP_CERTIFICATE_BASE64: "op://${{ vars.OP_VAULT }}/Desktop Certificates.p12/CSC_LINK" - DESKTOP_CERTIFICATE_PASSWORD: "op://${{ vars.OP_VAULT }}/Desktop Certificates.p12/CSC_KEY_PASSWORD" - - - name: Configure AWS Credentials - # v4 - uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 - 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 desktop app for testing - run: npm run desktop-build-adhoc - env: - CSC_LINK: ${{ steps.load-credentials.outputs.DESKTOP_CERTIFICATE_BASE64 }} - CSC_KEY_PASSWORD: ${{ steps.load-credentials.outputs.DESKTOP_CERTIFICATE_PASSWORD }} - APPLE_ID: ${{ secrets.APPLE_ID }} - APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} - APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - GCP_GEOLOCATION_API_KEY: ${{ secrets.GCP_GEOLOCATION_API_KEY_STAGING }} - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - web: name: Build and deploy Web if: ${{ inputs.WEB && needs.prep.outputs.APP_PR_NUMBER }} @@ -524,7 +451,7 @@ jobs: runs-on: ubuntu-latest if: always() name: Post a GitHub comment with app download links for testing - needs: [prep, getMobileExpensifyPR, desktop, web, androidHybrid, iosHybrid] + needs: [prep, getMobileExpensifyPR, web, androidHybrid, iosHybrid] steps: - name: Checkout # v4 @@ -545,11 +472,9 @@ jobs: MOBILE_EXPENSIFY_PR_NUMBER: ${{ needs.getMobileExpensifyPR.outputs.MOBILE_EXPENSIFY_PR }} GITHUB_TOKEN: ${{ github.token }} ANDROID: ${{ needs.androidHybrid.result }} - DESKTOP: ${{ needs.desktop.result }} IOS: ${{ needs.iosHybrid.result }} WEB: ${{ needs.web.result }} ANDROID_LINK: ${{ needs.androidHybrid.outputs.ROCK_ANDROID_ADHOC_INDEX_URL }} - DESKTOP_LINK: https://ad-hoc-expensify-cash.s3.amazonaws.com/desktop/${{ needs.prep.outputs.APP_PR_NUMBER }}/NewExpensify.dmg IOS_LINK: ${{ needs.iosHybrid.outputs.ROCK_IOS_ADHOC_INDEX_URL }} WEB_LINK: https://${{ needs.prep.outputs.APP_PR_NUMBER }}.pr-testing.expensify.com diff --git a/.github/workflows/typecheck.yml b/.github/workflows/typecheck.yml index c675f3a3b5a2..6d48f9a933c8 100644 --- a/.github/workflows/typecheck.yml +++ b/.github/workflows/typecheck.yml @@ -19,8 +19,6 @@ jobs: - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4 - uses: ./.github/actions/composite/setupNode - with: - IS_DESKTOP_BUILD: true - name: Type check with TypeScript run: npm run typecheck diff --git a/contributingGuides/SETUP_WEB.md b/contributingGuides/SETUP_WEB.md index db25bc371d23..533af3b30741 100644 --- a/contributingGuides/SETUP_WEB.md +++ b/contributingGuides/SETUP_WEB.md @@ -55,7 +55,7 @@ Creating an `.env` file is not necessary. We advise external contributors agains - `EXPENSIFY_PARTNER_NAME` - Constant used for the app when authenticating. - `EXPENSIFY_PARTNER_PASSWORD` - Another constant used for the app when authenticating. (This is OK to be public) - `PUSHER_APP_KEY` - Key used to authenticate with Pusher.com -- `USE_WEB_PROXY`āš ļø- Used in web/desktop development, it starts a server along the local development server to proxy requests to the backend. External contributors should set this to `true` otherwise they'll have CORS errors. If you don't want to start the proxy server set this explicitly to `false` +- `USE_WEB_PROXY`āš ļø- Used in web development, it starts a server along the local development server to proxy requests to the backend. External contributors should set this to `true` otherwise they'll have CORS errors. If you don't want to start the proxy server set this explicitly to `false` ### Optional Performance Variables - `CAPTURE_METRICS` (optional) - Set this to `true` to capture performance metrics and see them in Flipper. See [PERFORMANCE.md](contributingGuides/PERFORMANCE.md#performance-metrics-opt-in-on-local-release-builds) for more information diff --git a/contributingGuides/philosophies/DEPLOYING.md b/contributingGuides/philosophies/DEPLOYING.md index 584ed5fdecef..69f6c0fb6c4b 100644 --- a/contributingGuides/philosophies/DEPLOYING.md +++ b/contributingGuides/philosophies/DEPLOYING.md @@ -53,7 +53,7 @@ The [`deploy` workflow](https://github.com/Expensify/App/blob/main/.github/workf - If `production` was updated, it creates a GitHub Release for the new version. ### platformDeploy -The [`platformDeploy` workflow](https://github.com/Expensify/App/blob/main/.github/workflows/platformDeploy.yml) is what actually runs the deployment on all four platforms (iOS, Android, Web, macOS Desktop). It runs a staging deploy whenever a new tag is pushed to GitHub, and runs a production deploy whenever a new release is created. +The [`platformDeploy` workflow](https://github.com/Expensify/App/blob/main/.github/workflows/platformDeploy.yml) is what actually runs the deployment on all three platforms (iOS, Android, Web). It runs a staging deploy whenever a new tag is pushed to GitHub, and runs a production deploy whenever a new release is created. ### lockDeploys The [`lockDeploys` workflow](https://github.com/Expensify/App/blob/main/.github/workflows/lockDeploys.yml) executes when the `StagingDeployCash` is locked, and it waits for any currently running staging deploys to finish, then gives Applause the :green_circle: to begin QA by commenting in the `StagingDeployCash` checklist. @@ -62,7 +62,7 @@ The [`lockDeploys` workflow](https://github.com/Expensify/App/blob/main/.github/ The [`finishReleaseCycle` workflow](https://github.com/Expensify/App/blob/main/.github/workflows/finishReleaseCycle.yml) executes when the `StagingDeployCash` is closed. It updates the `production` branch from `staging` (triggering a production deploy), deploys `main` to staging (with a new `PATCH` version), and creates a new `StagingDeployCash` deploy checklist. ### testBuild -The [`testBuild` workflow](https://github.com/Expensify/App/blob/main/.github/workflows/testBuild.yml) builds ad-hoc staging apps (hybrid iOS, hybrid Android, web, and desktop) from pull requests submitted to the App and Mobile-Expensify repositories. This process enables testers to review modifications before they are merged into the main branch and deployed to the staging environment. This workflow accepts up to two inputs: +The [`testBuild` workflow](https://github.com/Expensify/App/blob/main/.github/workflows/testBuild.yml) builds ad-hoc staging apps (hybrid iOS, hybrid Android, and web) from pull requests submitted to the App and Mobile-Expensify repositories. This process enables testers to review modifications before they are merged into the main branch and deployed to the staging environment. This workflow accepts up to two inputs: - A PR number from the App repository for testing New Dot (ND) changes. - A PR number from the Mobile-Expensify repository for testing Old Dot (OD) changes. @@ -75,26 +75,6 @@ Sometimes it might be beneficial to generate a local production version instead ### - Web app local production builds SHOULD use `npm run build` In order to generate a production web build, run `npm run build`, this will generate a production javascript build in the `dist/` folder. -### - MacOS desktop app local production builds SHOULD disable publishing for local testing -The commands used to compile a production or staging desktop build are `npm run desktop-build` and `npm run desktop-build-staging`, respectively. These will produce an app in the `dist/Mac` folder named NewExpensify.dmg that you can install like a normal app. - -HOWEVER, by default those commands will try to notarize the build (signing it as Expensify) and publish it to the S3 bucket where it's hosted for users. In most cases you won't actually need or want to do that for your local testing. To get around that and disable those behaviors for your local build, apply the following diff: - -```diff -diff --git a/scripts/build-desktop.sh b/scripts/build-desktop.sh -index 791f59d733..526306eec1 100755 ---- a/scripts/build-desktop.sh -+++ b/scripts/build-desktop.sh -@@ -35,4 +35,4 @@ npx webpack --config config/webpack/webpack.desktop.ts --env file=$ENV_FILE - title "Building Desktop App Archive Using Electron" - info "" - shift 1 --npx electron-builder --config config/electronBuilder.config.js --publish always "$@" -+npx electron-builder --config config/electronBuilder.config.js --publish never "$@" -``` - -There may be some cases where you need to test a signed and published build, such as when testing the update flows. Instructions on setting that up can be found in [Testing Electron Auto-Update](https://github.com/Expensify/App/blob/main/desktop/README.md#testing-electron-auto-update). Good luck šŸ™ƒ - ### - iOS app local production builds SHOULD use `npm run ios-build` In order to compile a production iOS build, run `npm run ios-build`, this will generate a `Chat.ipa` in the root directory of this project. diff --git a/eslint.config.mjs b/eslint.config.mjs index 4a35d3b26db4..043cfac2108d 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -624,6 +624,7 @@ const config = defineConfig([ 'src/languages/pl.ts', 'src/languages/pt-BR.ts', 'src/languages/zh-hans.ts', + 'desktop/**/*', ]), ]); diff --git a/package.json b/package.json index c8717d318aa5..f0e365ef5567 100644 --- a/package.json +++ b/package.json @@ -32,12 +32,8 @@ "build": "tsx ./node_modules/.bin/webpack-cli --config config/webpack/webpack.common.ts --env file=.env.production && tsx ./scripts/combine-web-sourcemaps.ts", "build-staging": "tsx ./node_modules/.bin/webpack-cli --config config/webpack/webpack.common.ts --env file=.env.staging && tsx ./scripts/combine-web-sourcemaps.ts", "build-adhoc": "tsx ./node_modules/.bin/webpack-cli --config config/webpack/webpack.common.ts --env file=.env.adhoc && tsx ./scripts/combine-web-sourcemaps.ts", - "desktop": "./scripts/set-pusher-suffix.sh && ts-node desktop/start.ts", - "desktop-build": "./scripts/build-desktop.sh production", - "desktop-build-staging": "./scripts/build-desktop.sh staging", "createDocsRoutes": "ts-node .github/scripts/createDocsRoutes.ts", "detectRedirectCycle": "ts-node .github/scripts/detectRedirectCycle.ts", - "desktop-build-adhoc": "./scripts/build-desktop.sh adhoc", "ios-build": "bundle exec fastlane ios build_unsigned", "ios-hybrid-build": "bundle exec fastlane ios build_unsigned_hybrid", "android-build": "bundle exec fastlane android build_local", diff --git a/tests/unit/markPullRequestsAsDeployedTest.ts b/tests/unit/markPullRequestsAsDeployedTest.ts index d5242033c628..b63b442a8787 100644 --- a/tests/unit/markPullRequestsAsDeployedTest.ts +++ b/tests/unit/markPullRequestsAsDeployedTest.ts @@ -80,7 +80,6 @@ function mockGetInputDefaultImplementation(key: string): boolean | string { return version; case 'IOS': case 'ANDROID': - case 'DESKTOP': case 'WEB': return 'success'; case 'DATE': @@ -191,7 +190,6 @@ describe('markPullRequestsAsDeployed', () => { platform | result ---|--- -šŸ–„ desktop šŸ–„|success āœ… šŸ•ø web šŸ•ø|success āœ… šŸ¤– android šŸ¤–|success āœ… šŸŽ iOS šŸŽ|success āœ…`, @@ -221,7 +219,6 @@ platform | result platform | result ---|--- -šŸ–„ desktop šŸ–„|success āœ… šŸ•ø web šŸ•ø|success āœ… šŸ¤– android šŸ¤–|success āœ… šŸŽ iOS šŸŽ|success āœ…`, @@ -280,7 +277,6 @@ platform | result platform | result ---|--- -šŸ–„ desktop šŸ–„|success āœ… šŸ•ø web šŸ•ø|success āœ… šŸ¤– android šŸ¤–|success āœ… šŸŽ iOS šŸŽ|success āœ…`, @@ -298,9 +294,6 @@ platform | result if (key === 'IOS') { return 'failed'; } - if (key === 'DESKTOP') { - return 'cancelled'; - } return mockGetInputDefaultImplementation(key); }); @@ -315,7 +308,6 @@ platform | result platform | result ---|--- -šŸ–„ desktop šŸ–„|cancelled šŸ”Ŗ šŸ•ø web šŸ•ø|success āœ… šŸ¤– android šŸ¤–|skipped 🚫 šŸŽ iOS šŸŽ|failed āŒ`, diff --git a/tests/unit/postTestBuildComment.ts b/tests/unit/postTestBuildComment.ts index 137bf8def350..f7caf2dc6f61 100644 --- a/tests/unit/postTestBuildComment.ts +++ b/tests/unit/postTestBuildComment.ts @@ -46,41 +46,39 @@ jest.mock('@actions/github', () => ({ const androidLink = 'https://expensify.app/ANDROID_LINK'; const iOSLink = 'https://expensify.app/IOS_LINK'; const webLink = 'https://expensify.app/WEB_LINK'; -const desktopLink = 'https://expensify.app/DESKTOP_LINK'; const androidQRCode = `![Android](https://api.qrserver.com/v1/create-qr-code/?size=120x120&data=${androidLink})`; -const desktopQRCode = `![Desktop](https://api.qrserver.com/v1/create-qr-code/?size=120x120&data=${desktopLink})`; const iOSQRCode = `![iOS](https://api.qrserver.com/v1/create-qr-code/?size=120x120&data=${iOSLink})`; const webQRCode = `![Web](https://api.qrserver.com/v1/create-qr-code/?size=120x120&data=${webLink})`; -const message = `:test_tube::test_tube: Use the links below to test this adhoc build on Android, iOS, Desktop, and Web. Happy testing! :test_tube::test_tube: +const message = `:test_tube::test_tube: Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! :test_tube::test_tube: Built from App PR Expensify/App#12 Mobile-Expensify PR Expensify/Mobile-Expensify#13. | Android :robot: | iOS :apple: | | ------------- | ------------- | | ${androidLink} | ${iOSLink} | | ${androidQRCode} | ${iOSQRCode} | -| Desktop :computer: | Web :spider_web: | -| ------------- | ------------- | -| ${desktopLink} | ${webLink} | -| ${desktopQRCode} | ${webQRCode} | +| Web :spider_web: | +| ------------- | +| ${webLink} | +| ${webQRCode} | --- :eyes: [View the workflow run that generated this build](https://github.com/${process.env.GITHUB_REPOSITORY}/actions/runs/1234) :eyes: `; -const onlyAppMessage = `:test_tube::test_tube: Use the links below to test this adhoc build on Android, iOS, Desktop, and Web. Happy testing! :test_tube::test_tube: +const onlyAppMessage = `:test_tube::test_tube: Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! :test_tube::test_tube: Built from App PR Expensify/App#12. | Android :robot: | iOS :apple: | | ------------- | ------------- | | ${androidLink} | ā© SKIPPED ā© | | ${androidQRCode} | The build for iOS was skipped | -| Desktop :computer: | Web :spider_web: | -| ------------- | ------------- | -| āŒ FAILED āŒ | ā© SKIPPED ā© | -| The QR code can't be generated, because the Desktop build failed | The build for Web was skipped | +| Web :spider_web: | +| ------------- | +| ā© SKIPPED ā© | +| The build for Web was skipped | --- @@ -94,10 +92,10 @@ Built from Mobile-Expensify PR Expensify/Mobile-Expensify#13. | ${androidLink} | ${iOSLink} | | ${androidQRCode} | ${iOSQRCode} | -| Desktop :computer: | Web :spider_web: | -| ------------- | ------------- | -| ā© SKIPPED ā© | ā© SKIPPED ā© | -| The build for Desktop was skipped | The build for Web was skipped | +| Web :spider_web: | +| ------------- | +| ā© SKIPPED ā© | +| The build for Web was skipped | --- @@ -119,16 +117,14 @@ describe('Post test build comments action tests', () => { when(core.getInput).calledWith('ANDROID', {required: false}).mockReturnValue('success'); when(core.getInput).calledWith('IOS', {required: false}).mockReturnValue('success'); when(core.getInput).calledWith('WEB', {required: false}).mockReturnValue('success'); - when(core.getInput).calledWith('DESKTOP', {required: false}).mockReturnValue('success'); when(core.getInput).calledWith('ANDROID_LINK').mockReturnValue(androidLink); when(core.getInput).calledWith('IOS_LINK').mockReturnValue(iOSLink); when(core.getInput).calledWith('WEB_LINK').mockReturnValue('https://expensify.app/WEB_LINK'); - when(core.getInput).calledWith('DESKTOP_LINK').mockReturnValue('https://expensify.app/DESKTOP_LINK'); createCommentMock.mockResolvedValue({} as CreateCommentResponse); mockListComments.mockResolvedValue({ data: [ { - body: ':test_tube::test_tube: Use the links below to test this adhoc build on Android, iOS, Desktop, and Web. Happy testing!', + body: ':test_tube::test_tube: Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing!', // eslint-disable-next-line @typescript-eslint/naming-convention node_id: 'IC_abcd', }, @@ -156,13 +152,12 @@ describe('Post test build comments action tests', () => { when(core.getInput).calledWith('ANDROID', {required: false}).mockReturnValue('success'); when(core.getInput).calledWith('IOS', {required: false}).mockReturnValue('skipped'); when(core.getInput).calledWith('WEB', {required: false}).mockReturnValue('skipped'); - when(core.getInput).calledWith('DESKTOP', {required: false}).mockReturnValue('failure'); when(core.getInput).calledWith('ANDROID_LINK').mockReturnValue('https://expensify.app/ANDROID_LINK'); createCommentMock.mockResolvedValue({} as CreateCommentResponse); mockListComments.mockResolvedValue({ data: [ { - body: ':test_tube::test_tube: Use the links below to test this adhoc build on Android, iOS, Desktop, and Web. Happy testing!', + body: ':test_tube::test_tube: Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing!', // eslint-disable-next-line @typescript-eslint/naming-convention node_id: 'IC_abcd', }, @@ -192,7 +187,6 @@ describe('Post test build comments action tests', () => { when(core.getInput).calledWith('ANDROID_LINK').mockReturnValue(androidLink); when(core.getInput).calledWith('IOS_LINK').mockReturnValue(iOSLink); when(core.getInput).calledWith('WEB', {required: false}).mockReturnValue('skipped'); - when(core.getInput).calledWith('DESKTOP', {required: false}).mockReturnValue('skipped'); createCommentMock.mockResolvedValue({} as CreateCommentResponse); mockListComments.mockResolvedValue({ data: [ diff --git a/tsconfig.json b/tsconfig.json index 0737b7cb4b64..38de5ae33959 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -34,7 +34,6 @@ }, "include": [ "src", - "desktop", "web", "website", "docs", From 95360f9a2e2913b73ae539319c10c4860faacbf4 Mon Sep 17 00:00:00 2001 From: situchan Date: Tue, 6 Jan 2026 23:12:18 +0600 Subject: [PATCH 2/2] remove desktop in Performance.md --- .github/ISSUE_TEMPLATE/Performance.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/Performance.md b/.github/ISSUE_TEMPLATE/Performance.md index ef5d7f440a45..aee26100e4a7 100644 --- a/.github/ISSUE_TEMPLATE/Performance.md +++ b/.github/ISSUE_TEMPLATE/Performance.md @@ -32,7 +32,6 @@ Select the officially supported platforms where the issue was reproduced: - [ ] iOS: mWeb Chrome - [ ] Windows: Chrome - [ ] MacOS: Chrome / Safari -- [ ] MacOS: Desktop
Platforms Tested: @@ -45,7 +44,6 @@ On which of our officially supported platforms was this issue tested: - [ ] iOS: mWeb Chrome - [ ] Windows: Chrome - [ ] MacOS: Chrome / Safari -- [ ] MacOS: Desktop