Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Adds SAGP as an experimental expo plugin feature #4440

Merged
merged 24 commits into from
Feb 17, 2025

Conversation

antonis
Copy link
Collaborator

@antonis antonis commented Jan 13, 2025

📢 Type of change

  • Bugfix
  • New feature
  • Enhancement
  • Refactoring

📜 Description

Adds SAGP as an experimental expo plugin when the enableAndroidGradlePlugin is enabled in the experimental_android section of the @sentry/react-native/expo plugin.
The supported options are the following:

  • autoUploadProguardMapping
  • includeProguardMapping
  • dexguardEnabled
  • uploadNativeSymbols
  • autoUploadNativeSymbols
  • includeNativeSources
  • includeSourceContext

💡 Motivation and Context

Fixes #4400

💚 How did you test it?

CI, Manual testing:

📝 Checklist

  • I added tests to verify changes
  • No new PII added or SDK only sends newly added PII if sendDefaultPII is enabled
  • I updated the docs if needed.
  • I updated the wizard if needed.
  • All tests passing
  • No breaking changes

🔮 Next steps

See getsentry/sentry-android-gradle-plugin#809

Copy link
Contributor

github-actions bot commented Jan 13, 2025

Messages
📖 Do not forget to update Sentry-docs with your feature once the pull request gets approved.

Generated by 🚫 dangerJS against 892437f

Copy link
Contributor

github-actions bot commented Jan 13, 2025

iOS (new) Performance metrics 🚀

  Plain With Sentry Diff
Startup time 1214.10 ms 1226.14 ms 12.04 ms
Size 3.19 MiB 4.31 MiB 1.12 MiB

Baseline results on branch: main

Startup times

Revision Plain With Sentry Diff
ae7b03d+dirty 1223.71 ms 1227.69 ms 3.98 ms
62a750b+dirty 1228.12 ms 1230.53 ms 2.41 ms
de59d3a+dirty 1241.17 ms 1249.16 ms 8.00 ms
afe5fcb+dirty 1223.53 ms 1223.90 ms 0.37 ms
21a0abb+dirty 1224.37 ms 1225.61 ms 1.24 ms
575f9da+dirty 1272.00 ms 1284.38 ms 12.38 ms
8ae23a7+dirty 1233.67 ms 1229.52 ms -4.15 ms
416f465+dirty 1232.48 ms 1233.26 ms 0.78 ms
148f924+dirty 1220.72 ms 1221.30 ms 0.58 ms
e5c9b8b+dirty 1276.90 ms 1280.92 ms 4.02 ms

App size

Revision Plain With Sentry Diff
ae7b03d+dirty 3.19 MiB 4.25 MiB 1.06 MiB
62a750b+dirty 2.92 MiB 3.48 MiB 575.59 KiB
de59d3a+dirty 2.92 MiB 3.67 MiB 772.59 KiB
afe5fcb+dirty 3.19 MiB 4.26 MiB 1.08 MiB
21a0abb+dirty 3.19 MiB 4.26 MiB 1.08 MiB
575f9da+dirty 2.92 MiB 3.43 MiB 524.26 KiB
8ae23a7+dirty 2.92 MiB 3.66 MiB 757.67 KiB
416f465+dirty 2.92 MiB 3.67 MiB 772.44 KiB
148f924+dirty 2.92 MiB 3.60 MiB 701.88 KiB
e5c9b8b+dirty 2.92 MiB 3.43 MiB 524.50 KiB

Previous results on branch: antonis/experimental-expo-sagp

Startup times

Revision Plain With Sentry Diff
fc3cd14+dirty 1252.76 ms 1248.33 ms -4.43 ms
e0596ce+dirty 1235.27 ms 1230.63 ms -4.63 ms
a05231a+dirty 1225.98 ms 1234.84 ms 8.86 ms
987ce26+dirty 1225.49 ms 1219.68 ms -5.81 ms
c5d03fc+dirty 1230.90 ms 1235.12 ms 4.22 ms
1dddda4+dirty 1219.34 ms 1228.73 ms 9.39 ms
28fa62b+dirty 1214.88 ms 1214.82 ms -0.06 ms
e165be8+dirty 1228.63 ms 1245.41 ms 16.78 ms

App size

