From 4e9d873fa051a21a08899584a7eac21fdaf008aa Mon Sep 17 00:00:00 2001 From: Tomasz Lesniakiewicz Date: Thu, 19 Feb 2026 14:47:22 +0100 Subject: [PATCH 01/20] set-up-sentry-release-upload --- .github/workflows/deploy.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 49d68522541c0..d5c65851f611f 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -175,6 +175,15 @@ jobs: GITHUB_TOKEN: ${{ github.token }} SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + - name: Upload Android build to Sentry for size analysis + if: ${{ fromJSON(env.SHOULD_BUILD_APP) }} + continue-on-error: true + timeout-minutes: 5 + # TODO: Remove --log-level debug before merging + run: npx sentry-cli build upload ${{ env.aabPath }} --org expensify --project app --build-configuration Release --log-level debug + env: + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + - name: Upload Android app to Google Play if: ${{ fromJSON(env.SHOULD_BUILD_APP) }} run: bundle exec fastlane android ${{ vars.ANDROID_UPLOAD_COMMAND }} @@ -393,6 +402,15 @@ jobs: APPLE_NOTIFICATION_PROVISIONING_PROFILE_NAME: ${{ vars.APPLE_NOTIFICATION_PROVISIONING_PROFILE_NAME }} SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + - name: Upload iOS build to Sentry for size analysis + if: ${{ fromJSON(env.SHOULD_BUILD_APP) }} + continue-on-error: true + timeout-minutes: 5 + # TODO: Remove --log-level debug before merging + run: npx sentry-cli build upload ${{ env.ipaPath }} --org expensify --project app --build-configuration Release --log-level debug + env: + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + - name: Upload release build to TestFlight if: ${{ fromJSON(env.SHOULD_BUILD_APP) }} run: bundle exec fastlane ios upload_testflight_hybrid From 5f497e2a45fe58314029bed53d68a54dfd016ace Mon Sep 17 00:00:00 2001 From: Tomasz Lesniakiewicz Date: Thu, 19 Feb 2026 16:33:28 +0100 Subject: [PATCH 02/20] upload adhocsbuilds to Sentry --- .github/workflows/buildAdHoc.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/.github/workflows/buildAdHoc.yml b/.github/workflows/buildAdHoc.yml index 9fd322c10a9ab..cf644e6070049 100644 --- a/.github/workflows/buildAdHoc.yml +++ b/.github/workflows/buildAdHoc.yml @@ -226,6 +226,14 @@ jobs: custom-identifier: ${{ steps.computeIdentifier.outputs.IDENTIFIER }} validate-elf-alignment: false + - name: Upload Android build to Sentry for size analysis + if: ${{ env.ARTIFACT_PATH != '' }} + continue-on-error: true + timeout-minutes: 5 + run: npx sentry-cli build upload "$ARTIFACT_PATH" --org expensify --project app --build-configuration AdHoc --log-level debug + env: + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + - name: Upload Gradle profile report if: always() # v6 @@ -366,6 +374,14 @@ jobs: comment-bot: false custom-identifier: ${{ steps.computeIdentifier.outputs.IDENTIFIER }} + - name: Upload iOS build to Sentry for size analysis + if: ${{ env.ARTIFACT_PATH != '' }} + continue-on-error: true + timeout-minutes: 5 + run: npx sentry-cli build upload "$ARTIFACT_PATH" --org expensify --project app --build-configuration AdHoc --log-level debug + env: + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + - name: Set artifact URL output id: set-artifact-url run: echo "ARTIFACT_URL=$ARTIFACT_URL" >> "$GITHUB_OUTPUT" From b63b0149d5a6f15a76a6793e71a4efc708a0cb82 Mon Sep 17 00:00:00 2001 From: Tomasz Lesniakiewicz Date: Fri, 20 Feb 2026 12:50:08 +0100 Subject: [PATCH 03/20] install sentry-cli newest version --- package-lock.json | 464 ++++++++++++++++++++++++++++++++++++++++------ package.json | 1 + 2 files changed, 407 insertions(+), 58 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7cc57ca771c8b..212d86c7daeae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -188,6 +188,7 @@ "@rock-js/platform-ios": "0.12.10", "@rock-js/plugin-metro": "0.12.10", "@rock-js/provider-s3": "0.12.10", + "@sentry/cli": "3.2.0", "@sentry/webpack-plugin": "4.6.0", "@storybook/addon-a11y": "10.1.10", "@storybook/addon-docs": "10.1.10", @@ -13825,6 +13826,180 @@ "node": ">= 14" } }, + "node_modules/@sentry/bundler-plugin-core/node_modules/@sentry/cli": { + "version": "2.58.4", + "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-2.58.4.tgz", + "integrity": "sha512-ArDrpuS8JtDYEvwGleVE+FgR+qHaOp77IgdGSacz6SZy6Lv90uX0Nu4UrHCQJz8/xwIcNxSqnN22lq0dH4IqTg==", + "dev": true, + "hasInstallScript": true, + "license": "FSL-1.1-MIT", + "dependencies": { + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.6.7", + "progress": "^2.0.3", + "proxy-from-env": "^1.1.0", + "which": "^2.0.2" + }, + "bin": { + "sentry-cli": "bin/sentry-cli" + }, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@sentry/cli-darwin": "2.58.4", + "@sentry/cli-linux-arm": "2.58.4", + "@sentry/cli-linux-arm64": "2.58.4", + "@sentry/cli-linux-i686": "2.58.4", + "@sentry/cli-linux-x64": "2.58.4", + "@sentry/cli-win32-arm64": "2.58.4", + "@sentry/cli-win32-i686": "2.58.4", + "@sentry/cli-win32-x64": "2.58.4" + } + }, + "node_modules/@sentry/bundler-plugin-core/node_modules/@sentry/cli-darwin": { + "version": "2.58.4", + "resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-2.58.4.tgz", + "integrity": "sha512-kbTD+P4X8O+nsNwPxCywtj3q22ecyRHWff98rdcmtRrvwz8CKi/T4Jxn/fnn2i4VEchy08OWBuZAqaA5Kh2hRQ==", + "dev": true, + "license": "FSL-1.1-MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@sentry/bundler-plugin-core/node_modules/@sentry/cli-linux-arm": { + "version": "2.58.4", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-2.58.4.tgz", + "integrity": "sha512-rdQ8beTwnN48hv7iV7e7ZKucPec5NJkRdrrycMJMZlzGBPi56LqnclgsHySJ6Kfq506A2MNuQnKGaf/sBC9REA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "FSL-1.1-MIT", + "optional": true, + "os": [ + "linux", + "freebsd", + "android" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@sentry/bundler-plugin-core/node_modules/@sentry/cli-linux-arm64": { + "version": "2.58.4", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-2.58.4.tgz", + "integrity": "sha512-0g0KwsOozkLtzN8/0+oMZoOuQ0o7W6O+hx+ydVU1bktaMGKEJLMAWxOQNjsh1TcBbNIXVOKM/I8l0ROhaAb8Ig==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "FSL-1.1-MIT", + "optional": true, + "os": [ + "linux", + "freebsd", + "android" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@sentry/bundler-plugin-core/node_modules/@sentry/cli-linux-i686": { + "version": "2.58.4", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-2.58.4.tgz", + "integrity": "sha512-NseoIQAFtkziHyjZNPTu1Gm1opeQHt7Wm1LbLrGWVIRvUOzlslO9/8i6wETUZ6TjlQxBVRgd3Q0lRBG2A8rFYA==", + "cpu": [ + "x86", + "ia32" + ], + "dev": true, + "license": "FSL-1.1-MIT", + "optional": true, + "os": [ + "linux", + "freebsd", + "android" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@sentry/bundler-plugin-core/node_modules/@sentry/cli-linux-x64": { + "version": "2.58.4", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-2.58.4.tgz", + "integrity": "sha512-d3Arz+OO/wJYTqCYlSN3Ktm+W8rynQ/IMtSZLK8nu0ryh5mJOh+9XlXY6oDXw4YlsM8qCRrNquR8iEI1Y/IH+Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "FSL-1.1-MIT", + "optional": true, + "os": [ + "linux", + "freebsd", + "android" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@sentry/bundler-plugin-core/node_modules/@sentry/cli-win32-arm64": { + "version": "2.58.4", + "resolved": "https://registry.npmjs.org/@sentry/cli-win32-arm64/-/cli-win32-arm64-2.58.4.tgz", + "integrity": "sha512-bqYrF43+jXdDBh0f8HIJU3tbvlOFtGyRjHB8AoRuMQv9TEDUfENZyCelhdjA+KwDKYl48R1Yasb4EHNzsoO83w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "FSL-1.1-MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@sentry/bundler-plugin-core/node_modules/@sentry/cli-win32-i686": { + "version": "2.58.4", + "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-2.58.4.tgz", + "integrity": "sha512-3triFD6jyvhVcXOmGyttf+deKZcC1tURdhnmDUIBkiDPJKGT/N5xa4qAtHJlAB/h8L9jgYih9bvJnvvFVM7yug==", + "cpu": [ + "x86", + "ia32" + ], + "dev": true, + "license": "FSL-1.1-MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@sentry/bundler-plugin-core/node_modules/@sentry/cli-win32-x64": { + "version": "2.58.4", + "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-2.58.4.tgz", + "integrity": "sha512-cSzN4PjM1RsCZ4pxMjI0VI7yNCkxiJ5jmWncyiwHXGiXrV1eXYdQ3n1LhUYLZ91CafyprR0OhDcE+RVZ26Qb5w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "FSL-1.1-MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, "node_modules/@sentry/bundler-plugin-core/node_modules/brace-expansion": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", @@ -13914,56 +14089,58 @@ "license": "MIT" }, "node_modules/@sentry/cli": { - "version": "2.58.0", - "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-2.58.0.tgz", - "integrity": "sha512-ywfV2uYkNaW5BGFBgIEX+urkxWtY03GYKN08OLYJpfJeOWl5tzxAKKg+AkMZqnqsDqjCf8gLjZh7sF4jY+ZE1Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-3.2.0.tgz", + "integrity": "sha512-YLv/xgttSc8sRhK2xBoxmLS+yQlCW154ey2cXFsFe+yY73lXvQ9nZ7BkHmSc+YUl8y5CKHL+8edQLYV8O8PQMA==", + "dev": true, "hasInstallScript": true, - "license": "BSD-3-Clause", + "license": "FSL-1.1-MIT", "dependencies": { - "https-proxy-agent": "^5.0.0", - "node-fetch": "^2.6.7", "progress": "^2.0.3", "proxy-from-env": "^1.1.0", + "undici": "^6.22.0", "which": "^2.0.2" }, "bin": { "sentry-cli": "bin/sentry-cli" }, "engines": { - "node": ">= 10" + "node": ">= 18" }, "optionalDependencies": { - "@sentry/cli-darwin": "2.58.0", - "@sentry/cli-linux-arm": "2.58.0", - "@sentry/cli-linux-arm64": "2.58.0", - "@sentry/cli-linux-i686": "2.58.0", - "@sentry/cli-linux-x64": "2.58.0", - "@sentry/cli-win32-arm64": "2.58.0", - "@sentry/cli-win32-i686": "2.58.0", - "@sentry/cli-win32-x64": "2.58.0" + "@sentry/cli-darwin": "3.2.0", + "@sentry/cli-linux-arm": "3.2.0", + "@sentry/cli-linux-arm64": "3.2.0", + "@sentry/cli-linux-i686": "3.2.0", + "@sentry/cli-linux-x64": "3.2.0", + "@sentry/cli-win32-arm64": "3.2.0", + "@sentry/cli-win32-i686": "3.2.0", + "@sentry/cli-win32-x64": "3.2.0" } }, "node_modules/@sentry/cli-darwin": { - "version": "2.58.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-2.58.0.tgz", - "integrity": "sha512-dI8+85N2xNsQeJZBbfGkjFScYH0xP/8+TDgoA5YiWWxsD/qSlWv1pf2VCR83smMyfcjIkDiPYIxBDticD67skQ==", - "license": "BSD-3-Clause", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-3.2.0.tgz", + "integrity": "sha512-2If2h0P/X9K0UrwlpZYKnxBmIFfa957lAHGe5VmN64v8nEHk8dxcrX+NS9nX9H75eccLGzGMcYk0Zt0KQgQJ3g==", + "dev": true, + "license": "FSL-1.1-MIT", "optional": true, "os": [ "darwin" ], "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/@sentry/cli-linux-arm": { - "version": "2.58.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-2.58.0.tgz", - "integrity": "sha512-QxBWSQkm2OL8d0XXTUOcX5RYZzZGkMw48ubU4g/c4rlT06PuJV56Z03jsMQdJWUDzKmVYoJdvFV/whxYIkwmWw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-3.2.0.tgz", + "integrity": "sha512-NVcGcS9mceivVhi8W6iEnlcK96OlPMzOdM6xkIm+7+J0uXHgUyMyc+rT6p2QG3j8jI5I7qAl7fTHWluSX2lx3g==", "cpu": [ "arm" ], - "license": "BSD-3-Clause", + "dev": true, + "license": "FSL-1.1-MIT", "optional": true, "os": [ "linux", @@ -13971,17 +14148,18 @@ "android" ], "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/@sentry/cli-linux-arm64": { - "version": "2.58.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-2.58.0.tgz", - "integrity": "sha512-Fso5GImxQOigZqLHAHhz85w71zxS1bvL52PI/tcjadmKrIaJdD3ANukC0UcKyKuj9xhr/k1ufNR7V+2BD16kmg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-3.2.0.tgz", + "integrity": "sha512-YFpYIfYpXYzpSrIspmPOOPjXbxWp/Ve+F2hSIQb1tSKmcxFgaUm6WfuniYF8EIaLNa8YOLECf0xo78yGXBa+ug==", "cpu": [ "arm64" ], - "license": "BSD-3-Clause", + "dev": true, + "license": "FSL-1.1-MIT", "optional": true, "os": [ "linux", @@ -13989,18 +14167,19 @@ "android" ], "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/@sentry/cli-linux-i686": { - "version": "2.58.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-2.58.0.tgz", - "integrity": "sha512-Av+T5YwuTtbOpe/Fyr/lsbl5XIZTFspHCiAt4Kgtllme6T1ASIDhQDXDh/OVJ8So4pHkToTn3iH8mm8vLqBqOA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-3.2.0.tgz", + "integrity": "sha512-6SOxlF37NqRRKxEuvWryBM7MAgTisq0G6ZQzhI2iuWbcrmlLUDUW2Yssz3gAR01eYJ4jfpqvojSzPRDwqB0K+Q==", "cpu": [ "x86", "ia32" ], - "license": "BSD-3-Clause", + "dev": true, + "license": "FSL-1.1-MIT", "optional": true, "os": [ "linux", @@ -14008,17 +14187,18 @@ "android" ], "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/@sentry/cli-linux-x64": { - "version": "2.58.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-2.58.0.tgz", - "integrity": "sha512-AxK0eqZbHn0NGWsAE8bzt/iRMMUlqsx77kru/TIBQy9cMMJaq+rLb63W7HWXln4ER32nPZYx+JuhHD9UNiAFHA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-3.2.0.tgz", + "integrity": "sha512-7LRd0A74ma/1ejlTRPOoBiFiJr4LWkoE6CnA2XwAoYd0r62WUjGHtg6gIC+yElOCwtxXP7I9fOiV2BJIAq2DHw==", "cpu": [ "x64" ], - "license": "BSD-3-Clause", + "dev": true, + "license": "FSL-1.1-MIT", "optional": true, "os": [ "linux", @@ -14026,56 +14206,59 @@ "android" ], "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/@sentry/cli-win32-arm64": { - "version": "2.58.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-win32-arm64/-/cli-win32-arm64-2.58.0.tgz", - "integrity": "sha512-lIRTfGjD1TQIOuFh4rJGWt3zXyeXAlfoYYQbzG/rP6gXstiGENQtfEXZyKT+wlIGSqtbBGVfL8xp65ryjbXSgQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@sentry/cli-win32-arm64/-/cli-win32-arm64-3.2.0.tgz", + "integrity": "sha512-uKRi/++gnGepsaGi4goIcC13YGNEHgOUcROkz4L3H8vAR7QxWv2SHy7SCN+2S6c+Q2mOd0DfY35cMW5MzTpb7g==", "cpu": [ "arm64" ], - "license": "BSD-3-Clause", + "dev": true, + "license": "FSL-1.1-MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/@sentry/cli-win32-i686": { - "version": "2.58.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-2.58.0.tgz", - "integrity": "sha512-7VdB3QZ/3t2FABgIwRP2SoJcDmZaPPPZofVmJem+FgeONeLOUvHQw9WSLG4y5Dfc9yi5wO31H1ClW4uxv8EtuA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-3.2.0.tgz", + "integrity": "sha512-/84NEPeFQne2bQWfDZ+3EzioxFR8ojSwExCgVsyTfqa/4PzmaerAGUAxiD+VcJLJTyJEHAjWXTmSZGbYjIgdyQ==", "cpu": [ "x86", "ia32" ], - "license": "BSD-3-Clause", + "dev": true, + "license": "FSL-1.1-MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/@sentry/cli-win32-x64": { - "version": "2.58.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-2.58.0.tgz", - "integrity": "sha512-uItx4P4v9cKbgVbOpuShvIV8g42qLmZorPHwg3pYUu78c85xAWrmiXL+0JKNUf5JVBEHeHB+rIu08AZfDMhxig==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-3.2.0.tgz", + "integrity": "sha512-N9qGGT91awsh4IMyXrRHH+qIWmv9MJk9tPPAWPvLMWgdlTHT/40WYwvA4tYj80uZXU0TN8ppBWbd3ebDyOjwxA==", "cpu": [ "x64" ], - "license": "BSD-3-Clause", + "dev": true, + "license": "FSL-1.1-MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/@sentry/core": { @@ -14131,6 +14314,171 @@ } } }, + "node_modules/@sentry/react-native/node_modules/@sentry/cli": { + "version": "2.58.0", + "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-2.58.0.tgz", + "integrity": "sha512-ywfV2uYkNaW5BGFBgIEX+urkxWtY03GYKN08OLYJpfJeOWl5tzxAKKg+AkMZqnqsDqjCf8gLjZh7sF4jY+ZE1Q==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.6.7", + "progress": "^2.0.3", + "proxy-from-env": "^1.1.0", + "which": "^2.0.2" + }, + "bin": { + "sentry-cli": "bin/sentry-cli" + }, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@sentry/cli-darwin": "2.58.0", + "@sentry/cli-linux-arm": "2.58.0", + "@sentry/cli-linux-arm64": "2.58.0", + "@sentry/cli-linux-i686": "2.58.0", + "@sentry/cli-linux-x64": "2.58.0", + "@sentry/cli-win32-arm64": "2.58.0", + "@sentry/cli-win32-i686": "2.58.0", + "@sentry/cli-win32-x64": "2.58.0" + } + }, + "node_modules/@sentry/react-native/node_modules/@sentry/cli-darwin": { + "version": "2.58.0", + "resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-2.58.0.tgz", + "integrity": "sha512-dI8+85N2xNsQeJZBbfGkjFScYH0xP/8+TDgoA5YiWWxsD/qSlWv1pf2VCR83smMyfcjIkDiPYIxBDticD67skQ==", + "license": "BSD-3-Clause", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@sentry/react-native/node_modules/@sentry/cli-linux-arm": { + "version": "2.58.0", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-2.58.0.tgz", + "integrity": "sha512-QxBWSQkm2OL8d0XXTUOcX5RYZzZGkMw48ubU4g/c4rlT06PuJV56Z03jsMQdJWUDzKmVYoJdvFV/whxYIkwmWw==", + "cpu": [ + "arm" + ], + "license": "BSD-3-Clause", + "optional": true, + "os": [ + "linux", + "freebsd", + "android" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@sentry/react-native/node_modules/@sentry/cli-linux-arm64": { + "version": "2.58.0", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-2.58.0.tgz", + "integrity": "sha512-Fso5GImxQOigZqLHAHhz85w71zxS1bvL52PI/tcjadmKrIaJdD3ANukC0UcKyKuj9xhr/k1ufNR7V+2BD16kmg==", + "cpu": [ + "arm64" + ], + "license": "BSD-3-Clause", + "optional": true, + "os": [ + "linux", + "freebsd", + "android" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@sentry/react-native/node_modules/@sentry/cli-linux-i686": { + "version": "2.58.0", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-2.58.0.tgz", + "integrity": "sha512-Av+T5YwuTtbOpe/Fyr/lsbl5XIZTFspHCiAt4Kgtllme6T1ASIDhQDXDh/OVJ8So4pHkToTn3iH8mm8vLqBqOA==", + "cpu": [ + "x86", + "ia32" + ], + "license": "BSD-3-Clause", + "optional": true, + "os": [ + "linux", + "freebsd", + "android" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@sentry/react-native/node_modules/@sentry/cli-linux-x64": { + "version": "2.58.0", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-2.58.0.tgz", + "integrity": "sha512-AxK0eqZbHn0NGWsAE8bzt/iRMMUlqsx77kru/TIBQy9cMMJaq+rLb63W7HWXln4ER32nPZYx+JuhHD9UNiAFHA==", + "cpu": [ + "x64" + ], + "license": "BSD-3-Clause", + "optional": true, + "os": [ + "linux", + "freebsd", + "android" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@sentry/react-native/node_modules/@sentry/cli-win32-arm64": { + "version": "2.58.0", + "resolved": "https://registry.npmjs.org/@sentry/cli-win32-arm64/-/cli-win32-arm64-2.58.0.tgz", + "integrity": "sha512-lIRTfGjD1TQIOuFh4rJGWt3zXyeXAlfoYYQbzG/rP6gXstiGENQtfEXZyKT+wlIGSqtbBGVfL8xp65ryjbXSgQ==", + "cpu": [ + "arm64" + ], + "license": "BSD-3-Clause", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@sentry/react-native/node_modules/@sentry/cli-win32-i686": { + "version": "2.58.0", + "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-2.58.0.tgz", + "integrity": "sha512-7VdB3QZ/3t2FABgIwRP2SoJcDmZaPPPZofVmJem+FgeONeLOUvHQw9WSLG4y5Dfc9yi5wO31H1ClW4uxv8EtuA==", + "cpu": [ + "x86", + "ia32" + ], + "license": "BSD-3-Clause", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@sentry/react-native/node_modules/@sentry/cli-win32-x64": { + "version": "2.58.0", + "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-2.58.0.tgz", + "integrity": "sha512-uItx4P4v9cKbgVbOpuShvIV8g42qLmZorPHwg3pYUu78c85xAWrmiXL+0JKNUf5JVBEHeHB+rIu08AZfDMhxig==", + "cpu": [ + "x64" + ], + "license": "BSD-3-Clause", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, "node_modules/@sentry/types": { "version": "10.24.0", "resolved": "https://registry.npmjs.org/@sentry/types/-/types-10.24.0.tgz", @@ -38068,9 +38416,9 @@ "license": "MIT" }, "node_modules/undici": { - "version": "6.21.3", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.3.tgz", - "integrity": "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==", + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.23.0.tgz", + "integrity": "sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==", "license": "MIT", "engines": { "node": ">=18.17" diff --git a/package.json b/package.json index 6cab6e8682909..e4b051e73aef3 100644 --- a/package.json +++ b/package.json @@ -254,6 +254,7 @@ "@rock-js/platform-ios": "0.12.10", "@rock-js/plugin-metro": "0.12.10", "@rock-js/provider-s3": "0.12.10", + "@sentry/cli": "3.2.0", "@sentry/webpack-plugin": "4.6.0", "@storybook/addon-a11y": "10.1.10", "@storybook/addon-docs": "10.1.10", From 99058c0ef826fe1fa78d83f38a7144dc9d09ba77 Mon Sep 17 00:00:00 2001 From: Tomasz Lesniakiewicz Date: Fri, 20 Feb 2026 13:01:27 +0100 Subject: [PATCH 04/20] add notice log with bundle url --- .github/workflows/buildAdHoc.yml | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/.github/workflows/buildAdHoc.yml b/.github/workflows/buildAdHoc.yml index cf644e6070049..cef3dc39f0fb0 100644 --- a/.github/workflows/buildAdHoc.yml +++ b/.github/workflows/buildAdHoc.yml @@ -230,7 +230,13 @@ jobs: if: ${{ env.ARTIFACT_PATH != '' }} continue-on-error: true timeout-minutes: 5 - run: npx sentry-cli build upload "$ARTIFACT_PATH" --org expensify --project app --build-configuration AdHoc --log-level debug + run: | + OUTPUT=$(npx sentry-cli build upload "$ARTIFACT_PATH" --org expensify --project app --build-configuration AdHoc --log-level debug 2>&1) + echo "$OUTPUT" + SENTRY_URL=$(echo "$OUTPUT" | grep -oE 'https://expensify\.sentry\.io/[^ ]+' | head -1) + if [ -n "$SENTRY_URL" ]; then + echo "::notice::Android Sentry size analysis: $SENTRY_URL" + fi env: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} @@ -378,7 +384,13 @@ jobs: if: ${{ env.ARTIFACT_PATH != '' }} continue-on-error: true timeout-minutes: 5 - run: npx sentry-cli build upload "$ARTIFACT_PATH" --org expensify --project app --build-configuration AdHoc --log-level debug + run: | + OUTPUT=$(npx sentry-cli build upload "$ARTIFACT_PATH" --org expensify --project app --build-configuration AdHoc --log-level debug 2>&1) + echo "$OUTPUT" + SENTRY_URL=$(echo "$OUTPUT" | grep -oE 'https://expensify\.sentry\.io/[^ ]+' | head -1) + if [ -n "$SENTRY_URL" ]; then + echo "::notice::iOS Sentry size analysis: $SENTRY_URL" + fi env: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} From 103f6f43631b09715c160b8ca88d479b74dac661 Mon Sep 17 00:00:00 2001 From: Tomasz Lesniakiewicz Date: Mon, 23 Feb 2026 12:59:55 +0100 Subject: [PATCH 05/20] add table with sentry bundle urls --- .github/workflows/buildAdHoc.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/.github/workflows/buildAdHoc.yml b/.github/workflows/buildAdHoc.yml index cef3dc39f0fb0..d4820e1d5d335 100644 --- a/.github/workflows/buildAdHoc.yml +++ b/.github/workflows/buildAdHoc.yml @@ -120,6 +120,7 @@ jobs: PULL_REQUEST_NUMBER: ${{ inputs.APP_PR_NUMBER }} outputs: ROCK_ANDROID_ADHOC_INDEX_URL: ${{ steps.set-artifact-url.outputs.ARTIFACT_URL }} + SENTRY_ANDROID_URL: ${{ steps.sentry-upload.outputs.SENTRY_URL }} steps: - name: Checkout # v6 @@ -227,6 +228,7 @@ jobs: validate-elf-alignment: false - name: Upload Android build to Sentry for size analysis + id: sentry-upload if: ${{ env.ARTIFACT_PATH != '' }} continue-on-error: true timeout-minutes: 5 @@ -236,6 +238,7 @@ jobs: SENTRY_URL=$(echo "$OUTPUT" | grep -oE 'https://expensify\.sentry\.io/[^ ]+' | head -1) if [ -n "$SENTRY_URL" ]; then echo "::notice::Android Sentry size analysis: $SENTRY_URL" + echo "SENTRY_URL=$SENTRY_URL" >> "$GITHUB_OUTPUT" fi env: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} @@ -262,6 +265,7 @@ jobs: runs-on: macos-15-xlarge outputs: ROCK_IOS_ADHOC_INDEX_URL: ${{ steps.set-artifact-url.outputs.ARTIFACT_URL }} + SENTRY_IOS_URL: ${{ steps.sentry-upload.outputs.SENTRY_URL }} steps: - name: Checkout # v6 @@ -381,6 +385,7 @@ jobs: custom-identifier: ${{ steps.computeIdentifier.outputs.IDENTIFIER }} - name: Upload iOS build to Sentry for size analysis + id: sentry-upload if: ${{ env.ARTIFACT_PATH != '' }} continue-on-error: true timeout-minutes: 5 @@ -390,6 +395,7 @@ jobs: SENTRY_URL=$(echo "$OUTPUT" | grep -oE 'https://expensify\.sentry\.io/[^ ]+' | head -1) if [ -n "$SENTRY_URL" ]; then echo "::notice::iOS Sentry size analysis: $SENTRY_URL" + echo "SENTRY_URL=$SENTRY_URL" >> "$GITHUB_OUTPUT" fi env: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} @@ -474,6 +480,8 @@ jobs: const androidLink = '${{ needs.androidHybrid.outputs.ROCK_ANDROID_ADHOC_INDEX_URL }}' || ''; const iosLink = '${{ needs.iosHybrid.outputs.ROCK_IOS_ADHOC_INDEX_URL }}' || ''; const mobileExpensifySHA = '${{ steps.getMobileExpensifySHA.outputs.SHA }}' || ''; + const androidSentryLink = '${{ needs.androidHybrid.outputs.SENTRY_ANDROID_URL }}' || ''; + const iosSentryLink = '${{ needs.iosHybrid.outputs.SENTRY_IOS_URL }}' || ''; const webStatus = webLink ? '✅ Success' : '${{ needs.web.result }}' === 'failure' ? '❌ Failed' : '⏭️ Skipped'; const androidStatus = androidLink ? '✅ Success' : '${{ needs.androidHybrid.result }}' === 'failure' ? '❌ Failed' : '⏭️ Skipped'; @@ -499,6 +507,15 @@ jobs: ], ]); + if (androidSentryLink || iosSentryLink) { + summary.addHeading('Bundle Size Analysis', 3); + summary.addTable([ + [{data: 'Platform', header: true}, {data: 'Sentry Size Analysis', header: true}], + ['Android', androidSentryLink ? `${androidSentryLink}` : '-'], + ['iOS', iosSentryLink ? `${iosSentryLink}` : '-'], + ]); + } + if (mobileExpensifySHA) { const mobileExpensifyUrl = `https://github.com/Expensify/Mobile-Expensify/commit/${mobileExpensifySHA}`; const label = '${{ inputs.MOBILE_EXPENSIFY_REF }}' ? 'Mobile-Expensify SHA (Custom)' : 'Mobile-Expensify Submodule SHA'; From d59ded86b52f9937d720028adea538c9beeee348 Mon Sep 17 00:00:00 2001 From: Tomasz Lesniakiewicz Date: Mon, 23 Feb 2026 14:42:40 +0100 Subject: [PATCH 06/20] chore: remove todos comments --- .github/workflows/deploy.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index d5c65851f611f..955a5ae7061d8 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -179,7 +179,6 @@ jobs: if: ${{ fromJSON(env.SHOULD_BUILD_APP) }} continue-on-error: true timeout-minutes: 5 - # TODO: Remove --log-level debug before merging run: npx sentry-cli build upload ${{ env.aabPath }} --org expensify --project app --build-configuration Release --log-level debug env: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} @@ -406,7 +405,6 @@ jobs: if: ${{ fromJSON(env.SHOULD_BUILD_APP) }} continue-on-error: true timeout-minutes: 5 - # TODO: Remove --log-level debug before merging run: npx sentry-cli build upload ${{ env.ipaPath }} --org expensify --project app --build-configuration Release --log-level debug env: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} From b2974cd45368db3c0d932023568aa4510a563acf Mon Sep 17 00:00:00 2001 From: Tomasz Lesniakiewicz Date: Tue, 24 Feb 2026 12:31:37 +0100 Subject: [PATCH 07/20] add upload sentry bundle logic to separate files --- .github/workflows/buildAndroid.yml | 20 ++++++++++++++++++++ .github/workflows/buildIOS.yml | 20 ++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/.github/workflows/buildAndroid.yml b/.github/workflows/buildAndroid.yml index bfcd38dc79e89..981b1a77d2216 100644 --- a/.github/workflows/buildAndroid.yml +++ b/.github/workflows/buildAndroid.yml @@ -35,6 +35,9 @@ on: ROCK_ARTIFACT_URL: description: URL to download the ad-hoc build artifact (adhoc only) value: ${{ jobs.build.outputs.ROCK_ARTIFACT_URL }} + SENTRY_URL: + description: URL to Sentry size analysis (adhoc only) + value: ${{ jobs.build.outputs.SENTRY_URL }} jobs: build: @@ -45,6 +48,7 @@ jobs: outputs: VERSION_CODE: ${{ steps.getAndroidVersion.outputs.VERSION_CODE }} ROCK_ARTIFACT_URL: ${{ steps.set-artifact-url.outputs.ARTIFACT_URL }} + SENTRY_URL: ${{ steps.sentry-upload.outputs.SENTRY_URL }} steps: - name: Checkout # v6 @@ -169,6 +173,22 @@ jobs: custom-identifier: ${{ steps.computeIdentifier.outputs.IDENTIFIER }} validate-elf-alignment: false + - name: Upload Android build to Sentry for size analysis + id: sentry-upload + if: ${{ env.ARTIFACT_PATH != '' && inputs.variant == 'Adhoc' }} + continue-on-error: true + timeout-minutes: 5 + run: | + OUTPUT=$(npx sentry-cli build upload "$ARTIFACT_PATH" --org expensify --project app --build-configuration AdHoc --log-level debug 2>&1) + echo "$OUTPUT" + SENTRY_URL=$(echo "$OUTPUT" | grep -oE 'https://expensify\.sentry\.io/[^ ]+' | head -1) + if [ -n "$SENTRY_URL" ]; then + echo "::notice::Android Sentry size analysis: $SENTRY_URL" + echo "SENTRY_URL=$SENTRY_URL" >> "$GITHUB_OUTPUT" + fi + env: + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + - name: Upload Gradle profile report if: always() # v6 diff --git a/.github/workflows/buildIOS.yml b/.github/workflows/buildIOS.yml index 36bb585f62426..b9018ba4d6f89 100644 --- a/.github/workflows/buildIOS.yml +++ b/.github/workflows/buildIOS.yml @@ -35,6 +35,9 @@ on: ROCK_ARTIFACT_URL: description: URL to download the ad-hoc build artifact (adhoc only) value: ${{ jobs.build.outputs.ROCK_ARTIFACT_URL }} + SENTRY_URL: + description: URL to Sentry size analysis (adhoc only) + value: ${{ jobs.build.outputs.SENTRY_URL }} jobs: build: @@ -46,6 +49,7 @@ jobs: outputs: IOS_VERSION: ${{ steps.getIOSVersion.outputs.IOS_VERSION }} ROCK_ARTIFACT_URL: ${{ steps.set-artifact-url.outputs.ARTIFACT_URL }} + SENTRY_URL: ${{ steps.sentry-upload.outputs.SENTRY_URL }} steps: - name: Checkout # v6 @@ -223,6 +227,22 @@ jobs: comment-bot: false custom-identifier: ${{ steps.computeIdentifier.outputs.IDENTIFIER }} + - name: Upload iOS build to Sentry for size analysis + id: sentry-upload + if: ${{ env.ARTIFACT_PATH != '' && inputs.variant == 'Adhoc' }} + continue-on-error: true + timeout-minutes: 5 + run: | + OUTPUT=$(npx sentry-cli build upload "$ARTIFACT_PATH" --org expensify --project app --build-configuration AdHoc --log-level debug 2>&1) + echo "$OUTPUT" + SENTRY_URL=$(echo "$OUTPUT" | grep -oE 'https://expensify\.sentry\.io/[^ ]+' | head -1) + if [ -n "$SENTRY_URL" ]; then + echo "::notice::iOS Sentry size analysis: $SENTRY_URL" + echo "SENTRY_URL=$SENTRY_URL" >> "$GITHUB_OUTPUT" + fi + env: + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + - name: Set artifact URL output id: set-artifact-url if: ${{ inputs.variant == 'Adhoc' }} From d34193f063de69ac33cf5468a345817102eda88e Mon Sep 17 00:00:00 2001 From: Tomasz Lesniakiewicz Date: Tue, 24 Feb 2026 12:51:44 +0100 Subject: [PATCH 08/20] bump sentry-cli version --- package-lock.json | 72 +++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1a3a5331c9ff2..0cb0d78c91a48 100644 --- a/package-lock.json +++ b/package-lock.json @@ -182,7 +182,7 @@ "@rock-js/platform-ios": "0.12.10", "@rock-js/plugin-metro": "0.12.10", "@rock-js/provider-s3": "0.12.10", - "@sentry/cli": "3.2.0", + "@sentry/cli": "3.2.2", "@sentry/webpack-plugin": "4.6.0", "@storybook/addon-a11y": "10.1.10", "@storybook/addon-docs": "10.1.10", @@ -13989,9 +13989,9 @@ "license": "MIT" }, "node_modules/@sentry/cli": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-3.2.0.tgz", - "integrity": "sha512-YLv/xgttSc8sRhK2xBoxmLS+yQlCW154ey2cXFsFe+yY73lXvQ9nZ7BkHmSc+YUl8y5CKHL+8edQLYV8O8PQMA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-3.2.2.tgz", + "integrity": "sha512-qmjsm9+Bq/3QGTnIfOsJdhq+8LI3imxAPbGNBpRj4R0YFk+b1ry9huRHCLgkMcRFWtPkJmGZwEq2Z7e+02QPLA==", "dev": true, "hasInstallScript": true, "license": "FSL-1.1-MIT", @@ -14008,20 +14008,20 @@ "node": ">= 18" }, "optionalDependencies": { - "@sentry/cli-darwin": "3.2.0", - "@sentry/cli-linux-arm": "3.2.0", - "@sentry/cli-linux-arm64": "3.2.0", - "@sentry/cli-linux-i686": "3.2.0", - "@sentry/cli-linux-x64": "3.2.0", - "@sentry/cli-win32-arm64": "3.2.0", - "@sentry/cli-win32-i686": "3.2.0", - "@sentry/cli-win32-x64": "3.2.0" + "@sentry/cli-darwin": "3.2.2", + "@sentry/cli-linux-arm": "3.2.2", + "@sentry/cli-linux-arm64": "3.2.2", + "@sentry/cli-linux-i686": "3.2.2", + "@sentry/cli-linux-x64": "3.2.2", + "@sentry/cli-win32-arm64": "3.2.2", + "@sentry/cli-win32-i686": "3.2.2", + "@sentry/cli-win32-x64": "3.2.2" } }, "node_modules/@sentry/cli-darwin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-3.2.0.tgz", - "integrity": "sha512-2If2h0P/X9K0UrwlpZYKnxBmIFfa957lAHGe5VmN64v8nEHk8dxcrX+NS9nX9H75eccLGzGMcYk0Zt0KQgQJ3g==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-3.2.2.tgz", + "integrity": "sha512-y1uglMBbo9dYqC92hTQBkuGk7SegLPo1cVwJzX0dhplJoBMuanLMhOMYd1J20qhkDdBhguflCHGf0tOzNTGWhg==", "dev": true, "license": "FSL-1.1-MIT", "optional": true, @@ -14033,9 +14033,9 @@ } }, "node_modules/@sentry/cli-linux-arm": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-3.2.0.tgz", - "integrity": "sha512-NVcGcS9mceivVhi8W6iEnlcK96OlPMzOdM6xkIm+7+J0uXHgUyMyc+rT6p2QG3j8jI5I7qAl7fTHWluSX2lx3g==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-3.2.2.tgz", + "integrity": "sha512-CC7N3hjOgs3cwrW0T9hqirFVUpKO6ASjdd0JT4DQHaAn34pruv8J+OoSnj1jkrT2DHxDkNNZPOFSK05AnHr8wA==", "cpu": [ "arm" ], @@ -14052,9 +14052,9 @@ } }, "node_modules/@sentry/cli-linux-arm64": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-3.2.0.tgz", - "integrity": "sha512-YFpYIfYpXYzpSrIspmPOOPjXbxWp/Ve+F2hSIQb1tSKmcxFgaUm6WfuniYF8EIaLNa8YOLECf0xo78yGXBa+ug==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-3.2.2.tgz", + "integrity": "sha512-SIGJknEQNDw9S/8QPTl8QLVe2IEiTKH3NeeHQ/Q2XWXig1ZebJfm4iTrdu47ypszIfxHeLvQkkVrr8mRKq16xA==", "cpu": [ "arm64" ], @@ -14071,9 +14071,9 @@ } }, "node_modules/@sentry/cli-linux-i686": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-3.2.0.tgz", - "integrity": "sha512-6SOxlF37NqRRKxEuvWryBM7MAgTisq0G6ZQzhI2iuWbcrmlLUDUW2Yssz3gAR01eYJ4jfpqvojSzPRDwqB0K+Q==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-3.2.2.tgz", + "integrity": "sha512-W2hQ2DvIlZI05j2JN/87lfeo51F24zmQOJU6Uz+fZz/mkSvpnjeWxjAvfDNVGlLxp7XSoDbhHfrLBxdIh6jMeg==", "cpu": [ "x86", "ia32" @@ -14091,9 +14091,9 @@ } }, "node_modules/@sentry/cli-linux-x64": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-3.2.0.tgz", - "integrity": "sha512-7LRd0A74ma/1ejlTRPOoBiFiJr4LWkoE6CnA2XwAoYd0r62WUjGHtg6gIC+yElOCwtxXP7I9fOiV2BJIAq2DHw==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-3.2.2.tgz", + "integrity": "sha512-4mh3yvOUxO63lq3teexRvalD1mWaRVjpgL2cCMKA2wkB69lcL5nK2gkdzDUKx2y/elluVdvGPPZaqOr1bfNI0w==", "cpu": [ "x64" ], @@ -14110,9 +14110,9 @@ } }, "node_modules/@sentry/cli-win32-arm64": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-win32-arm64/-/cli-win32-arm64-3.2.0.tgz", - "integrity": "sha512-uKRi/++gnGepsaGi4goIcC13YGNEHgOUcROkz4L3H8vAR7QxWv2SHy7SCN+2S6c+Q2mOd0DfY35cMW5MzTpb7g==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@sentry/cli-win32-arm64/-/cli-win32-arm64-3.2.2.tgz", + "integrity": "sha512-TQgfkdJgd8Y/lPzDibqc5Hamg8Hl5rN1sZwX80n4r9Ly46Yzu8Bv6KUhoNL/ktAvw9Aeko6Bx54rwZnzxFZHwg==", "cpu": [ "arm64" ], @@ -14127,9 +14127,9 @@ } }, "node_modules/@sentry/cli-win32-i686": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-3.2.0.tgz", - "integrity": "sha512-/84NEPeFQne2bQWfDZ+3EzioxFR8ojSwExCgVsyTfqa/4PzmaerAGUAxiD+VcJLJTyJEHAjWXTmSZGbYjIgdyQ==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-3.2.2.tgz", + "integrity": "sha512-vAcnq0SdYuvwIdREgF5APocjW3d9Z17xLwugpaAz8wpOjCeC1iMEFWqbz5k49i4iDkDVNFRMENiVvWVSu1kEnA==", "cpu": [ "x86", "ia32" @@ -14145,9 +14145,9 @@ } }, "node_modules/@sentry/cli-win32-x64": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-3.2.0.tgz", - "integrity": "sha512-N9qGGT91awsh4IMyXrRHH+qIWmv9MJk9tPPAWPvLMWgdlTHT/40WYwvA4tYj80uZXU0TN8ppBWbd3ebDyOjwxA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-3.2.2.tgz", + "integrity": "sha512-xWPTXjSSdmoyG/0ee7A9KSfsScGHCdaXMP6ASt4bMx3yYJO7ziEoZzfJE2M6oglz+woAm0LV9+O/n7g80tixlQ==", "cpu": [ "x64" ], diff --git a/package.json b/package.json index 36b83cf64dc49..00b2d2903685f 100644 --- a/package.json +++ b/package.json @@ -245,7 +245,7 @@ "@rock-js/platform-ios": "0.12.10", "@rock-js/plugin-metro": "0.12.10", "@rock-js/provider-s3": "0.12.10", - "@sentry/cli": "3.2.0", + "@sentry/cli": "3.2.2", "@sentry/webpack-plugin": "4.6.0", "@storybook/addon-a11y": "10.1.10", "@storybook/addon-docs": "10.1.10", From 043541ab84259548e7e610d0fdbb96d276e782b9 Mon Sep 17 00:00:00 2001 From: Tomasz Lesniakiewicz Date: Tue, 24 Feb 2026 14:54:15 +0100 Subject: [PATCH 09/20] generate aab for adhocs --- .github/workflows/buildAndroid.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/buildAndroid.yml b/.github/workflows/buildAndroid.yml index 981b1a77d2216..4bdb36344904d 100644 --- a/.github/workflows/buildAndroid.yml +++ b/.github/workflows/buildAndroid.yml @@ -158,7 +158,7 @@ jobs: FORCE_NATIVE_BUILD: ${{ inputs.force-native-build == 'true' && github.run_id || '' }} with: variant: ${{ inputs.variant }} - aab: ${{ inputs.variant == 'Release' }} + aab: true sign: true re-sign: true ad-hoc: ${{ inputs.variant == 'Adhoc' }} From 272110a366ccb6fe10e06e6a980d26ee5d0f0db0 Mon Sep 17 00:00:00 2001 From: Tomasz Lesniakiewicz Date: Tue, 24 Feb 2026 19:18:12 +0100 Subject: [PATCH 10/20] adjust after mergin main --- .github/workflows/buildAndroid.yml | 10 ++++++++++ .github/workflows/buildIOS.yml | 10 ++++++++++ .github/workflows/deploy.yml | 15 --------------- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/.github/workflows/buildAndroid.yml b/.github/workflows/buildAndroid.yml index bfcd38dc79e89..382edb2e0a5c2 100644 --- a/.github/workflows/buildAndroid.yml +++ b/.github/workflows/buildAndroid.yml @@ -270,3 +270,13 @@ jobs: with: name: ${{ inputs.artifact-prefix }}android-apk-artifact path: Expensify.apk + + - name: Upload Android build to Sentry for size analysis + if: ${{ inputs.variant == 'Release' && steps.collectArtifacts.outputs.HAS_AAB == 'true' }} + continue-on-error: true + timeout-minutes: 5 + run: | + AAB_PATH=$(find /tmp/android-artifacts -name '*.aab' | head -1) + npx sentry-cli build upload "$AAB_PATH" --org expensify --project app --build-configuration Release --log-level debug + env: + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} diff --git a/.github/workflows/buildIOS.yml b/.github/workflows/buildIOS.yml index 36bb585f62426..a205a594df1ea 100644 --- a/.github/workflows/buildIOS.yml +++ b/.github/workflows/buildIOS.yml @@ -273,3 +273,13 @@ jobs: with: name: ${{ inputs.artifact-prefix }}ios-sourcemap-artifact path: Mobile-Expensify/main.jsbundle.map + + - name: Upload iOS build to Sentry for size analysis + if: ${{ inputs.variant == 'Release' }} + continue-on-error: true + timeout-minutes: 5 + run: | + IPA_PATH=$(find .rock/cache/ios/export -name '*.ipa' | head -1) + npx sentry-cli build upload "$IPA_PATH" --org expensify --project app --build-configuration Release --log-level debug + env: + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index d5af3633c3400..ceaee7ac4b8de 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -144,13 +144,6 @@ jobs: run: | op read "op://${{ vars.OP_VAULT }}/android-fastlane-json-key.json/android-fastlane-json-key.json" --force --out-file ./android-fastlane-json-key.json - - name: Upload Android build to Sentry for size analysis - continue-on-error: true - timeout-minutes: 5 - run: npx sentry-cli build upload ${{ env.aabPath }} --org expensify --project app --build-configuration Release --log-level debug - env: - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - - name: Upload Android app to Google Play run: bundle exec fastlane android ${{ vars.ANDROID_UPLOAD_COMMAND }} env: @@ -362,14 +355,6 @@ jobs: run: | op read "op://${{ vars.OP_VAULT }}/ios-fastlane-json-key.json/ios-fastlane-json-key.json" --force --out-file ./ios-fastlane-json-key.json - - name: Upload iOS build to Sentry for size analysis - if: ${{ fromJSON(env.SHOULD_BUILD_APP) }} - continue-on-error: true - timeout-minutes: 5 - run: npx sentry-cli build upload ${{ env.ipaPath }} --org expensify --project app --build-configuration Release --log-level debug - env: - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - - name: Upload release build to TestFlight run: bundle exec fastlane ios upload_testflight_hybrid env: From c3ad3df5b88dd9bb5b6f29c51f39cb1c0f0ff09b Mon Sep 17 00:00:00 2001 From: Tomasz Lesniakiewicz Date: Wed, 25 Feb 2026 16:50:21 +0100 Subject: [PATCH 11/20] add secondary rock build for aab format --- .github/workflows/buildAndroid.yml | 36 +++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/.github/workflows/buildAndroid.yml b/.github/workflows/buildAndroid.yml index 83cca65e01885..59b5492e56538 100644 --- a/.github/workflows/buildAndroid.yml +++ b/.github/workflows/buildAndroid.yml @@ -174,7 +174,7 @@ jobs: FORCE_NATIVE_BUILD: ${{ inputs.force-native-build == 'true' && github.run_id || '' }} with: variant: ${{ inputs.variant }} - aab: true + aab: ${{ inputs.variant == 'Release' }} sign: true re-sign: true ad-hoc: ${{ inputs.variant == 'Adhoc' }} @@ -189,6 +189,35 @@ jobs: custom-identifier: ${{ steps.computeIdentifier.outputs.IDENTIFIER }} validate-elf-alignment: false + - name: Set artifact URL output + id: set-artifact-url + if: ${{ inputs.variant == 'Adhoc' }} + run: echo "ARTIFACT_URL=$ARTIFACT_URL" >> "$GITHUB_OUTPUT" + + - name: Rock Remote Build - Android AAB (Sentry size analysis, AAB format is required) + if: ${{ inputs.variant == 'Adhoc' }} + uses: callstackincubator/android@4cedf4d9b5c167452c96fe67233577e0fde9a025 + env: + GITHUB_TOKEN: ${{ github.token }} + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + IS_HYBRID_APP: true + with: + variant: ${{ inputs.variant }} + aab: true + sign: true + re-sign: true + ad-hoc: false + keystore-file: './upload-key.keystore' + keystore-store-file: 'upload-key.keystore' + keystore-store-password: ${{ steps.load-credentials.outputs.ANDROID_UPLOAD_KEYSTORE_PASSWORD }} + keystore-key-alias: ${{ steps.load-credentials.outputs.ANDROID_UPLOAD_KEYSTORE_ALIAS }} + keystore-key-password: ${{ steps.load-credentials.outputs.ANDROID_UPLOAD_KEY_PASSWORD }} + keystore-path: '../tools/buildtools/upload-key.keystore' + comment-bot: false + rock-build-extra-params: '--extra-params "-PreactNativeArchitectures=arm64-v8a,x86_64 --profile"' + custom-identifier: ${{ steps.computeIdentifier.outputs.IDENTIFIER }}-aab + validate-elf-alignment: false + - name: Upload Android build to Sentry for size analysis id: sentry-upload if: ${{ env.ARTIFACT_PATH != '' && inputs.variant == 'Adhoc' }} @@ -214,11 +243,6 @@ jobs: path: Mobile-Expensify/Android/build/reports/profile/ if-no-files-found: ignore - - name: Set artifact URL output - id: set-artifact-url - if: ${{ inputs.variant == 'Adhoc' }} - run: echo "ARTIFACT_URL=$ARTIFACT_URL" >> "$GITHUB_OUTPUT" - - name: Collect build artifacts id: collectArtifacts run: | From c28d17e2e27b3647abdd986a1b1f430f96ed9b23 Mon Sep 17 00:00:00 2001 From: Tomasz Lesniakiewicz Date: Fri, 27 Feb 2026 16:05:53 +0100 Subject: [PATCH 12/20] unify sentry bundle upload for adhocs and release --- .github/workflows/buildAndroid.yml | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/.github/workflows/buildAndroid.yml b/.github/workflows/buildAndroid.yml index 625d01a760952..41de59316a468 100644 --- a/.github/workflows/buildAndroid.yml +++ b/.github/workflows/buildAndroid.yml @@ -36,7 +36,7 @@ on: description: URL to download the ad-hoc build artifact (adhoc only) value: ${{ jobs.build.outputs.ROCK_ARTIFACT_URL }} SENTRY_URL: - description: URL to Sentry size analysis (adhoc only) + description: URL to Sentry size analysis value: ${{ jobs.build.outputs.SENTRY_URL }} AAB_FILENAME: description: Filename of the AAB artifact (empty if no AAB was produced) @@ -220,11 +220,11 @@ jobs: - name: Upload Android build to Sentry for size analysis id: sentry-upload - if: ${{ env.ARTIFACT_PATH != '' && inputs.variant == 'Adhoc' }} + if: ${{ env.ARTIFACT_PATH != '' }} continue-on-error: true timeout-minutes: 5 run: | - OUTPUT=$(npx sentry-cli build upload "$ARTIFACT_PATH" --org expensify --project app --build-configuration AdHoc --log-level debug 2>&1) + OUTPUT=$(npx sentry-cli build upload "$ARTIFACT_PATH" --org expensify --project app --build-configuration ${{ inputs.variant == 'Adhoc' && 'AdHoc' || 'Release' }} --log-level debug 2>&1) echo "$OUTPUT" SENTRY_URL=$(echo "$OUTPUT" | grep -oE 'https://expensify\.sentry\.io/[^ ]+' | head -1) if [ -n "$SENTRY_URL" ]; then @@ -335,12 +335,3 @@ jobs: name: ${{ inputs.artifact-prefix }}android-apk-artifact path: Expensify.apk - - name: Upload Android build to Sentry for size analysis - if: ${{ inputs.variant == 'Release' && steps.collectArtifacts.outputs.HAS_AAB == 'true' }} - continue-on-error: true - timeout-minutes: 5 - run: | - AAB_PATH=$(find /tmp/android-artifacts -name '*.aab' | head -1) - npx sentry-cli build upload "$AAB_PATH" --org expensify --project app --build-configuration Release --log-level debug - env: - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} From c7cc468f535bf1bb3642c253d43d6c7e3fc8613f Mon Sep 17 00:00:00 2001 From: Tomasz Lesniakiewicz Date: Fri, 27 Feb 2026 16:11:33 +0100 Subject: [PATCH 13/20] unify the sentry bundle upload for IOS --- .github/workflows/buildIOS.yml | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/.github/workflows/buildIOS.yml b/.github/workflows/buildIOS.yml index 5ab8b60f39bc8..a5b6339992abb 100644 --- a/.github/workflows/buildIOS.yml +++ b/.github/workflows/buildIOS.yml @@ -36,7 +36,7 @@ on: description: URL to download the ad-hoc build artifact (adhoc only) value: ${{ jobs.build.outputs.ROCK_ARTIFACT_URL }} SENTRY_URL: - description: URL to Sentry size analysis (adhoc only) + description: URL to Sentry size analysis value: ${{ jobs.build.outputs.SENTRY_URL }} IPA_FILENAME: description: Filename of the IPA artifact produced by the build @@ -241,11 +241,11 @@ jobs: - name: Upload iOS build to Sentry for size analysis id: sentry-upload - if: ${{ env.ARTIFACT_PATH != '' && inputs.variant == 'Adhoc' }} + if: ${{ env.ARTIFACT_PATH != '' }} continue-on-error: true timeout-minutes: 5 run: | - OUTPUT=$(npx sentry-cli build upload "$ARTIFACT_PATH" --org expensify --project app --build-configuration AdHoc --log-level debug 2>&1) + OUTPUT=$(npx sentry-cli build upload "$ARTIFACT_PATH" --org expensify --project app --build-configuration ${{ inputs.variant == 'Adhoc' && 'AdHoc' || 'Release' }} --log-level debug 2>&1) echo "$OUTPUT" SENTRY_URL=$(echo "$OUTPUT" | grep -oE 'https://expensify\.sentry\.io/[^ ]+' | head -1) if [ -n "$SENTRY_URL" ]; then @@ -324,12 +324,3 @@ jobs: name: ${{ inputs.artifact-prefix }}ios-sourcemap-artifact path: Mobile-Expensify/main.jsbundle.map - - name: Upload iOS build to Sentry for size analysis - if: ${{ inputs.variant == 'Release' }} - continue-on-error: true - timeout-minutes: 5 - run: | - IPA_PATH=$(find .rock/cache/ios/export -name '*.ipa' | head -1) - npx sentry-cli build upload "$IPA_PATH" --org expensify --project app --build-configuration Release --log-level debug - env: - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} From 98c00387fe652eeeff15eeaaa6d0f8f6413069c1 Mon Sep 17 00:00:00 2001 From: Tomasz Lesniakiewicz Date: Fri, 27 Feb 2026 18:20:46 +0100 Subject: [PATCH 14/20] build aab for both adhoc and release --- .github/workflows/buildAndroid.yml | 28 ++-------------------------- 1 file changed, 2 insertions(+), 26 deletions(-) diff --git a/.github/workflows/buildAndroid.yml b/.github/workflows/buildAndroid.yml index 41de59316a468..f2e8ab0018162 100644 --- a/.github/workflows/buildAndroid.yml +++ b/.github/workflows/buildAndroid.yml @@ -174,7 +174,7 @@ jobs: FORCE_NATIVE_BUILD: ${{ inputs.force-native-build == 'true' && github.run_id || '' }} with: variant: ${{ inputs.variant }} - aab: ${{ inputs.variant == 'Release' }} + aab: true sign: true re-sign: true ad-hoc: ${{ inputs.variant == 'Adhoc' }} @@ -194,30 +194,6 @@ jobs: if: ${{ inputs.variant == 'Adhoc' }} run: echo "ARTIFACT_URL=$ARTIFACT_URL" >> "$GITHUB_OUTPUT" - - name: Rock Remote Build - Android AAB (Sentry size analysis, AAB format is required) - if: ${{ inputs.variant == 'Adhoc' }} - uses: callstackincubator/android@4cedf4d9b5c167452c96fe67233577e0fde9a025 - env: - GITHUB_TOKEN: ${{ github.token }} - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - IS_HYBRID_APP: true - with: - variant: ${{ inputs.variant }} - aab: true - sign: true - re-sign: true - ad-hoc: false - keystore-file: './upload-key.keystore' - keystore-store-file: 'upload-key.keystore' - keystore-store-password: ${{ steps.load-credentials.outputs.ANDROID_UPLOAD_KEYSTORE_PASSWORD }} - keystore-key-alias: ${{ steps.load-credentials.outputs.ANDROID_UPLOAD_KEYSTORE_ALIAS }} - keystore-key-password: ${{ steps.load-credentials.outputs.ANDROID_UPLOAD_KEY_PASSWORD }} - keystore-path: '../tools/buildtools/upload-key.keystore' - comment-bot: false - rock-build-extra-params: '--extra-params "-PreactNativeArchitectures=arm64-v8a,x86_64 --profile"' - custom-identifier: ${{ steps.computeIdentifier.outputs.IDENTIFIER }}-aab - validate-elf-alignment: false - - name: Upload Android build to Sentry for size analysis id: sentry-upload if: ${{ env.ARTIFACT_PATH != '' }} @@ -258,7 +234,7 @@ jobs: echo "APK_FILENAME=Expensify.apk" } >> "$GITHUB_OUTPUT" else - echo "::warning::No AAB file found (expected for remote-cache hits on Adhoc builds)" + echo "::warning::No AAB file found (expected for remote-cache hits)" echo "HAS_AAB=false" >> "$GITHUB_OUTPUT" fi From 0902a6b674acd61ea6d7f70e9346ca974615d552 Mon Sep 17 00:00:00 2001 From: Tomasz Lesniakiewicz Date: Wed, 11 Mar 2026 14:07:47 +0100 Subject: [PATCH 15/20] update sentry-cli version --- package-lock.json | 88 +++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 45 insertions(+), 45 deletions(-) diff --git a/package-lock.json b/package-lock.json index ab85dc60027c0..163a82a84172d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -182,7 +182,7 @@ "@rock-js/platform-ios": "0.12.10", "@rock-js/plugin-metro": "0.12.10", "@rock-js/provider-s3": "0.12.10", - "@sentry/cli": "3.2.2", + "@sentry/cli": "3.3.0", "@sentry/webpack-plugin": "4.6.0", "@storybook/addon-a11y": "10.1.10", "@storybook/addon-docs": "10.1.10", @@ -13674,9 +13674,9 @@ "license": "MIT" }, "node_modules/@sentry/cli": { - "version": "2.58.0", - "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-2.58.0.tgz", - "integrity": "sha512-ywfV2uYkNaW5BGFBgIEX+urkxWtY03GYKN08OLYJpfJeOWl5tzxAKKg+AkMZqnqsDqjCf8gLjZh7sF4jY+ZE1Q==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-3.3.0.tgz", + "integrity": "sha512-E3a7LUkJLLOaxjbqdqnTiM5UUAgu/WmXKec6O9+mjh9p7N5znLMp8xZNokwQQKPqoPxwsInv2kvEAQdA/bhjzg==", "dev": true, "hasInstallScript": true, "license": "FSL-1.1-MIT", @@ -13693,22 +13693,22 @@ "node": ">= 18" }, "optionalDependencies": { - "@sentry/cli-darwin": "3.2.2", - "@sentry/cli-linux-arm": "3.2.2", - "@sentry/cli-linux-arm64": "3.2.2", - "@sentry/cli-linux-i686": "3.2.2", - "@sentry/cli-linux-x64": "3.2.2", - "@sentry/cli-win32-arm64": "3.2.2", - "@sentry/cli-win32-i686": "3.2.2", - "@sentry/cli-win32-x64": "3.2.2" + "@sentry/cli-darwin": "3.3.0", + "@sentry/cli-linux-arm": "3.3.0", + "@sentry/cli-linux-arm64": "3.3.0", + "@sentry/cli-linux-i686": "3.3.0", + "@sentry/cli-linux-x64": "3.3.0", + "@sentry/cli-win32-arm64": "3.3.0", + "@sentry/cli-win32-i686": "3.3.0", + "@sentry/cli-win32-x64": "3.3.0" } }, "node_modules/@sentry/cli-darwin": { - "version": "2.58.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-2.58.0.tgz", - "integrity": "sha512-dI8+85N2xNsQeJZBbfGkjFScYH0xP/8+TDgoA5YiWWxsD/qSlWv1pf2VCR83smMyfcjIkDiPYIxBDticD67skQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-3.3.0.tgz", + "integrity": "sha512-hifHfFP7Rv/5+RoMJcKy1EF1eLrWhmIBZ5O7mD3Y5wjvABosWF44lYJ7tfQ1Reu4yeYPr9UkXqnCf6ftPgeK9Q==", "dev": true, - "license": "BSD-3-Clause", + "license": "FSL-1.1-MIT", "optional": true, "os": [ "darwin" @@ -13718,14 +13718,14 @@ } }, "node_modules/@sentry/cli-linux-arm": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-3.2.2.tgz", - "integrity": "sha512-CC7N3hjOgs3cwrW0T9hqirFVUpKO6ASjdd0JT4DQHaAn34pruv8J+OoSnj1jkrT2DHxDkNNZPOFSK05AnHr8wA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-3.3.0.tgz", + "integrity": "sha512-HTr08OF3+UGCt1RjcU4h37gHLbthSUf7dZzz4SGVHB3hiFzywBtnz6VibFY/U9HCqJNU9nW+WpdLkOpqzer5TA==", "cpu": [ "arm" ], "dev": true, - "license": "BSD-3-Clause", + "license": "FSL-1.1-MIT", "optional": true, "os": [ "linux", @@ -13737,14 +13737,14 @@ } }, "node_modules/@sentry/cli-linux-arm64": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-3.2.2.tgz", - "integrity": "sha512-SIGJknEQNDw9S/8QPTl8QLVe2IEiTKH3NeeHQ/Q2XWXig1ZebJfm4iTrdu47ypszIfxHeLvQkkVrr8mRKq16xA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-3.3.0.tgz", + "integrity": "sha512-yNLmxu4mqep7YeJg29FQq9733EvWodZz9UillchtIzG3oX6DLGhf+ZGElSYNUMmNal4wEj30wOnXveMVLtNM0Q==", "cpu": [ "arm64" ], "dev": true, - "license": "BSD-3-Clause", + "license": "FSL-1.1-MIT", "optional": true, "os": [ "linux", @@ -13756,15 +13756,15 @@ } }, "node_modules/@sentry/cli-linux-i686": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-3.2.2.tgz", - "integrity": "sha512-W2hQ2DvIlZI05j2JN/87lfeo51F24zmQOJU6Uz+fZz/mkSvpnjeWxjAvfDNVGlLxp7XSoDbhHfrLBxdIh6jMeg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-3.3.0.tgz", + "integrity": "sha512-xpYeO9lU7ua0ksToOibJpYvG3HFgwqH9VG9gt2fym8lgANpqM+Nxk2tdjiVsqddeD7R3tRLMhj6PjKFxUnI8KQ==", "cpu": [ "x86", "ia32" ], "dev": true, - "license": "BSD-3-Clause", + "license": "FSL-1.1-MIT", "optional": true, "os": [ "linux", @@ -13776,14 +13776,14 @@ } }, "node_modules/@sentry/cli-linux-x64": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-3.2.2.tgz", - "integrity": "sha512-4mh3yvOUxO63lq3teexRvalD1mWaRVjpgL2cCMKA2wkB69lcL5nK2gkdzDUKx2y/elluVdvGPPZaqOr1bfNI0w==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-3.3.0.tgz", + "integrity": "sha512-sWgX7/kzGFHQYfJFEE2/k8I8+XqumznPJ+nEUnowjQZPZNKcK0gfX4kToJQ7BbyVS5VmxS45F3iM46+p1L2law==", "cpu": [ "x64" ], "dev": true, - "license": "BSD-3-Clause", + "license": "FSL-1.1-MIT", "optional": true, "os": [ "linux", @@ -13795,14 +13795,14 @@ } }, "node_modules/@sentry/cli-win32-arm64": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@sentry/cli-win32-arm64/-/cli-win32-arm64-3.2.2.tgz", - "integrity": "sha512-TQgfkdJgd8Y/lPzDibqc5Hamg8Hl5rN1sZwX80n4r9Ly46Yzu8Bv6KUhoNL/ktAvw9Aeko6Bx54rwZnzxFZHwg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@sentry/cli-win32-arm64/-/cli-win32-arm64-3.3.0.tgz", + "integrity": "sha512-GDKp3agjI56xxgSPH2Ycvd0rkwM6SawvIUIlY1SXXFU+2ecMTz+RqRKKVvyAF0p1lsTRMKtHQ2TzHpCYDPryig==", "cpu": [ "arm64" ], "dev": true, - "license": "BSD-3-Clause", + "license": "FSL-1.1-MIT", "optional": true, "os": [ "win32" @@ -13812,15 +13812,15 @@ } }, "node_modules/@sentry/cli-win32-i686": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-3.2.2.tgz", - "integrity": "sha512-vAcnq0SdYuvwIdREgF5APocjW3d9Z17xLwugpaAz8wpOjCeC1iMEFWqbz5k49i4iDkDVNFRMENiVvWVSu1kEnA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-3.3.0.tgz", + "integrity": "sha512-5ZllXD0feaTWW7Va32HKx/j2TVnP2hQ6cfkrZP/cyst9Wz7YDq0Q44cbEQlMTpZREuSL0tAzG92omBR9wdca7A==", "cpu": [ "x86", "ia32" ], "dev": true, - "license": "BSD-3-Clause", + "license": "FSL-1.1-MIT", "optional": true, "os": [ "win32" @@ -13830,14 +13830,14 @@ } }, "node_modules/@sentry/cli-win32-x64": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-3.2.2.tgz", - "integrity": "sha512-xWPTXjSSdmoyG/0ee7A9KSfsScGHCdaXMP6ASt4bMx3yYJO7ziEoZzfJE2M6oglz+woAm0LV9+O/n7g80tixlQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-3.3.0.tgz", + "integrity": "sha512-kgycTi6S2Vj5ZK9lRtDR9HO7d5Ep/JopVkzcaNxhpI5TNwCd0odXb0fy5MA09PQgPQhkys+viLDPdnpem0AWEw==", "cpu": [ "x64" ], "dev": true, - "license": "BSD-3-Clause", + "license": "FSL-1.1-MIT", "optional": true, "os": [ "win32" diff --git a/package.json b/package.json index bdb00b568f369..a165e03a40de7 100644 --- a/package.json +++ b/package.json @@ -246,7 +246,7 @@ "@rock-js/platform-ios": "0.12.10", "@rock-js/plugin-metro": "0.12.10", "@rock-js/provider-s3": "0.12.10", - "@sentry/cli": "3.2.2", + "@sentry/cli": "3.3.0", "@sentry/webpack-plugin": "4.6.0", "@storybook/addon-a11y": "10.1.10", "@storybook/addon-docs": "10.1.10", From 101f5a278d623b2382e565ec3a74140891f7409f Mon Sep 17 00:00:00 2001 From: Tomasz Lesniakiewicz Date: Wed, 11 Mar 2026 14:15:01 +0100 Subject: [PATCH 16/20] generate apk for adhocs --- .github/workflows/buildAndroid.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/buildAndroid.yml b/.github/workflows/buildAndroid.yml index 854cb3937db0b..ca22f814dabac 100644 --- a/.github/workflows/buildAndroid.yml +++ b/.github/workflows/buildAndroid.yml @@ -174,7 +174,7 @@ jobs: FORCE_NATIVE_BUILD: ${{ inputs.force-native-build == 'true' && github.run_id || '' }} with: variant: ${{ inputs.variant }} - aab: true + aab: ${{ inputs.variant == 'Release' }} sign: true re-sign: true ad-hoc: ${{ inputs.variant == 'Adhoc' }} @@ -234,7 +234,7 @@ jobs: echo "APK_FILENAME=Expensify.apk" } >> "$GITHUB_OUTPUT" else - echo "::warning::No AAB file found (expected for remote-cache hits)" + echo "::warning::No AAB file found (expected for remote-cache hits on Adhoc builds)" echo "HAS_AAB=false" >> "$GITHUB_OUTPUT" fi From 4f7b5b07263d69f18b5ab38635f54ce310d9f9ea Mon Sep 17 00:00:00 2001 From: Tomasz Lesniakiewicz Date: Fri, 13 Mar 2026 16:28:35 +0100 Subject: [PATCH 17/20] add verification step for sentry debug metada in apk --- .github/workflows/buildAndroid.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.github/workflows/buildAndroid.yml b/.github/workflows/buildAndroid.yml index ca22f814dabac..e5382a1404436 100644 --- a/.github/workflows/buildAndroid.yml +++ b/.github/workflows/buildAndroid.yml @@ -194,6 +194,17 @@ jobs: if: ${{ inputs.variant == 'Adhoc' }} run: echo "ARTIFACT_URL=$ARTIFACT_URL" >> "$GITHUB_OUTPUT" + - name: Verify Sentry debug metadata in APK + if: ${{ env.ARTIFACT_PATH != '' }} + run: | + echo "Checking APK: $ARTIFACT_PATH" + if unzip -l "$ARTIFACT_PATH" | grep -q 'sentry-debug-meta.properties'; then + echo "✅ sentry-debug-meta.properties found in APK" + unzip -p "$ARTIFACT_PATH" 'assets/sentry-debug-meta.properties' 2>/dev/null || unzip -p "$ARTIFACT_PATH" '*/sentry-debug-meta.properties' 2>/dev/null || true + else + echo "::warning::sentry-debug-meta.properties NOT found in APK — Sentry may not be able to process this build" + fi + - name: Upload Android build to Sentry for size analysis id: sentry-upload if: ${{ env.ARTIFACT_PATH != '' }} From 31bf3698a663fd7bac230dd077cc2636fbe1dd85 Mon Sep 17 00:00:00 2001 From: Tomasz Lesniakiewicz Date: Tue, 17 Mar 2026 18:01:16 +0100 Subject: [PATCH 18/20] send sentry size analysis to Release builds only --- .github/workflows/buildAdHoc.yml | 10 ---------- .github/workflows/buildAndroid.yml | 15 ++------------- .github/workflows/buildIOS.yml | 4 ++-- 3 files changed, 4 insertions(+), 25 deletions(-) diff --git a/.github/workflows/buildAdHoc.yml b/.github/workflows/buildAdHoc.yml index 6f3d64cbbea6c..74073ef3c94e4 100644 --- a/.github/workflows/buildAdHoc.yml +++ b/.github/workflows/buildAdHoc.yml @@ -209,8 +209,6 @@ jobs: const androidLink = '${{ needs.buildAndroid.outputs.ROCK_ARTIFACT_URL }}' || ''; const iosLink = '${{ needs.buildIOS.outputs.ROCK_ARTIFACT_URL }}' || ''; const mobileExpensifySHA = '${{ steps.getMobileExpensifySHA.outputs.SHA }}' || ''; - const androidSentryLink = '${{ needs.buildAndroid.outputs.SENTRY_URL }}' || ''; - const iosSentryLink = '${{ needs.buildIOS.outputs.SENTRY_URL }}' || ''; const webFailed = '${{ needs.buildWeb.result }}' === 'failure' || '${{ needs.deployWebAdHoc.result }}' === 'failure'; const webStatus = webLink ? '✅ Success' : webFailed ? '❌ Failed' : '⏭️ Skipped'; @@ -237,14 +235,6 @@ jobs: ], ]); - if (androidSentryLink || iosSentryLink) { - summary.addHeading('Bundle Size Analysis', 3); - summary.addTable([ - [{data: 'Platform', header: true}, {data: 'Sentry Size Analysis', header: true}], - ['Android', androidSentryLink ? `${androidSentryLink}` : '-'], - ['iOS', iosSentryLink ? `${iosSentryLink}` : '-'], - ]); - } if (mobileExpensifySHA) { const mobileExpensifyUrl = `https://github.com/Expensify/Mobile-Expensify/commit/${mobileExpensifySHA}`; diff --git a/.github/workflows/buildAndroid.yml b/.github/workflows/buildAndroid.yml index e5382a1404436..001ee25ee4b3f 100644 --- a/.github/workflows/buildAndroid.yml +++ b/.github/workflows/buildAndroid.yml @@ -194,24 +194,13 @@ jobs: if: ${{ inputs.variant == 'Adhoc' }} run: echo "ARTIFACT_URL=$ARTIFACT_URL" >> "$GITHUB_OUTPUT" - - name: Verify Sentry debug metadata in APK - if: ${{ env.ARTIFACT_PATH != '' }} - run: | - echo "Checking APK: $ARTIFACT_PATH" - if unzip -l "$ARTIFACT_PATH" | grep -q 'sentry-debug-meta.properties'; then - echo "✅ sentry-debug-meta.properties found in APK" - unzip -p "$ARTIFACT_PATH" 'assets/sentry-debug-meta.properties' 2>/dev/null || unzip -p "$ARTIFACT_PATH" '*/sentry-debug-meta.properties' 2>/dev/null || true - else - echo "::warning::sentry-debug-meta.properties NOT found in APK — Sentry may not be able to process this build" - fi - - name: Upload Android build to Sentry for size analysis id: sentry-upload - if: ${{ env.ARTIFACT_PATH != '' }} + if: ${{ inputs.variant == 'Release' && env.ARTIFACT_PATH != '' }} continue-on-error: true timeout-minutes: 5 run: | - OUTPUT=$(npx sentry-cli build upload "$ARTIFACT_PATH" --org expensify --project app --build-configuration ${{ inputs.variant == 'Adhoc' && 'AdHoc' || 'Release' }} --log-level debug 2>&1) + OUTPUT=$(npx sentry-cli build upload "$ARTIFACT_PATH" --org expensify --project app --build-configuration Release --log-level debug 2>&1) echo "$OUTPUT" SENTRY_URL=$(echo "$OUTPUT" | grep -oE 'https://expensify\.sentry\.io/[^ ]+' | head -1) if [ -n "$SENTRY_URL" ]; then diff --git a/.github/workflows/buildIOS.yml b/.github/workflows/buildIOS.yml index 477f1853aade3..0c2077322b1a7 100644 --- a/.github/workflows/buildIOS.yml +++ b/.github/workflows/buildIOS.yml @@ -247,11 +247,11 @@ jobs: - name: Upload iOS build to Sentry for size analysis id: sentry-upload - if: ${{ env.ARTIFACT_PATH != '' }} + if: ${{ inputs.variant == 'Release' && env.ARTIFACT_PATH != '' }} continue-on-error: true timeout-minutes: 5 run: | - OUTPUT=$(npx sentry-cli build upload "$ARTIFACT_PATH" --org expensify --project app --build-configuration ${{ inputs.variant == 'Adhoc' && 'AdHoc' || 'Release' }} --log-level debug 2>&1) + OUTPUT=$(npx sentry-cli build upload "$ARTIFACT_PATH" --org expensify --project app --build-configuration Release --log-level debug 2>&1) echo "$OUTPUT" SENTRY_URL=$(echo "$OUTPUT" | grep -oE 'https://expensify\.sentry\.io/[^ ]+' | head -1) if [ -n "$SENTRY_URL" ]; then From 75c283b90675d65825d0a641fc366ebc07cf627f Mon Sep 17 00:00:00 2001 From: Tomasz Lesniakiewicz Date: Tue, 17 Mar 2026 18:20:24 +0100 Subject: [PATCH 19/20] Add Sentry URLs to PR deploy comments --- .../javascript/markPullRequestsAsDeployed/action.yml | 6 ++++++ .../javascript/markPullRequestsAsDeployed/index.js | 11 +++++++++++ .../markPullRequestsAsDeployed.ts | 12 ++++++++++++ .github/workflows/buildAdHoc.yml | 1 - .github/workflows/deploy.yml | 4 +++- .github/workflows/postDeployComments.yml | 10 ++++++++++ 6 files changed, 42 insertions(+), 2 deletions(-) diff --git a/.github/actions/javascript/markPullRequestsAsDeployed/action.yml b/.github/actions/javascript/markPullRequestsAsDeployed/action.yml index b8a39af6c3ae0..dd5e9d403eb5b 100644 --- a/.github/actions/javascript/markPullRequestsAsDeployed/action.yml +++ b/.github/actions/javascript/markPullRequestsAsDeployed/action.yml @@ -32,6 +32,12 @@ inputs: NOTE: description: "Additional note from the deployer" required: false + ANDROID_SENTRY_URL: + description: "URL to Sentry size analysis for Android" + required: false + IOS_SENTRY_URL: + description: "URL to Sentry size analysis for iOS" + required: false runs: using: "node20" main: "./index.js" diff --git a/.github/actions/javascript/markPullRequestsAsDeployed/index.js b/.github/actions/javascript/markPullRequestsAsDeployed/index.js index 6d520948141f2..57d6fd19e0926 100644 --- a/.github/actions/javascript/markPullRequestsAsDeployed/index.js +++ b/.github/actions/javascript/markPullRequestsAsDeployed/index.js @@ -12844,6 +12844,8 @@ async function run() { const webResult = getDeployTableMessage(core.getInput('WEB', { required: true })); const date = core.getInput('DATE'); const note = core.getInput('NOTE'); + const androidSentryUrl = core.getInput('ANDROID_SENTRY_URL'); + const iosSentryUrl = core.getInput('IOS_SENTRY_URL'); function getDeployMessage(deployer, deployVerb) { let message = `🚀 [${deployVerb}](${workflowURL}) to ${isProd ? 'production' : 'staging'}`; message += ` by https://github.com/${deployer} in version: ${version} `; @@ -12857,6 +12859,15 @@ async function run() { if (note) { message += `\n\n_Note:_ ${note}`; } + if (androidSentryUrl || iosSentryUrl) { + message += `\n\n**Bundle Size Analysis (Sentry):**`; + if (androidSentryUrl) { + message += `\n- [Android](${androidSentryUrl})`; + } + if (iosSentryUrl) { + message += `\n- [iOS](${iosSentryUrl})`; + } + } return message; } if (isProd) { diff --git a/.github/actions/javascript/markPullRequestsAsDeployed/markPullRequestsAsDeployed.ts b/.github/actions/javascript/markPullRequestsAsDeployed/markPullRequestsAsDeployed.ts index 811d40ce6f2af..5e7530402ea62 100644 --- a/.github/actions/javascript/markPullRequestsAsDeployed/markPullRequestsAsDeployed.ts +++ b/.github/actions/javascript/markPullRequestsAsDeployed/markPullRequestsAsDeployed.ts @@ -108,6 +108,8 @@ async function run() { const date = core.getInput('DATE'); const note = core.getInput('NOTE'); + const androidSentryUrl = core.getInput('ANDROID_SENTRY_URL'); + const iosSentryUrl = core.getInput('IOS_SENTRY_URL'); function getDeployMessage(deployer: string, deployVerb: string): string { let message = `🚀 [${deployVerb}](${workflowURL}) to ${isProd ? 'production' : 'staging'}`; @@ -124,6 +126,16 @@ async function run() { message += `\n\n_Note:_ ${note}`; } + if (androidSentryUrl || iosSentryUrl) { + message += `\n\n**Bundle Size Analysis (Sentry):**`; + if (androidSentryUrl) { + message += `\n- [Android](${androidSentryUrl})`; + } + if (iosSentryUrl) { + message += `\n- [iOS](${iosSentryUrl})`; + } + } + return message; } diff --git a/.github/workflows/buildAdHoc.yml b/.github/workflows/buildAdHoc.yml index 74073ef3c94e4..14e1fc066ea7a 100644 --- a/.github/workflows/buildAdHoc.yml +++ b/.github/workflows/buildAdHoc.yml @@ -235,7 +235,6 @@ jobs: ], ]); - if (mobileExpensifySHA) { const mobileExpensifyUrl = `https://github.com/Expensify/Mobile-Expensify/commit/${mobileExpensifySHA}`; const label = '${{ inputs.MOBILE_EXPENSIFY_REF }}' ? 'Mobile-Expensify SHA (Custom)' : 'Mobile-Expensify Submodule SHA'; diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index aa5f42d640ffa..18354556e4e6d 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -912,7 +912,7 @@ jobs: postGithubComments: uses: ./.github/workflows/postDeployComments.yml if: ${{ always() && fromJSON(needs.checkDeploymentSuccess.outputs.IS_AT_LEAST_ONE_PLATFORM_DEPLOYED) }} - needs: [prep, checkDeploymentSuccess, createRelease] + needs: [prep, checkDeploymentSuccess, createRelease, androidBuild, iosBuild] secrets: inherit with: version: ${{ needs.prep.outputs.APP_VERSION }} @@ -920,3 +920,5 @@ jobs: android: ${{ needs.checkDeploymentSuccess.outputs.ANDROID_RESULT }} ios: ${{ needs.checkDeploymentSuccess.outputs.IOS_RESULT }} web: ${{ needs.checkDeploymentSuccess.outputs.WEB_RESULT }} + android_sentry_url: ${{ needs.androidBuild.outputs.SENTRY_URL }} + ios_sentry_url: ${{ needs.iosBuild.outputs.SENTRY_URL }} diff --git a/.github/workflows/postDeployComments.yml b/.github/workflows/postDeployComments.yml index 647db1a2d2f73..80a741a570a2a 100644 --- a/.github/workflows/postDeployComments.yml +++ b/.github/workflows/postDeployComments.yml @@ -23,6 +23,14 @@ on: description: Web deploy status required: true type: string + android_sentry_url: + description: URL to Sentry size analysis for Android + required: false + type: string + ios_sentry_url: + description: URL to Sentry size analysis for iOS + required: false + type: string secrets: OS_BOTIFY_TOKEN: description: Token for accessing Mobile-Expensify repository @@ -109,3 +117,5 @@ jobs: WEB: ${{ inputs.web }} DATE: ${{ inputs.date }} NOTE: ${{ inputs.note }} + ANDROID_SENTRY_URL: ${{ inputs.android_sentry_url }} + IOS_SENTRY_URL: ${{ inputs.ios_sentry_url }} From 4ba0bae0f95045471ef271ff7d54f81158faed4b Mon Sep 17 00:00:00 2001 From: Tomasz Lesniakiewicz Date: Tue, 17 Mar 2026 18:39:32 +0100 Subject: [PATCH 20/20] add mocks for unit tests --- tests/unit/markPullRequestsAsDeployedTest.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/unit/markPullRequestsAsDeployedTest.ts b/tests/unit/markPullRequestsAsDeployedTest.ts index b63b442a87870..564c3542a7242 100644 --- a/tests/unit/markPullRequestsAsDeployedTest.ts +++ b/tests/unit/markPullRequestsAsDeployedTest.ts @@ -84,6 +84,8 @@ function mockGetInputDefaultImplementation(key: string): boolean | string { return 'success'; case 'DATE': case 'NOTE': + case 'ANDROID_SENTRY_URL': + case 'IOS_SENTRY_URL': return ''; default: throw new Error(`Trying to access invalid input: ${key}`);