Skip to content

Commit 9625b43

Browse files
authored
Merge pull request #39 from sahil143/releases-fix-details
fix(Release): remove managed envs from commmit details and release, fix release details view
2 parents b082a43 + 3608e4e commit 9625b43

File tree

12 files changed

+81
-206
lines changed

12 files changed

+81
-206
lines changed

codecv.yml

+4-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ coverage:
99
project:
1010
default:
1111
target: auto
12-
threshold: 0.2%
12+
threshold: 1%
13+
patch:
14+
default:
15+
informational: true
1316

1417
ignore:
1518
- "**/*__data__*/*.ts"

src/components/ApplicationDetails/tabs/overview/visualization/hooks/useAppWorkflowData.ts

+9-30
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import { useAppApplicationTestNodes } from './useAppApplicationTestNodes';
1414
import { useAppBuildNodes } from './useAppBuildNodes';
1515
import { useAppComponentsNodes } from './useAppComponentsNodes';
1616
import { useAppReleaseNodes } from './useAppReleaseNodes';
17-
import { useAppReleasePlanNodes } from './useAppReleasePlanNodes';
1817

1918
export const useAppWorkflowData = (
2019
applicationName: string,
@@ -63,35 +62,17 @@ export const useAppWorkflowData = (
6362
applicationIntegrationTestNodes,
6463
]);
6564

66-
const [releaseNodes, releaseGroup, releaseTasks, releasesLoaded, releasesError] =
67-
useAppReleaseNodes(
68-
namespace,
69-
applicationName,
70-
expanded ? applicationIntegrationTestTasks : [testsGroup?.id ?? ''],
71-
expanded,
72-
);
73-
74-
const [
75-
managedEnvironmentNodes,
76-
managedEnvironmentGroup,
77-
managedEnvironmentsLoaded,
78-
managedEnvironmentsError,
79-
] = useAppReleasePlanNodes(namespace, applicationName, releaseTasks, expanded);
65+
const [releaseNodes, releaseGroup, , releasesLoaded, releasesError] = useAppReleaseNodes(
66+
namespace,
67+
applicationName,
68+
expanded ? applicationIntegrationTestTasks : [testsGroup?.id ?? ''],
69+
expanded,
70+
);
8071

8172
const allResourcesLoaded: boolean =
82-
componentsLoaded &&
83-
buildsLoaded &&
84-
applicationTestsLoaded &&
85-
releasesLoaded &&
86-
managedEnvironmentsLoaded;
73+
componentsLoaded && buildsLoaded && applicationTestsLoaded && releasesLoaded;
8774

88-
const errors = [
89-
...componentsErrors,
90-
...buildsErrors,
91-
...applicationErrors,
92-
...releasesError,
93-
...managedEnvironmentsError,
94-
];
75+
const errors = [...componentsErrors, ...buildsErrors, ...applicationErrors, ...releasesError];
9576

