Skip to content

Commit 963cdae

Browse files
Merge pull request #523 from devtron-labs/feat/target-platform
feat: add target platform information at artifact and logs level
2 parents 2b3921a + 6cea27c commit 963cdae

27 files changed

+405
-158
lines changed

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@devtron-labs/devtron-fe-common-lib",
3-
"version": "1.5.6",
3+
"version": "1.5.7",
44
"description": "Supporting common component library",
55
"type": "module",
66
"main": "dist/index.js",

src/Assets/Icon/ic-stack.svg

Lines changed: 3 additions & 0 deletions
Loading

src/Common/Common.service.ts

Lines changed: 35 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,17 @@
1616

1717
import { MutableRefObject } from 'react'
1818
import moment from 'moment'
19-
import { sanitizeApprovalConfigData, sanitizeUserApprovalList, stringComparatorBySortOrder } from '@Shared/Helpers'
20-
import { PolicyBlockInfo, RuntimeParamsAPIResponseType, RuntimePluginVariables } from '@Shared/types'
19+
import {
20+
sanitizeApprovalConfigData,
21+
sanitizeTargetPlatforms,
22+
sanitizeUserApprovalList,
23+
stringComparatorBySortOrder,
24+
} from '@Shared/Helpers'
25+
import {
26+
PolicyBlockInfo,
27+
RuntimeParamsAPIResponseType,
28+
RuntimePluginVariables,
29+
} from '@Shared/types'
2130
import { get, post } from './Api'
2231
import { GitProviderType, ROUTES } from './Constants'
2332
import { getUrlWithSearchParams, showError, sortCallback } from './Helper'
@@ -82,7 +91,9 @@ export function setImageTags(request, pipelineId: number, artifactId: number) {
8291
return post(`${ROUTES.IMAGE_TAGGING}/${pipelineId}/${artifactId}`, request)
8392
}
8493

