Skip to content

Conversation

@calvin-codecov
Copy link
Contributor

@calvin-codecov calvin-codecov commented Jan 20, 2026

Closes https://linear.app/getsentry/issue/CCMRG-2016/allow-yearly-plan-upgrades-for-current-customers

Changes made on top of #3958

Allows yearly upgrades if the customer is currently on a yearly plan. Otherwise, yearly plans should still continue to not be shown as an option.


Note

Enables annual billing selection for existing annual subscribers and keeps plan/billing choices consistent across the upgrade flow.

  • Show ANNUAL radio option in BillingOptions (Pro/Sentry/Team) only when current plan is annual; persist selection via setFormValue/setSelectedPlan and local state
  • Update PriceCallout (Pro/Sentry/Team) to render annual per-month price, annual total, and savings (with Sentry-specific diff check)
  • Respect selected/current billing rate when switching plan types (PlanTypeOptions) and when computing defaults (determineDefaultPlan); include yearly variants in find*Plans
  • Wire newPlan through controllers to pricing components; display dynamic base unit price/billing rate text
  • Refresh tests to cover annual visibility, pricing text, defaults, and request payloads

Written by Cursor Bugbot for commit 2938dbb. This will update automatically on new commits. Configure here.

@linear
Copy link

linear bot commented Jan 20, 2026

@sentry
Copy link

sentry bot commented Jan 20, 2026

Codecov Report

❌ Patch coverage is 92.75362% with 10 lines in your changes missing coverage. Please review.
✅ Project coverage is 98.68%. Comparing base (8bbe472) to head (2938dbb).
⚠️ Report is 1 commits behind head on main.
✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
...ge/UpgradeForm/PlanTypeOptions/PlanTypeOptions.tsx 77.77% 4 Missing ⚠️
...roPlanController/BillingOptions/BillingOptions.tsx 92.30% 2 Missing ⚠️
...ryPlanController/BillingOptions/BillingOptions.tsx 92.30% 2 Missing ⚠️
...amPlanController/BillingOptions/BillingOptions.tsx 92.30% 2 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #3965      +/-   ##
==========================================
- Coverage   98.73%   98.68%   -0.06%     
==========================================
  Files         826      826              
  Lines       14983    15085     +102     
  Branches     4287     4359      +72     
==========================================
+ Hits        14793    14886      +93     
- Misses        182      191       +9     
  Partials        8        8              
Files with missing lines Coverage Δ
...adePlanPage/UpgradeForm/Controllers/Controller.tsx 100.00% <100.00%> (ø)
...rs/ProPlanController/PriceCallout/PriceCallout.tsx 100.00% <100.00%> (ø)
...ontrollers/ProPlanController/ProPlanController.tsx 100.00% <ø> (ø)
...SentryPlanController/PriceCallout/PriceCallout.tsx 100.00% <100.00%> (ø)
...lers/SentryPlanController/SentryPlanController.tsx 100.00% <ø> (ø)
...s/TeamPlanController/PriceCallout/PriceCallout.tsx 100.00% <100.00%> (ø)
...trollers/TeamPlanController/TeamPlanController.tsx 100.00% <ø> (ø)
...Page/subRoutes/UpgradePlanPage/UpgradePlanPage.jsx 95.83% <100.00%> (ø)
src/shared/utils/billing.ts 100.00% <ø> (ø)
src/shared/utils/upgradeForm.ts 94.94% <100.00%> (+1.13%) ⬆️
... and 4 more
Components Coverage Δ
Assets 100.00% <ø> (ø)
Layouts 99.71% <ø> (ø)
Pages 98.24% <91.86%> (-0.10%) ⬇️
Services 99.32% <ø> (ø)
Shared 99.07% <100.00%> (+0.06%) ⬆️
UI 99.01% <ø> (ø)

Continue to review full report in Codecov by Sentry.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 8bbe472...2938dbb. Read the comment docs.

@codecov-public-qa
Copy link

codecov-public-qa bot commented Jan 20, 2026

Codecov Report

Attention: Patch coverage is 92.75362% with 10 lines in your changes missing coverage. Please review.

Project coverage is 98.68%. Comparing base (8bbe472) to head (2938dbb).
Report is 1 commits behind head on main.

✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
...ge/UpgradeForm/PlanTypeOptions/PlanTypeOptions.tsx 77.77% 4 Missing ⚠️
...roPlanController/BillingOptions/BillingOptions.tsx 92.30% 2 Missing ⚠️
...ryPlanController/BillingOptions/BillingOptions.tsx 92.30% 2 Missing ⚠️
...amPlanController/BillingOptions/BillingOptions.tsx 92.30% 2 Missing ⚠️
@@            Coverage Diff             @@
##             main    #3965      +/-   ##
==========================================
- Coverage   98.73%   98.68%   -0.06%     
==========================================
  Files         826      826              
  Lines       14983    15085     +102     
  Branches     4287     4351      +64     
==========================================
+ Hits        14793    14886      +93     
- Misses        182      191       +9     
  Partials        8        8              
Files with missing lines Coverage Δ
...adePlanPage/UpgradeForm/Controllers/Controller.tsx 100.00% <100.00%> (ø)
...rs/ProPlanController/PriceCallout/PriceCallout.tsx 100.00% <100.00%> (ø)
...ontrollers/ProPlanController/ProPlanController.tsx 100.00% <ø> (ø)
...SentryPlanController/PriceCallout/PriceCallout.tsx 100.00% <100.00%> (ø)
...lers/SentryPlanController/SentryPlanController.tsx 100.00% <ø> (ø)
...s/TeamPlanController/PriceCallout/PriceCallout.tsx 100.00% <100.00%> (ø)
...trollers/TeamPlanController/TeamPlanController.tsx 100.00% <ø> (ø)
...Page/subRoutes/UpgradePlanPage/UpgradePlanPage.jsx 95.83% <100.00%> (ø)
src/shared/utils/billing.ts 100.00% <ø> (ø)
src/shared/utils/upgradeForm.ts 94.94% <100.00%> (+1.13%) ⬆️
... and 4 more
Components Coverage Δ
Assets 100.00% <ø> (ø)
Layouts 99.71% <ø> (ø)
Pages 98.24% <91.86%> (-0.10%) ⬇️
Services 99.32% <ø> (ø)
Shared 99.07% <100.00%> (+0.06%) ⬆️
UI 99.01% <ø> (ø)

Continue to review full report in Codecov by Sentry.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 8bbe472...2938dbb. Read the comment docs.

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@codecov-releaser
Copy link
Collaborator

codecov-releaser commented Jan 20, 2026

✅ Deploy preview for gazebo ready!

Previews expire after 1 month automatically.

Storybook

Commit Created Cloud Enterprise
dd42260 Tue, 20 Jan 2026 17:07:18 GMT Expired Expired
2938dbb Tue, 20 Jan 2026 19:13:27 GMT Cloud Enterprise

@codecov-qa
Copy link

codecov-qa bot commented Jan 20, 2026

Codecov Report

❌ Patch coverage is 92.75362% with 10 lines in your changes missing coverage. Please review.
✅ Project coverage is 98.68%. Comparing base (8bbe472) to head (2938dbb).
⚠️ Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
...ge/UpgradeForm/PlanTypeOptions/PlanTypeOptions.tsx 77.77% 4 Missing ⚠️
...roPlanController/BillingOptions/BillingOptions.tsx 92.30% 2 Missing ⚠️
...ryPlanController/BillingOptions/BillingOptions.tsx 92.30% 2 Missing ⚠️
...amPlanController/BillingOptions/BillingOptions.tsx 92.30% 2 Missing ⚠️
@@            Coverage Diff             @@
##             main    #3965      +/-   ##
==========================================
+ Coverage   95.34%   98.68%   +3.33%     
==========================================
  Files         826      826              
  Lines       14983    15085     +102     
  Branches     4287     4351      +64     
==========================================
+ Hits        14285    14886     +601     
+ Misses        618      191     -427     
+ Partials       80        8      -72     
Files with missing lines Coverage Δ
...adePlanPage/UpgradeForm/Controllers/Controller.tsx 100.00% <100.00%> (ø)
...rs/ProPlanController/PriceCallout/PriceCallout.tsx 100.00% <100.00%> (ø)
...ontrollers/ProPlanController/ProPlanController.tsx 100.00% <ø> (ø)
...SentryPlanController/PriceCallout/PriceCallout.tsx 100.00% <100.00%> (ø)
...lers/SentryPlanController/SentryPlanController.tsx 100.00% <ø> (ø)
...s/TeamPlanController/PriceCallout/PriceCallout.tsx 100.00% <100.00%> (ø)
...trollers/TeamPlanController/TeamPlanController.tsx 100.00% <ø> (ø)
...Page/subRoutes/UpgradePlanPage/UpgradePlanPage.jsx 95.83% <100.00%> (ø)
src/shared/utils/billing.ts 100.00% <ø> (+2.04%) ⬆️
src/shared/utils/upgradeForm.ts 94.94% <100.00%> (+1.13%) ⬆️
... and 4 more

