diff --git a/web/src/ar/pages/version-details/RPMVersion/RPMVersion.module.scss b/web/src/ar/pages/version-details/RPMVersion/RPMVersion.module.scss new file mode 100644 index 000000000..106f7cdc3 --- /dev/null +++ b/web/src/ar/pages/version-details/RPMVersion/RPMVersion.module.scss @@ -0,0 +1,23 @@ +/* + * 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. + */ + +.cardContainer { + width: 60% !important; + min-width: 1040px; + padding: var(--spacing-7) !important; + background-color: var(--white); + margin: var(--spacing-large); +} diff --git a/web/src/ar/pages/version-details/RPMVersion/RPMVersion.module.scss.d.ts b/web/src/ar/pages/version-details/RPMVersion/RPMVersion.module.scss.d.ts new file mode 100644 index 000000000..f39ae0981 --- /dev/null +++ b/web/src/ar/pages/version-details/RPMVersion/RPMVersion.module.scss.d.ts @@ -0,0 +1,19 @@ +/* + * Copyright 2023 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. + */ + +/* eslint-disable */ +// This is an auto-generated file +export declare const cardContainer: string diff --git a/web/src/ar/pages/version-details/RPMVersion/RPMVersionType.tsx b/web/src/ar/pages/version-details/RPMVersion/RPMVersionType.tsx new file mode 100644 index 000000000..2c1faa1f4 --- /dev/null +++ b/web/src/ar/pages/version-details/RPMVersion/RPMVersionType.tsx @@ -0,0 +1,134 @@ +/* + * 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 { Layout } from '@harnessio/uicore' +import type { ArtifactVersionSummary } from '@harnessio/react-har-service-client' + +import { String } from '@ar/frameworks/strings' +import { PageType, RepositoryPackageType } from '@ar/common/types' +import { VersionListColumnEnum } from '@ar/pages/version-list/components/VersionListTable/types' +import ArtifactActions from '@ar/pages/artifact-details/components/ArtifactActions/ArtifactActions' +import VersionListTable, { + type CommonVersionListTableProps +} from '@ar/pages/version-list/components/VersionListTable/VersionListTable' +import { + type ArtifactActionProps, + ArtifactRowSubComponentProps, + type VersionActionProps, + type VersionDetailsHeaderProps, + type VersionDetailsTabProps, + type VersionListTableProps, + VersionStep +} from '@ar/frameworks/Version/Version' + +import VersionFilesProvider from '../context/VersionFilesProvider' +import { VersionAction } from '../components/VersionActions/types' +import VersionActions from '../components/VersionActions/VersionActions' +import VersionOverviewProvider from '../context/VersionOverviewProvider' +import RPMVersionOverviewPage from './pages/overview/RPMVersionOverviewPage' +import { VersionDetailsTab } from '../components/VersionDetailsTabs/constants' +import ArtifactFilesContent from '../components/ArtifactFileListTable/ArtifactFilesContent' +import RPMVersionArtifactDetailsPage from './pages/artifact-dertails/RPMVersionArtifactDetailsPage' +import VersionDetailsHeaderContent from '../components/VersionDetailsHeaderContent/VersionDetailsHeaderContent' + +export class RPMVersionType extends VersionStep { + protected packageType = RepositoryPackageType.RPM + protected hasArtifactRowSubComponent = true + protected allowedVersionDetailsTabs: VersionDetailsTab[] = [ + VersionDetailsTab.OVERVIEW, + VersionDetailsTab.ARTIFACT_DETAILS, + VersionDetailsTab.CODE + ] + + versionListTableColumnConfig: CommonVersionListTableProps['columnConfigs'] = { + [VersionListColumnEnum.Name]: { width: '150%' }, + [VersionListColumnEnum.Size]: { width: '100%' }, + [VersionListColumnEnum.FileCount]: { width: '100%' }, + [VersionListColumnEnum.DownloadCount]: { width: '100%' }, + [VersionListColumnEnum.LastModified]: { width: '100%' }, + [VersionListColumnEnum.Actions]: { width: '30%' } + } + + protected allowedActionsOnVersion = [ + VersionAction.Delete, + VersionAction.SetupClient, + VersionAction.ViewVersionDetails + ] + + protected allowedActionsOnVersionDetailsPage = [VersionAction.Delete] + + renderVersionListTable(props: VersionListTableProps): JSX.Element { + return + } + + renderVersionDetailsHeader(props: VersionDetailsHeaderProps): JSX.Element { + return + } + + renderVersionDetailsTab(props: VersionDetailsTabProps): JSX.Element { + switch (props.tab) { + case VersionDetailsTab.OVERVIEW: + return ( + + + + ) + case VersionDetailsTab.ARTIFACT_DETAILS: + return ( + + + + ) + case VersionDetailsTab.OSS: + return ( + + + + + + + ) + default: + return + } + } + + renderArtifactActions(props: ArtifactActionProps): JSX.Element { + return + } + + renderVersionActions(props: VersionActionProps): JSX.Element { + switch (props.pageType) { + case PageType.Details: + return + default: + return + } + } + + renderArtifactRowSubComponent(props: ArtifactRowSubComponentProps): JSX.Element { + return ( + + + + ) + } +} diff --git a/web/src/ar/pages/version-details/RPMVersion/pages/artifact-dertails/RPMVersionArtifactDetailsPage.tsx b/web/src/ar/pages/version-details/RPMVersion/pages/artifact-dertails/RPMVersionArtifactDetailsPage.tsx new file mode 100644 index 000000000..e28d2a253 --- /dev/null +++ b/web/src/ar/pages/version-details/RPMVersion/pages/artifact-dertails/RPMVersionArtifactDetailsPage.tsx @@ -0,0 +1,82 @@ +/* + * 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, { useCallback } from 'react' +import { Container, Layout } from '@harnessio/uicore' + +import { useParentHooks } from '@ar/hooks' +import { useStrings } from '@ar/frameworks/strings' +import { ButtonTab, ButtonTabs } from '@ar/components/ButtonTabs/ButtonTabs' +import VersionFilesProvider from '@ar/pages/version-details/context/VersionFilesProvider' +import ReadmeFileContent from '@ar/pages/version-details/components/ReadmeFileContent/ReadmeFileContent' +import { useVersionOverview } from '@ar/pages/version-details/context/VersionOverviewProvider' +import ArtifactFilesContent from '@ar/pages/version-details/components/ArtifactFileListTable/ArtifactFilesContent' + +import RPMVersionDependencyContent from './RPMVersionDependencyContent' +import { RPMArtifactDetails, RPMArtifactDetailsTabEnum, type RPMVersionDetailsQueryParams } from '../../types' + +export default function RPMVersionArtifactDetailsPage() { + const { getString } = useStrings() + const { useUpdateQueryParams, useQueryParams } = useParentHooks() + const { updateQueryParams } = useUpdateQueryParams() + const { detailsTab = RPMArtifactDetailsTabEnum.ReadMe } = useQueryParams() + + const { data } = useVersionOverview() + const { metadata } = data + + const handleTabChange = useCallback( + (nextTab: RPMArtifactDetailsTabEnum): void => { + updateQueryParams({ detailsTab: nextTab }) + }, + [updateQueryParams] + ) + + return ( + + + + + + } + title={getString('versionDetails.artifactDetails.tabs.readme')} + /> + + + + } + title={getString('versionDetails.artifactDetails.tabs.files')} + /> + } + title={getString('versionDetails.artifactDetails.tabs.dependencies')} + /> + + + ) +} diff --git a/web/src/ar/pages/version-details/RPMVersion/pages/artifact-dertails/RPMVersionDependencyContent.tsx b/web/src/ar/pages/version-details/RPMVersion/pages/artifact-dertails/RPMVersionDependencyContent.tsx new file mode 100644 index 000000000..21633f5f8 --- /dev/null +++ b/web/src/ar/pages/version-details/RPMVersion/pages/artifact-dertails/RPMVersionDependencyContent.tsx @@ -0,0 +1,46 @@ +/* + * 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, { useMemo } from 'react' + +import { useStrings } from '@ar/frameworks/strings' +import { useVersionOverview } from '@ar/pages/version-details/context/VersionOverviewProvider' +import type { IDependencyList } from '@ar/pages/version-details/components/ArtifactDependencyListTable/types' +import ArtifactDependencyListTable from '@ar/pages/version-details/components/ArtifactDependencyListTable/ArtifactDependencyListTable' + +import type { RPMArtifactDetails } from '../../types' + +export default function RPMVersionDependencyContent() { + const { data } = useVersionOverview() + const { metadata } = data + const { getString } = useStrings() + + const dependencies = useMemo(() => { + const _dependencies = metadata?.file_metadata?.require || [] + return _dependencies.reduce((acc: IDependencyList, dep: { name: string; version?: string; release?: string }) => { + const { name, version, release } = dep + const depName = release + ? getString('versionDetails.dependencyList.dependencyNameWithRelease', { name, release }) + : name + if (acc.find(d => d.name === depName)) { + return acc + } + return [...acc, { name: depName, version }] + }, []) + }, [metadata, getString]) + + return +} diff --git a/web/src/ar/pages/version-details/RPMVersion/pages/overview/RPMVersionGeneralInfo.tsx b/web/src/ar/pages/version-details/RPMVersion/pages/overview/RPMVersionGeneralInfo.tsx new file mode 100644 index 000000000..82847d645 --- /dev/null +++ b/web/src/ar/pages/version-details/RPMVersion/pages/overview/RPMVersionGeneralInfo.tsx @@ -0,0 +1,146 @@ +/* + * 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 { defaultTo } from 'lodash-es' +import { FontVariation } from '@harnessio/design-system' +import { Card, Container, Layout, Text } from '@harnessio/uicore' + +import { useStrings } from '@ar/frameworks/strings' +import { DEFAULT_DATE_TIME_FORMAT } from '@ar/constants' +import { getReadableDateTime } from '@ar/common/dateUtils' +import { LabelValueTypeEnum } from '@ar/pages/version-details/components/LabelValueContent/type' +import { useVersionOverview } from '@ar/pages/version-details/context/VersionOverviewProvider' +import { LabelValueContent } from '@ar/pages/version-details/components/LabelValueContent/LabelValueContent' + +import type { RPMArtifactDetails } from '../../types' +import css from './overview.module.scss' + +interface RPMVersionGeneralInfoProps { + className?: string +} + +export default function RPMVersionGeneralInfo(props: RPMVersionGeneralInfoProps) { + const { className } = props + const { data } = useVersionOverview() + const { getString } = useStrings() + return ( + + + + {getString('versionDetails.overview.generalInformation.title')} + + + + + + + {data.metadata?.version_metadata?.project_url && ( + + )} + {data.metadata?.version_metadata?.license && ( + + )} + + {data.metadata?.version_metadata?.summary && ( + + )} + + + {data.metadata?.file_metadata?.build_host && ( + + )} + {data.metadata?.file_metadata?.build_time && ( + + )} + {data.metadata?.file_metadata?.packager && ( + + )} + {data.metadata?.file_metadata?.architecture && ( + + )} + {data.metadata?.file_metadata?.source_rpm && ( + + )} + {data.metadata?.file_metadata?.vendor && ( + + )} + + + + + ) +} diff --git a/web/src/ar/pages/version-details/RPMVersion/pages/overview/RPMVersionOverviewPage.tsx b/web/src/ar/pages/version-details/RPMVersion/pages/overview/RPMVersionOverviewPage.tsx new file mode 100644 index 000000000..9817b0e9b --- /dev/null +++ b/web/src/ar/pages/version-details/RPMVersion/pages/overview/RPMVersionOverviewPage.tsx @@ -0,0 +1,25 @@ +/* + * 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 RPMVersionGeneralInfo from './RPMVersionGeneralInfo' + +import genericStyles from '../../RPMVersion.module.scss' + +export default function RPMVersionOverviewPage() { + return +} diff --git a/web/src/ar/pages/version-details/RPMVersion/pages/overview/overview.module.scss b/web/src/ar/pages/version-details/RPMVersion/pages/overview/overview.module.scss new file mode 100644 index 000000000..3c52e3121 --- /dev/null +++ b/web/src/ar/pages/version-details/RPMVersion/pages/overview/overview.module.scss @@ -0,0 +1,24 @@ +/* + * 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. + */ + +.gridContainer { + align-items: center; + display: grid; + grid-template-columns: max-content auto; + row-gap: var(--spacing-medium); + column-gap: 30px; + flex: 1; +} diff --git a/web/src/ar/pages/version-details/RPMVersion/pages/overview/overview.module.scss.d.ts b/web/src/ar/pages/version-details/RPMVersion/pages/overview/overview.module.scss.d.ts new file mode 100644 index 000000000..9f8083f63 --- /dev/null +++ b/web/src/ar/pages/version-details/RPMVersion/pages/overview/overview.module.scss.d.ts @@ -0,0 +1,19 @@ +/* + * Copyright 2023 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. + */ + +/* eslint-disable */ +// This is an auto-generated file +export declare const gridContainer: string diff --git a/web/src/ar/pages/version-details/RPMVersion/types.ts b/web/src/ar/pages/version-details/RPMVersion/types.ts new file mode 100644 index 000000000..5ef9f6dd0 --- /dev/null +++ b/web/src/ar/pages/version-details/RPMVersion/types.ts @@ -0,0 +1,29 @@ +/* + * 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 type { ArtifactDetail, RpmArtifactDetailConfig } from '@harnessio/react-har-service-client' +import type { VersionDetailsQueryParams } from '../types' + +export enum RPMArtifactDetailsTabEnum { + ReadMe = 'readme', + Files = 'files', + Dependencies = 'dependencies' +} +export interface RPMVersionDetailsQueryParams extends VersionDetailsQueryParams { + detailsTab: RPMArtifactDetailsTabEnum +} + +export type RPMArtifactDetails = ArtifactDetail & RpmArtifactDetailConfig diff --git a/web/src/ar/pages/version-details/VersionFactory.tsx b/web/src/ar/pages/version-details/VersionFactory.tsx index bbf200dea..e7519284a 100644 --- a/web/src/ar/pages/version-details/VersionFactory.tsx +++ b/web/src/ar/pages/version-details/VersionFactory.tsx @@ -22,6 +22,7 @@ import { MavenVersionType } from './MavenVersion/MavenVersion' import { NpmVersionType } from './NpmVersion/NpmVersionType' import { PythonVersionType } from './PythonVersion/PythonVersionType' import { NuGetVersionType } from './NuGetVersion/NuGetVersionType' +import { RPMVersionType } from './RPMVersion/RPMVersionType' versionFactory.registerStep(new DockerVersionType()) versionFactory.registerStep(new HelmVersionType()) @@ -30,3 +31,4 @@ versionFactory.registerStep(new MavenVersionType()) versionFactory.registerStep(new NpmVersionType()) versionFactory.registerStep(new PythonVersionType()) versionFactory.registerStep(new NuGetVersionType()) +versionFactory.registerStep(new RPMVersionType()) diff --git a/web/src/ar/pages/version-details/components/LabelValueContent/LabelValueContent.tsx b/web/src/ar/pages/version-details/components/LabelValueContent/LabelValueContent.tsx index df8f92483..ee211ff8e 100644 --- a/web/src/ar/pages/version-details/components/LabelValueContent/LabelValueContent.tsx +++ b/web/src/ar/pages/version-details/components/LabelValueContent/LabelValueContent.tsx @@ -45,10 +45,11 @@ interface LabelValueProps { value: string | number | undefined type: LabelValueTypeEnum icon?: IconName + lineClamp?: number } export function LabelValueContent(props: LabelValueProps): JSX.Element { - const { label, value, type, icon } = props + const { label, value, type, icon, lineClamp = 1 } = props const { getString } = useStrings() const transformedValue = defaultTo(value, getString('na')) const renderValue = () => { @@ -58,7 +59,7 @@ export function LabelValueContent(props: LabelValueProps): JSX.Element { case LabelValueTypeEnum.CopyText: return ( @@ -73,21 +74,24 @@ export function LabelValueContent(props: LabelValueProps): JSX.Element { if (value) { return ( - + {value} ) } else { return ( - + {transformedValue} ) } default: return ( - + {transformedValue} ) diff --git a/web/src/ar/pages/version-details/strings/strings.en.yaml b/web/src/ar/pages/version-details/strings/strings.en.yaml index 275512b49..be24f8691 100644 --- a/web/src/ar/pages/version-details/strings/strings.en.yaml +++ b/web/src/ar/pages/version-details/strings/strings.en.yaml @@ -55,6 +55,12 @@ overview: repository: Repository homepage: Homepage license: License + buildHost: Build Host + buildTime: Build Time + packager: Packager + platform: Platform + sourceRpm: Source RPM + vendor: Vendor artifactDetails: tabs: layers: Layers @@ -88,6 +94,7 @@ artifactFiles: downloadCommand: Download Command created: Created dependencyList: + dependencyNameWithRelease: '{{ name }} (release: {{ release }})' table: columns: name: Dependency Name diff --git a/web/src/ar/strings/strings.en.yaml b/web/src/ar/strings/strings.en.yaml index 2937fe0ea..bc97a5ac3 100644 --- a/web/src/ar/strings/strings.en.yaml +++ b/web/src/ar/strings/strings.en.yaml @@ -83,6 +83,7 @@ packageTypes: npmPackage: npm pythonPackage: Python Package nugetPackage: NuGet Package + rpmPackage: RPM Package repositoryTypes: docker: Docker helm: Helm diff --git a/web/src/ar/strings/types.ts b/web/src/ar/strings/types.ts index 372086b9f..8507bc168 100644 --- a/web/src/ar/strings/types.ts +++ b/web/src/ar/strings/types.ts @@ -205,6 +205,7 @@ export interface StringsMap { 'versionDetails.cards.supplyChain.totalComponents': string 'versionDetails.deleteVersionModal.contentText': string 'versionDetails.deleteVersionModal.title': string + 'versionDetails.dependencyList.dependencyNameWithRelease': string 'versionDetails.dependencyList.table.columns.name': string 'versionDetails.dependencyList.table.columns.version': string 'versionDetails.deploymentsTable.columns.deploymentPipeline': string @@ -215,6 +216,8 @@ export interface StringsMap { 'versionDetails.deploymentsTable.columns.triggeredBy': string 'versionDetails.deploymentsTable.columns.type': string 'versionDetails.deploymentsTable.noDeploymentsTitle': string + 'versionDetails.overview.generalInformation.buildHost': string + 'versionDetails.overview.generalInformation.buildTime': string 'versionDetails.overview.generalInformation.createdAndLastModifiedAt': string 'versionDetails.overview.generalInformation.description': string 'versionDetails.overview.generalInformation.digest': string @@ -223,13 +226,17 @@ export interface StringsMap { 'versionDetails.overview.generalInformation.license': string 'versionDetails.overview.generalInformation.name': string 'versionDetails.overview.generalInformation.packageType': string + 'versionDetails.overview.generalInformation.packager': string + 'versionDetails.overview.generalInformation.platform': string 'versionDetails.overview.generalInformation.pullCommand': string 'versionDetails.overview.generalInformation.repository': string 'versionDetails.overview.generalInformation.repositoryPath': string 'versionDetails.overview.generalInformation.size': string + 'versionDetails.overview.generalInformation.sourceRpm': string 'versionDetails.overview.generalInformation.title': string 'versionDetails.overview.generalInformation.uploadedBy': string 'versionDetails.overview.generalInformation.url': string + 'versionDetails.overview.generalInformation.vendor': string 'versionDetails.overview.generalInformation.version': string 'versionDetails.page': string 'versionDetails.selectDigestPlaceholder': string @@ -364,6 +371,7 @@ export interface StringsMap { 'packageTypes.npmPackage': string 'packageTypes.nugetPackage': string 'packageTypes.pythonPackage': string + 'packageTypes.rpmPackage': string plaintext: string plusNewName: string prod: string