9677
if (!allResourcesLoaded || errors.length > 0) {
9778
return [{ nodes: [], edges: [] }, allResourcesLoaded, errors];
@@ -103,7 +84,6 @@ export const useAppWorkflowData = (
10384
...(buildNodes?.length ? buildNodes : [buildGroup]),
10485
...applicationIntegrationTestNodes,
10586
...(releaseNodes?.length ? releaseNodes : [releaseGroup]),
106-
...(managedEnvironmentNodes?.length ? managedEnvironmentNodes : [managedEnvironmentGroup]),
10787
];
10888
const spacerNodes = getSpacerNodes(resourceNodes, NodeType.SPACER_NODE);
10989
const nodes = [
@@ -113,13 +93,12 @@ export const useAppWorkflowData = (
11393
buildGroup,
11494
testsGroup,
11595
releaseGroup,
116-
managedEnvironmentGroup,
11796
];
11897
const edges = getEdgesFromNodes(nodes, NodeType.SPACER_NODE);
11998

12099
return [{ nodes, edges }, true, errors];
121100
}
122-
const nodes = [componentGroup, buildGroup, testsGroup, releaseGroup, managedEnvironmentGroup];
101+
const nodes = [componentGroup, buildGroup, testsGroup, releaseGroup];
123102
const edges = getEdgesFromNodes(nodes, NodeType.SPACER_NODE);
124103

125104
return [{ nodes, edges }, true, errors];

src/components/ApplicationDetails/tabs/overview/visualization/utils/node-utils.ts

+7-16
Original file line numberDiff line numberDiff line change
@@ -114,23 +114,14 @@ export const getLinkDataForElement = (
114114
: {
115115
tab: 'integrationtests',
116116
};
117-
case WorkflowNodeType.STATIC_ENVIRONMENT:
118-
return {
119-
tab: 'deployments',
120-
filter:
121-
!groupNode && !isDisabled
122-
? { name: 'name', value: label }
123-
: { name: 'envType', value: 'default,static' },
124-
};
125-
case WorkflowNodeType.MANAGED_ENVIRONMENT:
126117
case WorkflowNodeType.RELEASE:
127-
return {
128-
tab: 'deployments',
129-
filter:
130-
!groupNode && !isDisabled
131-
? { name: 'name', value: label }
132-
: { name: 'envType', value: 'managed' },
133-
};
118+
return !groupNode && !isDisabled
119+
? {
120+
path: `/workspaces/${workspace}/applications/${
121+
element.getData().application
122+
}/releases/${label}`,
123+
}
124+
: { tab: 'releases' };
134125
default:
135126
return {
136127
tab: 'overview',

src/components/Commits/CommitDetails/visualization/__tests__/CommitVisualization.spec.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,6 @@ describe('CommitVisualization', () => {
120120

121121
const nodes = graph.querySelectorAll('[data-kind="node"]');
122122

123-
expect(nodes).toHaveLength(8);
123+
expect(nodes).toHaveLength(6);
124124
});
125125
});

src/components/Commits/CommitDetails/visualization/useCommitWorkflowData.ts

+4-148
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,10 @@
11
import * as React from 'react';
2-
import {
3-
PipelineRunEventType,
4-
PipelineRunLabel,
5-
PipelineRunType,
6-
} from '../../../../consts/pipelinerun';
2+
import { PipelineRunLabel, PipelineRunType } from '../../../../consts/pipelinerun';
73
import { useComponents } from '../../../../hooks/useComponents';
84
import { useIntegrationTestScenarios } from '../../../../hooks/useIntegrationTestScenarios';
95
import { usePipelineRunsForCommit } from '../../../../hooks/usePipelineRuns';
10-
import { useReleasePlans } from '../../../../hooks/useReleasePlans';
11-
import { useReleases } from '../../../../hooks/useReleases';
12-
import { useSnapshots } from '../../../../hooks/useSnapshots';
136
import { Commit, ComponentKind, PipelineRunKind } from '../../../../types';
14-
import { ReleaseKind, ReleasePlanKind } from '../../../../types/coreBuildService';
15-
import {
16-
conditionsRunStatus,
17-
pipelineRunStatus,
18-
runStatus,
19-
} from '../../../../utils/pipeline-utils';
7+
import { pipelineRunStatus, runStatus } from '../../../../utils/pipeline-utils';
208
import { DEFAULT_NODE_HEIGHT } from '../../../topology/const';
219
import { getLabelWidth } from '../../../topology/utils';
2210
import { useWorkspaceInfo } from '../../../Workspace/useWorkspaceInfo';
@@ -41,7 +29,6 @@ export const useCommitWorkflowData = (
4129
commit: Commit,
4230
): [nodes: CommitWorkflowNodeModel[], loaded: boolean, errors: unknown[]] => {
4331
const { namespace, workspace } = useWorkspaceInfo();
44-
const [mvpFeature] = [false];
4532

4633
const applicationName = commit?.application || '';
4734
const [components, componentsLoaded] = useComponents(namespace, workspace, applicationName);
@@ -50,11 +37,6 @@ export const useCommitWorkflowData = (
5037
workspace,
5138
applicationName,
5239
);
53-
const [releasePlans, releasePlansLoaded, releasePlansError] = useReleasePlans(
54-
namespace,
55-
workspace,
56-
);
57-
const [releases, releasesLoaded, releasesError] = useReleases(namespace, workspace);
5840
const [pipelines, pipelinesLoaded, pipelinesError] = usePipelineRunsForCommit(
5941
namespace,
6042
workspace,
@@ -81,16 +63,8 @@ export const useCommitWorkflowData = (
8163
[pipelines, pipelinesLoaded],
8264
);
8365

84-
const [snapshots, sloaded, serror] = useSnapshots(namespace, commit.sha);
85-
86-
const allResourcesLoaded: boolean =
87-
componentsLoaded &&
88-
integrationTestsLoaded &&
89-
pipelinesLoaded &&
90-
releasesLoaded &&
91-
sloaded &&
92-
releasePlansLoaded;
93-
const allErrors = [releasePlansError, releasesError, pipelinesError, serror].filter((e) => !!e);
66+
const allResourcesLoaded: boolean = componentsLoaded && integrationTestsLoaded && pipelinesLoaded;
67+
const allErrors = [pipelinesError].filter((e) => !!e);
9468

9569
const commitComponents = React.useMemo(
9670
() =>
@@ -203,120 +177,6 @@ export const useCommitWorkflowData = (
203177
nodes.push(...appTestNodes);
204178
const appTestNodesWidth = appTestNodes.reduce((max, node) => Math.max(max, node.width), 0);
205179
appTestNodes.forEach((n) => (n.width = appTestNodesWidth));
206-
207-
const currentSnapshotName = getLatestResource(
208-
snapshots.filter(
209-
(s) =>
210-
s.metadata.labels[PipelineRunLabel.COMPONENT] === compName &&
211-
s.metadata.labels[PipelineRunLabel.TEST_SERVICE_EVENT_TYPE_LABEL] ===
212-
PipelineRunEventType.PUSH,
213-
),
214-
)?.metadata?.name;
215-
216-
if (!mvpFeature) {
217-
const latestRelease: ReleaseKind = getLatestResource(
218-
releases.filter((r) => r.spec.snapshot === currentSnapshotName),
219-
);
220-
221-
const releaseStatus: runStatus =
222-
releases.length === 0
223-
? undefined
224-
: latestRelease && latestRelease?.status
225-
? conditionsRunStatus(latestRelease.status.conditions)
226-
: runStatus.Succeeded;
227-
228-
const releaseNodes: CommitWorkflowNodeModel[] = releases.length
229-
? releases.map((release) => {
230-
const releaseName = release.metadata.name;
231-
232-
const releaseNode: CommitWorkflowNodeModel = {
233-
id: addPrefixToResourceName(compName, releaseName),
234-
label: releaseName,
235-
type: NodeType.WORKFLOW_NODE,
236-
width: getLabelWidth(releaseName),
237-
height: DEFAULT_NODE_HEIGHT,
238-
data: {
239-
status: releaseStatus,
240-
workflowType: CommitWorkflowNodeType.RELEASE,
241-
resource: release,
242-
application: commit.application,
243-
},
244-
};
245-
return releaseNode;
246-
})
247-
: [
248-
{
249-
id: `${name}-release`,
250-
label: 'No releases set',
251-
type: NodeType.WORKFLOW_NODE,
252-
width: getLabelWidth('No releases set'),
253-
height: DEFAULT_NODE_HEIGHT,
254-
data: {
255-
status: runStatus.Pending,
256-
workflowType: CommitWorkflowNodeType.RELEASE,
257-
application: commit.application,
258-
},
259-
},
260-
];
261-
nodes.push(...releaseNodes);
262-
const releaseNodesWidth = releaseNodes.reduce((max, node) => Math.max(max, node.width), 0);
263-
releaseNodes.forEach((n) => (n.width = releaseNodesWidth));
264-
const releaseNodeIds = releaseNodes.map((n) => n.id);
265-
266-
const releasePlanStatus: (rp: ReleasePlanKind) => runStatus =
267-
releasePlans.length === 0
268-
? undefined
269-
: (rp) => {
270-
const matchedRelease = getLatestResource(
271-
releases.filter((r) => r.spec.releasePlan === rp.metadata.name),
272-
);
273-
return matchedRelease
274-
? pipelineRunStatus(matchedRelease as PipelineRunKind)
275-
: runStatus.Pending;
276-
};
277-
278-
const managedEnvNodes: CommitWorkflowNodeModel[] = releasePlans.length
279-
? releasePlans.map((managedEnv) => {
280-
const managedEnvName = managedEnv.metadata.name;
281-
282-
const managedEnvNode: CommitWorkflowNodeModel = {
283-
id: addPrefixToResourceName(compName, managedEnvName),
284-
label: managedEnvName,
285-
type: NodeType.WORKFLOW_NODE,
286-
width: getLabelWidth(managedEnvName),
287-
height: DEFAULT_NODE_HEIGHT,
288-
runAfterTasks: releaseNodeIds,
289-
data: {
290-
status: releasePlanStatus(managedEnv),
291-
workflowType: CommitWorkflowNodeType.MANAGED_ENVIRONMENT,
292-
resource: managedEnv,
293-
application: commit.application,
294-
},
295-
};
296-
return managedEnvNode;
297-
})
298-
: [
299-
{
300-
id: `${name}-managed-environments`,
301-
label: 'No managed environments set',
302-
type: NodeType.WORKFLOW_NODE,
303-
width: getLabelWidth('No managed environments set'),
304-
height: DEFAULT_NODE_HEIGHT,
305-
runAfterTasks: releaseNodeIds,
306-
data: {
307-
status: runStatus.Pending,
308-
workflowType: CommitWorkflowNodeType.MANAGED_ENVIRONMENT,
309-
application: commit.application,
310-
},
311-
},
312-
];
313-
nodes.push(...managedEnvNodes);
314-
const managedEnvNodesWidth = managedEnvNodes.reduce(
315-
(max, node) => Math.max(max, node.width),
316-
0,
317-
);
318-
managedEnvNodes.forEach((n) => (n.width = managedEnvNodesWidth));
319-
}
320180
});
321181

322182
return nodes;
@@ -329,10 +189,6 @@ export const useCommitWorkflowData = (
329189
buildPipelines,
330190
testPipelines,
331191
integrationTests,
332-
snapshots,
333-
mvpFeature,
334-
releases,
335-
releasePlans,
336192
]);
337193

338194
if (!allResourcesLoaded || workflowNodes.length === 0 || allErrors.length > 0) {

src/components/Releases/ReleaseOverviewTab.tsx

+10
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import * as React from 'react';
22
import { Link, useParams } from 'react-router-dom';
33
import {
4+
Bullseye,
45
DescriptionList,
56
DescriptionListDescription,
67
DescriptionListGroup,
78
DescriptionListTerm,
89
Flex,
910
FlexItem,
11+
Spinner,
1012
Title,
1113
} from '@patternfly/react-core';
1214
import { useReleasePlan } from '../../hooks/useReleasePlans';
@@ -36,6 +38,14 @@ const ReleaseOverviewTab: React.FC = () => {
3638
);
3739
const status = useReleaseStatus(release);
3840

41+
if (!releasePlanLoaded) {
42+
return (
43+
<Bullseye>
44+
<Spinner size="lg" />
45+
</Bullseye>
46+
);
47+
}
48+
3949
return (
4050
<>
4151
<Title headingLevel="h4" className="pf-v5-c-title pf-v5-u-mt-lg pf-v5-u-mb-lg" size="lg">

src/components/Releases/__tests__/ReleaseOverviewTab.spec.tsx

+8-3
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,18 @@ jest.mock('../../../hooks/useReleases', () => ({
1919
const watchResourceMock = createK8sWatchResourceMock();
2020

2121
describe('ReleaseOverviewTab', () => {
22-
beforeEach(() => {
23-
watchResourceMock.mockReturnValue([{ spec: { application: 'test-app' } }, true]);
24-
});
22+
beforeEach(() => {});
2523

2624
createUseWorkspaceInfoMock({ namespace: 'test-ns', workspace: 'test-ws' });
2725

26+
it('should render loading indicator', () => {
27+
watchResourceMock.mockReturnValue([{ spec: { application: 'test-app' } }, false]);
28+
render(<ReleaseOverviewTab />);
29+
expect(screen.getByRole('progressbar')).toBeVisible();
30+
});
31+
2832
it('should render correct details', () => {
33+
watchResourceMock.mockReturnValue([{ spec: { application: 'test-app' } }, true]);
2934
render(<ReleaseOverviewTab />);
3035
expect(screen.getByText('Duration')).toBeVisible();
3136
expect(screen.getByText('10 seconds')).toBeVisible();

src/components/SnapshotDetails/SnapshotDetailsView.tsx

+5-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { useSnapshot } from '../../hooks/useSnapshots';
77
import { HttpError } from '../../k8s/error';
88
import { RouterParams } from '../../routes/utils';
99
import ErrorEmptyState from '../../shared/components/empty-state/ErrorEmptyState';
10-
import { LoadingBox } from '../../shared/components/status-box/StatusBox';
1110
import { Timestamp } from '../../shared/components/timestamp/Timestamp';
1211
import { useApplicationBreadcrumbs } from '../../utils/breadcrumb-utils';
1312
import { createCommitObjectFromPLR } from '../../utils/commits-utils';
@@ -50,7 +49,11 @@ const SnapshotDetailsView: React.FC = () => {
5049
}
5150

5251
if (!plrLoadError && !plrLoaded) {
53-
return <LoadingBox />;
52+
return (
53+
<Bullseye>
54+
<Spinner size="lg" />
55+
</Bullseye>
56+
);
5457
}
5558

5659
if (snapshot?.metadata) {

0 commit comments

Comments
 (0)