... and 53 files with indirect coverage changes

Components Coverage Δ
Assets 100.00% <ø> (ø)
Layouts 99.71% <ø> (ø)
Pages 98.24% <91.86%> (-0.10%) ⬇️
Services 99.32% <ø> (+0.06%) ⬆️
Shared 99.07% <100.00%> (+33.66%) ⬆️
UI 99.01% <ø> (ø)

Continue to review full report in Codecov by Sentry.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 8bbe472...2938dbb. Read the comment docs.

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@sentry
Copy link

sentry bot commented Jan 21, 2026

Bundle Report

Changes will increase total bundle size by 8.71kB (0.07%) ⬆️. This is within the configured threshold ✅

Detailed changes
Bundle name Size Change
gazebo-production-system 6.23MB 4.06kB (0.07%) ⬆️
gazebo-production-esm 6.31MB 4.66kB (0.07%) ⬆️

Affected Assets, Files, and Routes:

view changes for bundle: gazebo-production-system

Assets Changed:

Asset Name Size Change Total Size Change (%)
assets/index-legacy.*.js -2 bytes 7.81kB -0.03%
assets/index-legacy.*.js -2 bytes 26.31kB -0.01%
assets/index-legacy.*.js -3.48kB 29.51kB -10.56%
assets/index-legacy.*.js -3 bytes 9.46kB -0.03%
assets/index-legacy.*.js -1 bytes 12.66kB -0.01%
assets/index-legacy.*.js -4 bytes 115.08kB -0.0%
assets/index-legacy.*.js -1 bytes 11.39kB -0.01%
assets/index-legacy.*.js -1 bytes 11.79kB -0.01%
assets/index-legacy.*.js -2 bytes 113.07kB -0.0%
assets/index-legacy.*.js -2.23kB 32.99kB -6.32%
assets/index-legacy.*.js 51 bytes 2.7kB 1.92%
assets/index-legacy.*.js -4 bytes 84.77kB -0.0%
assets/index-legacy.*.js -1 bytes 16.8kB -0.01%
assets/index-legacy.*.js 3.56kB 26.76kB 15.34% ⚠️
assets/index-legacy.*.js -2 bytes 5.63kB -0.04%
assets/index-legacy.*.js 51 bytes 16.62kB 0.31%
assets/index-legacy.*.js -2 bytes 45.41kB -0.0%
assets/index-legacy.*.js -1 bytes 41.39kB -0.0%
assets/index-legacy.*.js -1 bytes 21.1kB -0.0%
assets/index-legacy.*.js -14.2kB 35.21kB -28.73%
assets/index-legacy.*.js -1 bytes 12.28kB -0.01%
assets/index-legacy.*.js -2 bytes 12.78kB -0.02%
assets/index-legacy.*.js -3.85kB 49.41kB -7.22%
assets/index-legacy.*.js -1 bytes 8.57kB -0.01%
assets/index-legacy.*.js -2 bytes 7.4kB -0.03%
assets/index-legacy.*.js -1 bytes 4.41kB -0.02%
assets/RawFileViewer-legacy.*.js -1 bytes 127.36kB -0.0%
assets/BillingDetails-legacy.*.js (New) 27.02kB 27.02kB 100.0% 🚀
assets/ConfigureCachedBundleModal-legacy.*.js -5 bytes 7.87kB -0.06%
assets/useInvoices-legacy.*.js -723 bytes 2.53kB -22.25%
assets/propTypes-legacy.*.js (New) 819 bytes 819 bytes 100.0% 🚀
assets/upgradeForm-legacy.*.js (Deleted) -2.94kB 0 bytes -100.0% 🗑️

Files in assets/index-legacy.*.js:

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradePlanPage.jsx → Total Size: 1.83kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/ProPlanController/BillingOptions/BillingOptions.tsx → Total Size: 2.81kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/Controller.tsx → Total Size: 787 bytes

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/TeamPlanController/BillingOptions/BillingOptions.tsx → Total Size: 2.82kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/PlanTypeOptions/PlanTypeOptions.tsx → Total Size: 3.49kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/TeamPlanController/TeamPlanController.tsx → Total Size: 1.77kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/SentryPlanController/PriceCallout/PriceCallout.tsx → Total Size: 2.54kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/ProPlanController/PriceCallout/PriceCallout.tsx → Total Size: 2.48kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/ProPlanController/ProPlanController.tsx → Total Size: 1.72kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/SentryPlanController/SentryPlanController.tsx → Total Size: 1.72kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/TeamPlanController/PriceCallout/PriceCallout.tsx → Total Size: 2.53kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/SentryPlanController/BillingOptions/BillingOptions.tsx → Total Size: 2.85kB