Revision Plain With Sentry Diff
fc3cd14+dirty 3.19 MiB 4.25 MiB 1.07 MiB
e0596ce+dirty 3.19 MiB 4.25 MiB 1.07 MiB
a05231a+dirty 3.19 MiB 4.25 MiB 1.06 MiB
987ce26+dirty 3.19 MiB 4.26 MiB 1.08 MiB
c5d03fc+dirty 3.19 MiB 4.25 MiB 1.06 MiB
1dddda4+dirty 3.19 MiB 4.26 MiB 1.08 MiB
28fa62b+dirty 3.19 MiB 4.25 MiB 1.06 MiB
e165be8+dirty 3.19 MiB 4.25 MiB 1.06 MiB

Copy link
Contributor

github-actions bot commented Jan 13, 2025

iOS (legacy) Performance metrics 🚀

  Plain With Sentry Diff
Startup time 1226.82 ms 1227.43 ms 0.61 ms
Size 2.63 MiB 3.74 MiB 1.11 MiB

Baseline results on branch: main

Startup times

Revision Plain With Sentry Diff
ae7b03d+dirty 1221.19 ms 1224.69 ms 3.50 ms
62a750b+dirty 1216.60 ms 1229.14 ms 12.54 ms
de59d3a+dirty 1223.73 ms 1236.28 ms 12.55 ms
afe5fcb+dirty 1220.94 ms 1214.73 ms -6.21 ms
21a0abb+dirty 1225.31 ms 1227.00 ms 1.69 ms
575f9da+dirty 1266.22 ms 1274.84 ms 8.62 ms
8ae23a7+dirty 1230.02 ms 1227.62 ms -2.40 ms
416f465+dirty 1221.56 ms 1226.48 ms 4.92 ms
148f924+dirty 1214.76 ms 1215.73 ms 0.97 ms
e5c9b8b+dirty 1258.57 ms 1267.32 ms 8.75 ms

App size

Revision Plain With Sentry Diff
ae7b03d+dirty 2.63 MiB 3.69 MiB 1.05 MiB
62a750b+dirty 2.36 MiB 2.92 MiB 570.00 KiB
de59d3a+dirty 2.36 MiB 3.11 MiB 760.16 KiB
afe5fcb+dirty 2.63 MiB 3.70 MiB 1.06 MiB
21a0abb+dirty 2.63 MiB 3.70 MiB 1.06 MiB
575f9da+dirty 2.36 MiB 2.87 MiB 520.20 KiB
8ae23a7+dirty 2.36 MiB 3.10 MiB 752.42 KiB
416f465+dirty 2.36 MiB 3.11 MiB 759.80 KiB
148f924+dirty 2.36 MiB 3.04 MiB 696.25 KiB
e5c9b8b+dirty 2.36 MiB 2.87 MiB 520.43 KiB

Previous results on branch: antonis/experimental-expo-sagp

Startup times

Revision Plain With Sentry Diff
fc3cd14+dirty 1220.68 ms 1209.53 ms -11.15 ms
e0596ce+dirty 1220.34 ms 1213.90 ms -6.44 ms
a05231a+dirty 1232.37 ms 1242.12 ms 9.75 ms
987ce26+dirty 1228.78 ms 1238.02 ms 9.24 ms
c5d03fc+dirty 1214.23 ms 1214.45 ms 0.21 ms
1dddda4+dirty 1231.96 ms 1229.65 ms -2.31 ms
28fa62b+dirty 1222.57 ms 1223.91 ms 1.34 ms
e165be8+dirty 1226.43 ms 1225.46 ms -0.97 ms

App size

Revision Plain With Sentry Diff
fc3cd14+dirty 2.63 MiB 3.69 MiB 1.05 MiB
e0596ce+dirty 2.63 MiB 3.69 MiB 1.06 MiB
a05231a+dirty 2.63 MiB 3.68 MiB 1.05 MiB
987ce26+dirty 2.63 MiB 3.70 MiB 1.06 MiB
c5d03fc+dirty 2.63 MiB 3.69 MiB 1.05 MiB
1dddda4+dirty 2.63 MiB 3.70 MiB 1.06 MiB
28fa62b+dirty 2.63 MiB 3.69 MiB 1.05 MiB
e165be8+dirty 2.63 MiB 3.69 MiB 1.05 MiB

Copy link
Contributor

github-actions bot commented Jan 13, 2025

Android (new) Performance metrics 🚀

  Plain With Sentry Diff
Startup time 428.85 ms 446.92 ms 18.07 ms
Size 7.15 MiB 8.38 MiB 1.23 MiB

Baseline results on branch: main

Startup times

