Skip to content

Commit 5755ef6

Browse files
Merge branch 'master' into constantinius/ref/analytics/tet-825
2 parents baf5a77 + 3b1bb7f commit 5755ef6

File tree

345 files changed

+4229
-2621
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

345 files changed

+4229
-2621
lines changed

.github/file-filters.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ typecheckable_rules_changed: &typecheckable_rules_changed
3131
# Trigger to apply the 'Scope: Frontend' label to PRs
3232
frontend_all: &frontend_all
3333
- added|modified: '**/*.{ts,tsx,js,jsx,mjs}'
34-
- added|modified: 'static/**/*.{less,json,yml,md}'
34+
- added|modified: 'static/**/*.{less,json,yml,md,mdx}'
3535
- added|modified: '{.volta,vercel,tsconfig,biome,package}.json'
3636

3737
# Also used in `getsentry-dispatch.yml` to dispatch backend tests on getsentry

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,13 @@ Sentry is a developer-first error tracking and performance monitoring platform t
3535
- [Objective-C/Swift](https://github.com/getsentry/sentry-cocoa)
3636
- [C\#/F\#](https://github.com/getsentry/sentry-dotnet)
3737
- [C/C++](https://github.com/getsentry/sentry-native)
38-
- [Dart](https://github.com/getsentry/sentry-dart)
38+
- [Dart/Flutter](https://github.com/getsentry/sentry-dart)
3939
- [Perl](https://github.com/getsentry/perl-raven)
4040
- [Clojure](https://github.com/getsentry/sentry-clj/)
4141
- [Elixir](https://github.com/getsentry/sentry-elixir)
4242
- [Unity](https://github.com/getsentry/sentry-unity)
4343
- [Unreal Engine](https://github.com/getsentry/sentry-unreal)
44+
- [Godot Engine](https://github.com/getsentry/sentry-godot)
4445
- [PowerShell](https://github.com/getsentry/sentry-powershell)
4546

4647
# Resources

knip.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ const config: KnipConfig = {
8181
enumMembers: 'off',
8282
unlisted: 'off',
8383
},
84+
include: ['nsExports', 'nsTypes'],
8485
};
8586

8687
export default config;

migrations_lockfile.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ ahead of you.
55
To resolve this, rebase against latest master and regenerate your migration. This file
66
will then be regenerated, and you should be able to merge without conflicts.
77

8-
discover: 0001_move_discover_models
8+
discover: 0002_link_migrated_explore_query_in_discover
99

10-
explore: 0005_explore_django_json_field
10+
explore: 0006_add_changed_reason_field_explore
1111

1212
feedback: 0001_squashed_0004_index_together
1313

@@ -27,7 +27,7 @@ preprod: 0010_actual_drop_preprod_artifact_analysis_file_id_col
2727

2828
replays: 0006_add_bulk_delete_job
2929

30-
sentry: 0945_move_discover_models
30+
sentry: 0946_add_has_mcp_insights_flag
3131

3232
social_auth: 0003_social_auth_json_field
3333

pyproject.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ module = [
8888
"confluent_kafka.*",
8989
"cssselect.*",
9090
"django_zero_downtime_migrations.backends.postgres.schema.*",
91-
"docker.*",
9291
"fido2.*",
9392
"google.auth.*",
9493
"google.cloud.*",

requirements-dev-frozen.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,7 @@ trio==0.25.0
217217
trio-websocket==0.11.1
218218
types-beautifulsoup4==4.11.6
219219
types-cachetools==5.3.0.5
220+
types-docker==7.1.0.20250705
220221
types-jsonschema==4.16.1
221222
types-oauthlib==3.2.0.8
222223
types-parsimonious==0.10.0.8

requirements-dev.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ msgpack-types>=0.2.0
4646
mypy>=1.15
4747
types-beautifulsoup4
4848
types-cachetools
49+
types-docker
4950
types-jsonschema
5051
types-oauthlib
5152
types-parsimonious

rspack.config.ts

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -534,7 +534,19 @@ const appConfig: Configuration = {
534534
// This only runs in production mode
535535
minimizer: [
536536
new rspack.LightningCssMinimizerRspackPlugin(),
537-
new rspack.SwcJsMinimizerRspackPlugin(),
537+
new rspack.SwcJsMinimizerRspackPlugin({
538+
minimizerOptions: {
539+
compress: {
540+
// We are turning off these 3 minifier options because it has caused
541+
// unexpected behaviour. See the following issues for more details.
542+
// - https://github.com/swc-project/swc/issues/10822
543+
// - https://github.com/swc-project/swc/issues/10824
544+
reduce_vars: false,
545+
inline: 0,
546+
collapse_vars: false,
547+
},
548+
},
549+
}),
538550
],
539551
},
540552
devtool: IS_PRODUCTION ? 'source-map' : 'eval-cheap-module-source-map',
@@ -767,9 +779,8 @@ if (IS_UI_DEV_ONLY) {
767779
rewrites: [{from: /^\/.*$/, to: '/_assets/index.html'}],
768780
},
769781
};
770-
appConfig.optimization = {
771-
runtimeChunk: 'single',
772-
};
782+
// Hot reloading breaks if we aren't using a single runtime chunk
783+
appConfig.optimization!.runtimeChunk = 'single';
773784
}
774785

775786
if (IS_UI_DEV_ONLY || SENTRY_EXPERIMENTAL_SPA) {

src/sentry/api/endpoints/organization_events_meta.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
from sentry.models.organization import Organization
2424
from sentry.search.eap.types import SearchResolverConfig
2525
from sentry.search.events.types import SnubaParams
26-
from sentry.snuba import spans_indexed, spans_metrics, spans_rpc
26+
from sentry.snuba import ourlogs, spans_indexed, spans_metrics, spans_rpc
2727
from sentry.snuba.query_sources import QuerySource
2828
from sentry.snuba.referrer import Referrer
2929

@@ -97,6 +97,17 @@ def get(self, request: Request, organization) -> Response:
9797
sampling_mode=None,
9898
)
9999

100+
return Response({"count": result["data"][0]["count()"]})
101+
elif dataset == ourlogs:
102+
result = ourlogs.query(
103+
selected_columns=["count()"],
104+
snuba_params=snuba_params,
105+
query=request.query_params.get("query"),
106+
orderby=None,
107+
offset=0,
108+
limit=1,
109+
referrer=Referrer.API_ORGANIZATION_EVENTS_META,
110+
)
100111
return Response({"count": result["data"][0]["count()"]})
101112
else:
102113
result = dataset.query(

src/sentry/api/endpoints/project_details.py

Lines changed: 29 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,7 @@
3636
from sentry.deletions.models.scheduleddeletion import RegionScheduledDeletion
3737
from sentry.dynamic_sampling import get_supported_biases_ids, get_user_biases
3838
from sentry.dynamic_sampling.types import DynamicSamplingMode
39-
from sentry.dynamic_sampling.utils import (
40-
has_custom_dynamic_sampling,
41-
has_dynamic_sampling,
42-
has_dynamic_sampling_minimum_sample_rate,
43-
)
39+
from sentry.dynamic_sampling.utils import has_custom_dynamic_sampling, has_dynamic_sampling
4440
from sentry.grouping.enhancer import Enhancements
4541
from sentry.grouping.enhancer.exceptions import InvalidEnhancerConfig
4642
from sentry.grouping.fingerprinting import FingerprintingRules, InvalidFingerprintingConfig
@@ -99,6 +95,33 @@ class ProjectMemberSerializer(serializers.Serializer):
9995
help_text="Enables starring the project within the projects tab. Can be updated with **`project:read`** permission.",
10096
required=False,
10197
)
98+
autofixAutomationTuning = serializers.ChoiceField(
99+
choices=[item.value for item in AutofixAutomationTuningSettings],
100+
required=False,
101+
)
102+
seerScannerAutomation = serializers.BooleanField(required=False)
103+
104+
def validate_autofixAutomationTuning(self, value):
105+
organization = self.context["project"].organization
106+
actor = self.context["request"].user
107+
if not features.has(
108+
"organizations:trigger-autofix-on-issue-summary", organization, actor=actor
109+
):
110+
raise serializers.ValidationError(
111+
"Organization does not have the trigger-autofix-on-issue-summary feature enabled."
112+
)
113+
return value
114+
115+
def validate_seerScannerAutomation(self, value):
116+
organization = self.context["project"].organization
117+
actor = self.context["request"].user
118+
if not features.has(
119+
"organizations:trigger-autofix-on-issue-summary", organization, actor=actor
120+
):
121+
raise serializers.ValidationError(
122+
"Organization does not have the trigger-autofix-on-issue-summary feature enabled."
123+
)
124+
return value
102125

103126

104127
@extend_schema_serializer(
@@ -131,7 +154,6 @@ class ProjectMemberSerializer(serializers.Serializer):
131154
"copy_from_project",
132155
"targetSampleRate",
133156
"dynamicSamplingBiases",
134-
"dynamicSamplingMinimumSampleRate",
135157
"tempestFetchScreenshots",
136158
"tempestFetchDumps",
137159
"autofixAutomationTuning",
@@ -225,13 +247,8 @@ class ProjectAdminSerializer(ProjectMemberSerializer):
225247
copy_from_project = serializers.IntegerField(required=False)
226248
targetSampleRate = serializers.FloatField(required=False, min_value=0, max_value=1)
227249
dynamicSamplingBiases = DynamicSamplingBiasSerializer(required=False, many=True)
228-
dynamicSamplingMinimumSampleRate = serializers.BooleanField(required=False)
229250
tempestFetchScreenshots = serializers.BooleanField(required=False)
230251
tempestFetchDumps = serializers.BooleanField(required=False)
231-
autofixAutomationTuning = serializers.ChoiceField(
232-
choices=[item.value for item in AutofixAutomationTuningSettings], required=False
233-
)
234-
seerScannerAutomation = serializers.BooleanField(required=False)
235252

236253
# DO NOT ADD MORE TO OPTIONS
237254
# Each param should be a field in the serializer like above.
@@ -434,15 +451,6 @@ def validate_targetSampleRate(self, value):
434451

435452
return value
436453

437-
def validate_dynamicSamplingMinimumSampleRate(self, value):
438-
organization = self.context["project"].organization
439-
actor = self.context["request"].user
440-
if not has_dynamic_sampling_minimum_sample_rate(organization, actor=actor):
441-
raise serializers.ValidationError(
442-
"Organization does not have the dynamic sampling minimum sample rate feature enabled."
443-
)
444-
return value
445-
446454
def validate_tempestFetchScreenshots(self, value):
447455
organization = self.context["project"].organization
448456
actor = self.context["request"].user
@@ -461,28 +469,6 @@ def validate_tempestFetchDumps(self, value):
461469
)
462470
return value
463471

464-
def validate_autofixAutomationTuning(self, value):
465-
organization = self.context["project"].organization
466-
actor = self.context["request"].user
467-
if not features.has(
468-
"organizations:trigger-autofix-on-issue-summary", organization, actor=actor
469-
):
470-
raise serializers.ValidationError(
471-
"Organization does not have the trigger-autofix-on-issue-summary feature enabled."
472-
)
473-
return value
474-
475-
def validate_seerScannerAutomation(self, value):
476-
organization = self.context["project"].organization
477-
actor = self.context["request"].user
478-
if not features.has(
479-
"organizations:trigger-autofix-on-issue-summary", organization, actor=actor
480-
):
481-
raise serializers.ValidationError(
482-
"Organization does not have the trigger-autofix-on-issue-summary feature enabled."
483-
)
484-
return value
485-
486472

487473
class RelaxedProjectPermission(ProjectPermission):
488474
scope_map = {
@@ -581,7 +567,7 @@ def put(self, request: Request, project) -> Response:
581567
Update various attributes and configurable settings for the given project.
582568
583569
Note that solely having the **`project:read`** scope restricts updatable settings to
584-
`isBookmarked`.
570+
`isBookmarked`, `autofixAutomationTuning`, and `seerScannerAutomation`.
585571
"""
586572
if not request.user.is_authenticated:
587573
return Response(status=status.HTTP_400_BAD_REQUEST)
@@ -773,14 +759,6 @@ def put(self, request: Request, project) -> Response:
773759
changed_proj_settings["sentry:dynamic_sampling_biases"] = result[
774760
"dynamicSamplingBiases"
775761
]
776-
if result.get("dynamicSamplingMinimumSampleRate") is not None:
777-
if project.update_option(
778-
"sentry:dynamic_sampling_minimum_sample_rate",
779-
result["dynamicSamplingMinimumSampleRate"],
780-
):
781-
changed_proj_settings["sentry:dynamic_sampling_minimum_sample_rate"] = result[
782-
"dynamicSamplingMinimumSampleRate"
783-
]
784762

785763
if result.get("autofixAutomationTuning") is not None:
786764
if project.update_option(

0 commit comments

Comments
 (0)