diff --git a/src/apigw/proxy.py b/src/apigw/proxy.py
index 8c69e2035d4d0e..b2a3f81add7bf5 100644
--- a/src/apigw/proxy.py
+++ b/src/apigw/proxy.py
@@ -31,6 +31,7 @@
(["/files/dsyms/"], 90.0),
(["/installablepreprodartifact/"], 90.0),
(["/objectstore/"], 90.0),
+ (["/preprodartifacts/snapshots/", "/download/"], 90.0),
]
diff --git a/src/sentry/features/temporary.py b/src/sentry/features/temporary.py
index 000f6b28edd36a..d87426452b771b 100644
--- a/src/sentry/features/temporary.py
+++ b/src/sentry/features/temporary.py
@@ -496,6 +496,8 @@ def register_temporary_features(manager: FeatureManager) -> None:
manager.add("projects:relay-minidump-uploads", ProjectFeature, FeatureHandlerStrategy.FLAGPOLE, api_expose=False)
# Enables the uploading of playstation attachments to the objectstore.
manager.add("projects:relay-playstation-uploads", ProjectFeature, FeatureHandlerStrategy.FLAGPOLE, api_expose=False)
+ # Enables smarter measurements -> attributes conversion in Relay (see https://github.com/getsentry/relay/pull/6007)
+ manager.add("projects:relay-measurements-smart-conversion", ProjectFeature, FeatureHandlerStrategy.FLAGPOLE, api_expose=False)
# Enable lightweight RCA clustering write path (generate embeddings on new issues)
manager.add("organizations:supergroups-lightweight-rca-clustering-write", OrganizationFeature, FeatureHandlerStrategy.FLAGPOLE, api_expose=False)
diff --git a/src/sentry/relay/config/__init__.py b/src/sentry/relay/config/__init__.py
index 2d95c8e4f89284..4d0caf7b9ece8a 100644
--- a/src/sentry/relay/config/__init__.py
+++ b/src/sentry/relay/config/__init__.py
@@ -74,6 +74,7 @@
"projects:relay-minidump-attachment-uploads",
"projects:relay-minidump-uploads",
"projects:relay-playstation-uploads",
+ "projects:relay-measurements-smart-conversion",
]
EXTRACT_METRICS_VERSION = 1
diff --git a/static/app/components/events/autofix/v3/artifactLoadingDetails.tsx b/static/app/components/events/autofix/v3/artifactLoadingDetails.tsx
index 0099d67c530ff9..50c8ab7b86f8f3 100644
--- a/static/app/components/events/autofix/v3/artifactLoadingDetails.tsx
+++ b/static/app/components/events/autofix/v3/artifactLoadingDetails.tsx
@@ -1,11 +1,11 @@
import styled from '@emotion/styled';
import {Flex} from '@sentry/scraps/layout';
+import {Markdown} from '@sentry/scraps/markdown';
import {Text} from '@sentry/scraps/text';
import {type AutofixSection} from 'sentry/components/events/autofix/useExplorerAutofix';
import {ArtifactDetails} from 'sentry/components/events/autofix/v3/artifactDetails';
-import {StyledMarkedText} from 'sentry/components/events/autofix/v3/styled';
import {LoadingIndicator} from 'sentry/components/loadingIndicator';
import {useAutoScroll} from 'sentry/utils/useAutoScroll';
@@ -40,11 +40,11 @@ export function ArtifactLoadingDetails({
}
if (block.message.content && block.message.content !== 'Thinking...') {
- return ;
+ return ;
}
if (block.message.thinking_content) {
- return ;
+ return ;
}
return null;
diff --git a/static/app/components/events/autofix/v3/autofixPreviews.tsx b/static/app/components/events/autofix/v3/autofixPreviews.tsx
index 7f7ba599afb12b..8043e17d2d7b71 100644
--- a/static/app/components/events/autofix/v3/autofixPreviews.tsx
+++ b/static/app/components/events/autofix/v3/autofixPreviews.tsx
@@ -5,6 +5,7 @@ import {Tag} from '@sentry/scraps/badge';
import {LinkButton} from '@sentry/scraps/button';
import {Flex} from '@sentry/scraps/layout';
import {ExternalLink} from '@sentry/scraps/link';
+import {Markdown} from '@sentry/scraps/markdown';
import {Text} from '@sentry/scraps/text';
import {
@@ -21,7 +22,6 @@ import {
isSolutionArtifact,
type AutofixSection,
} from 'sentry/components/events/autofix/useExplorerAutofix';
-import {StyledMarkedText} from 'sentry/components/events/autofix/v3/styled';
import {LoadingIndicator} from 'sentry/components/loadingIndicator';
import {Placeholder} from 'sentry/components/placeholder';
import {IconOpen} from 'sentry/icons';
@@ -50,7 +50,7 @@ export function RootCausePreview({section}: ArtifactPreviewProps) {
{t('Finding the root cause\u2026')}
) : artifact?.data ? (
-
+
) : (
{t(
@@ -76,7 +76,7 @@ export function SolutionPreview({section}: ArtifactPreviewProps) {
{t('Formulating a plan\u2026')}
) : artifact?.data ? (
-
+
) : (
{t('Seer failed to generate a plan. This one is on us. Try running it again.')}
diff --git a/static/app/components/events/autofix/v3/rootCauseCard.tsx b/static/app/components/events/autofix/v3/rootCauseCard.tsx
index b24371b9de8610..6054862c61c5c9 100644
--- a/static/app/components/events/autofix/v3/rootCauseCard.tsx
+++ b/static/app/components/events/autofix/v3/rootCauseCard.tsx
@@ -2,6 +2,7 @@ import {Fragment, useMemo} from 'react';
import {Button} from '@sentry/scraps/button';
import {Container, Flex} from '@sentry/scraps/layout';
+import {Markdown} from '@sentry/scraps/markdown';
import {Text} from '@sentry/scraps/text';
import {
@@ -15,7 +16,6 @@ import {ArtifactDetails} from 'sentry/components/events/autofix/v3/artifactDetai
import {ArtifactLoadingDetails} from 'sentry/components/events/autofix/v3/artifactLoadingDetails';
import {AutofixEvidence} from 'sentry/components/events/autofix/v3/autofixEvidence';
import {AutofixResetPrompt} from 'sentry/components/events/autofix/v3/autofixResetPrompt';
-import {StyledMarkedText} from 'sentry/components/events/autofix/v3/styled';
import {useAutofixSectionEvidence} from 'sentry/components/events/autofix/v3/useAutofixSectionEvidence';
import {useResetAutofixStep} from 'sentry/components/events/autofix/v3/useResetAutofixStep';
import {artifactToMarkdown} from 'sentry/components/events/autofix/v3/utils';
@@ -79,7 +79,7 @@ export function RootCauseCard({autofix, groupId, section}: RootCauseCardProps) {
/>
)}
-
+
{artifact.data.five_whys?.length ? (
@@ -88,7 +88,7 @@ export function RootCauseCard({autofix, groupId, section}: RootCauseCardProps) {
{artifact.data.five_whys.map((why, index) => (
-
+
))}
@@ -99,7 +99,7 @@ export function RootCauseCard({autofix, groupId, section}: RootCauseCardProps) {
{artifact.data?.reproduction_steps.map((step, index) => (
-
+
))}
diff --git a/static/app/components/events/autofix/v3/solutionCard.tsx b/static/app/components/events/autofix/v3/solutionCard.tsx
index 3cbaa6496a1907..0cce9a14db2223 100644
--- a/static/app/components/events/autofix/v3/solutionCard.tsx
+++ b/static/app/components/events/autofix/v3/solutionCard.tsx
@@ -2,6 +2,7 @@ import {Fragment, useMemo} from 'react';
import {Button} from '@sentry/scraps/button';
import {Container, Flex} from '@sentry/scraps/layout';
+import {Markdown} from '@sentry/scraps/markdown';
import {Text} from '@sentry/scraps/text';
import {
@@ -14,7 +15,6 @@ import {ArtifactCard} from 'sentry/components/events/autofix/v3/artifactCard';
import {ArtifactDetails} from 'sentry/components/events/autofix/v3/artifactDetails';
import {ArtifactLoadingDetails} from 'sentry/components/events/autofix/v3/artifactLoadingDetails';
import {AutofixResetPrompt} from 'sentry/components/events/autofix/v3/autofixResetPrompt';
-import {StyledMarkedText} from 'sentry/components/events/autofix/v3/styled';
import {useResetAutofixStep} from 'sentry/components/events/autofix/v3/useResetAutofixStep';
import {artifactToMarkdown} from 'sentry/components/events/autofix/v3/utils';
import {IconList} from 'sentry/icons/iconList';
@@ -74,7 +74,7 @@ export function SolutionCard({autofix, section}: SolutionCardProps) {
/>
)}
-
+
{artifact.data.steps ? (
@@ -83,7 +83,7 @@ export function SolutionCard({autofix, section}: SolutionCardProps) {
{artifact.data.steps.map((step, index) => (
-
+
{step.description}
diff --git a/static/app/components/events/autofix/v3/styled.tsx b/static/app/components/events/autofix/v3/styled.tsx
deleted file mode 100644
index 70270a06151c21..00000000000000
--- a/static/app/components/events/autofix/v3/styled.tsx
+++ /dev/null
@@ -1,10 +0,0 @@
-import styled from '@emotion/styled';
-
-import {MarkedText} from 'sentry/utils/marked/markedText';
-
-export const StyledMarkedText = styled(MarkedText)`
- p {
- margin: 0;
- overflow-wrap: break-word;
- }
-`;
diff --git a/static/app/components/preprod/preprodBuildsSnapshotTable.snapshots.tsx b/static/app/components/preprod/preprodBuildsSnapshotTable.snapshots.tsx
index 0203058ccdd0e8..ca955081a0d1b8 100644
--- a/static/app/components/preprod/preprodBuildsSnapshotTable.snapshots.tsx
+++ b/static/app/components/preprod/preprodBuildsSnapshotTable.snapshots.tsx
@@ -69,6 +69,7 @@ function makeBuild(
images_removed: 0,
images_changed: 3,
images_unchanged: 19,
+ images_skipped: 0,
},
...overrides,
};
@@ -117,6 +118,7 @@ describe('PreprodBuildsSnapshotTable', () => {
images_removed: 0,
images_changed: 3,
images_unchanged: 19,
+ images_skipped: 0,
},
})
),
@@ -137,6 +139,7 @@ describe('PreprodBuildsSnapshotTable', () => {
images_removed: 0,
images_changed: 0,
images_unchanged: 0,
+ images_skipped: 0,
},
})
),
@@ -168,6 +171,7 @@ describe('PreprodBuildsSnapshotTable', () => {
images_removed: 0,
images_changed: 0,
images_unchanged: 20,
+ images_skipped: 0,
},
})
),
diff --git a/static/app/components/preprod/preprodBuildsSnapshotTable.tsx b/static/app/components/preprod/preprodBuildsSnapshotTable.tsx
index eef097448b7fb0..b75b01d6a35bb9 100644
--- a/static/app/components/preprod/preprodBuildsSnapshotTable.tsx
+++ b/static/app/components/preprod/preprodBuildsSnapshotTable.tsx
@@ -31,18 +31,20 @@ function ChangeCounts({
removed,
changed,
unchanged,
+ skipped,
comparisonState,
}: {
added: number;
changed: number;
comparisonState: SnapshotComparisonState | null | undefined;
removed: number;
+ skipped: number;
unchanged: number;
}) {
if (comparisonState !== 'success') {
return {'–'};
}
- if (added === 0 && removed === 0 && changed === 0) {
+ if (added === 0 && removed === 0 && changed === 0 && skipped === 0) {
return (
{t('No changes')}
@@ -62,6 +64,9 @@ function ChangeCounts({
if (unchanged > 0) {
parts.push(t('%s unchanged', unchanged));
}
+ if (skipped > 0) {
+ parts.push(t('%s skipped', skipped));
+ }
return (
{parts.join(', ')}
@@ -113,6 +118,7 @@ export function PreprodBuildsSnapshotTable({
removed={info?.images_removed ?? 0}
changed={info?.images_changed ?? 0}
unchanged={info?.images_unchanged ?? 0}
+ skipped={info?.images_skipped ?? 0}
comparisonState={info?.comparison_state}
/>
diff --git a/static/app/views/preprod/types/buildDetailsTypes.ts b/static/app/views/preprod/types/buildDetailsTypes.ts
index bf2b6e49c9d1e0..a3f6ea1853a5f4 100644
--- a/static/app/views/preprod/types/buildDetailsTypes.ts
+++ b/static/app/views/preprod/types/buildDetailsTypes.ts
@@ -211,5 +211,6 @@ interface SnapshotComparisonInfo {
images_added: number;
images_changed: number;
images_removed: number;
+ images_skipped: number;
images_unchanged: number;
}