Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion web/src/ar/MFEAppTypes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -154,5 +154,6 @@ export enum FeatureFlags {
HAR_ENABLE_UNTAGGED_IMAGES_SUPPORT = 'HAR_ENABLE_UNTAGGED_IMAGES_SUPPORT',
HAR_SUPPORT_LOCAL_REGISTRY_AS_UPSTREAM_PROXY = 'HAR_SUPPORT_LOCAL_REGISTRY_AS_UPSTREAM_PROXY',
HAR_SOFT_DELETE_SUPPORT = 'HAR_SOFT_DELETE_SUPPORT',
HAR_DEPENDENCY_FIREWALL = 'HAR_DEPENDENCY_FIREWALL'
HAR_DEPENDENCY_FIREWALL = 'HAR_DEPENDENCY_FIREWALL',
HAR_SWIFT_PACKAGE = 'HAR_SWIFT_PACKAGE'
}
3 changes: 2 additions & 1 deletion web/src/ar/common/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,8 @@ export enum RepositoryPackageType {
HUGGINGFACE = 'HUGGINGFACE',
CONDA = 'CONDA',
DART = 'DART',
COMPOSER = 'COMPOSER'
COMPOSER = 'COMPOSER',
SWIFT = 'SWIFT'
}

export enum RepositoryConfigType {
Expand Down
13 changes: 12 additions & 1 deletion web/src/ar/hooks/useGetRepositoryTypes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

import type { IconName } from '@harnessio/icons'

import type { FeatureFlags } from '@ar/MFEAppTypes'
import { FeatureFlags } from '@ar/MFEAppTypes'
import type { StringsMap } from '@ar/frameworks/strings'
import { Parent, RepositoryPackageType } from '@ar/common/types'
import { ThumbnailTagEnum } from '@ar/components/Tag/ThumbnailTags'
Expand Down Expand Up @@ -98,6 +98,7 @@ const RepositoryTypes: RepositoryTypeListItem[] = [
value: RepositoryPackageType.CARGO,
icon: 'rust-logo'
},

{
label: 'repositoryTypes.go',
value: RepositoryPackageType.GO,
Expand Down Expand Up @@ -126,6 +127,16 @@ const RepositoryTypes: RepositoryTypeListItem[] = [
icon: 'php-composer-logo',
parent: Parent.Enterprise
},
{
label: 'repositoryTypes.swift',
value: RepositoryPackageType.SWIFT,
icon: 'swift-logo',
disabled: true,
featureFlag: FeatureFlags.HAR_SWIFT_PACKAGE,
parent: Parent.Enterprise,
tooltip: 'Coming Soon!',
tag: ThumbnailTagEnum.ComingSoon
},
{
label: 'repositoryTypes.debian',
value: RepositoryPackageType.DEBIAN,
Expand Down
2 changes: 2 additions & 0 deletions web/src/ar/pages/repository-details/RepositoryFactory.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import { HuggingfaceRepositoryType } from './HuggingfaceRepositoryType/Huggingfa
import { CondaRepositoryType } from './CondaRepository/CondaRepositoryType'
import { DartRepositoryType } from './DartRepository/DartRepositoryType'
import { ComposerRepositoryType } from './ComposerRepository/ComposerRepositoryType'
import { SwiftRepositoryType } from './SwiftRepository/SwiftRepositoryType'

repositoryFactory.registerStep(new DockerRepositoryType())
repositoryFactory.registerStep(new HelmRepositoryType())
Expand All @@ -44,3 +45,4 @@ repositoryFactory.registerStep(new HuggingfaceRepositoryType())
repositoryFactory.registerStep(new CondaRepositoryType())
repositoryFactory.registerStep(new DartRepositoryType())
repositoryFactory.registerStep(new ComposerRepositoryType())
repositoryFactory.registerStep(new SwiftRepositoryType())
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
/*
* Copyright 2024 Harness, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

import React from 'react'
import type { IconName } from '@harnessio/icons'

import { RepositoryConfigType, RepositoryPackageType } from '@ar/common/types'
import {
UpstreamProxyAuthenticationMode,
type UpstreamRegistryRequest,
UpstreamRepositoryURLInputSource
} from '@ar/pages/upstream-proxy-details/types'
import {
CreateRepositoryFormProps,
RepositoryActionsProps,
RepositoryConfigurationFormProps,
RepositoryDetailsHeaderProps,
RepositoryStep,
RepositoryTreeNodeProps,
RepositoySetupClientProps
} from '@ar/frameworks/RepositoryStep/Repository'

import RepositoryDetails from '../RepositoryDetails'
import type { Repository, VirtualRegistryRequest } from '../types'
import RepositoryActions from '../components/Actions/RepositoryActions'
import RedirectPageView from '../components/RedirectPageView/RedirectPageView'
import RepositoryTreeNode from '../components/RepositoryTreeNode/RepositoryTreeNode'
import SetupClientContent from '../components/SetupClientContent/SetupClientContent'
import RepositoryConfigurationForm from '../components/Forms/RepositoryConfigurationForm'
import RepositoryCreateFormContent from '../components/FormContent/RepositoryCreateFormContent'
import RepositoryDetailsHeader from '../components/RepositoryDetailsHeader/RepositoryDetailsHeader'

export class SwiftRepositoryType extends RepositoryStep<VirtualRegistryRequest> {
protected packageType = RepositoryPackageType.SWIFT
protected repositoryName = 'Swift Repository'
protected repositoryIcon: IconName = 'swift-logo'
protected supportedScanners = []
protected supportsUpstreamProxy = false
protected isWebhookSupported = true

protected defaultValues: VirtualRegistryRequest = {
packageType: RepositoryPackageType.SWIFT,
identifier: '',
config: {
type: RepositoryConfigType.VIRTUAL
},
scanners: [],
isPublic: false
}

protected defaultUpstreamProxyValues: UpstreamRegistryRequest = {
packageType: RepositoryPackageType.SWIFT,
identifier: '',
config: {
type: RepositoryConfigType.UPSTREAM,
source: UpstreamRepositoryURLInputSource.Custom,
authType: UpstreamProxyAuthenticationMode.ANONYMOUS,
url: ''
},
cleanupPolicy: [],
scanners: [],
isPublic: false
}

renderCreateForm(_props: CreateRepositoryFormProps): JSX.Element {
return <RepositoryCreateFormContent isEdit={false} />
}

renderCofigurationForm(props: RepositoryConfigurationFormProps<Repository>): JSX.Element {
return <RepositoryConfigurationForm ref={props.formikRef} readonly={props.readonly} />
}

renderActions(props: RepositoryActionsProps<Repository>): JSX.Element {
return <RepositoryActions data={props.data} readonly={props.readonly} pageType={props.pageType} />
}

renderSetupClient(props: RepositoySetupClientProps): JSX.Element {
const { repoKey, onClose, artifactKey, versionKey } = props
return (
<SetupClientContent
repoKey={repoKey}
artifactKey={artifactKey}
versionKey={versionKey}
onClose={onClose}
packageType={RepositoryPackageType.SWIFT}
/>
)
}

renderRepositoryDetailsHeader(props: RepositoryDetailsHeaderProps<Repository>): JSX.Element {
return <RepositoryDetailsHeader data={props.data} />
}

renderRedirectPage(): JSX.Element {
return <RedirectPageView />
}

renderTreeNodeView(props: RepositoryTreeNodeProps): JSX.Element {
return <RepositoryTreeNode {...props} icon={this.repositoryIcon} iconSize={20} />
}

renderTreeNodeDetails(): JSX.Element {
return <RepositoryDetails />
}
}
152 changes: 152 additions & 0 deletions web/src/ar/pages/version-details/SwiftVersion/SwiftVersionType.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
/*
* Copyright 2024 Harness, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

import React from 'react'
import type { ArtifactVersionSummary } from '@harnessio/react-har-service-client'
import {
type ArtifactActionProps,
ArtifactRowSubComponentProps,
type VersionActionProps,
type ArtifactTreeNodeViewProps,
type VersionDetailsHeaderProps,
type VersionDetailsTabProps,
type VersionListTableProps,
VersionStep,
type VersionTreeNodeViewProps
} from '@ar/frameworks/Version/Version'
import { String } from '@ar/frameworks/strings'
import { PageType, RepositoryPackageType } from '@ar/common/types'
import VersionListTable, {
type CommonVersionListTableProps
} from '@ar/pages/version-list/components/VersionListTable/VersionListTable'
import { VersionListColumnEnum } from '@ar/pages/version-list/components/VersionListTable/types'
import ArtifactActions from '@ar/pages/artifact-details/components/ArtifactActions/ArtifactActions'
import ArtifactTreeNode from '@ar/pages/artifact-details/components/ArtifactTreeNode/ArtifactTreeNode'
import ArtifactTreeNodeDetailsContent from '@ar/pages/artifact-details/components/ArtifactTreeNode/ArtifactTreeNodeDetailsContent'
import { VersionDetailsTab } from '../components/VersionDetailsTabs/constants'
import VersionOverviewProvider from '../context/VersionOverviewProvider'
import SwiftOverviewPage from './pages/overview/SwiftOverviewPage'
import SwiftArtifactDetailsPage from './pages/artifact-details/SwiftArtifactDetailsPage'
import VersionTreeNode from '../components/VersionTreeNode/VersionTreeNode'
import VersionDetailsTabs from '../components/VersionDetailsTabs/VersionDetailsTabs'
import VersionDetailsHeaderContent from '../components/VersionDetailsHeaderContent/VersionDetailsHeaderContent'
import VersionFilesProvider from '../context/VersionFilesProvider'
import ArtifactFilesContent from '../components/ArtifactFileListTable/ArtifactFilesContent'
import VersionActions from '../components/VersionActions/VersionActions'
import { VersionAction } from '../components/VersionActions/types'

export class SwiftVersionType extends VersionStep<ArtifactVersionSummary> {
protected packageType = RepositoryPackageType.SWIFT
protected hasArtifactRowSubComponent = true
protected allowedVersionDetailsTabs: VersionDetailsTab[] = [
VersionDetailsTab.OVERVIEW,
VersionDetailsTab.ARTIFACT_DETAILS
]

versionListTableColumnConfig: CommonVersionListTableProps['columnConfigs'] = {
[VersionListColumnEnum.Name]: { width: '150%' },
[VersionListColumnEnum.Size]: { width: '100%' },
[VersionListColumnEnum.FileCount]: { width: '100%' },
[VersionListColumnEnum.DownloadCount]: { width: '100%' },
[VersionListColumnEnum.PullCommand]: { width: '100%' },
[VersionListColumnEnum.LastModified]: { width: '100%' },
[VersionListColumnEnum.Actions]: { width: '30%' }
}

protected allowedActionsOnVersion = [
VersionAction.Delete,
VersionAction.SetupClient,
VersionAction.ViewVersionDetails,
VersionAction.Quarantine,
VersionAction.Download,
VersionAction.DownloadCommand
]
protected allowedActionsOnVersionDetailsPage = [
VersionAction.Delete,
VersionAction.Quarantine,
VersionAction.Download
]

renderVersionListTable(props: VersionListTableProps): JSX.Element {
return <VersionListTable {...props} columnConfigs={this.versionListTableColumnConfig} />
}

renderVersionDetailsHeader(props: VersionDetailsHeaderProps<ArtifactVersionSummary>): JSX.Element {
return <VersionDetailsHeaderContent data={props.data} />
}

renderVersionDetailsTab(props: VersionDetailsTabProps): JSX.Element {
switch (props.tab) {
case VersionDetailsTab.OVERVIEW:
return (
<VersionOverviewProvider>
<SwiftOverviewPage />
</VersionOverviewProvider>
)
case VersionDetailsTab.ARTIFACT_DETAILS:
return (
<VersionOverviewProvider>
<SwiftArtifactDetailsPage />
</VersionOverviewProvider>
)
default:
return <String stringID="tabNotFound" />
}
}

renderArtifactActions(props: ArtifactActionProps): JSX.Element {
return <ArtifactActions {...props} />
}

renderVersionActions(props: VersionActionProps): JSX.Element {
switch (props.pageType) {
case PageType.Details:
return <VersionActions {...props} allowedActions={this.allowedActionsOnVersionDetailsPage} />
case PageType.Table:
case PageType.GlobalList:
default:
return <VersionActions {...props} allowedActions={this.allowedActionsOnVersion} />
}
}

renderArtifactRowSubComponent(props: ArtifactRowSubComponentProps): JSX.Element {
return (
<VersionFilesProvider
repositoryIdentifier={props.data.registryIdentifier}
artifactIdentifier={props.data.package}
versionIdentifier={props.data.version}
shouldUseLocalParams>
<ArtifactFilesContent minimal />
</VersionFilesProvider>
)
}

renderArtifactTreeNodeView(props: ArtifactTreeNodeViewProps): JSX.Element {
return <ArtifactTreeNode {...props} icon="swift-logo" />
}

renderArtifactTreeNodeDetails(): JSX.Element {
return <ArtifactTreeNodeDetailsContent />
}

renderVersionTreeNodeView(props: VersionTreeNodeViewProps): JSX.Element {
return <VersionTreeNode {...props} icon="swift-logo" />
}

renderVersionTreeNodeDetails(): JSX.Element {
return <VersionDetailsTabs />
}
}
Loading