Skip to content

Commit ca1dbd3

Browse files
rbro112shashjar
authored andcommitted
feat(preprod): Wire up frontend for Android proguard mapping missing (#102455)
Adds missing proguard mappings warning message if `has_proguard_mapping === false`. Refactors the warning message for missing dsyms to better interface with a generic `alertMessage` we'll pass to the `AppSizeTreemap` component. <img width="1499" height="704" alt="Screenshot 2025-10-30 at 4 20 18 PM" src="https://github.com/user-attachments/assets/9a51d1a1-b1de-42b7-99d7-d199d8b9fd25" /> Resolves EME-508
1 parent 17815b0 commit ca1dbd3

File tree

3 files changed

+39
-25
lines changed

3 files changed

+39
-25
lines changed

static/app/views/preprod/buildDetails/main/buildDetailsMainContent.tsx

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,30 @@ export function BuildDetailsMainContent(props: BuildDetailsMainContentProps) {
211211
const missingDsymBinaries =
212212
buildDetailsData?.app_info?.apple_app_info?.missing_dsym_binaries;
213213

214+
const missingProguardMapping =
215+
buildDetailsData?.app_info?.android_app_info?.has_proguard_mapping === false;
216+
217+
const getAlertMessage = () => {
218+
if (missingDsymBinaries && missingDsymBinaries.length > 0) {
219+
if (missingDsymBinaries?.length === 1) {
220+
return t(
221+
'Missing debug symbols for some binaries (%s). Those binaries will not have a detailed breakdown.',
222+
missingDsymBinaries[0]
223+
);
224+
}
225+
return t(
226+
'Missing debug symbols for some binaries (%s and others). Those binaries will not have a detailed breakdown.',
227+
missingDsymBinaries[0]
228+
);
229+
}
230+
231+
if (missingProguardMapping) {
232+
return t('Missing proguard mapping. Dex will not have a detailed breakdown.');
233+
}
234+
235+
return undefined;
236+
};
237+
214238
// Filter data based on search query and categories
215239
const filteredRoot = filterTreemapElement(
216240
appSizeData.treemap.root,
@@ -234,7 +258,7 @@ export function BuildDetailsMainContent(props: BuildDetailsMainContentProps) {
234258
root={filteredTreemapData.root}
235259
searchQuery={searchQuery || ''}
236260
unfilteredRoot={appSizeData.treemap.root}
237-
missingDsymBinaries={missingDsymBinaries}
261+
alertMessage={getAlertMessage()}
238262
onSearchChange={value => setSearchQuery(value || undefined)}
239263
/>
240264
) : (
@@ -249,7 +273,7 @@ export function BuildDetailsMainContent(props: BuildDetailsMainContentProps) {
249273
root={filteredTreemapData.root}
250274
searchQuery={searchQuery || ''}
251275
unfilteredRoot={appSizeData.treemap.root}
252-
missingDsymBinaries={missingDsymBinaries}
276+
alertMessage={getAlertMessage()}
253277
onSearchChange={value => setSearchQuery(value || undefined)}
254278
/>
255279
) : (

static/app/views/preprod/components/visualizations/appSizeTreemap.tsx

Lines changed: 8 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,20 @@ import {filterTreemapElement} from 'sentry/views/preprod/utils/treemapFiltering'
2222
interface AppSizeTreemapProps {
2323
root: TreemapElement | null;
2424
searchQuery: string;
25-
missingDsymBinaries?: string[];
25+
alertMessage?: string;
2626
onSearchChange?: (query: string) => void;
2727
unfilteredRoot?: TreemapElement;
2828
}
2929

3030
function FullscreenModalContent({
3131
unfilteredRoot,
3232
initialSearch,
33-
missingDsymBinaries,
33+
alertMessage,
3434
onSearchChange,
3535
}: {
3636
initialSearch: string;
3737
unfilteredRoot: TreemapElement;
38-
missingDsymBinaries?: string[];
38+
alertMessage?: string;
3939
onSearchChange?: (query: string) => void;
4040
}) {
4141
const [localSearch, setLocalSearch] = useState(initialSearch);
@@ -74,7 +74,7 @@ function FullscreenModalContent({
7474
<AppSizeTreemap
7575
root={filteredRoot}
7676
searchQuery={localSearch}
77-
missingDsymBinaries={missingDsymBinaries}
77+
alertMessage={alertMessage}
7878
/>
7979
</Container>
8080
</Flex>
@@ -83,7 +83,7 @@ function FullscreenModalContent({
8383

8484
export function AppSizeTreemap(props: AppSizeTreemapProps) {
8585
const theme = useTheme();
86-
const {root, searchQuery, unfilteredRoot, missingDsymBinaries, onSearchChange} = props;
86+
const {root, searchQuery, unfilteredRoot, alertMessage, onSearchChange} = props;
8787
const appSizeCategoryInfo = getAppSizeCategoryInfo(theme);
8888
const renderingContext = useContext(ChartRenderingContext);
8989
const isFullscreen = renderingContext?.isFullscreen ?? false;
@@ -314,24 +314,9 @@ export function AppSizeTreemap(props: AppSizeTreemapProps) {
314314
},
315315
};
316316

317-
const hasMissingDsyms = missingDsymBinaries && missingDsymBinaries.length > 0;
318-
319-
const getBinariesMessage = () => {
320-
if (missingDsymBinaries?.length === 1) {
321-
return t(
322-
'Missing debug symbols for some binaries (%s). Those binaries will not have a detailed breakdown.',
323-
missingDsymBinaries[0]
324-
);
325-
}
326-
return t(
327-
'Missing debug symbols for some binaries (%s and others). Those binaries will not have a detailed breakdown.',
328-
missingDsymBinaries![0]
329-
);
330-
};
331-
332317
return (
333318
<Flex direction="column" gap="sm" height="100%" width="100%">
334-
{hasMissingDsyms && <Alert type="warning">{getBinariesMessage()}</Alert>}
319+
{alertMessage && <Alert type="warning">{alertMessage}</Alert>}
335320
<Container
336321
height="100%"
337322
width="100%"
@@ -379,15 +364,15 @@ export function AppSizeTreemap(props: AppSizeTreemapProps) {
379364
<FullscreenModalContent
380365
unfilteredRoot={unfilteredRoot}
381366
initialSearch={searchQuery}
382-
missingDsymBinaries={missingDsymBinaries}
367+
alertMessage={alertMessage}
383368
onSearchChange={onSearchChange}
384369
/>
385370
) : (
386371
<Container height="100%" width="100%">
387372
<AppSizeTreemap
388373
root={root}
389374
searchQuery={searchQuery}
390-
missingDsymBinaries={missingDsymBinaries}
375+
alertMessage={alertMessage}
391376
/>
392377
</Container>
393378
),

static/app/views/preprod/types/buildDetailsTypes.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export interface BuildDetailsApiResponse {
99
}
1010

1111
export interface BuildDetailsAppInfo {
12+
android_app_info?: AndroidAppInfo | null;
1213
app_id?: string | null;
1314
apple_app_info?: AppleAppInfo | null;
1415
artifact_type?: BuildDetailsArtifactType | null;
@@ -26,6 +27,10 @@ interface AppleAppInfo {
2627
missing_dsym_binaries?: string[];
2728
}
2829

30+
interface AndroidAppInfo {
31+
has_proguard_mapping?: boolean;
32+
}
33+
2934
export interface BuildDetailsVcsInfo {
3035
base_ref?: string | null;
3136
base_repo_name?: string | null;

0 commit comments

Comments
 (0)