winget-cli

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit dea9a204d8dfbb3fe3e4dbfe54bf94251a4d8bfe
parent de4aa01c959c8e09b880209380589982a0b5e6a6
Author: Ryan Fu <69221034+ryfu-msft@users.noreply.github.com>
Date:   Tue,  5 Jul 2022 15:34:35 -0700

Schema additions for Zip support (#2288)


Diffstat:
Mschemas/JSON/manifests/v1.3.0/manifest.installer.1.3.0.json | 51+++++++++++++++++++++++++++++++++++++++++++++++++++
Mschemas/JSON/manifests/v1.3.0/manifest.singleton.1.3.0.json | 51+++++++++++++++++++++++++++++++++++++++++++++++++++
Msrc/AppInstallerCLITests/AppInstallerCLITests.vcxproj | 12++++++++++++
Msrc/AppInstallerCLITests/AppInstallerCLITests.vcxproj.filters | 12++++++++++++
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-AppsAndFeaturesEntriesOnMSIX.yaml | 2+-
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-ArchInvalid.yaml | 4++--
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-ArchMissing.yaml | 4++--
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-Channel-NotSupported.yaml | 4++--
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-DifferentCase-UPPER.yaml | 4++--
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-DifferentCase-camelCase.yaml | 4++--
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-DifferentCase-lower.yaml | 4++--
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-DuplicateKey-DifferentCase-lower.yaml | 6+++---
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-DuplicateKey-DifferentCase.yaml | 6+++---
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-DuplicateKey.yaml | 4++--
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-IdInvalid.yaml | 4++--
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-IdMissing.yaml | 4++--
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeExe-NoSilent.yaml | 2+-
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeExe-NoSilentRoot.yaml | 2+-
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeExeRoot-NoSilent.yaml | 2+-
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeExeRoot-NoSilentRoot.yaml | 2+-
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeInvalid.yaml | 2+-
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeMissing.yaml | 2+-
Asrc/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeZip-MissingRelativeFilePath.yaml | 21+++++++++++++++++++++
Asrc/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeZip-MultipleNestedInstallers.yaml | 24++++++++++++++++++++++++
Asrc/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeZip-NoNestedInstallerFile.yaml | 19+++++++++++++++++++
Asrc/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeZip-NoNestedInstallerType.yaml | 21+++++++++++++++++++++
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-InstallerUniqueness-DefaultScope.yaml | 6+++---
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-InstallerUniqueness-DefaultValues.yaml | 6+++---
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-InstallerUniqueness-SameLang.yaml | 6+++---
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-InstallerUniqueness.yaml | 6+++---
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-InstallersMissing.yaml | 2+-
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-InvalidLocale.yaml | 4++--
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-InvalidManifestVersionValue.yaml | 4++--
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-InvalidUpdateBehavior.yaml | 2+-
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-LicenseMissing.yaml | 4++--
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-NameMissing.yaml | 4++--
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-PackageFamilyNameOnMSI.yaml | 2+-
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-ProductCodeOnMSIX.yaml | 2+-
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-PublisherMissing.yaml | 2+-
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-Sha256Invalid.yaml | 4++--
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-Sha256Missing.yaml | 4++--
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-SwitchInvalid.yaml | 4++--
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-UnknownProperty.yaml | 4++--
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-UnsupportedVersion.yaml | 4++--
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-UrlInvalid.yaml | 2+-
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-UrlMissing.yaml | 2+-
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-VersionInvalid.yaml | 4++--
Msrc/AppInstallerCLITests/TestData/Manifest-Bad-VersionMissing.yaml | 4++--
Msrc/AppInstallerCLITests/TestData/Manifest-Encoding-ANSI.yaml | 4++--
Msrc/AppInstallerCLITests/TestData/Manifest-Encoding-UTF16BE-BOM.yaml | 0
Msrc/AppInstallerCLITests/TestData/Manifest-Encoding-UTF16BE.yaml | 0
Msrc/AppInstallerCLITests/TestData/Manifest-Encoding-UTF16LE-BOM.yaml | 0
Msrc/AppInstallerCLITests/TestData/Manifest-Encoding-UTF16LE.yaml | 0
Msrc/AppInstallerCLITests/TestData/Manifest-Encoding-UTF8-BOM.yaml | 4++--
Msrc/AppInstallerCLITests/TestData/Manifest-Encoding-UTF8.yaml | 4++--
Msrc/AppInstallerCLITests/TestData/Manifest-Good-InstallerUniqueness-DiffScope.yaml | 6+++---
Msrc/AppInstallerCLITests/TestData/Manifest-Good-Installeruniqueness-DefaultLang.yaml | 6+++---
Msrc/AppInstallerCLITests/TestData/Manifest-Good-Installeruniqueness-DiffLangs.yaml | 6+++---
Msrc/AppInstallerCLITests/TestData/Manifest-Good-Minimum-InstallerType.yaml | 4++--
Msrc/AppInstallerCLITests/TestData/Manifest-Good-Minimum.yaml | 4++--
Msrc/AppInstallerCLITests/TestData/Manifest-Good-Switches.yaml | 4++--
Msrc/AppInstallerCLITests/TestData/ManifestV1_3-Singleton.yaml | 4++++
Msrc/AppInstallerCLITests/TestData/MultiFileManifestV1_3/ManifestV1_3-MultiFile-Installer.yaml | 20+++++++++++++++++---
Msrc/AppInstallerCLITests/YamlManifest.cpp | 40+++++++++++++++++++++++++++++++++++++++-
Msrc/AppInstallerCommonCore/Manifest/ManifestCommon.cpp | 5+++++
Msrc/AppInstallerCommonCore/Manifest/ManifestValidation.cpp | 24++++++++++++++++++++++++
Msrc/AppInstallerCommonCore/Manifest/ManifestYamlPopulator.cpp | 68++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msrc/AppInstallerCommonCore/Public/winget/ManifestCommon.h | 9+++++++++
Msrc/AppInstallerCommonCore/Public/winget/ManifestInstaller.h | 4++++
Msrc/AppInstallerCommonCore/Public/winget/ManifestValidation.h | 1+
Msrc/AppInstallerCommonCore/Public/winget/ManifestYamlPopulator.h | 6+++++-
71 files changed, 480 insertions(+), 98 deletions(-)

diff --git a/schemas/JSON/manifests/v1.3.0/manifest.installer.1.3.0.json b/schemas/JSON/manifests/v1.3.0/manifest.installer.1.3.0.json @@ -69,6 +69,45 @@ ], "description": "Enumeration of supported installer types. InstallerType is required in either root level or individual Installer level" }, + "NestedInstallerType": { + "type": [ "string", "null" ], + "enum": [ + "msix", + "msi", + "appx", + "exe", + "inno", + "nullsoft", + "wix", + "burn", + "portable" + ], + "description": "Enumeration of supported nested installer types contained inside an archive file" + }, + "NestedInstallerFiles": { + "type": [ "array", "null" ], + "items": { + "type": "object", + "title": "NestedInstallerFile", + "properties": { + "RelativeFilePath": { + "type": "string", + "minLength": 1, + "maxLength": 512, + "description": "The relative path to the nested installer file" + }, + "PortableCommandAlias": { + "type": [ "string", "null" ], + "minLength": 1, + "maxLength": 40, + "description": "The command alias to be used for calling the package. Only applies to the nested portable package" + } + }, + "description": "A nested installer file contained inside an archive" + }, + "maxItems": 1024, + "description": "List of nested installer files contained inside an archive" + }, "Architecture": { "type": "string", "enum": [ @@ -492,6 +531,12 @@ "InstallerType": { "$ref": "#/definitions/InstallerType" }, + "NestedInstallerType": { + "$ref": "#/definitions/NestedInstallerType" + }, + "NestedInstallerFiles": { + "$ref": "#/definitions/NestedInstallerFiles" + }, "Scope": { "$ref": "#/definitions/Scope" }, @@ -611,6 +656,12 @@ "InstallerType": { "$ref": "#/definitions/InstallerType" }, + "NestedInstallerType": { + "$ref": "#/definitions/NestedInstallerType" + }, + "NestedInstallerFiles": { + "$ref": "#/definitions/NestedInstallerFiles" + }, "Scope": { "$ref": "#/definitions/Scope" }, diff --git a/schemas/JSON/manifests/v1.3.0/manifest.singleton.1.3.0.json b/schemas/JSON/manifests/v1.3.0/manifest.singleton.1.3.0.json @@ -111,6 +111,45 @@ ], "description": "Enumeration of supported installer types. InstallerType is required in either root level or individual Installer level" }, + "NestedInstallerType": { + "type": [ "string", "null" ], + "enum": [ + "msix", + "msi", + "appx", + "exe", + "inno", + "nullsoft", + "wix", + "burn", + "portable" + ], + "description": "Enumeration of supported nested installer types contained inside an archive file" + }, + "NestedInstallerFiles": { + "type": [ "array", "null" ], + "items": { + "type": "object", + "title": "NestedInstallerFile", + "properties": { + "RelativeFilePath": { + "type": "string", + "minLength": 1, + "maxLength": 512, + "description": "The relative path to the nested installer file" + }, + "PortableCommandAlias": { + "type": [ "string", "null" ], + "minLength": 1, + "maxLength": 40, + "description": "The command alias to be used for calling the package. Only applies to the nested portable package" + } + }, + "description": "A nested installer file contained inside an archive" + }, + "maxItems": 1024, + "description": "List of nested installer files contained inside an archive" + }, "Architecture": { "type": "string", "enum": [ @@ -533,6 +572,12 @@ "InstallerType": { "$ref": "#/definitions/InstallerType" }, + "NestedInstallerType": { + "$ref": "#/definitions/NestedInstallerType" + }, + "NestedInstallerFiles": { + "$ref": "#/definitions/NestedInstallerFiles" + }, "Scope": { "$ref": "#/definitions/Scope" }, @@ -765,6 +810,12 @@ "InstallerType": { "$ref": "#/definitions/InstallerType" }, + "NestedInstallerType": { + "$ref": "#/definitions/NestedInstallerType" + }, + "NestedInstallerFiles": { + "$ref": "#/definitions/NestedInstallerFiles" + }, "Scope": { "$ref": "#/definitions/Scope" }, diff --git a/src/AppInstallerCLITests/AppInstallerCLITests.vcxproj b/src/AppInstallerCLITests/AppInstallerCLITests.vcxproj @@ -409,6 +409,18 @@ <CopyFileToFolders Include="TestData\Manifest-Bad-InstallerTypePortable-InvalidCommands.yaml"> <DeploymentContent>true</DeploymentContent> </CopyFileToFolders> + <CopyFileToFolders Include="TestData\Manifest-Bad-InstallerTypeZip-MissingRelativeFilePath.yaml"> + <DeploymentContent>true</DeploymentContent> + </CopyFileToFolders> + <CopyFileToFolders Include="TestData\Manifest-Bad-InstallerTypeZip-MultipleNestedInstallers.yaml"> + <DeploymentContent>true</DeploymentContent> + </CopyFileToFolders> + <CopyFileToFolders Include="TestData\Manifest-Bad-InstallerTypeZip-NoNestedInstallerFile.yaml"> + <DeploymentContent>true</DeploymentContent> + </CopyFileToFolders> + <CopyFileToFolders Include="TestData\Manifest-Bad-InstallerTypeZip-NoNestedInstallerType.yaml"> + <DeploymentContent>true</DeploymentContent> + </CopyFileToFolders> <CopyFileToFolders Include="TestData\Manifest-Bad-InstallerUniqueness-DefaultScope.yaml"> <DeploymentContent>true</DeploymentContent> </CopyFileToFolders> diff --git a/src/AppInstallerCLITests/AppInstallerCLITests.vcxproj.filters b/src/AppInstallerCLITests/AppInstallerCLITests.vcxproj.filters @@ -294,6 +294,18 @@ <CopyFileToFolders Include="TestData\Manifest-Bad-InstallerTypePortable-InvalidCommands.yaml"> <Filter>TestData</Filter> </CopyFileToFolders> + <CopyFileToFolders Include="TestData\Manifest-Bad-InstallerTypeZip-MissingRelativeFilePath.yaml"> + <Filter>TestData</Filter> + </CopyFileToFolders> + <CopyFileToFolders Include="TestData\Manifest-Bad-InstallerTypeZip-MultipleNestedInstallers.yaml"> + <Filter>TestData</Filter> + </CopyFileToFolders> + <CopyFileToFolders Include="TestData\Manifest-Bad-InstallerTypeZip-NoNestedInstallerFile.yaml"> + <Filter>TestData</Filter> + </CopyFileToFolders> + <CopyFileToFolders Include="TestData\Manifest-Bad-InstallerTypeZip-NoNestedInstallerType.yaml"> + <Filter>TestData</Filter> + </CopyFileToFolders> <CopyFileToFolders Include="TestData\Manifest-Bad-InstallerUniqueness.yaml"> <Filter>TestData</Filter> </CopyFileToFolders> diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-AppsAndFeaturesEntriesOnMSIX.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-AppsAndFeaturesEntriesOnMSIX.yaml @@ -9,7 +9,7 @@ PackageLocale: en-US Installers: - Architecture: x86 InstallerType: MSIX - InstallerUrl: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + InstallerUrl: https://ThisIsNotUsed InstallerSha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD AppsAndFeaturesEntries: - DisplayName: DisplayName diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-ArchInvalid.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-ArchInvalid.yaml @@ -3,10 +3,10 @@ Id: microsoft.msixsdk Name: MSIX SDK Version: 1.7.32 Publisher: Microsoft -InstallerType: Zip +InstallerType: Msi License: Test Installers: - Arch: NotAnArch - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-ArchMissing.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-ArchMissing.yaml @@ -3,9 +3,9 @@ Id: microsoft.msixsdk Name: MSIX SDK Version: 1.7.32 Publisher: Microsoft -InstallerType: Zip +InstallerType: Msi License: Test Installers: - - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + - Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-Channel-NotSupported.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-Channel-NotSupported.yaml @@ -3,10 +3,10 @@ Name: MSIX SDK Version: 1.7.32 Publisher: Microsoft Channel: release -InstallerType: Zip +InstallerType: Msi License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-DifferentCase-UPPER.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-DifferentCase-UPPER.yaml @@ -3,10 +3,10 @@ Id: microsoft.msixsdk Name: MSIX SDK Version: 1.7.32 Publisher: Microsoft -INSTALLERTYPE: Zip +INSTALLERTYPE: Msi License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-DifferentCase-camelCase.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-DifferentCase-camelCase.yaml @@ -3,10 +3,10 @@ Id: microsoft.msixsdk Name: MSIX SDK Version: 1.7.32 Publisher: Microsoft -installerType: Zip +installerType: Msi License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-DifferentCase-lower.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-DifferentCase-lower.yaml @@ -3,10 +3,10 @@ Id: microsoft.msixsdk Name: MSIX SDK Version: 1.7.32 Publisher: Microsoft -installertype: Zip +installertype: Msi License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-DuplicateKey-DifferentCase-lower.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-DuplicateKey-DifferentCase-lower.yaml @@ -3,11 +3,11 @@ Id: microsoft.msixsdk Name: MSIX SDK Version: 1.7.32 Publisher: Microsoft -InstallerType: Zip -installertype: Zip +InstallerType: Msi +installertype: Msi License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-DuplicateKey-DifferentCase.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-DuplicateKey-DifferentCase.yaml @@ -3,11 +3,11 @@ Id: microsoft.msixsdk Name: MSIX SDK Version: 1.7.32 Publisher: Microsoft -InstallerType: Zip -installerType: Zip +InstallerType: Msi +installerType: Msi License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-DuplicateKey.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-DuplicateKey.yaml @@ -4,10 +4,10 @@ Id: microsoft.msixsdk Name: MSIX SDK Version: 1.7.32 Publisher: Microsoft -InstallerType: Zip +InstallerType: Msi License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-IdInvalid.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-IdInvalid.yaml @@ -2,11 +2,11 @@ Id: m i c rosoft.msixsdk Name: MSIX SDK Version: 1.7.32 -InstallerType: Zip +InstallerType: Msi Publisher: Microsoft License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-IdMissing.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-IdMissing.yaml @@ -1,11 +1,11 @@ # Bad manifest. No Id Name: MSIX SDK Version: 1.7.32 -InstallerType: Zip +InstallerType: Msi Publisher: Microsoft License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeExe-NoSilent.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeExe-NoSilent.yaml @@ -6,7 +6,7 @@ Publisher: Microsoft License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD InstallerType: Exe Switches: diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeExe-NoSilentRoot.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeExe-NoSilentRoot.yaml @@ -8,7 +8,7 @@ Switches: Interactive: /i Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD InstallerType: Exe ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeExeRoot-NoSilent.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeExeRoot-NoSilent.yaml @@ -7,7 +7,7 @@ InstallerType: Exe License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD Switches: Interactive: /i diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeExeRoot-NoSilentRoot.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeExeRoot-NoSilentRoot.yaml @@ -9,6 +9,6 @@ Switches: Interactive: /i Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeInvalid.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeInvalid.yaml @@ -7,6 +7,6 @@ InstallerType: NotAType License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeMissing.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeMissing.yaml @@ -6,6 +6,6 @@ Publisher: Microsoft License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeZip-MissingRelativeFilePath.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeZip-MissingRelativeFilePath.yaml @@ -0,0 +1,20 @@ +# Bad manifest. A nested installer file must have a RelativeFilePath specified. +PackageIdentifier: microsoft.msixsdk +PackageVersion: 1.0.0.0 +PackageLocale: en-US +PackageName: AppInstaller Test Installer +Publisher: Microsoft Corporation +Moniker: AICLITestExe +License: Test +ShortDescription: Test installer for zip without RelativeFilePath specified +Scope: User +Installers: + - Architecture: x64 + InstallerUrl: https://ThisIsNotUsed + InstallerType: zip + InstallerSha256: 65DB2F2AC2686C7F2FD69D4A4C6683B888DC55BFA20A0E32CA9F838B51689A3B + NestedInstallerType: exe + NestedInstallerFiles: + - PortableCommandAlias: portableCommandAlias +ManifestType: singleton +ManifestVersion: 1.3.0+ \ No newline at end of file diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeZip-MultipleNestedInstallers.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeZip-MultipleNestedInstallers.yaml @@ -0,0 +1,23 @@ +# Bad manifest. Installer type zip should have exactly one NestedInstaller specified. +PackageIdentifier: microsoft.msixsdk +PackageVersion: 1.0.0.0 +PackageLocale: en-US +PackageName: AppInstaller Test Installer +Publisher: Microsoft Corporation +Moniker: AICLITestExe +License: Test +ShortDescription: Test installer for zip with too many nestedInstallers specified. +Scope: User +Installers: + - Architecture: x64 + InstallerUrl: https://ThisIsNotUsed + InstallerType: zip + InstallerSha256: 65DB2F2AC2686C7F2FD69D4A4C6683B888DC55BFA20A0E32CA9F838B51689A3B + NestedInstallerType: msi + NestedInstallerFiles: + - RelativeFilePath: relativeFilePath1 + PortableCommandAlias: portableCommandAlias1 + - RelativeFilePath: relativeFilePath2 + PortableCommandAlias: portableCommandAlias2 +ManifestType: singleton +ManifestVersion: 1.3.0+ \ No newline at end of file diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeZip-NoNestedInstallerFile.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeZip-NoNestedInstallerFile.yaml @@ -0,0 +1,18 @@ +# Bad manifest. Installer type zip should have exactly one NestedInstaller specified. +PackageIdentifier: microsoft.msixsdk +PackageVersion: 1.0.0.0 +PackageLocale: en-US +PackageName: AppInstaller Test Installer +Publisher: Microsoft Corporation +Moniker: AICLITestExe +License: Test +ShortDescription: Test installer for zip without nestedInstallers specified +Scope: User +Installers: + - Architecture: x64 + InstallerUrl: https://ThisIsNotUsed + InstallerType: zip + InstallerSha256: 65DB2F2AC2686C7F2FD69D4A4C6683B888DC55BFA20A0E32CA9F838B51689A3B + NestedInstallerType: exe +ManifestType: singleton +ManifestVersion: 1.3.0+ \ No newline at end of file diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeZip-NoNestedInstallerType.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerTypeZip-NoNestedInstallerType.yaml @@ -0,0 +1,20 @@ +# Bad manifest. Installer type zip should have exactly one NestedInstaller specified. +PackageIdentifier: microsoft.msixsdk +PackageVersion: 1.0.0.0 +PackageLocale: en-US +PackageName: AppInstaller Test Installer +Publisher: Microsoft Corporation +Moniker: AICLITestExe +License: Test +ShortDescription: Test installer for zip without nestedInstallers specified +Scope: User +Installers: + - Architecture: x64 + InstallerUrl: https://ThisIsNotUsed + InstallerType: zip + InstallerSha256: 65DB2F2AC2686C7F2FD69D4A4C6683B888DC55BFA20A0E32CA9F838B51689A3B + NestedInstallerFiles: + - RelativeFilePath: relativeFilePath + PortableCommandAlias: portableCommandAlias +ManifestType: singleton +ManifestVersion: 1.3.0+ \ No newline at end of file diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerUniqueness-DefaultScope.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerUniqueness-DefaultScope.yaml @@ -3,14 +3,14 @@ Id: microsoft.msixsdk Name: MSIX SDK Version: 1.7.32 Publisher: Microsoft -InstallerType: Zip +InstallerType: Msi License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD Scope: user ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerUniqueness-DefaultValues.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerUniqueness-DefaultValues.yaml @@ -3,13 +3,13 @@ Id: microsoft.msixsdk Name: MSIX SDK Version: 1.7.32 Publisher: Microsoft -InstallerType: Zip +InstallerType: Msi License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerUniqueness-SameLang.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerUniqueness-SameLang.yaml @@ -3,15 +3,15 @@ Id: microsoft.msixsdk Name: MSIX SDK Version: 1.7.32 Publisher: Microsoft -InstallerType: Zip +InstallerType: Msi License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD Language: en-US - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD Language: en-US ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerUniqueness.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallerUniqueness.yaml @@ -3,16 +3,16 @@ Id: microsoft.msixsdk Name: MSIX SDK Version: 1.7.32 Publisher: Microsoft -InstallerType: Zip +InstallerType: Msi License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD Language: en-US Scope: user - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD Language: en-US Scope: user diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallersMissing.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-InstallersMissing.yaml @@ -2,7 +2,7 @@ Id: microsoft.msixsdk Name: MSIX SDK Version: 1.7.32 -InstallerType: Zip +InstallerType: Msi Publisher: Microsoft License: Test ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-InvalidLocale.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-InvalidLocale.yaml @@ -3,12 +3,12 @@ PackageIdentifier: microsoft.msixsdk PackageVersion: 1.0.0 PackageName: MSIX SDK Publisher: Microsoft -InstallerType: zip +InstallerType: msi License: Test ShortDescription: Test invalid locale Installers: - Architecture: x86 - InstallerUrl: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + InstallerUrl: https://ThisIsNotUsed InstallerSha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD PackageLocale: In-val-id-Lo-ca-le diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-InvalidManifestVersionValue.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-InvalidManifestVersionValue.yaml @@ -3,10 +3,10 @@ Id: microsoft.msixsdk Name: MSIX SDK Version: 1.0.0.0 Publisher: Microsoft -InstallerType: Zip +InstallerType: Msi License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD ManifestVersion: 0.1.0-invalid diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-InvalidUpdateBehavior.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-InvalidUpdateBehavior.yaml @@ -3,7 +3,7 @@ Id: microsoft.msixsdk Name: MSIX SDK Version: 1.7.32 Publisher: Microsoft -InstallerType: Zip +InstallerType: Msi License: Test Installers: - Arch: x86 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-LicenseMissing.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-LicenseMissing.yaml @@ -2,9 +2,9 @@ Id: microsoft.msixsdk Name: MSIX SDK Version: 1.07.32-beta Publisher: Microsoft -InstallerType: Zip +InstallerType: Msi Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-NameMissing.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-NameMissing.yaml @@ -2,10 +2,10 @@ Id: microsoft.msixsdk Version: 1.7.32 Publisher: Microsoft -InstallerType: Zip +InstallerType: Msi License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-PackageFamilyNameOnMSI.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-PackageFamilyNameOnMSI.yaml @@ -8,5 +8,5 @@ Installers: - Arch: x86 InstallerType: MSI PackageFamilyName: Foo_123456789abcd - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-ProductCodeOnMSIX.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-ProductCodeOnMSIX.yaml @@ -8,5 +8,5 @@ Installers: - Arch: x86 InstallerType: MSIX ProductCode: "{FOO}" - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-PublisherMissing.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-PublisherMissing.yaml @@ -6,6 +6,6 @@ InstallerType: Zip License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-Sha256Invalid.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-Sha256Invalid.yaml @@ -3,10 +3,10 @@ Id: microsoft.msixsdk Name: MSIX SDK Version: 1.7.32 Publisher: Microsoft -InstallerType: Zip +InstallerType: Msi License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B6 ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-Sha256Missing.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-Sha256Missing.yaml @@ -3,9 +3,9 @@ Id: microsoft.msixsdk Name: MSIX SDK Version: 1.7.32 Publisher: Microsoft -InstallerType: Zip +InstallerType: Msi License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-SwitchInvalid.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-SwitchInvalid.yaml @@ -3,12 +3,12 @@ Id: microsoft.msixsdk Name: MSIX SDK Version: 1.7.32 Publisher: Microsoft -InstallerType: Zip +InstallerType: Exe License: Test Switches: NotASwitch: /fakeswitch Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-UnknownProperty.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-UnknownProperty.yaml @@ -3,11 +3,11 @@ Id: microsoft.msixsdk Name: MSIX SDK Version: 1.7.32 Publisher: Microsoft -InstallerType: Zip +InstallerType: Exe License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD Fake: this is Fake ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-UnsupportedVersion.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-UnsupportedVersion.yaml @@ -3,10 +3,10 @@ Id: microsoft.msixsdk Name: MSIX SDK Version: 1.0.0.0 Publisher: Microsoft -InstallerType: Zip +InstallerType: Msi License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD ManifestVersion: 1000.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-UrlInvalid.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-UrlInvalid.yaml @@ -3,7 +3,7 @@ Id: microsoft.msixsdk Name: MSIX SDK Version: 1.7.32 Publisher: Microsoft -InstallerType: Zip +InstallerType: Msi License: Test Installers: - Arch: x86 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-UrlMissing.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-UrlMissing.yaml @@ -3,7 +3,7 @@ Id: microsoft.msixsdk Name: MSIX SDK Version: 1.7.32 Publisher: Microsoft -InstallerType: Zip +InstallerType: Msi License: Test Installers: - Arch: x86 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-VersionInvalid.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-VersionInvalid.yaml @@ -3,10 +3,10 @@ Id: microsoft.msixsdk Name: MSIX SDK Version: 1.0.9-/ Publisher: Microsoft -InstallerType: Zip +InstallerType: Msi License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Bad-VersionMissing.yaml b/src/AppInstallerCLITests/TestData/Manifest-Bad-VersionMissing.yaml @@ -2,10 +2,10 @@ Id: microsoft.msixsdk Name: MSIX SDK Publisher: Microsoft -InstallerType: Zip +InstallerType: Msi License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Encoding-ANSI.yaml b/src/AppInstallerCLITests/TestData/Manifest-Encoding-ANSI.yaml @@ -1,11 +1,11 @@ Id: microsoft.msixsdk Name: MSIX SDK© Version: 1.7.32 -InstallerType: Zip +InstallerType: Msi Publisher: Microsoft License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Encoding-UTF16BE-BOM.yaml b/src/AppInstallerCLITests/TestData/Manifest-Encoding-UTF16BE-BOM.yaml Binary files differ. diff --git a/src/AppInstallerCLITests/TestData/Manifest-Encoding-UTF16BE.yaml b/src/AppInstallerCLITests/TestData/Manifest-Encoding-UTF16BE.yaml Binary files differ. diff --git a/src/AppInstallerCLITests/TestData/Manifest-Encoding-UTF16LE-BOM.yaml b/src/AppInstallerCLITests/TestData/Manifest-Encoding-UTF16LE-BOM.yaml Binary files differ. diff --git a/src/AppInstallerCLITests/TestData/Manifest-Encoding-UTF16LE.yaml b/src/AppInstallerCLITests/TestData/Manifest-Encoding-UTF16LE.yaml Binary files differ. diff --git a/src/AppInstallerCLITests/TestData/Manifest-Encoding-UTF8-BOM.yaml b/src/AppInstallerCLITests/TestData/Manifest-Encoding-UTF8-BOM.yaml @@ -1,11 +1,11 @@ Id: microsoft.msixsdk Name: MSIX SDK© Version: 1.7.32 -InstallerType: Zip +InstallerType: Msi Publisher: Microsoft License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Encoding-UTF8.yaml b/src/AppInstallerCLITests/TestData/Manifest-Encoding-UTF8.yaml @@ -1,11 +1,11 @@ Id: microsoft.msixsdk Name: MSIX SDK© Version: 1.7.32 -InstallerType: Zip +InstallerType: Msi Publisher: Microsoft License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Good-InstallerUniqueness-DiffScope.yaml b/src/AppInstallerCLITests/TestData/Manifest-Good-InstallerUniqueness-DiffScope.yaml @@ -3,15 +3,15 @@ Id: microsoft.msixsdk Name: MSIX SDK Version: 1.7.32 Publisher: Microsoft -InstallerType: Zip +InstallerType: Msi License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD Scope: user - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed2 Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD Scope: machine ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Good-Installeruniqueness-DefaultLang.yaml b/src/AppInstallerCLITests/TestData/Manifest-Good-Installeruniqueness-DefaultLang.yaml @@ -3,14 +3,14 @@ Id: microsoft.msixsdk Name: MSIX SDK Version: 1.7.32 Publisher: Microsoft -InstallerType: Zip +InstallerType: Msi License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed2 Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD Language: en-MX ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Good-Installeruniqueness-DiffLangs.yaml b/src/AppInstallerCLITests/TestData/Manifest-Good-Installeruniqueness-DiffLangs.yaml @@ -3,15 +3,15 @@ Id: microsoft.msixsdk Name: MSIX SDK Version: 1.7.32 Publisher: Microsoft -InstallerType: Zip +InstallerType: Msi License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD Language: en-US - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed2 Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD Language: es-MX ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Good-Minimum-InstallerType.yaml b/src/AppInstallerCLITests/TestData/Manifest-Good-Minimum-InstallerType.yaml @@ -6,7 +6,7 @@ Publisher: Microsoft License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD - InstallerType: Zip + InstallerType: Msi ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Good-Minimum.yaml b/src/AppInstallerCLITests/TestData/Manifest-Good-Minimum.yaml @@ -3,10 +3,10 @@ Id: microsoft.msixsdk Name: MSIX SDK Version: 1.07.32-beta Publisher: Microsoft -InstallerType: Zip +InstallerType: Msi License: Test Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD ManifestVersion: 0.1.0 diff --git a/src/AppInstallerCLITests/TestData/Manifest-Good-Switches.yaml b/src/AppInstallerCLITests/TestData/Manifest-Good-Switches.yaml @@ -3,13 +3,13 @@ Id: microsoft.msixsdk Name: MSIX SDK Version: 1.7.32 Publisher: Microsoft -InstallerType: Zip +InstallerType: Msi License: Test Switches: SilentWithProgress: /sp Installers: - Arch: x86 - Url: https://rubengustorage.blob.core.windows.net/publiccontainer/msixsdk-x86.zip + Url: https://ThisIsNotUsed Sha256: 98B67758CEAFFCBB3FE47838FD0A8D7BD581C2650842D6B2B0E0D49A23270CCD Switches: Silent: /s diff --git a/src/AppInstallerCLITests/TestData/ManifestV1_3-Singleton.yaml b/src/AppInstallerCLITests/TestData/ManifestV1_3-Singleton.yaml @@ -103,6 +103,10 @@ ExpectedReturnCodes: ReturnResponseUrl: https://DefaultReturnResponseUrl.com UnsupportedArguments: - log +NestedInstallerType: msi +NestedInstallerFiles: + - RelativeFilePath: RelativeFilePath + PortableCommandAlias: PortableCommandAlias Installers: - Architecture: x86 diff --git a/src/AppInstallerCLITests/TestData/MultiFileManifestV1_3/ManifestV1_3-MultiFile-Installer.yaml b/src/AppInstallerCLITests/TestData/MultiFileManifestV1_3/ManifestV1_3-MultiFile-Installer.yaml @@ -74,6 +74,10 @@ ExpectedReturnCodes: ReturnResponseUrl: https://DefaultReturnResponseUrl.com UnsupportedArguments: - log +NestedInstallerType: msi +NestedInstallerFiles: + - RelativeFilePath: RelativeFilePath + PortableCommandAlias: PortableCommandAlias Installers: - Architecture: x86 @@ -154,8 +158,18 @@ Installers: Commands: - standalone ExpectedReturnCodes: - - InstallerReturnCode: 11 - ReturnResponse: custom - ReturnResponseUrl: https://defaultReturnResponseUrl.com + - InstallerReturnCode: 11 + ReturnResponse: custom + ReturnResponseUrl: https://defaultReturnResponseUrl.com + - Architecture: x64 + InstallerType: zip + InstallerUrl: https://www.microsoft.com/msixsdk/msixsdkx64.exe + InstallerSha256: 69D84CA8899800A5575CE31798293CD4FEBAB1D734A07C2E51E56A28E0DF8C82 + NestedInstallerType: portable + NestedInstallerFiles: + - RelativeFilePath: relativeFilePath1 + PortableCommandAlias: portableAlias1 + - RelativeFilePath: relativeFilePath2 + PortableCommandAlias: portableAlias2 ManifestType: installer ManifestVersion: 1.3.0 \ No newline at end of file diff --git a/src/AppInstallerCLITests/YamlManifest.cpp b/src/AppInstallerCLITests/YamlManifest.cpp @@ -257,6 +257,10 @@ TEST_CASE("ReadBadManifests", "[ManifestValidation]") { "Manifest-Bad-InstallerTypePortable-InvalidAppsAndFeatures.yaml", "Only zero or one entry for Apps and Features may be specified for InstallerType portable." }, { "Manifest-Bad-InstallerTypePortable-InvalidCommands.yaml", "Only zero or one value for Commands may be specified for InstallerType portable." }, { "Manifest-Bad-InstallerTypePortable-InvalidScope.yaml", "Scope is not supported for InstallerType portable." }, + { "Manifest-Bad-InstallerTypeZip-MissingRelativeFilePath.yaml", "Required field missing. Field: RelativeFilePath" }, + { "Manifest-Bad-InstallerTypeZip-MultipleNestedInstallers.yaml", "Only one entry for NestedInstallerFiles can be specified for non-portable InstallerTypes." }, + { "Manifest-Bad-InstallerTypeZip-NoNestedInstallerFile.yaml", "Required field missing. Field: NestedInstallerFiles" }, + { "Manifest-Bad-InstallerTypeZip-NoNestedInstallerType.yaml", "Required field missing. Field: NestedInstallerType" }, { "Manifest-Bad-InstallerUniqueness.yaml", "Duplicate installer entry found." }, { "Manifest-Bad-InstallerUniqueness-DefaultScope.yaml", "Duplicate installer entry found." }, { "Manifest-Bad-InstallerUniqueness-DefaultValues.yaml", "Duplicate installer entry found." }, @@ -472,13 +476,25 @@ void VerifyV1ManifestContent(const Manifest& manifest, bool isSingleton, Manifes REQUIRE(manifest.DefaultInstallerInfo.UnsupportedArguments.at(0) == UnsupportedArgumentEnum::Log); } + if (manifestVer >= ManifestVer{ s_ManifestVersionV1_3 }) + { + REQUIRE(manifest.DefaultInstallerInfo.NestedInstallerType == InstallerTypeEnum::Msi); + REQUIRE(manifest.DefaultInstallerInfo.NestedInstallerFiles.size() == 1); + REQUIRE(manifest.DefaultInstallerInfo.NestedInstallerFiles.at(0).RelativeFilePath == "RelativeFilePath"); + REQUIRE(manifest.DefaultInstallerInfo.NestedInstallerFiles.at(0).PortableCommandAlias == "PortableCommandAlias"); + } + if (isSingleton) { REQUIRE(manifest.Installers.size() == 1); } else { - if (manifestVer >= ManifestVer{ s_ManifestVersionV1_2 }) + if (manifestVer >= ManifestVer{ s_ManifestVersionV1_3 }) + { + REQUIRE(manifest.Installers.size() == 4); + } + else if (manifestVer == ManifestVer{ s_ManifestVersionV1_2 }) { REQUIRE(manifest.Installers.size() == 3); } @@ -550,6 +566,13 @@ void VerifyV1ManifestContent(const Manifest& manifest, bool isSingleton, Manifes REQUIRE(installer1.UnsupportedArguments.at(0) == UnsupportedArgumentEnum::Location); } + if (manifestVer >= ManifestVer{ s_ManifestVersionV1_3 }) + { + // NestedInstaller metadata should not be populated unless the InstallerType is zip. + REQUIRE(installer1.NestedInstallerType == InstallerTypeEnum::Unknown); + REQUIRE(installer1.NestedInstallerFiles.size() == 0); + } + if (!isSingleton) { ManifestInstaller installer2 = manifest.Installers.at(1); @@ -597,6 +620,21 @@ void VerifyV1ManifestContent(const Manifest& manifest, bool isSingleton, Manifes REQUIRE(installer3.UnsupportedArguments.at(0) == UnsupportedArgumentEnum::Log); } + if (manifestVer >= ManifestVer{ s_ManifestVersionV1_3 }) + { + ManifestInstaller installer4 = manifest.Installers.at(3); + REQUIRE(installer4.InstallerType == InstallerTypeEnum::Zip); + REQUIRE(installer4.Arch == Architecture::X64); + REQUIRE(installer4.Url == "https://www.microsoft.com/msixsdk/msixsdkx64.exe"); + REQUIRE(installer4.Sha256 == SHA256::ConvertToBytes("69D84CA8899800A5575CE31798293CD4FEBAB1D734A07C2E51E56A28E0DF8C82")); + REQUIRE(installer4.NestedInstallerType == InstallerTypeEnum::Portable); + REQUIRE(installer4.NestedInstallerFiles.size() == 2); + REQUIRE(installer4.NestedInstallerFiles.at(0).RelativeFilePath == "relativeFilePath1"); + REQUIRE(installer4.NestedInstallerFiles.at(0).PortableCommandAlias == "portableAlias1"); + REQUIRE(installer4.NestedInstallerFiles.at(1).RelativeFilePath == "relativeFilePath2"); + REQUIRE(installer4.NestedInstallerFiles.at(1).PortableCommandAlias == "portableAlias2"); + } + // Localization REQUIRE(manifest.Localizations.size() == 1); ManifestLocalization localization1 = manifest.Localizations.at(0); diff --git a/src/AppInstallerCommonCore/Manifest/ManifestCommon.cpp b/src/AppInstallerCommonCore/Manifest/ManifestCommon.cpp @@ -460,6 +460,11 @@ namespace AppInstaller::Manifest ); } + bool IsArchiveType(InstallerTypeEnum installerType) + { + return (installerType == InstallerTypeEnum::Zip); + } + bool IsInstallerTypeCompatible(InstallerTypeEnum type1, InstallerTypeEnum type2) { // Unknown type cannot be compatible with any other diff --git a/src/AppInstallerCommonCore/Manifest/ManifestValidation.cpp b/src/AppInstallerCommonCore/Manifest/ManifestValidation.cpp @@ -175,6 +175,30 @@ namespace AppInstaller::Manifest } } + if (IsArchiveType(installer.InstallerType)) + { + if (installer.NestedInstallerType == InstallerTypeEnum::Unknown) + { + resultErrors.emplace_back(ManifestError::RequiredFieldMissing, "NestedInstallerType"); + } + if (installer.NestedInstallerFiles.size() == 0) + { + resultErrors.emplace_back(ManifestError::RequiredFieldMissing, "NestedInstallerFiles"); + } + if (installer.NestedInstallerType != InstallerTypeEnum::Portable && installer.NestedInstallerFiles.size() != 1) + { + resultErrors.emplace_back(ManifestError::ExceededNestedInstallerFilesLimit, "NestedInstallerFiles"); + } + + for (const auto& nestedInstallerFile : installer.NestedInstallerFiles) + { + if (nestedInstallerFile.RelativeFilePath.empty()) + { + resultErrors.emplace_back(ManifestError::RequiredFieldMissing, "RelativeFilePath"); + } + } + } + // Check empty string before calling IsValidUrl to avoid duplicate error reporting. if (!installer.Url.empty() && IsValidURL(NULL, Utility::ConvertToUTF16(installer.Url).c_str(), 0) == S_FALSE) { diff --git a/src/AppInstallerCommonCore/Manifest/ManifestYamlPopulator.cpp b/src/AppInstallerCommonCore/Manifest/ManifestYamlPopulator.cpp @@ -307,6 +307,17 @@ namespace AppInstaller::Manifest std::move(fields_v1_2.begin(), fields_v1_2.end(), std::inserter(result, result.end())); } + + if (manifestVersion >= ManifestVer{ s_ManifestVersionV1_3 }) + { + std::vector<FieldProcessInfo> fields_v1_3 = + { + { "NestedInstallerType", [this](const YAML::Node& value)->ValidationErrors { m_p_installer->NestedInstallerType = ConvertToInstallerTypeEnum(value.as<std::string>()); return {}; } }, + { "NestedInstallerFiles", [this](const YAML::Node& value)->ValidationErrors { return ProcessNestedInstallerFilesNode(value); } }, + }; + + std::move(fields_v1_3.begin(), fields_v1_3.end(), std::inserter(result, result.end())); + } } return result; @@ -559,6 +570,22 @@ namespace AppInstaller::Manifest return result; } + std::vector<ManifestYamlPopulator::FieldProcessInfo> ManifestYamlPopulator::GetNestedInstallerFileFieldProcessInfo(const ManifestVer& manifestVersion) + { + std::vector<FieldProcessInfo> result = {}; + + if (manifestVersion >= ManifestVer{ s_ManifestVersionV1_3 }) + { + result = + { + { "RelativeFilePath", [this](const YAML::Node& value)->ValidationErrors { m_p_nestedInstallerFile->RelativeFilePath = Utility::Trim(value.as<std::string>()); return {}; } }, + { "PortableCommandAlias", [this](const YAML::Node& value)->ValidationErrors { m_p_nestedInstallerFile->PortableCommandAlias = Utility::Trim(value.as<std::string>()); return {}; } }, + }; + } + + return result; + } + ValidationErrors ManifestYamlPopulator::ValidateAndProcessFields( const YAML::Node& rootNode, const std::vector<FieldProcessInfo>& fieldInfos) @@ -753,6 +780,30 @@ namespace AppInstaller::Manifest return resultErrors; } + ValidationErrors ManifestYamlPopulator::ProcessNestedInstallerFilesNode(const YAML::Node& nestedInstallerFilesNode) + { + THROW_HR_IF(E_INVALIDARG, !nestedInstallerFilesNode.IsSequence()); + + ValidationErrors resultErrors; + std::vector<NestedInstallerFile> nestedInstallerFiles; + + for (auto const& entry : nestedInstallerFilesNode.Sequence()) + { + NestedInstallerFile nestedInstallerFile; + m_p_nestedInstallerFile = &nestedInstallerFile; + auto errors = ValidateAndProcessFields(entry, NestedInstallerFileFieldInfos); + std::move(errors.begin(), errors.end(), std::inserter(resultErrors, resultErrors.end())); + nestedInstallerFiles.emplace_back(std::move(nestedInstallerFile)); + } + + if (!nestedInstallerFiles.empty()) + { + m_p_installer->NestedInstallerFiles = nestedInstallerFiles; + } + + return resultErrors; + } + ValidationErrors ManifestYamlPopulator::PopulateManifestInternal( const YAML::Node& rootNode, Manifest& manifest, @@ -777,6 +828,7 @@ namespace AppInstaller::Manifest MarketsFieldInfos = GetMarketsFieldProcessInfo(manifestVersion); AppsAndFeaturesEntryFieldInfos = GetAppsAndFeaturesEntryFieldProcessInfo(manifestVersion); DocumentationFieldInfos = GetDocumentationFieldProcessInfo(manifestVersion); + NestedInstallerFileFieldInfos = GetNestedInstallerFileFieldProcessInfo(manifestVersion); // Populate root m_p_manifest = &manifest; @@ -800,6 +852,9 @@ namespace AppInstaller::Manifest installer.AppsAndFeaturesEntries.clear(); // Clear dependencies as installer overrides root dependencies installer.Dependencies.Clear(); + // Clear nested installers as it should only be copied for zip installerType. + installer.NestedInstallerType = InstallerTypeEnum::Unknown; + installer.NestedInstallerFiles.clear(); m_p_installer = &installer; auto errors = ValidateAndProcessFields(entry, InstallerFieldInfos); @@ -821,6 +876,19 @@ namespace AppInstaller::Manifest installer.AppsAndFeaturesEntries = manifest.DefaultInstallerInfo.AppsAndFeaturesEntries; } + if (IsArchiveType(installer.InstallerType)) + { + if (installer.NestedInstallerFiles.empty()) + { + installer.NestedInstallerFiles = manifest.DefaultInstallerInfo.NestedInstallerFiles; + } + + if (installer.NestedInstallerType == InstallerTypeEnum::Unknown) + { + installer.NestedInstallerType = manifest.DefaultInstallerInfo.NestedInstallerType; + } + } + // If there are no dependencies on installer use default ones if (!installer.Dependencies.HasAny()) { diff --git a/src/AppInstallerCommonCore/Public/winget/ManifestCommon.h b/src/AppInstallerCommonCore/Public/winget/ManifestCommon.h @@ -247,6 +247,12 @@ namespace AppInstaller::Manifest std::vector<string_t> ExcludedMarkets; }; + struct NestedInstallerFile + { + string_t RelativeFilePath; + string_t PortableCommandAlias; + }; + InstallerTypeEnum ConvertToInstallerTypeEnum(const std::string& in); UpdateBehaviorEnum ConvertToUpdateBehaviorEnum(const std::string& in); @@ -281,6 +287,9 @@ namespace AppInstaller::Manifest // Gets a value indicating whether the given installer type supports ARP version range. bool DoesInstallerTypeSupportArpVersionRange(InstallerTypeEnum installerType); + // Gets a value indicating whether the given installer type is an archive. + bool IsArchiveType(InstallerTypeEnum installerType); + // Checks whether 2 installer types are compatible. E.g. inno and exe are update compatible bool IsInstallerTypeCompatible(InstallerTypeEnum type1, InstallerTypeEnum type2); diff --git a/src/AppInstallerCommonCore/Public/winget/ManifestInstaller.h b/src/AppInstallerCommonCore/Public/winget/ManifestInstaller.h @@ -42,6 +42,10 @@ namespace AppInstaller::Manifest // If present, has more precedence than root InstallerTypeEnum InstallerType = InstallerTypeEnum::Unknown; + InstallerTypeEnum NestedInstallerType = InstallerTypeEnum::Unknown; + + std::vector<NestedInstallerFile> NestedInstallerFiles; + ScopeEnum Scope = ScopeEnum::Unknown; std::vector<InstallModeEnum> InstallModes; diff --git a/src/AppInstallerCommonCore/Public/winget/ManifestValidation.h b/src/AppInstallerCommonCore/Public/winget/ManifestValidation.h @@ -58,6 +58,7 @@ namespace AppInstaller::Manifest const char* const ApproximateVersionNotAllowed = "Approximate version not allowed."; const char* const ArpVersionOverlapWithIndex = "DisplayVersion declared in the manifest has overlap with existing DisplayVersion range in the index. Existing DisplayVersion range in index: "; const char* const ArpVersionValidationInternalError = "Internal error while validating DisplayVersion against index."; + const char* const ExceededNestedInstallerFilesLimit = "Only one entry for NestedInstallerFiles can be specified for non-portable InstallerTypes."; } struct ValidationError diff --git a/src/AppInstallerCommonCore/Public/winget/ManifestYamlPopulator.h b/src/AppInstallerCommonCore/Public/winget/ManifestYamlPopulator.h @@ -42,6 +42,7 @@ namespace AppInstaller::Manifest std::vector<FieldProcessInfo> MarketsFieldInfos; std::vector<FieldProcessInfo> AppsAndFeaturesEntryFieldInfos; std::vector<FieldProcessInfo> DocumentationFieldInfos; + std::vector<FieldProcessInfo> NestedInstallerFileFieldInfos; // These pointers are referenced in the processing functions in manifest field process info table. AppInstaller::Manifest::Manifest* m_p_manifest = nullptr; @@ -55,6 +56,7 @@ namespace AppInstaller::Manifest AppInstaller::Manifest::MarketsInfo* m_p_markets = nullptr; AppInstaller::Manifest::AppsAndFeaturesEntry* m_p_appsAndFeaturesEntry = nullptr; AppInstaller::Manifest::Documentation* m_p_documentation = nullptr; + AppInstaller::Manifest::NestedInstallerFile* m_p_nestedInstallerFile = nullptr; // Cache of Installers node and Localization node YAML::Node const* m_p_installersNode = nullptr; @@ -71,6 +73,7 @@ namespace AppInstaller::Manifest std::vector<FieldProcessInfo> GetMarketsFieldProcessInfo(const ManifestVer& manifestVersion); std::vector<FieldProcessInfo> GetAppsAndFeaturesEntryFieldProcessInfo(const ManifestVer& manifestVersion); std::vector<FieldProcessInfo> GetDocumentationFieldProcessInfo(const ManifestVer& manifestVersion); + std::vector<FieldProcessInfo> GetNestedInstallerFileFieldProcessInfo(const ManifestVer& manifestVersion); // This method takes YAML root node and list of manifest field info. // Yaml lib does not support case insensitive search and it allows duplicate keys. If duplicate keys exist, @@ -86,7 +89,8 @@ namespace AppInstaller::Manifest std::vector<ValidationError> ProcessMarketsNode(const YAML::Node& marketsNode); std::vector<ValidationError> ProcessAppsAndFeaturesEntriesNode(const YAML::Node& appsAndFeaturesEntriesNode); std::vector<ValidationError> ProcessExpectedReturnCodesNode(const YAML::Node& returnCodesNode); - std::vector<ValidationError> ProcessDocumentationsNode(const YAML::Node& documentations); + std::vector<ValidationError> ProcessDocumentationsNode(const YAML::Node& documentationsNode); + std::vector<ValidationError> ProcessNestedInstallerFilesNode(const YAML::Node& nestedInstallerFilesNode); std::vector<ValidationError> PopulateManifestInternal( const YAML::Node& rootNode,