85-
export const sanitizeUserApprovalMetadata = (userApprovalMetadata: UserApprovalMetadataType): UserApprovalMetadataType => ({
94+
export const sanitizeUserApprovalMetadata = (
95+
userApprovalMetadata: UserApprovalMetadataType,
96+
): UserApprovalMetadataType => ({
8697
...userApprovalMetadata,
8798
hasCurrentUserApproved: userApprovalMetadata?.hasCurrentUserApproved ?? false,
8899
canCurrentUserApprove: userApprovalMetadata?.canCurrentUserApprove ?? false,
@@ -154,9 +165,7 @@ const cdMaterialListModal = ({
154165
vulnerable: material.vulnerable,
155166
runningOnParentCd: material.runningOnParentCd,
156167
artifactStatus: artifactStatusValue,
157-
userApprovalMetadata: sanitizeUserApprovalMetadata(
158-
material.userApprovalMetadata,
159-
),
168+
userApprovalMetadata: sanitizeUserApprovalMetadata(material.userApprovalMetadata),
160169
triggeredBy: material.triggeredBy,
161170
isVirtualEnvironment: material.isVirtualEnvironment,
162171
imageComment: material.imageComment,
@@ -197,6 +206,7 @@ const cdMaterialListModal = ({
197206
configuredInReleases: material.configuredInReleases ?? [],
198207
appWorkflowId: material.appWorkflowId ?? null,
199208
deploymentBlockedState: sanitizeDeploymentBlockedState(material.deploymentBlockedState),
209+
targetPlatforms: sanitizeTargetPlatforms(material.targetPlatforms),
200210
}
201211
})
202212
return materials
@@ -210,7 +220,9 @@ const sanitizeDeploymentApprovalInfo = (
210220
approverList: sanitizeUserApprovalList(deploymentApprovalInfo?.eligibleApprovers?.anyUsers?.approverList),
211221
},
212222
specificUsers: {
213-
approverList: sanitizeUserApprovalList(deploymentApprovalInfo?.eligibleApprovers?.specificUsers?.approverList),
223+
approverList: sanitizeUserApprovalList(
224+
deploymentApprovalInfo?.eligibleApprovers?.specificUsers?.approverList,
225+
),
214226
},
215227
userGroups: (deploymentApprovalInfo?.eligibleApprovers?.userGroups ?? []).map(
216228
({ groupName, groupIdentifier, approverList }) => ({
@@ -238,25 +250,22 @@ const processCDMaterialsApprovalInfo = (enableApproval: boolean, cdMaterialsResu
238250
}
239251

240252
export const parseRuntimeParams = (response: RuntimeParamsAPIResponseType): RuntimePluginVariables[] => {
241-
const envVariables = Object.entries(response?.envVariables || {}).map<RuntimePluginVariables>(
242-
([key, value]) => ({
243-
name: key,
244-
value,
245-
defaultValue: '',
246-
format: VariableTypeFormat.STRING,
247-
isRequired: false,
248-
valueType: RefVariableType.NEW,
249-
variableStepScope: RefVariableType.GLOBAL,
250-
stepName: null,
251-
stepType: null,
252-
// TODO: (Rohit/Eshank) Replace this with getUniqueId (nanoId method)
253-
stepVariableId: Math.floor(new Date().valueOf() * Math.random()),
254-
valueConstraint: null,
255-
description: null,
256-
fileReferenceId: null,
257-
fileMountDir: null,
258-
}),
259-
)
253+
const envVariables = Object.entries(response?.envVariables || {}).map<RuntimePluginVariables>(([key, value]) => ({
254+
name: key,
255+
value,
256+
defaultValue: '',
257+
format: VariableTypeFormat.STRING,
258+
isRequired: false,
259+
valueType: RefVariableType.NEW,
260+
variableStepScope: RefVariableType.GLOBAL,
261+
stepName: null,
262+
stepType: null,
263+
stepVariableId: Math.floor(new Date().valueOf() * Math.random()),
264+
valueConstraint: null,
265+
description: null,
266+
fileReferenceId: null,
267+
fileMountDir: null,
268+
}))
260269

261270
const runtimeParams = (response?.runtimePluginVariables ?? []).map<RuntimePluginVariables>((variable) => ({
262271
...variable,

src/Common/ImageTags.Types.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
* limitations under the License.
1515
*/
1616

17+
import { ReactElement } from 'react'
18+
1719
export interface ReleaseTag {
1820
id: number
1921
tagName: string
@@ -56,4 +58,5 @@ export interface ImageButtonType {
5658
isSuperAdmin: boolean
5759
duplicateTag?: boolean
5860
hideHardDelete?: boolean
61+
startIcon?: ReactElement
5962
}

src/Common/ImageTags.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,7 @@ export const ImageTagButton = ({
509509
isSuperAdmin,
510510
duplicateTag,
511511
hideHardDelete,
512+
startIcon,
512513
}: ImageButtonType) => {
513514
const IconComponent = isSoftDeleted ? Redo : Minus
514515
const isInSoftDeleteTags = isSoftDeleted && softDeleteTags.some((tag) => tag.tagName === text)
@@ -530,6 +531,8 @@ export const ImageTagButton = ({
530531
isEditing ? 'icon-hover' : ''
531532
} ${tabColor()}`}
532533
>
534+
{startIcon}
535+
533536
{duplicateTag ? (
534537
<Warning className="icon-dim-12 mr-4" />
535538
) : (

src/Common/Types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import {
2424
RuntimePluginVariables,
2525
Severity,
2626
PolicyBlockInfo,
27+
TargetPlatformItemDTO,
2728
} from '../Shared'
2829
import {
2930
ACTION_STATE,
@@ -563,6 +564,7 @@ export interface CDMaterialType {
563564
* Denotes trigger blocking due to mandatory tags, (might be used for plugins and other features in future)
564565
*/
565566
deploymentBlockedState?: PolicyBlockInfo
567+
targetPlatforms: TargetPlatformItemDTO[]
566568
}
567569

568570
export enum CDMaterialServiceEnum {

src/Shared/Components/ArtifactInfoModal/ArtifactInfoModal.component.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ const ArtifactInfoModal = ({
126126
tagsEditable={artifactInfo.tagsEditable}
127127
hideImageTaggingHardDelete={false}
128128
renderCIListHeader={renderCIListHeader}
129+
targetPlatforms={artifactInfo.targetPlatforms}
129130
/>
130131
</div>
131132
) : (

src/Shared/Components/CICDHistory/Artifacts.tsx

Lines changed: 32 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,15 @@
1616

1717
import { useParams } from 'react-router-dom'
1818
import { useDownload } from '@Shared/Hooks'
19+
import { ReactComponent as Download } from '@Icons/ic-download.svg'
20+
import { ReactComponent as MechanicalOperation } from '@Icons/ic-mechanical-operation.svg'
21+
import { ReactComponent as OpenInNew } from '@Icons/ic-arrow-out.svg'
22+
import { ReactComponent as Down } from '@Icons/ic-arrow-forward.svg'
23+
import { ReactComponent as ICHelpOutline } from '@Icons/ic-help.svg'
24+
import folder from '@Icons/ic-folder.svg'
25+
import docker from '@Icons/ic-docker.svg'
26+
import noartifact from '@Images/no-artifact.webp'
27+
import { TargetPlatformBadgeList } from '../TargetPlatforms'
1928
import {
2029
GenericEmptyState,
2130
ImageTagsContainer,
@@ -24,14 +33,6 @@ import {
2433
DOCUMENTATION,
2534
useSuperAdmin,
2635
} from '../../../Common'
27-
import { ReactComponent as Download } from '../../../Assets/Icon/ic-download.svg'
28-
import { ReactComponent as MechanicalOperation } from '../../../Assets/Icon/ic-mechanical-operation.svg'
29-
import { ReactComponent as OpenInNew } from '../../../Assets/Icon/ic-arrow-out.svg'
30-
import { ReactComponent as ICHelpOutline } from '../../../Assets/Icon/ic-help.svg'
31-
import { ReactComponent as Down } from '../../../Assets/Icon/ic-arrow-forward.svg'
32-
import docker from '../../../Assets/Icon/ic-docker.svg'
33-
import folder from '../../../Assets/Icon/ic-folder.svg'
34-
import noartifact from '../../../Assets/Img/no-artifact.webp'
3536
import { ArtifactType, CIListItemType } from './types'
3637
import { TERMINAL_STATUS_MAP } from './constants'
3738
import { EMPTY_STATE_STATUS } from '../../constants'
@@ -62,6 +63,7 @@ export const CIListItem = ({
6263
appliedFiltersTimestamp,
6364
selectedEnvironmentName,
6465
renderCIListHeader,
66+
targetPlatforms,
6567
}: CIListItemType) => {
6668
const headerMetaDataPresent =
6769
!!userApprovalMetadata || !!appliedFilters?.length || !!promotionApprovalMetadata?.promotedFromType
@@ -99,17 +101,26 @@ export const CIListItem = ({
99101
</div>
100102
{children}
101103
</div>
104+
102105
{type !== 'report' && (
103-
<ImageTagsContainer
104-
ciPipelineId={ciPipelineId}
105-
artifactId={artifactId}
106-
imageComment={imageComment}
107-
imageReleaseTags={imageReleaseTags}
108-
appReleaseTagNames={appReleaseTagNames}
109-
tagsEditable={tagsEditable}
110-
hideHardDelete={hideImageTaggingHardDelete}
111-
isSuperAdmin={isSuperAdmin}
112-
/>
106+
<>
107+
{!!targetPlatforms?.length && (
108+
<div className="mt-8 flexbox-col dc__gap-8">
109+
<TargetPlatformBadgeList targetPlatforms={targetPlatforms} />
110+
</div>
111+
)}
112+
113+
<ImageTagsContainer
114+
ciPipelineId={ciPipelineId}
115+
artifactId={artifactId}
116+
imageComment={imageComment}
117+
imageReleaseTags={imageReleaseTags}
118+
appReleaseTagNames={appReleaseTagNames}
119+
tagsEditable={tagsEditable}
120+
hideHardDelete={hideImageTaggingHardDelete}
121+
isSuperAdmin={isSuperAdmin}
122+
/>
123+
</>
113124
)}
114125
</div>
115126
</>
@@ -132,6 +143,7 @@ const Artifacts = ({
132143
hideImageTaggingHardDelete,
133144
rootClassName,
134145
renderCIListHeader,
146+
targetPlatforms,
135147
}: ArtifactType) => {
136148
const { isSuperAdmin } = useSuperAdmin()
137149
const { handleDownload } = useDownload()
@@ -204,6 +216,7 @@ const Artifacts = ({
204216
hideImageTaggingHardDelete={hideImageTaggingHardDelete}
205217
isSuperAdmin={isSuperAdmin}
206218
renderCIListHeader={renderCIListHeader}
219+
targetPlatforms={targetPlatforms}
207220
>
208221
<div className="flex column left hover-trigger">
209222
<div className="cn-9 fs-14 flex left" data-testid="artifact-text-visibility">
@@ -222,12 +235,7 @@ const Artifacts = ({
222235
</CIListItem>
223236
)}
224237
{blobStorageEnabled && downloadArtifactUrl && isArtifactUploaded && (
225-
<CIListItem
226-
type="report"
227-
hideImageTaggingHardDelete={hideImageTaggingHardDelete}
228-
isSuperAdmin={isSuperAdmin}
229-
renderCIListHeader={renderCIListHeader}
230-
>
238+
<CIListItem type="report" renderCIListHeader={renderCIListHeader}>
231239
<div className="flex column left">
232240
<div className="cn-9 fs-14">Reports.zip</div>
233241
<button

src/Shared/Components/CICDHistory/History.components.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ export const GitChanges = ({
129129
promotionApprovalMetadata,
130130
selectedEnvironmentName,
131131
renderCIListHeader,
132+
targetPlatforms,
132133
}: GitChangesType) => {
133134
const { isSuperAdmin } = useSuperAdmin()
134135

@@ -192,6 +193,7 @@ export const GitChanges = ({
192193
promotionApprovalMetadata={promotionApprovalMetadata}
193194
selectedEnvironmentName={selectedEnvironmentName}
194195
renderCIListHeader={renderCIListHeader}
196+
targetPlatforms={targetPlatforms}
195197
>
196198
<div className="flex column left hover-trigger">
197199
<div className="cn-9 fs-14 flex left">

0 commit comments

Comments
 (0)