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/buildAndroid.yml b/.github/workflows/buildAndroid.yml index 21720c92b4b65..001ee25ee4b3f 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 + value: ${{ jobs.build.outputs.SENTRY_URL }} AAB_FILENAME: description: Filename of the AAB artifact (empty if no AAB was produced) value: ${{ jobs.build.outputs.AAB_FILENAME }} @@ -57,6 +60,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 }} AAB_FILENAME: ${{ steps.collectArtifacts.outputs.AAB_FILENAME }} APK_FILENAME: ${{ steps.collectArtifacts.outputs.APK_FILENAME }} SOURCEMAP_FILENAME: index.android.bundle.map @@ -185,6 +189,27 @@ jobs: custom-identifier: ${{ steps.computeIdentifier.outputs.IDENTIFIER }} validate-elf-alignment: ${{ inputs.variant != 'Release' && 'true' || 'false' }} + - name: Set artifact URL output + id: set-artifact-url + if: ${{ inputs.variant == 'Adhoc' }} + run: echo "ARTIFACT_URL=$ARTIFACT_URL" >> "$GITHUB_OUTPUT" + + - name: Upload Android build to Sentry for size analysis + id: sentry-upload + 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 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 + 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 @@ -194,11 +219,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: | @@ -294,3 +314,4 @@ jobs: with: name: ${{ inputs.artifact-prefix }}android-apk-artifact path: Expensify.apk + diff --git a/.github/workflows/buildIOS.yml b/.github/workflows/buildIOS.yml index 7808aa612edb9..0c2077322b1a7 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 + value: ${{ jobs.build.outputs.SENTRY_URL }} IPA_FILENAME: description: Filename of the IPA artifact produced by the build value: ${{ jobs.build.outputs.IPA_FILENAME }} @@ -55,6 +58,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 }} IPA_FILENAME: ${{ steps.set-ipa-filename.outputs.IPA_FILENAME }} DSYM_FILENAME: ${{ steps.set-ipa-filename.outputs.DSYM_FILENAME }} SOURCEMAP_FILENAME: main.jsbundle.map @@ -241,6 +245,22 @@ jobs: comment-bot: false custom-identifier: ${{ steps.computeIdentifier.outputs.IDENTIFIER }} + - name: Upload iOS build to Sentry for size analysis + id: sentry-upload + 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 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 + 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' }} @@ -304,3 +324,4 @@ jobs: with: name: ${{ inputs.artifact-prefix }}ios-sourcemap-artifact path: Mobile-Expensify/main.jsbundle.map + 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 }} diff --git a/package-lock.json b/package-lock.json index b113a3670baf9..c04b7914e6021 100644 --- a/package-lock.json +++ b/package-lock.json @@ -182,6 +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.3.0", "@sentry/webpack-plugin": "4.6.0", "@storybook/addon-a11y": "10.1.10", "@storybook/addon-docs": "10.1.10", @@ -13419,6 +13420,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", @@ -13508,59 +13683,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.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": "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.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" ], "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.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", @@ -13568,18 +13742,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.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", @@ -13587,19 +13761,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.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", @@ -13607,18 +13781,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.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", @@ -13626,59 +13800,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.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" ], "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.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" ], "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.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" ], "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/@sentry/core": { diff --git a/package.json b/package.json index ce762a5d964bc..bd3e0e1fc445a 100644 --- a/package.json +++ b/package.json @@ -246,6 +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.3.0", "@sentry/webpack-plugin": "4.6.0", "@storybook/addon-a11y": "10.1.10", "@storybook/addon-docs": "10.1.10", 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}`);