Revision Plain With Sentry Diff
0d3e677+dirty 384.24 ms 431.45 ms 47.21 ms
5571a20+dirty 359.52 ms 389.80 ms 30.28 ms
1c9e040+dirty 372.30 ms 417.80 ms 45.50 ms
148f924+dirty 347.36 ms 389.13 ms 41.77 ms
fe13591+dirty 539.51 ms 597.92 ms 58.40 ms
205982c+dirty 383.94 ms 424.98 ms 41.04 ms
61310e1+dirty 463.51 ms 511.09 ms 47.57 ms
83f6f6c+dirty 442.82 ms 487.48 ms 44.66 ms
31fcca2+dirty 366.64 ms 395.78 ms 29.14 ms
8900e1a+dirty 371.40 ms 377.70 ms 6.31 ms

App size

Revision Plain With Sentry Diff
0d3e677+dirty 7.15 MiB 8.35 MiB 1.20 MiB
5571a20+dirty 7.15 MiB 8.20 MiB 1.05 MiB
1c9e040+dirty 7.15 MiB 8.38 MiB 1.23 MiB
148f924+dirty 7.15 MiB 8.21 MiB 1.07 MiB
fe13591+dirty 7.15 MiB 8.35 MiB 1.20 MiB
205982c+dirty 7.15 MiB 8.38 MiB 1.23 MiB
61310e1+dirty 7.15 MiB 8.36 MiB 1.21 MiB
83f6f6c+dirty 7.15 MiB 8.37 MiB 1.22 MiB
31fcca2+dirty 7.15 MiB 8.18 MiB 1.03 MiB
8900e1a+dirty 7.15 MiB 8.03 MiB 901.79 KiB

Previous results on branch: antonis/experimental-expo-sagp

Startup times

Revision Plain With Sentry Diff
a05231a+dirty 410.49 ms 464.94 ms 54.45 ms
e165be8+dirty 403.17 ms 433.17 ms 30.00 ms
987ce26+dirty 394.51 ms 421.02 ms 26.51 ms
fc3cd14+dirty 409.87 ms 463.46 ms 53.59 ms
28fa62b+dirty 467.78 ms 451.33 ms -16.45 ms
1dddda4+dirty 361.73 ms 392.37 ms 30.64 ms
e0596ce+dirty 393.94 ms 461.88 ms 67.94 ms
c5d03fc+dirty 400.53 ms 450.84 ms 50.31 ms

App size

Revision Plain With Sentry Diff
a05231a+dirty 7.15 MiB 8.38 MiB 1.23 MiB
e165be8+dirty 7.15 MiB 8.38 MiB 1.23 MiB
987ce26+dirty 7.15 MiB 8.38 MiB 1.23 MiB
fc3cd14+dirty 7.15 MiB 8.38 MiB 1.23 MiB
28fa62b+dirty 7.15 MiB 8.38 MiB 1.23 MiB
1dddda4+dirty 7.15 MiB 8.38 MiB 1.23 MiB
e0596ce+dirty 7.15 MiB 8.38 MiB 1.23 MiB
c5d03fc+dirty 7.15 MiB 8.38 MiB 1.23 MiB

Copy link
Contributor

github-actions bot commented Jan 14, 2025

Android (legacy) Performance metrics 🚀

  Plain With Sentry Diff
Startup time 428.81 ms 419.59 ms -9.22 ms
Size 17.75 MiB 20.11 MiB 2.37 MiB

Baseline results on branch: main

Startup times

Revision Plain With Sentry Diff
5bb8d5f 431.21 ms 459.40 ms 28.19 ms
9cab16b 463.30 ms 455.06 ms -8.24 ms
9282172 486.12 ms 467.70 ms -18.42 ms
9433f35 347.64 ms 356.22 ms 8.58 ms
5f03ae9 444.88 ms 448.89 ms 4.01 ms
0eacc98 431.88 ms 454.56 ms 22.68 ms
8de2810 430.47 ms 428.72 ms -1.75 ms
acadc0f+dirty 373.24 ms 381.51 ms 8.27 ms
43e66e0 373.32 ms 366.57 ms -6.75 ms
cdf2bdf 448.42 ms 443.42 ms -5.00 ms

App size

Revision Plain With Sentry Diff
5bb8d5f 17.73 MiB 19.93 MiB 2.20 MiB
9cab16b 17.74 MiB 20.08 MiB 2.34 MiB
9282172 17.74 MiB 20.09 MiB 2.35 MiB
9433f35 17.73 MiB 19.81 MiB 2.08 MiB
5f03ae9 17.75 MiB 20.11 MiB 2.36 MiB
0eacc98 17.75 MiB 20.11 MiB 2.37 MiB
8de2810 17.74 MiB 20.08 MiB 2.34 MiB
acadc0f+dirty 17.73 MiB 19.75 MiB 2.01 MiB
43e66e0 17.74 MiB 20.09 MiB 2.35 MiB
cdf2bdf 17.74 MiB 20.10 MiB 2.36 MiB