Files in assets/BillingDetails-legacy.*.js:

  • ./src/shared/utils/upgradeForm.ts → Total Size: 4.75kB
view changes for bundle: gazebo-production-esm

Assets Changed:

Asset Name Size Change Total Size Change (%)
assets/index.*.js -1 bytes 12.42kB -0.01%
assets/index.*.js 55 bytes 2.54kB 2.22%
assets/index.*.js 3 bytes 5.86kB 0.05%
assets/index.*.js 4.08kB 29.17kB 16.25% ⚠️
assets/index.*.js -1.03kB 31.24kB -3.2%
assets/index.*.js -3 bytes 9.58kB -0.03%
assets/index.*.js -2 bytes 53.59kB -0.0%
assets/index.*.js -1 bytes 22.37kB -0.0%
assets/index.*.js -5 bytes 9.91kB -0.05%
assets/index.*.js -1 bytes 12.43kB -0.01%
assets/index.*.js -1 bytes 12.28kB -0.01%
assets/index.*.js -1 bytes 4.6kB -0.02%
assets/index.*.js -1 bytes 41.88kB -0.0%
assets/index.*.js -4 bytes 90.02kB -0.0%
assets/index.*.js -2 bytes 7.45kB -0.03%
assets/index.*.js -1.14kB 32.27kB -3.41%
assets/index.*.js -2 bytes 26.27kB -0.01%
assets/index.*.js -2 bytes 36.76kB -0.01%
assets/index.*.js -1 bytes 13.62kB -0.01%
assets/index.*.js -2 bytes 49.15kB -0.0%
assets/index.*.js -9 bytes 126.54kB -0.01%
assets/index.*.js 16.19kB 33.41kB 93.99% ⚠️
assets/index.*.js -2 bytes 7.75kB -0.03%
assets/index.*.js -1 bytes 8.58kB -0.01%
assets/index.*.js 50 bytes 16.9kB 0.3%
assets/index.*.js -2 bytes 14.24kB -0.01%
assets/index.*.js -39.55kB 17.22kB -69.67%
assets/index.*.js -2 bytes 125.68kB -0.0%
assets/RawFileViewer.*.js -1 bytes 127.15kB -0.0%
assets/BillingDetails.*.js (New) 29.23kB 29.23kB 100.0% 🚀
assets/ConfigureCachedBundleModal.*.js -5 bytes 8.31kB -0.06%
assets/useInvoices.*.js -711 bytes 2.5kB -22.18%
assets/Alert.*.js 5 bytes 2.21kB 0.23%
assets/BenefitList.*.js -5 bytes 1.47kB -0.34%
assets/Checkbox.*.js 5 bytes 976 bytes 0.51%
assets/TotalsNumber.*.js 5 bytes 834 bytes 0.6%
assets/propTypes.*.js (New) 731 bytes 731 bytes 100.0% 🚀
assets/upgradeForm.*.js (Deleted) -3.19kB 0 bytes -100.0% 🗑️

Files in assets/index.*.js:

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/ProPlanController/PriceCallout/PriceCallout.tsx → Total Size: 2.48kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/TeamPlanController/BillingOptions/BillingOptions.tsx → Total Size: 2.82kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/Controller.tsx → Total Size: 787 bytes

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradePlanPage.jsx → Total Size: 1.83kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/SentryPlanController/BillingOptions/BillingOptions.tsx → Total Size: 2.85kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/PlanTypeOptions/PlanTypeOptions.tsx → Total Size: 3.49kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/ProPlanController/ProPlanController.tsx → Total Size: 1.72kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/SentryPlanController/PriceCallout/PriceCallout.tsx → Total Size: 2.54kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/SentryPlanController/SentryPlanController.tsx → Total Size: 1.72kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/TeamPlanController/PriceCallout/PriceCallout.tsx → Total Size: 2.53kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/ProPlanController/BillingOptions/BillingOptions.tsx → Total Size: 2.81kB

  • ./src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/Controllers/TeamPlanController/TeamPlanController.tsx → Total Size: 1.77kB

Files in assets/BillingDetails.*.js:

  • ./src/shared/utils/upgradeForm.ts → Total Size: 4.6kB

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.

3 participants