diff --git a/src/Shared/Components/CICDHistory/types.tsx b/src/Shared/Components/CICDHistory/types.tsx
index 4c63f94e8..7f6f8483f 100644
--- a/src/Shared/Components/CICDHistory/types.tsx
+++ b/src/Shared/Components/CICDHistory/types.tsx
@@ -435,6 +435,7 @@ export type CIListItemType = Pick = {
+ 450: 'w-450',
500: 'w-500',
600: 'w-600',
800: 'w-800',
diff --git a/src/Shared/Components/GenericModal/types.ts b/src/Shared/Components/GenericModal/types.ts
index 9a0e46c3d..e5993b388 100644
--- a/src/Shared/Components/GenericModal/types.ts
+++ b/src/Shared/Components/GenericModal/types.ts
@@ -28,7 +28,8 @@ export interface GenericModalProps extends Partial
+ url.includes('git-codecommit.') && url.includes('.amazonaws.com')
+
export const getGitIconName = (repoUrl: string): IconName => {
if (repoUrl.includes(GitProviderType.GITHUB)) {
return 'ic-github'
@@ -28,5 +31,12 @@ export const getGitIconName = (repoUrl: string): IconName => {
if (repoUrl.includes(GitProviderType.BITBUCKET)) {
return 'ic-bitbucket'
}
+ if (repoUrl.includes(GitProviderType.AZURE)) {
+ return 'ic-azure'
+ }
+ if (isAWSCodeCommitURL(repoUrl)) {
+ return 'ic-aws-codecommit'
+ }
+
return 'ic-git'
}
diff --git a/src/Shared/Components/Header/HelpButton.tsx b/src/Shared/Components/Header/HelpButton.tsx
index ba6e16be0..975f046ea 100644
--- a/src/Shared/Components/Header/HelpButton.tsx
+++ b/src/Shared/Components/Header/HelpButton.tsx
@@ -148,7 +148,7 @@ export const HelpButton = ({ serverInfo, fetchingServerInfo, onClick, hideGettin
alignment="end"
width={220}
options={getHelpActionMenuOptions({
- isTrial: licenseData?.isTrial ?? false,
+ isTrialOrFreemium: (licenseData?.isTrial || licenseData?.isFreemium) ?? false,
isEnterprise,
})}
onClick={handleActionMenuClick}
diff --git a/src/Shared/Components/Header/utils.ts b/src/Shared/Components/Header/utils.ts
index 1896ea901..50dae36d9 100644
--- a/src/Shared/Components/Header/utils.ts
+++ b/src/Shared/Components/Header/utils.ts
@@ -44,10 +44,10 @@ export const setActionWithExpiry = (key: string, days: number): void => {
export const getHelpActionMenuOptions = ({
isEnterprise,
- isTrial,
+ isTrialOrFreemium,
}: {
isEnterprise: boolean
- isTrial: boolean
+ isTrialOrFreemium: boolean
}): HelpButtonActionMenuProps['options'] => [
{
items: COMMON_HELP_ACTION_MENU_ITEMS,
@@ -56,7 +56,9 @@ export const getHelpActionMenuOptions = ({
? [
{
groupLabel: 'Enterprise Support',
- items: isTrial ? ENTERPRISE_TRIAL_HELP_ACTION_MENU_ITEMS : ENTERPRISE_HELP_ACTION_MENU_ITEMS,
+ items: isTrialOrFreemium
+ ? ENTERPRISE_TRIAL_HELP_ACTION_MENU_ITEMS
+ : ENTERPRISE_HELP_ACTION_MENU_ITEMS,
},
]
: [
diff --git a/src/Shared/Components/Icon/Icon.tsx b/src/Shared/Components/Icon/Icon.tsx
index 0a7cc6418..0f886fe00 100644
--- a/src/Shared/Components/Icon/Icon.tsx
+++ b/src/Shared/Components/Icon/Icon.tsx
@@ -5,7 +5,6 @@ import { ReactComponent as ICAborted } from '@IconsV2/ic-aborted.svg'
import { ReactComponent as ICActivity } from '@IconsV2/ic-activity.svg'
import { ReactComponent as ICAdd } from '@IconsV2/ic-add.svg'
import { ReactComponent as ICAmazonEks } from '@IconsV2/ic-amazon-eks.svg'
-import { ReactComponent as ICApica } from '@IconsV2/ic-apica.svg'
import { ReactComponent as ICAppGroup } from '@IconsV2/ic-app-group.svg'
import { ReactComponent as ICAppTemplate } from '@IconsV2/ic-app-template.svg'
import { ReactComponent as ICArrowClockwise } from '@IconsV2/ic-arrow-clockwise.svg'
@@ -15,6 +14,7 @@ import { ReactComponent as ICArrowsClockwise } from '@IconsV2/ic-arrows-clockwis
import { ReactComponent as ICArrowsLeftRight } from '@IconsV2/ic-arrows-left-right.svg'
import { ReactComponent as ICAsterisk } from '@IconsV2/ic-asterisk.svg'
import { ReactComponent as ICAther } from '@IconsV2/ic-ather.svg'
+import { ReactComponent as ICAwsCodecommit } from '@IconsV2/ic-aws-codecommit.svg'
import { ReactComponent as ICAzure } from '@IconsV2/ic-azure.svg'
import { ReactComponent as ICAzureAks } from '@IconsV2/ic-azure-aks.svg'
import { ReactComponent as ICBgCluster } from '@IconsV2/ic-bg-cluster.svg'
@@ -221,6 +221,7 @@ import { ReactComponent as ICTravclan } from '@IconsV2/ic-travclan.svg'
import { ReactComponent as ICTwoCubes } from '@IconsV2/ic-two-cubes.svg'
import { ReactComponent as ICUbuntu } from '@IconsV2/ic-ubuntu.svg'
import { ReactComponent as ICUnknown } from '@IconsV2/ic-unknown.svg'
+import { ReactComponent as ICUpgradeEnterprise } from '@IconsV2/ic-upgrade-enterprise.svg'
import { ReactComponent as ICUserCircle } from '@IconsV2/ic-user-circle.svg'
import { ReactComponent as ICUserKey } from '@IconsV2/ic-user-key.svg'
import { ReactComponent as ICUsers } from '@IconsV2/ic-users.svg'
@@ -243,7 +244,6 @@ export const iconMap = {
'ic-activity': ICActivity,
'ic-add': ICAdd,
'ic-amazon-eks': ICAmazonEks,
- 'ic-apica': ICApica,
'ic-app-group': ICAppGroup,
'ic-app-template': ICAppTemplate,
'ic-arrow-clockwise': ICArrowClockwise,
@@ -253,6 +253,7 @@ export const iconMap = {
'ic-arrows-left-right': ICArrowsLeftRight,
'ic-asterisk': ICAsterisk,
'ic-ather': ICAther,
+ 'ic-aws-codecommit': ICAwsCodecommit,
'ic-azure-aks': ICAzureAks,
'ic-azure': ICAzure,
'ic-bg-cluster': ICBgCluster,
@@ -459,6 +460,7 @@ export const iconMap = {
'ic-two-cubes': ICTwoCubes,
'ic-ubuntu': ICUbuntu,
'ic-unknown': ICUnknown,
+ 'ic-upgrade-enterprise': ICUpgradeEnterprise,
'ic-user-circle': ICUserCircle,
'ic-user-key': ICUserKey,
'ic-users': ICUsers,
diff --git a/src/Shared/Components/License/DevtronLicenseCard.tsx b/src/Shared/Components/License/DevtronLicenseCard.tsx
index d463f0a8c..f2904251d 100644
--- a/src/Shared/Components/License/DevtronLicenseCard.tsx
+++ b/src/Shared/Components/License/DevtronLicenseCard.tsx
@@ -23,6 +23,7 @@ import { ClipboardButton, getTTLInHumanReadableFormat } from '@Common/index'
import { CONTACT_SUPPORT_LINK, ENTERPRISE_SUPPORT_LINK } from '@Shared/constants'
import { AppThemeType } from '@Shared/Providers'
import { getThemeOppositeThemeClass } from '@Shared/Providers/ThemeProvider/utils'
+import { LicensingErrorCodes } from '@Shared/types'
import { Button, ButtonComponentType, ButtonVariantType } from '../Button'
import { Icon } from '../Icon'
@@ -33,6 +34,90 @@ import './licenseCard.scss'
const DAMPEN_FACTOR = 50
+const ContactSupportButton = () => (
+ }
+ text="Contact support"
+ variant={ButtonVariantType.text}
+ component={ButtonComponentType.anchor}
+ anchorProps={{ href: CONTACT_SUPPORT_LINK }}
+ />
+)
+
+const LicenseCardSubText = ({
+ isFreemium,
+ licenseStatus,
+ licenseStatusError,
+}: Pick) => {
+ if (isFreemium) {
+ const freemiumLimitReached = licenseStatusError?.code === LicensingErrorCodes.ClusterLimitExceeded
+
+ return (
+
+
+
+
+ {freemiumLimitReached ? 'Freemium Limit Reached' : 'What’s Included in Freemium'}
+
+
+ {freemiumLimitReached
+ ? 'You’ve connected more than 2 clusters, which isn’t supported on the freemium plan. Contact Support to unlock your access or upgrade to Enterprise plan.'
+ : 'Freemium plan allows managing the Devtron host cluster along with one additional cluster.'}
+
+