From e5e0be3ca06952698933ceb562aec537f36d0e8a Mon Sep 17 00:00:00 2001 From: shivani170 Date: Tue, 12 Aug 2025 09:21:19 +0530 Subject: [PATCH 01/20] chore: git repo url handling --- .../CreateCICDPipeline/CIStepperContent.tsx | 3 ++- .../SourceMaterialsSelector.tsx | 5 +++-- .../WorkflowEditor/SourceMaterialsSelector/types.ts | 3 ++- src/components/CIPipelineN/Build.tsx | 2 ++ .../app/details/appDetails/DeployedCommitCard.tsx | 3 +-- src/components/ciPipeline/SourceMaterials.tsx | 1 + src/components/ciPipeline/ciPipeline.service.ts | 11 +++++++---- 7 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/Pages/App/Configurations/WorkflowEditor/CreateCICDPipeline/CIStepperContent.tsx b/src/Pages/App/Configurations/WorkflowEditor/CreateCICDPipeline/CIStepperContent.tsx index 50ff3f5578..a87d98e29c 100644 --- a/src/Pages/App/Configurations/WorkflowEditor/CreateCICDPipeline/CIStepperContent.tsx +++ b/src/Pages/App/Configurations/WorkflowEditor/CreateCICDPipeline/CIStepperContent.tsx @@ -162,7 +162,7 @@ export const CIStepperContent = ({ )} {materials.map((material, index) => { - const { id, name, type, isRegex, value, regex, gitMaterialId } = material + const { id, name, type, isRegex, value, regex, gitMaterialId, url } = material const isBranchRegex = type === SourceTypeMap.BranchRegex || isRegex const isBranchFixed = type === SourceTypeMap.BranchFixed && !isRegex @@ -183,6 +183,7 @@ export const CIStepperContent = ({ (
{repoName && (
- +

{repoName}

)} diff --git a/src/Pages/App/Configurations/WorkflowEditor/SourceMaterialsSelector/types.ts b/src/Pages/App/Configurations/WorkflowEditor/SourceMaterialsSelector/types.ts index 629e213c50..d456eaedfb 100644 --- a/src/Pages/App/Configurations/WorkflowEditor/SourceMaterialsSelector/types.ts +++ b/src/Pages/App/Configurations/WorkflowEditor/SourceMaterialsSelector/types.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { CustomInputProps, SelectPickerProps } from '@devtron-labs/devtron-fe-common-lib' +import { CustomInputProps, MaterialType, SelectPickerProps } from '@devtron-labs/devtron-fe-common-lib' export interface SourceMaterialsSelectorProps { repoName?: string @@ -25,4 +25,5 @@ export interface SourceMaterialsSelectorProps { branchInputProps: Omit & { hideInput?: boolean } + gitURL?: MaterialType['url'] } diff --git a/src/components/CIPipelineN/Build.tsx b/src/components/CIPipelineN/Build.tsx index 2230457a55..bc951302ff 100644 --- a/src/components/CIPipelineN/Build.tsx +++ b/src/components/CIPipelineN/Build.tsx @@ -55,12 +55,14 @@ export const Build = ({ ...mat, value: '', regex: event.target.value, + gitURL: mat?.url, } } return { ...mat, regex: '', value: event.target.value, + gitURL: mat?.url, } } return mat diff --git a/src/components/app/details/appDetails/DeployedCommitCard.tsx b/src/components/app/details/appDetails/DeployedCommitCard.tsx index d591d923d0..d888c4383a 100644 --- a/src/components/app/details/appDetails/DeployedCommitCard.tsx +++ b/src/components/app/details/appDetails/DeployedCommitCard.tsx @@ -20,7 +20,6 @@ import { getCITriggerInfo, getParsedCIMaterialInfo, GitProviderIcon, - GitProviderType, Icon, LoadingCard, useQuery, @@ -77,7 +76,7 @@ const DeployedCommitCard = ({ cardLoading, showCommitInfoDrawer, envId, ciArtifa
- + {/* @TODO: This should be dynamic, dependent on the source */} {/* */} diff --git a/src/components/ciPipeline/SourceMaterials.tsx b/src/components/ciPipeline/SourceMaterials.tsx index bb724e3816..12dc4f81a1 100644 --- a/src/components/ciPipeline/SourceMaterials.tsx +++ b/src/components/ciPipeline/SourceMaterials.tsx @@ -141,6 +141,7 @@ export const SourceMaterials = ({ ).message, autoFocus: index === 0, }} + gitURL={mat?.url} /> {isBranchRegex && ( diff --git a/src/components/ciPipeline/ciPipeline.service.ts b/src/components/ciPipeline/ciPipeline.service.ts index eb7398aea1..72607c688a 100644 --- a/src/components/ciPipeline/ciPipeline.service.ts +++ b/src/components/ciPipeline/ciPipeline.service.ts @@ -135,7 +135,7 @@ function getPipelineBaseMetaConfiguration( isTemplateView: AppConfigProps['isTemplateView'], ): Promise { return getSourceConfig(appId, queryParams, isTemplateView).then((response) => { - const materials = response?.result?.material?.map((mat) => { + const materials: MaterialType[] = response?.result?.material?.map((mat: MaterialType) => { return { id: 0, gitMaterialId: mat.id, @@ -146,6 +146,7 @@ function getPipelineBaseMetaConfiguration( gitMaterialName: mat.name, gitProviderId: mat.gitProviderId, gitHostId: 0, + url: mat.url, } }) const _baseCiPipelineSourceTypeOptions = CiPipelineSourceTypeBaseOptions.map((obj) => ({ ...obj })) @@ -241,6 +242,7 @@ export function getInitDataWithCIPipeline( }, ]) => { const ciPipeline = ciPipelineRes?.result + console.log('pipelineMetaConfig from getPipelineMetaConfiguration', pipelineMetaConfig) const pipelineMetaConfigResult = pipelineMetaConfig?.result return parseCIResponse( pipelineMetaConfig.code, @@ -348,8 +350,6 @@ export function deleteCIPipeline( gitMaterials, appId: number, workflowId: number, - isExternalCI: boolean, - webhookConditionList, isTemplateView: AppConfigProps['isTemplateView'], ) { const updatedCI = { @@ -456,6 +456,7 @@ function createMaterialList(ciPipeline, gitMaterials: MaterialType[], gitHost: G gitHostId: gitHost ? gitHost.id : 0, regex: mat.source.regex, isRegex: mat.isRegex, + url: mat.url || gitMaterials[0].url, // Required BE support till then will be getting url from another api } }) || [] } @@ -477,6 +478,7 @@ function createMaterialList(ciPipeline, gitMaterials: MaterialType[], gitHost: G gitHostId: mat.gitHostId, gitProviderId: mat.gitProviderId, isRegex: mat.isRegex, + url: mat.url, }) } } @@ -563,7 +565,7 @@ function migrateOldData( function parseCIResponse( responseCode: number, ciPipeline, - gitMaterials, + gitMaterials: MaterialType[], gitHost, webhookEvents, ciPipelineSourceTypeOptions, @@ -571,6 +573,7 @@ function parseCIResponse( isSecurityModuleInstalled?: boolean, appWorkflowId?: number, ) { + console.log('gitMaterials', gitMaterials) if (ciPipeline) { if (ciPipeline.beforeDockerBuildScripts) { ciPipeline.preBuildStage = migrateOldData(ciPipeline.beforeDockerBuildScripts) From 55cf9b5093c082d3cd2cbf341f6df8977b7e5f81 Mon Sep 17 00:00:00 2001 From: shivani170 Date: Wed, 13 Aug 2025 13:27:25 +0530 Subject: [PATCH 02/20] chore: code refactoring --- .../details/appDetails/DeployedCommitCard.tsx | 1 - .../ciPipeline/ciPipeline.service.ts | 4 +- src/components/workflowEditor/Workflow.tsx | 59 ++----------------- .../workflowEditor/nodes/CINode.tsx | 39 +----------- .../workflowEditor/nodes/StaticNode.tsx | 24 ++------ src/components/workflowEditor/nodes/types.ts | 58 ++++++++++++++++++ src/components/workflowEditor/types.ts | 51 +++++++++++++++- 7 files changed, 119 insertions(+), 117 deletions(-) create mode 100644 src/components/workflowEditor/nodes/types.ts diff --git a/src/components/app/details/appDetails/DeployedCommitCard.tsx b/src/components/app/details/appDetails/DeployedCommitCard.tsx index d888c4383a..d007e4dfde 100644 --- a/src/components/app/details/appDetails/DeployedCommitCard.tsx +++ b/src/components/app/details/appDetails/DeployedCommitCard.tsx @@ -78,7 +78,6 @@ const DeployedCommitCard = ({ cardLoading, showCommitInfoDrawer, envId, ciArtifa {/* @TODO: This should be dynamic, dependent on the source */} - {/* */}
diff --git a/src/components/ciPipeline/ciPipeline.service.ts b/src/components/ciPipeline/ciPipeline.service.ts index 72607c688a..fc9b01448a 100644 --- a/src/components/ciPipeline/ciPipeline.service.ts +++ b/src/components/ciPipeline/ciPipeline.service.ts @@ -242,7 +242,6 @@ export function getInitDataWithCIPipeline( }, ]) => { const ciPipeline = ciPipelineRes?.result - console.log('pipelineMetaConfig from getPipelineMetaConfiguration', pipelineMetaConfig) const pipelineMetaConfigResult = pipelineMetaConfig?.result return parseCIResponse( pipelineMetaConfig.code, @@ -456,7 +455,7 @@ function createMaterialList(ciPipeline, gitMaterials: MaterialType[], gitHost: G gitHostId: gitHost ? gitHost.id : 0, regex: mat.source.regex, isRegex: mat.isRegex, - url: mat.url || gitMaterials[0].url, // Required BE support till then will be getting url from another api + url: mat.url || gitMaterials?.[0].url, // Required BE support till then will be getting url from another api } }) || [] } @@ -573,7 +572,6 @@ function parseCIResponse( isSecurityModuleInstalled?: boolean, appWorkflowId?: number, ) { - console.log('gitMaterials', gitMaterials) if (ciPipeline) { if (ciPipeline.beforeDockerBuildScripts) { ciPipeline.preBuildStage = migrateOldData(ciPipeline.beforeDockerBuildScripts) diff --git a/src/components/workflowEditor/Workflow.tsx b/src/components/workflowEditor/Workflow.tsx index a26a881d7f..3f19dd0f35 100644 --- a/src/components/workflowEditor/Workflow.tsx +++ b/src/components/workflowEditor/Workflow.tsx @@ -15,7 +15,7 @@ */ import { Component } from 'react' -import { RouteComponentProps, Link, generatePath } from 'react-router-dom' +import { Link, generatePath } from 'react-router-dom' import Tippy from '@tippyjs/react' import { CINode } from './nodes/CINode' import { CDNode } from './nodes/CDNode' @@ -40,19 +40,15 @@ import { noop, WorkflowNodeType, PipelineType, - AddPipelineType, - SelectedNode, ConditionalWrap, ChangeCIPayloadType, - CIPipelineNodeType, URLS as CommonURLS, - AppConfigProps, } from '@devtron-labs/devtron-fe-common-lib' import { ReactComponent as ICInput } from '../../assets/icons/ic-input.svg' import { ReactComponent as ICMoreOption } from '../../assets/icons/ic-more-option.svg' import { ReactComponent as ICDelete } from '../../assets/icons/ic-delete-interactive.svg' import { ReactComponent as ICEdit } from '../../assets/icons/ic-pencil.svg' -import { WorkflowPositionState } from './types' +import { WorkflowProps, WorkflowState } from './types' import { CHANGE_CI_TOOLTIP } from './constants' const ApprovalNodeEdge = importComponentFromFELibrary('ApprovalNodeEdge') @@ -63,55 +59,6 @@ const getParsedPluginPolicyConsequenceData = importComponentFromFELibrary( 'function', ) -export interface WorkflowProps - extends RouteComponentProps<{ appId: string; workflowId?: string; ciPipelineId?: string; cdPipelineId?: string }>, - Required> { - nodes: CommonNodeAttr[] - id: number - name: string - startX: number - startY: number - width: number | string - height: number | string - showDeleteDialog: (workflowId: number) => void - handleCDSelect: ( - workflowId: number | string, - ciPipelineId: number | string, - parentPipelineType: string, - parentPipelineId: number | string, - isWebhookCD?: boolean, - childPipelineId?: number | string, - addType?: AddPipelineType, - ) => void - openEditWorkflow: (event, workflowId: number) => string - handleCISelect: (workflowId: string | number, type: CIPipelineNodeType) => void - addCIPipeline: (type: CIPipelineNodeType) => void - addWebhookCD: (workflowId?: number | string) => void - cdWorkflowList?: any[] - showWebhookTippy?: boolean - hideWebhookTippy?: () => void - isJobView?: boolean - envList?: any[] - filteredCIPipelines?: any[] - addNewPipelineBlocked?: boolean - handleChangeCI?: (changeCIPayload: ChangeCIPayloadType) => void - selectedNode?: SelectedNode - handleSelectedNodeChange?: (selectedNode: SelectedNode) => void - appName?: string - getWorkflows?: () => void - refreshParentWorkflows?: () => void - reloadEnvironments?: () => void - workflowPositionState?: WorkflowPositionState - handleDisplayLoader?: () => void - isOffendingPipelineView?: boolean -} - -interface WorkflowState { - top: number - left: number - showCIMenu: boolean -} - export class Workflow extends Component { constructor(props) { super(props) @@ -931,6 +878,8 @@ export class Workflow extends Component { } render() { +{ console.log('props', this.props)} + return <>{this.renderWorkflow()} } } diff --git a/src/components/workflowEditor/nodes/CINode.tsx b/src/components/workflowEditor/nodes/CINode.tsx index 4ce2ee3b41..401aa98dd0 100644 --- a/src/components/workflowEditor/nodes/CINode.tsx +++ b/src/components/workflowEditor/nodes/CINode.tsx @@ -17,13 +17,11 @@ import { Component, ReactElement } from 'react' import { WorkflowNodeType, - SelectedNode, - CommonNodeAttr, ConditionalWrap, Icon, } from '@devtron-labs/devtron-fe-common-lib' import Tippy from '@tippyjs/react' -import { Link, RouteComponentProps } from 'react-router-dom' +import { Link } from 'react-router-dom' import ToggleCDSelectButton from '../ToggleCDSelectButton' import { ReactComponent as Warning } from '../../../assets/icons/ic-warning.svg' import { ReactComponent as ICLinkedCINode } from '../../../assets/icons/ic-node-build-linked.svg' @@ -31,40 +29,7 @@ import { ReactComponent as IcLink } from '../../../assets/icons/ic-link.svg' import { DEFAULT_ENV } from '../../app/details/triggerView/Constants' import { URLS } from '../../../config' import { getLinkedCITippyContent } from '../../../Pages/Shared/LinkedCIDetailsModal/utils' -import { WorkflowProps } from '../Workflow' - -export interface CINodeProps extends RouteComponentProps<{}>, Pick { - x: number - y: number - width: number - height: number - id: number - title: string - type: string - description: string - workflowId: number - triggerType: string - isLinkedCI: boolean - isExternalCI: boolean - isJobCI: boolean - isTrigger: boolean - linkedCount: number - downstreams: CommonNodeAttr[] - to: string - toggleCDMenu: () => void - configDiffView?: boolean - hideWebhookTippy?: () => void - isJobView?: boolean - showPluginWarning?: boolean - envList?: any[] - filteredCIPipelines?: any[] - addNewPipelineBlocked?: boolean - handleSelectedNodeChange?: (selectedNode: SelectedNode) => void - selectedNode?: SelectedNode - isLastNode?: boolean - appId: string - getWorkflows: () => void -} +import { CINodeProps } from './types' export class CINode extends Component { handleLinkedCIWorkflowChipClick = (e) => { diff --git a/src/components/workflowEditor/nodes/StaticNode.tsx b/src/components/workflowEditor/nodes/StaticNode.tsx index e5058dd083..16205bef7a 100644 --- a/src/components/workflowEditor/nodes/StaticNode.tsx +++ b/src/components/workflowEditor/nodes/StaticNode.tsx @@ -14,30 +14,14 @@ * limitations under the License. */ -import React, { Component } from 'react' +import { Component } from 'react' import { GIT_BRANCH_NOT_CONFIGURED } from '../../../config' import { CiPipelineSourceConfig, GitProviderIcon, GitProviderType } from '@devtron-labs/devtron-fe-common-lib' - -export interface StaticNodeProps { - x: number - y: number - branch: string - icon: string - id: string - url: string - title: string - height: number - width: number - downstreams: any[] - sourceType: string - regex?: string - primaryBranchAfterRegex?: string - to?: string - handleGoToWorkFlowEditor?: (e?: any) => void -} - +import { StaticNodeProps } from './types' export class StaticNode extends Component { renderCardContent() { + console.log('props',this.props.url) + return (
void +} + +export interface CINodeProps + extends RouteComponentProps<{}>, + Pick { + x: number + y: number + width: number + height: number + id: number + title: string + type: string + description: string + workflowId: number + triggerType: string + isLinkedCI: boolean + isExternalCI: boolean + isJobCI: boolean + isTrigger: boolean + linkedCount: number + downstreams: CommonNodeAttr[] + to: string + toggleCDMenu: () => void + configDiffView?: boolean + hideWebhookTippy?: () => void + isJobView?: boolean + showPluginWarning?: boolean + envList?: any[] + filteredCIPipelines?: any[] + addNewPipelineBlocked?: boolean + handleSelectedNodeChange?: (selectedNode: SelectedNode) => void + selectedNode?: SelectedNode + isLastNode?: boolean + appId: string + getWorkflows: () => void +} diff --git a/src/components/workflowEditor/types.ts b/src/components/workflowEditor/types.ts index fcbe8d02e2..1a64b2ae4c 100644 --- a/src/components/workflowEditor/types.ts +++ b/src/components/workflowEditor/types.ts @@ -17,6 +17,7 @@ import { RouteComponentProps } from 'react-router-dom' import { + AddPipelineType, AppConfigProps, ChangeCIPayloadType, CiPipeline, @@ -40,7 +41,6 @@ import { CdPipelineResult } from '../app/details/triggerView/types' import { InputVariablesFromInputListType } from '../cdPipeline/cdPipeline.types' import { DeleteDialogType, ForceDeleteMessageType } from '../cdPipeline/types' import { LoadingState } from '../ciConfig/types' -import { WorkflowProps } from './Workflow' export interface BlackListedCI { [key: number]: CiPipeline @@ -352,3 +352,52 @@ export interface ToggleCDSelectButtonProps extends Required void hideDeleteButton?: boolean } + +export interface WorkflowProps + extends RouteComponentProps<{ appId: string; workflowId?: string; ciPipelineId?: string; cdPipelineId?: string }>, + Required> { + nodes: CommonNodeAttr[] + id: number + name: string + startX: number + startY: number + width: number | string + height: number | string + showDeleteDialog: (workflowId: number) => void + handleCDSelect: ( + workflowId: number | string, + ciPipelineId: number | string, + parentPipelineType: string, + parentPipelineId: number | string, + isWebhookCD?: boolean, + childPipelineId?: number | string, + addType?: AddPipelineType, + ) => void + openEditWorkflow: (event, workflowId: number) => string + handleCISelect: (workflowId: string | number, type: CIPipelineNodeType) => void + addCIPipeline: (type: CIPipelineNodeType) => void + addWebhookCD: (workflowId?: number | string) => void + cdWorkflowList?: any[] + showWebhookTippy?: boolean + hideWebhookTippy?: () => void + isJobView?: boolean + envList?: any[] + filteredCIPipelines?: any[] + addNewPipelineBlocked?: boolean + handleChangeCI?: (changeCIPayload: ChangeCIPayloadType) => void + selectedNode?: SelectedNode + handleSelectedNodeChange?: (selectedNode: SelectedNode) => void + appName?: string + getWorkflows?: () => void + refreshParentWorkflows?: () => void + reloadEnvironments?: () => void + workflowPositionState?: WorkflowPositionState + handleDisplayLoader?: () => void + isOffendingPipelineView?: boolean +} + +export interface WorkflowState { + top: number + left: number + showCIMenu: boolean +} From eece86107d327d63201c7de89b1c193b35b774c8 Mon Sep 17 00:00:00 2001 From: Arun Jain Date: Wed, 13 Aug 2025 14:18:50 +0530 Subject: [PATCH 03/20] feat: add support for freemium license --- .../ClustersAndEnvironments/ClusterList.tsx | 90 +++-- src/Pages/License/ActivateLicense.tsx | 14 +- .../UpgradeToEnterpriseDialog.tsx | 77 +++++ .../ic-upgrade-enterprise.svg | 320 ++++++++++++++++++ src/Pages/Shared/UpgradeToEnterprise/index.ts | 1 + .../ResourceBrowser/PageHeader.buttons.tsx | 49 ++- src/css/icons.scss | 5 + 7 files changed, 516 insertions(+), 40 deletions(-) create mode 100644 src/Pages/Shared/UpgradeToEnterprise/UpgradeToEnterpriseDialog.tsx create mode 100644 src/Pages/Shared/UpgradeToEnterprise/ic-upgrade-enterprise.svg create mode 100644 src/Pages/Shared/UpgradeToEnterprise/index.ts diff --git a/src/Pages/GlobalConfigurations/ClustersAndEnvironments/ClusterList.tsx b/src/Pages/GlobalConfigurations/ClustersAndEnvironments/ClusterList.tsx index 1542ecad0d..183621a659 100644 --- a/src/Pages/GlobalConfigurations/ClustersAndEnvironments/ClusterList.tsx +++ b/src/Pages/GlobalConfigurations/ClustersAndEnvironments/ClusterList.tsx @@ -55,6 +55,7 @@ import { importComponentFromFELibrary } from '@Components/common' import { URLS } from '@Config/routes' import CreateCluster from '@Pages/GlobalConfigurations/ClustersAndEnvironments/CreateCluster/CreateCluster.component' import { CreateClusterTypeEnum } from '@Pages/GlobalConfigurations/ClustersAndEnvironments/CreateCluster/types' +import { UpgradeToEnterpriseDialog } from '@Pages/Shared/UpgradeToEnterprise' import { getClusterList, getEnvironmentList } from './cluster.service' import { @@ -84,8 +85,9 @@ const PodSpreadModal = importComponentFromFELibrary('PodSpreadModal', null, 'fun const HibernationRulesModal = importComponentFromFELibrary('HibernationRulesModal', null, 'function') const ClusterList = () => { - const { isSuperAdmin } = useMainContext() + const { isSuperAdmin, licenseData } = useMainContext() const isK8sClient = window._env_.K8S_CLIENT + const isFreemium = licenseData?.isFreemium const { push } = useHistory() const { search } = useLocation() @@ -121,6 +123,7 @@ const ClusterList = () => { ) const [showUnmappedEnvs, setShowUnmappedEnvs] = useState(false) + const [showUpgradeToEnterprise, setShowUpgradeToEnterprise] = useState(false) const clusterIdVsEnvMap: Record = useMemo( () => @@ -350,6 +353,58 @@ const ClusterList = () => { ) } + const handleOpenUpgradeDialog = () => { + setShowUpgradeToEnterprise(true) + } + + const handleCloseUpgradeDialog = () => { + setShowUpgradeToEnterprise(false) + } + + const renderAddClusterEnvButton = () => { + if (isEnvironmentsView) { + return ( +
{licenseData.licenseStatusError && - licenseData.licenseStatusError.code !== LicensingErrorCodes.LicenseExpired ? ( + licenseData.licenseStatusError.code !== LicensingErrorCodes.LicenseExpired && + licenseData.licenseStatusError.code !== LicensingErrorCodes.ClusterLimitExceeded ? ( { licenseStatus={licenseData.licenseStatus} isTrial={licenseData.isTrial} licenseSuffix={licenseData.licenseSuffix} + isFreemium={licenseData.isFreemium} appTheme={appTheme} + licenseStatusError={licenseData.licenseStatusError} /> )}
diff --git a/src/Pages/Shared/UpgradeToEnterprise/UpgradeToEnterpriseDialog.tsx b/src/Pages/Shared/UpgradeToEnterprise/UpgradeToEnterpriseDialog.tsx new file mode 100644 index 0000000000..e51532c66c --- /dev/null +++ b/src/Pages/Shared/UpgradeToEnterprise/UpgradeToEnterpriseDialog.tsx @@ -0,0 +1,77 @@ +import { + Button, + ButtonStyleType, + ButtonVariantType, + GenericModal, + Icon, + noop, +} from '@devtron-labs/devtron-fe-common-lib' + +import { ReactComponent as ICUpgradeToEnterprise } from './ic-upgrade-enterprise.svg' + +const ENTERPRISE_PLAN_OFFERINGS = [ + 'Unlimited clusters', + 'Managed Devtron installation', + 'Priority support', + 'Contribute to our roadmap', + 'Early access to enterprise features & more…', +] + +const UpgradeToEnterpriseDialog = ({ open, handleClose }: { open: boolean; handleClose: () => void }) => ( + + +
+
+
+ +
+
+

Upgrade to Enterprise Plan

+ + Your freemium plan allows only 1 cluster. Unlock more to scale without limits. + +
+
+
+
+ What’s included +
+ {ENTERPRISE_PLAN_OFFERINGS.map((description) => ( +
+ + {description} +
+ ))} +
+
+
+
+
+ Unlock Devtron's Full Potential + + Scale your infrastructure, accelerate your teams, and get the resources you need to + grow. + +
+
+
+
+ + +) + +export default UpgradeToEnterpriseDialog diff --git a/src/Pages/Shared/UpgradeToEnterprise/ic-upgrade-enterprise.svg b/src/Pages/Shared/UpgradeToEnterprise/ic-upgrade-enterprise.svg new file mode 100644 index 0000000000..eb7ca93cf2 --- /dev/null +++ b/src/Pages/Shared/UpgradeToEnterprise/ic-upgrade-enterprise.svg @@ -0,0 +1,320 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Pages/Shared/UpgradeToEnterprise/index.ts b/src/Pages/Shared/UpgradeToEnterprise/index.ts new file mode 100644 index 0000000000..901be71fc1 --- /dev/null +++ b/src/Pages/Shared/UpgradeToEnterprise/index.ts @@ -0,0 +1 @@ +export { default as UpgradeToEnterpriseDialog } from './UpgradeToEnterpriseDialog' diff --git a/src/components/ResourceBrowser/PageHeader.buttons.tsx b/src/components/ResourceBrowser/PageHeader.buttons.tsx index 6a0ccb2e69..bccec714e1 100644 --- a/src/components/ResourceBrowser/PageHeader.buttons.tsx +++ b/src/components/ResourceBrowser/PageHeader.buttons.tsx @@ -30,6 +30,7 @@ import { CreateClusterProps, CreateClusterTypeEnum, } from '@Pages/GlobalConfigurations/ClustersAndEnvironments/CreateCluster/types' +import { UpgradeToEnterpriseDialog } from '@Pages/Shared/UpgradeToEnterprise' import { ReactComponent as Add } from '../../assets/icons/ic-add.svg' import { URLS } from '../../config' @@ -72,7 +73,18 @@ export const renderCreateResourceButton = (clusterId: string, callback: CreateRe export const NewClusterButton = ({ handleReloadClusterList }: Pick) => { const { replace } = useHistory() - const { isSuperAdmin } = useMainContext() + const { isSuperAdmin, licenseData } = useMainContext() + const isFreemium = licenseData?.isFreemium + + const [showUpgradeToEnterprise, setShowUpgradeToEnterprise] = useState(false) + + const handleOpenUpgradeDialog = () => { + setShowUpgradeToEnterprise(true) + } + + const handleCloseUpgradeDialog = () => { + setShowUpgradeToEnterprise(false) + } const handleCloseCreateClusterModal = () => { replace(URLS.RESOURCE_BROWSER) @@ -86,23 +98,34 @@ export const NewClusterButton = ({ handleReloadClusterList }: Pick} - linkProps={{ - to: generatePath(URLS.RESOURCE_BROWSER_CREATE_CLUSTER, { - type: CreateClusterTypeEnum.CONNECT_CLUSTER, - }), - }} + {...(isFreemium + ? { + component: ButtonComponentType.button, + onClick: handleOpenUpgradeDialog, + } + : { + component: ButtonComponentType.link, + linkProps: { + to: generatePath(URLS.RESOURCE_BROWSER_CREATE_CLUSTER, { + type: CreateClusterTypeEnum.CONNECT_CLUSTER, + }), + }, + })} />
- - - + {!isFreemium && ( + + + + )} + + ) ) diff --git a/src/css/icons.scss b/src/css/icons.scss index 13ff02169d..b2c8795828 100644 --- a/src/css/icons.scss +++ b/src/css/icons.scss @@ -212,6 +212,11 @@ height: 50px; } +.icon-dim-64 { + width: 64px; + height: 64px; +} + .icon-dim-72 { width: 72px; height: 72px; From 52ddf77e420c5950509752f6fbed60934fc070d5 Mon Sep 17 00:00:00 2001 From: Arun Jain Date: Wed, 13 Aug 2025 14:27:16 +0530 Subject: [PATCH 04/20] chore: version bump --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index e6bb2c168a..d1aa335f2b 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "private": true, "homepage": "/dashboard", "dependencies": { - "@devtron-labs/devtron-fe-common-lib": "1.19.0", + "@devtron-labs/devtron-fe-common-lib": "1.19.0-beta-3", "@esbuild-plugins/node-globals-polyfill": "0.2.3", "@rjsf/core": "^5.13.3", "@rjsf/utils": "^5.13.3", diff --git a/yarn.lock b/yarn.lock index 1c990a8be8..3ede9e88b5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1722,9 +1722,9 @@ __metadata: languageName: node linkType: hard -"@devtron-labs/devtron-fe-common-lib@npm:1.19.0": - version: 1.19.0 - resolution: "@devtron-labs/devtron-fe-common-lib@npm:1.19.0" +"@devtron-labs/devtron-fe-common-lib@npm:1.19.0-beta-3": + version: 1.19.0-beta-3 + resolution: "@devtron-labs/devtron-fe-common-lib@npm:1.19.0-beta-3" dependencies: "@codemirror/autocomplete": "npm:6.18.6" "@codemirror/lang-json": "npm:6.0.1" @@ -1774,7 +1774,7 @@ __metadata: react-select: 5.8.0 rxjs: ^7.8.1 yaml: ^2.4.1 - checksum: 10c0/25390066894085fa42a416baa035dfc52ff34eec03489345b6708a111890e256799af79d2128026ebd4cd562d070c26792287cbe29b4081600391da22343821f + checksum: 10c0/e2a5d5705fe14f9d4ed660968155047e24095c708ab4de90cd563b42ddabe04bd88e08264887374c75f6180fe4aa304b8b3abd334392831689d2c1f36a25d172 languageName: node linkType: hard @@ -5721,7 +5721,7 @@ __metadata: version: 0.0.0-use.local resolution: "dashboard@workspace:." dependencies: - "@devtron-labs/devtron-fe-common-lib": "npm:1.19.0" + "@devtron-labs/devtron-fe-common-lib": "npm:1.19.0-beta-3" "@esbuild-plugins/node-globals-polyfill": "npm:0.2.3" "@playwright/test": "npm:^1.32.1" "@rjsf/core": "npm:^5.13.3" From 70e544d0cdd02da6886b99c505f517dcf4bd29da Mon Sep 17 00:00:00 2001 From: shivani170 Date: Wed, 13 Aug 2025 15:12:25 +0530 Subject: [PATCH 05/20] chore: type modified --- .../SourceMaterialsSelector/types.ts | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/Pages/App/Configurations/WorkflowEditor/SourceMaterialsSelector/types.ts b/src/Pages/App/Configurations/WorkflowEditor/SourceMaterialsSelector/types.ts index d456eaedfb..d2616b6d6d 100644 --- a/src/Pages/App/Configurations/WorkflowEditor/SourceMaterialsSelector/types.ts +++ b/src/Pages/App/Configurations/WorkflowEditor/SourceMaterialsSelector/types.ts @@ -16,8 +16,7 @@ import { CustomInputProps, MaterialType, SelectPickerProps } from '@devtron-labs/devtron-fe-common-lib' -export interface SourceMaterialsSelectorProps { - repoName?: string +type CommonSourceTypeProps = { sourceTypePickerProps: Omit< SelectPickerProps, 'required' | 'isClearable' | 'closeMenuOnSelect' | 'size' @@ -25,5 +24,14 @@ export interface SourceMaterialsSelectorProps { branchInputProps: Omit & { hideInput?: boolean } - gitURL?: MaterialType['url'] } + +export type SourceMaterialsSelectorProps = + | (CommonSourceTypeProps & { + repoName: string + gitURL: MaterialType['url'] + }) + | (CommonSourceTypeProps & { + repoName?: never + gitURL?: never + }) From 27ecf02b772e2a57f29f96e546a0cfb850173713 Mon Sep 17 00:00:00 2001 From: Arun Jain Date: Wed, 13 Aug 2025 16:40:46 +0530 Subject: [PATCH 06/20] chore: add gradient --- .../UpgradeToEnterprise/UpgradeToEnterpriseDialog.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Pages/Shared/UpgradeToEnterprise/UpgradeToEnterpriseDialog.tsx b/src/Pages/Shared/UpgradeToEnterprise/UpgradeToEnterpriseDialog.tsx index e51532c66c..c7ee3412cd 100644 --- a/src/Pages/Shared/UpgradeToEnterprise/UpgradeToEnterpriseDialog.tsx +++ b/src/Pages/Shared/UpgradeToEnterprise/UpgradeToEnterpriseDialog.tsx @@ -20,7 +20,13 @@ const ENTERPRISE_PLAN_OFFERINGS = [ const UpgradeToEnterpriseDialog = ({ open, handleClose }: { open: boolean; handleClose: () => void }) => ( -
+
From 705d2e79cc1cebb28dacd6ff02003ae3c7cdce8f Mon Sep 17 00:00:00 2001 From: Arun Jain Date: Thu, 14 Aug 2025 12:25:38 +0530 Subject: [PATCH 07/20] feat: add module limits in freemium --- .../ClustersAndEnvironments/ClusterList.tsx | 125 +++++++++--------- .../UpgradeToEnterpriseDialog.tsx | 5 +- .../ClusterList/ClusterSelectionBody.tsx | 2 +- .../ResourceBrowser/PageHeader.buttons.tsx | 24 ++-- .../ResourceBrowser/ResourceBrowser.tsx | 2 +- 5 files changed, 83 insertions(+), 75 deletions(-) diff --git a/src/Pages/GlobalConfigurations/ClustersAndEnvironments/ClusterList.tsx b/src/Pages/GlobalConfigurations/ClustersAndEnvironments/ClusterList.tsx index 183621a659..fd374b7b19 100644 --- a/src/Pages/GlobalConfigurations/ClustersAndEnvironments/ClusterList.tsx +++ b/src/Pages/GlobalConfigurations/ClustersAndEnvironments/ClusterList.tsx @@ -33,7 +33,6 @@ import { GenericFilterEmptyState, getSelectPickerOptionByValue, Icon, - noop, numberComparatorBySortOrder, OptionType, PaginationEnum, @@ -87,7 +86,7 @@ const HibernationRulesModal = importComponentFromFELibrary('HibernationRulesModa const ClusterList = () => { const { isSuperAdmin, licenseData } = useMainContext() const isK8sClient = window._env_.K8S_CLIENT - const isFreemium = licenseData?.isFreemium + const isFreemium = licenseData?.isFreemium ?? false const { push } = useHistory() const { search } = useLocation() @@ -247,6 +246,8 @@ const ClusterList = () => { const isEnvironmentsView = selectedTab === ClusterEnvTabs.ENVIRONMENTS const isClusterEnvListLoading = clusterListLoading || envListLoading + const isClusterAdditionAllowed = + !isFreemium || clusterListResult?.length < licenseData?.moduleLimits.maxAllowedClusters // Early return for non super admin users if (!isK8sClient && !isSuperAdmin) { @@ -341,18 +342,6 @@ const ClusterList = () => { ) } - if (clusterListResult && !clusterListResult.length) { - return ( - - ) - } - const handleOpenUpgradeDialog = () => { setShowUpgradeToEnterprise(true) } @@ -361,47 +350,68 @@ const ClusterList = () => { setShowUpgradeToEnterprise(false) } - const renderAddClusterEnvButton = () => { - if (isEnvironmentsView) { - return ( -
- {!isFreemium && ( + {isClusterAdditionAllowed && ( void) => () => ( - +export const renderNewClusterButton = (handleReloadClusterList: () => void, clusterCount: number) => () => ( + ) diff --git a/src/components/ResourceBrowser/ResourceBrowser.tsx b/src/components/ResourceBrowser/ResourceBrowser.tsx index 273dde223e..57ed6403d2 100644 --- a/src/components/ResourceBrowser/ResourceBrowser.tsx +++ b/src/components/ResourceBrowser/ResourceBrowser.tsx @@ -83,7 +83,7 @@ const ResourceBrowser: React.FC = () => { {renderContent()}
From 2f2fc0faf2e7eebf152e150b34a7debc1df33d04 Mon Sep 17 00:00:00 2001 From: Arun Jain Date: Thu, 14 Aug 2025 12:29:22 +0530 Subject: [PATCH 08/20] chore: version bump --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index d1aa335f2b..edaddf4cdd 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "private": true, "homepage": "/dashboard", "dependencies": { - "@devtron-labs/devtron-fe-common-lib": "1.19.0-beta-3", + "@devtron-labs/devtron-fe-common-lib": "1.19.0-beta-4", "@esbuild-plugins/node-globals-polyfill": "0.2.3", "@rjsf/core": "^5.13.3", "@rjsf/utils": "^5.13.3", diff --git a/yarn.lock b/yarn.lock index 3ede9e88b5..39cc7dd790 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1722,9 +1722,9 @@ __metadata: languageName: node linkType: hard -"@devtron-labs/devtron-fe-common-lib@npm:1.19.0-beta-3": - version: 1.19.0-beta-3 - resolution: "@devtron-labs/devtron-fe-common-lib@npm:1.19.0-beta-3" +"@devtron-labs/devtron-fe-common-lib@npm:1.19.0-beta-4": + version: 1.19.0-beta-4 + resolution: "@devtron-labs/devtron-fe-common-lib@npm:1.19.0-beta-4" dependencies: "@codemirror/autocomplete": "npm:6.18.6" "@codemirror/lang-json": "npm:6.0.1" @@ -1774,7 +1774,7 @@ __metadata: react-select: 5.8.0 rxjs: ^7.8.1 yaml: ^2.4.1 - checksum: 10c0/e2a5d5705fe14f9d4ed660968155047e24095c708ab4de90cd563b42ddabe04bd88e08264887374c75f6180fe4aa304b8b3abd334392831689d2c1f36a25d172 + checksum: 10c0/5692c6006c8e0e7da8761df63511e12c9a2f02d4eca8a54ced26080641eb7da38781af0cb2cebf97d29739ade327a1a7b22c946cae0889969afd8b82860721ad languageName: node linkType: hard @@ -5721,7 +5721,7 @@ __metadata: version: 0.0.0-use.local resolution: "dashboard@workspace:." dependencies: - "@devtron-labs/devtron-fe-common-lib": "npm:1.19.0-beta-3" + "@devtron-labs/devtron-fe-common-lib": "npm:1.19.0-beta-4" "@esbuild-plugins/node-globals-polyfill": "npm:0.2.3" "@playwright/test": "npm:^1.32.1" "@rjsf/core": "npm:^5.13.3" From 5489a64c3b1d7924e370a78092a6191433bc1401 Mon Sep 17 00:00:00 2001 From: Arun Jain Date: Thu, 14 Aug 2025 12:45:02 +0530 Subject: [PATCH 09/20] chore: add check for license data --- src/Pages/License/ActivateLicense.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Pages/License/ActivateLicense.tsx b/src/Pages/License/ActivateLicense.tsx index 607569f93c..d541d7ba3c 100644 --- a/src/Pages/License/ActivateLicense.tsx +++ b/src/Pages/License/ActivateLicense.tsx @@ -57,7 +57,7 @@ const ActivateLicense = () => { // licenseDataError.code === 404 means, oss and licensing does not exist // In case licenseStatusError is null, license is valid - if (licenseDataError?.code === API_STATUS_CODES.NOT_FOUND || !licenseData.licenseStatusError) { + if (licenseDataError?.code === API_STATUS_CODES.NOT_FOUND || !licenseData?.licenseStatusError) { redirectToLogin() return } From ddd2c239405a01b2af6cd5d5c7d013d0779e2fb4 Mon Sep 17 00:00:00 2001 From: Arun Jain Date: Thu, 14 Aug 2025 16:27:33 +0530 Subject: [PATCH 10/20] fix: use all clusters for count --- src/components/ResourceBrowser/ResourceBrowser.tsx | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/components/ResourceBrowser/ResourceBrowser.tsx b/src/components/ResourceBrowser/ResourceBrowser.tsx index 57ed6403d2..c8f6720330 100644 --- a/src/components/ResourceBrowser/ResourceBrowser.tsx +++ b/src/components/ResourceBrowser/ResourceBrowser.tsx @@ -49,13 +49,18 @@ const ResourceBrowser: React.FC = () => { ) const sortedClusterList: ClusterDetail[] = useMemo( + () => sortObjectArrayAlphabetically(detailClusterList || clusterListMinData || [], 'name'), + [detailClusterList, clusterListMinData], + ) + + const filteredSortedCluserList = useMemo( () => - sortObjectArrayAlphabetically(detailClusterList || clusterListMinData || [], 'name').filter( + sortedClusterList.filter( (option) => !(window._env_.HIDE_DEFAULT_CLUSTER && option.id === DEFAULT_CLUSTER_ID) && !option.isVirtualCluster, ), - [detailClusterList, clusterListMinData], + [sortedClusterList], ) const renderContent = () => { @@ -66,7 +71,7 @@ const ResourceBrowser: React.FC = () => { return ( Date: Thu, 14 Aug 2025 17:46:54 +0530 Subject: [PATCH 11/20] chore: version bump --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index edaddf4cdd..bb98e44dd6 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "private": true, "homepage": "/dashboard", "dependencies": { - "@devtron-labs/devtron-fe-common-lib": "1.19.0-beta-4", + "@devtron-labs/devtron-fe-common-lib": "1.19.0-beta-5", "@esbuild-plugins/node-globals-polyfill": "0.2.3", "@rjsf/core": "^5.13.3", "@rjsf/utils": "^5.13.3", diff --git a/yarn.lock b/yarn.lock index 39cc7dd790..5afc2c5514 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1722,9 +1722,9 @@ __metadata: languageName: node linkType: hard -"@devtron-labs/devtron-fe-common-lib@npm:1.19.0-beta-4": - version: 1.19.0-beta-4 - resolution: "@devtron-labs/devtron-fe-common-lib@npm:1.19.0-beta-4" +"@devtron-labs/devtron-fe-common-lib@npm:1.19.0-beta-5": + version: 1.19.0-beta-5 + resolution: "@devtron-labs/devtron-fe-common-lib@npm:1.19.0-beta-5" dependencies: "@codemirror/autocomplete": "npm:6.18.6" "@codemirror/lang-json": "npm:6.0.1" @@ -1774,7 +1774,7 @@ __metadata: react-select: 5.8.0 rxjs: ^7.8.1 yaml: ^2.4.1 - checksum: 10c0/5692c6006c8e0e7da8761df63511e12c9a2f02d4eca8a54ced26080641eb7da38781af0cb2cebf97d29739ade327a1a7b22c946cae0889969afd8b82860721ad + checksum: 10c0/b26e41662d9bcecea07af63203b09c36c0c52592d4965b1e9b8f58c2d2b72e4a2124fdf40e9128e40ca0015ceef6a7d827f10f73f2a43a0113a20d1f6b1cf266 languageName: node linkType: hard @@ -5721,7 +5721,7 @@ __metadata: version: 0.0.0-use.local resolution: "dashboard@workspace:." dependencies: - "@devtron-labs/devtron-fe-common-lib": "npm:1.19.0-beta-4" + "@devtron-labs/devtron-fe-common-lib": "npm:1.19.0-beta-5" "@esbuild-plugins/node-globals-polyfill": "npm:0.2.3" "@playwright/test": "npm:^1.32.1" "@rjsf/core": "npm:^5.13.3" From d258e21c488464db54e5ef35e8d2af8600d56823 Mon Sep 17 00:00:00 2001 From: shivani170 Date: Mon, 18 Aug 2025 11:33:11 +0530 Subject: [PATCH 12/20] chore: version bump --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 22c3b8b80b..4b67f57d4f 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "private": true, "homepage": "/dashboard", "dependencies": { - "@devtron-labs/devtron-fe-common-lib": "1.19.0-pre-5", + "@devtron-labs/devtron-fe-common-lib": "1.19.0-beta-6", "@esbuild-plugins/node-globals-polyfill": "0.2.3", "@rjsf/core": "^5.13.3", "@rjsf/utils": "^5.13.3", diff --git a/yarn.lock b/yarn.lock index b4e3bc1428..1d691ad330 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1722,9 +1722,9 @@ __metadata: languageName: node linkType: hard -"@devtron-labs/devtron-fe-common-lib@npm:1.19.0-pre-5": - version: 1.19.0-pre-5 - resolution: "@devtron-labs/devtron-fe-common-lib@npm:1.19.0-pre-5" +"@devtron-labs/devtron-fe-common-lib@npm:1.19.0-beta-6": + version: 1.19.0-beta-6 + resolution: "@devtron-labs/devtron-fe-common-lib@npm:1.19.0-beta-6" dependencies: "@codemirror/autocomplete": "npm:6.18.6" "@codemirror/lang-json": "npm:6.0.1" @@ -1774,7 +1774,7 @@ __metadata: react-select: 5.8.0 rxjs: ^7.8.1 yaml: ^2.4.1 - checksum: 10c0/3a3548f036acf58e55b0887c14f5d288707d65f07eca21b210d48636c77f77a17721bcc124a72a44bfdcac55d5221a3465a5634585e05e6c5a0b0454a690e97d + checksum: 10c0/ef02f7253e81ec70a1525ab0d21af7e2e0705ca3b9a36e68e23a3f05255d4a902358b8a58d7575fda166b5ad4cb4ed75604306aff2259a873882841549f65a02 languageName: node linkType: hard @@ -5721,7 +5721,7 @@ __metadata: version: 0.0.0-use.local resolution: "dashboard@workspace:." dependencies: - "@devtron-labs/devtron-fe-common-lib": "npm:1.19.0-pre-5" + "@devtron-labs/devtron-fe-common-lib": "npm:1.19.0-beta-6" "@esbuild-plugins/node-globals-polyfill": "npm:0.2.3" "@playwright/test": "npm:^1.32.1" "@rjsf/core": "npm:^5.13.3" From 048b2715dea26f19f375ee0802bb185d9b9f1419 Mon Sep 17 00:00:00 2001 From: shivani170 Date: Mon, 18 Aug 2025 17:40:45 +0530 Subject: [PATCH 13/20] chore: console removed --- package.json | 2 +- src/components/gitProvider/GitProvider.tsx | 7 ++----- src/components/material/MaterialView.tsx | 3 ++- src/components/workflowEditor/Workflow.tsx | 2 -- src/components/workflowEditor/nodes/StaticNode.tsx | 2 -- yarn.lock | 10 +++++----- 6 files changed, 10 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index 4b67f57d4f..1b8ba9bc04 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "private": true, "homepage": "/dashboard", "dependencies": { - "@devtron-labs/devtron-fe-common-lib": "1.19.0-beta-6", + "@devtron-labs/devtron-fe-common-lib": "1.19.0-beta-7", "@esbuild-plugins/node-globals-polyfill": "0.2.3", "@rjsf/core": "^5.13.3", "@rjsf/utils": "^5.13.3", diff --git a/src/components/gitProvider/GitProvider.tsx b/src/components/gitProvider/GitProvider.tsx index bc660808b5..247d3c1d11 100644 --- a/src/components/gitProvider/GitProvider.tsx +++ b/src/components/gitProvider/GitProvider.tsx @@ -30,7 +30,6 @@ import { ToastManager, SelectPicker, ComponentSizeType, - renderMaterialIcon, ERROR_STATUS_CODE, Button, ButtonStyleType, @@ -42,6 +41,7 @@ import { InfoBlock, DTSwitchProps, DTSwitch, + GitProviderIcon, } from '@devtron-labs/devtron-fe-common-lib' import Tippy from '@tippyjs/react' import { @@ -325,9 +325,7 @@ const CollapsedList = ({ > {id && ( -
- {renderMaterialIcon(url)} -
+ )} {!id && collapsed && }
@@ -472,7 +470,6 @@ const GitForm = ({ }, }) - const [deleting, setDeleting] = useState(false) const [confirmation, setConfirmation] = useState(false) const isTLSInitiallyConfigured = id && enableTLSVerification diff --git a/src/components/material/MaterialView.tsx b/src/components/material/MaterialView.tsx index 11799e6baf..a9eb219b6f 100644 --- a/src/components/material/MaterialView.tsx +++ b/src/components/material/MaterialView.tsx @@ -63,6 +63,7 @@ import { INCLUDE_EXCLUDE_PLACEHOLDER, USE_REGEX_TIPPY_CONTENT, } from './constants' +import { getGitProviderIcon } from '@Components/common/helpers/utils' export class MaterialView extends Component { constructor(props) { @@ -605,7 +606,7 @@ export class MaterialView extends Component { diff --git a/src/components/workflowEditor/Workflow.tsx b/src/components/workflowEditor/Workflow.tsx index 3f19dd0f35..a485e06b6f 100644 --- a/src/components/workflowEditor/Workflow.tsx +++ b/src/components/workflowEditor/Workflow.tsx @@ -878,8 +878,6 @@ export class Workflow extends Component { } render() { -{ console.log('props', this.props)} - return <>{this.renderWorkflow()} } } diff --git a/src/components/workflowEditor/nodes/StaticNode.tsx b/src/components/workflowEditor/nodes/StaticNode.tsx index 16205bef7a..3b394521b1 100644 --- a/src/components/workflowEditor/nodes/StaticNode.tsx +++ b/src/components/workflowEditor/nodes/StaticNode.tsx @@ -20,8 +20,6 @@ import { CiPipelineSourceConfig, GitProviderIcon, GitProviderType } from '@devtr import { StaticNodeProps } from './types' export class StaticNode extends Component { renderCardContent() { - console.log('props',this.props.url) - return (
Date: Tue, 19 Aug 2025 15:05:06 +0530 Subject: [PATCH 14/20] feat: use icon from icon component --- package.json | 2 +- .../UpgradeToEnterpriseDialog.tsx | 11 +- .../ic-upgrade-enterprise.svg | 320 ------------------ yarn.lock | 10 +- 4 files changed, 13 insertions(+), 330 deletions(-) delete mode 100644 src/Pages/Shared/UpgradeToEnterprise/ic-upgrade-enterprise.svg diff --git a/package.json b/package.json index bb98e44dd6..971200ac0b 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "private": true, "homepage": "/dashboard", "dependencies": { - "@devtron-labs/devtron-fe-common-lib": "1.19.0-beta-5", + "@devtron-labs/devtron-fe-common-lib": "1.19.1", "@esbuild-plugins/node-globals-polyfill": "0.2.3", "@rjsf/core": "^5.13.3", "@rjsf/utils": "^5.13.3", diff --git a/src/Pages/Shared/UpgradeToEnterprise/UpgradeToEnterpriseDialog.tsx b/src/Pages/Shared/UpgradeToEnterprise/UpgradeToEnterpriseDialog.tsx index ca7233673e..5dbbf066b9 100644 --- a/src/Pages/Shared/UpgradeToEnterprise/UpgradeToEnterpriseDialog.tsx +++ b/src/Pages/Shared/UpgradeToEnterprise/UpgradeToEnterpriseDialog.tsx @@ -1,14 +1,14 @@ import { Button, + ButtonComponentType, ButtonStyleType, ButtonVariantType, + CONTACT_SUPPORT_LINK, GenericModal, Icon, noop, } from '@devtron-labs/devtron-fe-common-lib' -import { ReactComponent as ICUpgradeToEnterprise } from './ic-upgrade-enterprise.svg' - const ENTERPRISE_PLAN_OFFERINGS = [ 'Unlimited clusters', 'Managed Devtron installation', @@ -29,7 +29,7 @@ const UpgradeToEnterpriseDialog = ({ open, handleClose }: { open: boolean; handl >
- +
- {/* TODO: Add onClick handler */}
diff --git a/src/Pages/Shared/UpgradeToEnterprise/ic-upgrade-enterprise.svg b/src/Pages/Shared/UpgradeToEnterprise/ic-upgrade-enterprise.svg deleted file mode 100644 index eb7ca93cf2..0000000000 --- a/src/Pages/Shared/UpgradeToEnterprise/ic-upgrade-enterprise.svg +++ /dev/null @@ -1,320 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 5afc2c5514..779df164d6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1722,9 +1722,9 @@ __metadata: languageName: node linkType: hard -"@devtron-labs/devtron-fe-common-lib@npm:1.19.0-beta-5": - version: 1.19.0-beta-5 - resolution: "@devtron-labs/devtron-fe-common-lib@npm:1.19.0-beta-5" +"@devtron-labs/devtron-fe-common-lib@npm:1.19.1": + version: 1.19.1 + resolution: "@devtron-labs/devtron-fe-common-lib@npm:1.19.1" dependencies: "@codemirror/autocomplete": "npm:6.18.6" "@codemirror/lang-json": "npm:6.0.1" @@ -1774,7 +1774,7 @@ __metadata: react-select: 5.8.0 rxjs: ^7.8.1 yaml: ^2.4.1 - checksum: 10c0/b26e41662d9bcecea07af63203b09c36c0c52592d4965b1e9b8f58c2d2b72e4a2124fdf40e9128e40ca0015ceef6a7d827f10f73f2a43a0113a20d1f6b1cf266 + checksum: 10c0/9335a7b0aa975bfc60c3585457f55cdc7d8c868055310d93baceadc5ab1289e60f114da8b14e40834f0db661da26d11eb088c29176e2416d6a289b452f9aa6da languageName: node linkType: hard @@ -5721,7 +5721,7 @@ __metadata: version: 0.0.0-use.local resolution: "dashboard@workspace:." dependencies: - "@devtron-labs/devtron-fe-common-lib": "npm:1.19.0-beta-5" + "@devtron-labs/devtron-fe-common-lib": "npm:1.19.1" "@esbuild-plugins/node-globals-polyfill": "npm:0.2.3" "@playwright/test": "npm:^1.32.1" "@rjsf/core": "npm:^5.13.3" From b00ed983adcb3d199fe4ea277167e4cf42a70d50 Mon Sep 17 00:00:00 2001 From: Arun Jain Date: Tue, 19 Aug 2025 15:49:12 +0530 Subject: [PATCH 15/20] chore: version bump --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 971200ac0b..f8b9426181 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "private": true, "homepage": "/dashboard", "dependencies": { - "@devtron-labs/devtron-fe-common-lib": "1.19.1", + "@devtron-labs/devtron-fe-common-lib": "1.19.2", "@esbuild-plugins/node-globals-polyfill": "0.2.3", "@rjsf/core": "^5.13.3", "@rjsf/utils": "^5.13.3", diff --git a/yarn.lock b/yarn.lock index 779df164d6..25731ee2a0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1722,9 +1722,9 @@ __metadata: languageName: node linkType: hard -"@devtron-labs/devtron-fe-common-lib@npm:1.19.1": - version: 1.19.1 - resolution: "@devtron-labs/devtron-fe-common-lib@npm:1.19.1" +"@devtron-labs/devtron-fe-common-lib@npm:1.19.2": + version: 1.19.2 + resolution: "@devtron-labs/devtron-fe-common-lib@npm:1.19.2" dependencies: "@codemirror/autocomplete": "npm:6.18.6" "@codemirror/lang-json": "npm:6.0.1" @@ -1774,7 +1774,7 @@ __metadata: react-select: 5.8.0 rxjs: ^7.8.1 yaml: ^2.4.1 - checksum: 10c0/9335a7b0aa975bfc60c3585457f55cdc7d8c868055310d93baceadc5ab1289e60f114da8b14e40834f0db661da26d11eb088c29176e2416d6a289b452f9aa6da + checksum: 10c0/dce02373df2dad2fe9733ddda96759574acada408f2fe6bda89dbf07b3fd01aa3c1688303eca3b10bd64de9c83d32a224feb8e45109f342d597544377fec4c54 languageName: node linkType: hard @@ -5721,7 +5721,7 @@ __metadata: version: 0.0.0-use.local resolution: "dashboard@workspace:." dependencies: - "@devtron-labs/devtron-fe-common-lib": "npm:1.19.1" + "@devtron-labs/devtron-fe-common-lib": "npm:1.19.2" "@esbuild-plugins/node-globals-polyfill": "npm:0.2.3" "@playwright/test": "npm:^1.32.1" "@rjsf/core": "npm:^5.13.3" From 5955bd52bff6c3fd7330ad3731b4f23aa8d49baf Mon Sep 17 00:00:00 2001 From: Arun Jain Date: Tue, 19 Aug 2025 17:29:46 +0530 Subject: [PATCH 16/20] chore: update url for upgrade contact --- package.json | 2 +- .../UpgradeToEnterprise/UpgradeToEnterpriseDialog.tsx | 6 +++--- yarn.lock | 10 +++++----- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index f8b9426181..f7e903d384 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "private": true, "homepage": "/dashboard", "dependencies": { - "@devtron-labs/devtron-fe-common-lib": "1.19.2", + "@devtron-labs/devtron-fe-common-lib": "1.19.3", "@esbuild-plugins/node-globals-polyfill": "0.2.3", "@rjsf/core": "^5.13.3", "@rjsf/utils": "^5.13.3", diff --git a/src/Pages/Shared/UpgradeToEnterprise/UpgradeToEnterpriseDialog.tsx b/src/Pages/Shared/UpgradeToEnterprise/UpgradeToEnterpriseDialog.tsx index 5dbbf066b9..2e5323ef7d 100644 --- a/src/Pages/Shared/UpgradeToEnterprise/UpgradeToEnterpriseDialog.tsx +++ b/src/Pages/Shared/UpgradeToEnterprise/UpgradeToEnterpriseDialog.tsx @@ -3,7 +3,7 @@ import { ButtonComponentType, ButtonStyleType, ButtonVariantType, - CONTACT_SUPPORT_LINK, + CONTACT_SALES_LINK, GenericModal, Icon, noop, @@ -70,11 +70,11 @@ const UpgradeToEnterpriseDialog = ({ open, handleClose }: { open: boolean; handl
diff --git a/yarn.lock b/yarn.lock index 25731ee2a0..8dc119aef7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1722,9 +1722,9 @@ __metadata: languageName: node linkType: hard -"@devtron-labs/devtron-fe-common-lib@npm:1.19.2": - version: 1.19.2 - resolution: "@devtron-labs/devtron-fe-common-lib@npm:1.19.2" +"@devtron-labs/devtron-fe-common-lib@npm:1.19.3": + version: 1.19.3 + resolution: "@devtron-labs/devtron-fe-common-lib@npm:1.19.3" dependencies: "@codemirror/autocomplete": "npm:6.18.6" "@codemirror/lang-json": "npm:6.0.1" @@ -1774,7 +1774,7 @@ __metadata: react-select: 5.8.0 rxjs: ^7.8.1 yaml: ^2.4.1 - checksum: 10c0/dce02373df2dad2fe9733ddda96759574acada408f2fe6bda89dbf07b3fd01aa3c1688303eca3b10bd64de9c83d32a224feb8e45109f342d597544377fec4c54 + checksum: 10c0/cf115ec25a1be16b93b05a71cf5f7efd884649e1f0daa9facf7c1f56ab206575e07ee387f69b280b4ee5569fb1d5ef293b9256060fa22b484958f66738a32f34 languageName: node linkType: hard @@ -5721,7 +5721,7 @@ __metadata: version: 0.0.0-use.local resolution: "dashboard@workspace:." dependencies: - "@devtron-labs/devtron-fe-common-lib": "npm:1.19.2" + "@devtron-labs/devtron-fe-common-lib": "npm:1.19.3" "@esbuild-plugins/node-globals-polyfill": "npm:0.2.3" "@playwright/test": "npm:^1.32.1" "@rjsf/core": "npm:^5.13.3" From f0f024107f534f26c8dbaf1201b0190c264e66b0 Mon Sep 17 00:00:00 2001 From: Arun Jain Date: Wed, 20 Aug 2025 15:04:46 +0530 Subject: [PATCH 17/20] feat: update messaging for 2 cluster in freemium --- .../UpgradeToEnterpriseDialog.tsx | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/Pages/Shared/UpgradeToEnterprise/UpgradeToEnterpriseDialog.tsx b/src/Pages/Shared/UpgradeToEnterprise/UpgradeToEnterpriseDialog.tsx index 2e5323ef7d..e8f27a0619 100644 --- a/src/Pages/Shared/UpgradeToEnterprise/UpgradeToEnterpriseDialog.tsx +++ b/src/Pages/Shared/UpgradeToEnterprise/UpgradeToEnterpriseDialog.tsx @@ -3,10 +3,10 @@ import { ButtonComponentType, ButtonStyleType, ButtonVariantType, + ComponentSizeType, CONTACT_SALES_LINK, GenericModal, Icon, - noop, } from '@devtron-labs/devtron-fe-common-lib' const ENTERPRISE_PLAN_OFFERINGS = [ @@ -18,7 +18,14 @@ const ENTERPRISE_PLAN_OFFERINGS = [ ] const UpgradeToEnterpriseDialog = ({ open, handleClose }: { open: boolean; handleClose: () => void }) => ( - +
-

Upgrade to Enterprise Plan

- - Your freemium plan allows only 1 cluster. Unlock more to scale without limits. - +

Upgrade to Enterprise Plan

+
+ + Freemium plan allows managing the Devtron host cluster along with one additional + cluster. + + Switch to Enterprise plan to scale without limits. +
-
+
What’s included
@@ -59,7 +71,7 @@ const UpgradeToEnterpriseDialog = ({ open, handleClose }: { open: boolean; handl ))}
-
+
Unlock Devtron's Full Potential From cbd919c1212449b29fd7d37504f4827d3e3f6eec Mon Sep 17 00:00:00 2001 From: Arun Jain Date: Wed, 20 Aug 2025 17:08:47 +0530 Subject: [PATCH 18/20] chore: version bump --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index f7e903d384..e88d96abf9 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "private": true, "homepage": "/dashboard", "dependencies": { - "@devtron-labs/devtron-fe-common-lib": "1.19.3", + "@devtron-labs/devtron-fe-common-lib": "1.19.4", "@esbuild-plugins/node-globals-polyfill": "0.2.3", "@rjsf/core": "^5.13.3", "@rjsf/utils": "^5.13.3", diff --git a/yarn.lock b/yarn.lock index 8dc119aef7..9fb82aef4c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1722,9 +1722,9 @@ __metadata: languageName: node linkType: hard -"@devtron-labs/devtron-fe-common-lib@npm:1.19.3": - version: 1.19.3 - resolution: "@devtron-labs/devtron-fe-common-lib@npm:1.19.3" +"@devtron-labs/devtron-fe-common-lib@npm:1.19.4": + version: 1.19.4 + resolution: "@devtron-labs/devtron-fe-common-lib@npm:1.19.4" dependencies: "@codemirror/autocomplete": "npm:6.18.6" "@codemirror/lang-json": "npm:6.0.1" @@ -1774,7 +1774,7 @@ __metadata: react-select: 5.8.0 rxjs: ^7.8.1 yaml: ^2.4.1 - checksum: 10c0/cf115ec25a1be16b93b05a71cf5f7efd884649e1f0daa9facf7c1f56ab206575e07ee387f69b280b4ee5569fb1d5ef293b9256060fa22b484958f66738a32f34 + checksum: 10c0/8de6d2cf1d0b82244b9623d8f449ee5547ccb23e0794d15359fbab85392079219322c2baee946e2149a62f49b3cc0192096fac64e8ade08b12aa8e650d75c3c0 languageName: node linkType: hard @@ -5721,7 +5721,7 @@ __metadata: version: 0.0.0-use.local resolution: "dashboard@workspace:." dependencies: - "@devtron-labs/devtron-fe-common-lib": "npm:1.19.3" + "@devtron-labs/devtron-fe-common-lib": "npm:1.19.4" "@esbuild-plugins/node-globals-polyfill": "npm:0.2.3" "@playwright/test": "npm:^1.32.1" "@rjsf/core": "npm:^5.13.3" From d7c1b1f0ab10bfd163bf459ad607111112b1d51f Mon Sep 17 00:00:00 2001 From: shivani170 Date: Thu, 21 Aug 2025 12:44:30 +0530 Subject: [PATCH 19/20] chore: code feedback fixes --- src/components/app/details/appDetails/DeployedCommitCard.tsx | 1 - src/components/material/MaterialView.tsx | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/app/details/appDetails/DeployedCommitCard.tsx b/src/components/app/details/appDetails/DeployedCommitCard.tsx index d007e4dfde..a7821e414c 100644 --- a/src/components/app/details/appDetails/DeployedCommitCard.tsx +++ b/src/components/app/details/appDetails/DeployedCommitCard.tsx @@ -77,7 +77,6 @@ const DeployedCommitCard = ({ cardLoading, showCommitInfoDrawer, envId, ciArtifa
- {/* @TODO: This should be dynamic, dependent on the source */}
diff --git a/src/components/material/MaterialView.tsx b/src/components/material/MaterialView.tsx index a9eb219b6f..673ef32de7 100644 --- a/src/components/material/MaterialView.tsx +++ b/src/components/material/MaterialView.tsx @@ -37,6 +37,7 @@ import { ButtonComponentType, Icon, InfoBlock, + GitProviderIcon, } from '@devtron-labs/devtron-fe-common-lib' import Tippy from '@tippyjs/react' import { MaterialViewProps, MaterialViewState } from './material.types' @@ -606,7 +607,7 @@ export class MaterialView extends Component, }) handleGitProviderChange: SelectPickerProps['onChange'] = (selected) => { From de1a3c9ef554ee07e9b82af40eb4c9d75ed49e8a Mon Sep 17 00:00:00 2001 From: shivani170 Date: Thu, 21 Aug 2025 12:48:10 +0530 Subject: [PATCH 20/20] chore: unnecessary code removed --- src/components/material/MaterialView.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/material/MaterialView.tsx b/src/components/material/MaterialView.tsx index 673ef32de7..845398e9ae 100644 --- a/src/components/material/MaterialView.tsx +++ b/src/components/material/MaterialView.tsx @@ -64,7 +64,6 @@ import { INCLUDE_EXCLUDE_PLACEHOLDER, USE_REGEX_TIPPY_CONTENT, } from './constants' -import { getGitProviderIcon } from '@Components/common/helpers/utils' export class MaterialView extends Component { constructor(props) {