Previous results on branch: antonis/experimental-expo-sagp

Startup times

Revision Plain With Sentry Diff
e0596ce 405.46 ms 423.43 ms 17.97 ms
fc3cd14 453.14 ms 472.16 ms 19.02 ms
1dddda4 426.49 ms 434.58 ms 8.09 ms
a05231a 459.71 ms 465.70 ms 5.99 ms
987ce26 466.33 ms 501.40 ms 35.07 ms
c5d03fc 422.04 ms 418.83 ms -3.21 ms
e165be8 451.06 ms 466.90 ms 15.84 ms
28fa62b 420.92 ms 423.72 ms 2.80 ms

App size

Revision Plain With Sentry Diff
e0596ce 17.75 MiB 20.11 MiB 2.37 MiB
fc3cd14 17.75 MiB 20.11 MiB 2.37 MiB
1dddda4 17.75 MiB 20.11 MiB 2.36 MiB
a05231a 17.75 MiB 20.11 MiB 2.36 MiB
987ce26 17.75 MiB 20.11 MiB 2.36 MiB
c5d03fc 17.75 MiB 20.11 MiB 2.37 MiB
e165be8 17.75 MiB 20.11 MiB 2.37 MiB
28fa62b 17.75 MiB 20.11 MiB 2.37 MiB

@antonis antonis marked this pull request as ready for review January 14, 2025 07:36
const withSentryAppBuildGradle = (config: any): any => {
return withAppBuildGradle(config, (config: any) => {
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
if (config.modResults.language === 'groovy') {
Copy link
Member

@krystofwoldrich krystofwoldrich Jan 16, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's invert this and use it as a guard !== groovy.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense 👍 Updated with 7b053f5

// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
config.modResults.contents = contents;
} else {
throw new Error('Cannot configure Sentry in android/app/build.gradle because it is not in Groovy.');
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's use the warnOnce helper instead of throw. It will make the message more readable for the users.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good idea 👍
Updated with b1230bd

@krystofwoldrich
Copy link
Member

When this is merged and release we should also update the docs.

Maybe a sub page to https://docs.sentry.io/platforms/react-native/manual-setup/expo/

(not to interrupt the default setup flow with the gradle options).

@antonis
Copy link
Collaborator Author

antonis commented Jan 16, 2025

When this is merged and release we should also update the docs.

Maybe a sub page to https://docs.sentry.io/platforms/react-native/manual-setup/expo/

(not to interrupt the default setup flow with the gradle options).

Makes sense 👍 I followed up with a docs PR for this.

@lucas-zimerman
Copy link
Collaborator

When this is merged and release we should also update the docs.

Maybe a sub page to https://docs.sentry.io/platforms/react-native/manual-setup/expo/

(not to interrupt the default setup flow with the gradle options).

It would be great if we could merge this Page and make it only available to people accessing it only by direct link, so it is easier to validate the URLs and also keep it hidden from the users while an official release isn't released

Copy link
Collaborator

@lucas-zimerman lucas-zimerman left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see no issues with the PR, LGTM!

@antonis
Copy link
Collaborator Author

antonis commented Jan 30, 2025

When this is merged and release we should also update the docs.

Maybe a sub page to https://docs.sentry.io/platforms/react-native/manual-setup/expo/

(not to interrupt the default setup flow with the gradle options).

It would be great if we could merge this Page and make it only available to people accessing it only by direct link, so it is easier to validate the URLs and also keep it hidden from the users while an official release isn't released

The current doc PR adds it as a subpage with no link from the parent (other than the navigation links). I'm ok with hiding it. Wdyt @krystofwoldrich?

ps. If I'm not mistaken hiding the page can be achieved by setting draft and noindex to true

@erickreutz
Copy link

We would love to see this merged!

Copy link
Member

@krystofwoldrich krystofwoldrich left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good. Thank you!

@krystofwoldrich krystofwoldrich merged commit cec511e into main Feb 17, 2025
70 checks passed
@krystofwoldrich krystofwoldrich deleted the antonis/experimental-expo-sagp branch February 17, 2025 15:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Proguard Mappings are not uploaded using expo plugin
4 participants