Skip to content
Merged
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
70 changes: 61 additions & 9 deletions src/code/PSResourceInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -852,9 +852,9 @@ public static bool TryConvertFromContainerRegistryJson(
pkgVersion = ParseHttpVersion(versionValue, out string prereleaseLabel);
metadata["Version"] = pkgVersion;

if (rootDom.TryGetProperty("PrivateData", out JsonElement privateDataElement) && privateDataElement.TryGetProperty("PSData", out JsonElement psDataElement))
if (rootDom.TryGetProperty("PrivateData", out JsonElement versionPrivateDataElement) && versionPrivateDataElement.TryGetProperty("PSData", out JsonElement versionPSDataElement))
{
if (psDataElement.TryGetProperty("Prerelease", out JsonElement pkgPrereleaseLabelElement) && !String.IsNullOrEmpty(pkgPrereleaseLabelElement.ToString().Trim()))
if (versionPSDataElement.TryGetProperty("Prerelease", out JsonElement pkgPrereleaseLabelElement) && !String.IsNullOrEmpty(pkgPrereleaseLabelElement.ToString().Trim()))
{
prereleaseLabel = pkgPrereleaseLabelElement.ToString().Trim();
versionValue += $"-{prereleaseLabel}";
Expand Down Expand Up @@ -938,14 +938,19 @@ public static bool TryConvertFromContainerRegistryJson(
}

// Author
if (rootDom.TryGetProperty("Authors", out JsonElement authorsElement) || rootDom.TryGetProperty("authors", out authorsElement))
if (rootDom.TryGetProperty("Authors", out JsonElement authorsElement) || rootDom.TryGetProperty("authors", out authorsElement) || rootDom.TryGetProperty("Author", out authorsElement))
{
metadata["Authors"] = authorsElement.ToString();
}

// CompanyName
// CompanyName is not provided in v3 pkg metadata response, so we've just set it to the author,
// which is often the company
metadata["CompanyName"] = authorsElement.ToString();
if (rootDom.TryGetProperty("CompanyName", out JsonElement companyNameElement))
{
metadata["CompanyName"] = companyNameElement.ToString();
}
else
{
// if CompanyName property is not provided set it to the Author value which is often the same.
metadata["CompanyName"] = metadata["Authors"];
}

// Copyright
Expand Down Expand Up @@ -978,15 +983,62 @@ public static bool TryConvertFromContainerRegistryJson(
{
metadata["Dependencies"] = ParseContainerRegistryDependencies(moduleListDepsElement, out errorMsg).ToArray();
}
else if (rootDom.TryGetProperty("PrivateData", out JsonElement privateDataElement) && privateDataElement.TryGetProperty("PSData", out JsonElement psDataElement))
else if (rootDom.TryGetProperty("PrivateData", out JsonElement depsPrivateDataElement) && depsPrivateDataElement.TryGetProperty("PSData", out JsonElement depsPSDataElement))
{
if (psDataElement.TryGetProperty("ModuleList", out JsonElement privateDataModuleListDepsElement))
if (depsPSDataElement.TryGetProperty("ModuleList", out JsonElement privateDataModuleListDepsElement))
{
metadata["Dependencies"] = ParseContainerRegistryDependencies(privateDataModuleListDepsElement, out errorMsg).ToArray();
}
}
}

if (rootDom.TryGetProperty("PrivateData", out JsonElement privateDataElement) && privateDataElement.ValueKind == JsonValueKind.Object && privateDataElement.TryGetProperty("PSData", out JsonElement psDataElement))
{
// some properties that may be in PrivateData.PSData: LicenseUri, ProjectUri, IconUri, ReleaseNotes
if (!metadata.ContainsKey("LicenseUrl") && psDataElement.TryGetProperty("LicenseUri", out JsonElement psDataLicenseUriElement))
{
metadata["LicenseUrl"] = ParseHttpUrl(psDataLicenseUriElement.ToString()) as Uri;
}

if (!metadata.ContainsKey("ProjectUrl") && psDataElement.TryGetProperty("ProjectUri", out JsonElement psDataProjectUriElement))
{
metadata["ProjectUrl"] = ParseHttpUrl(psDataProjectUriElement.ToString()) as Uri;
}

if (!metadata.ContainsKey("IconUrl") && psDataElement.TryGetProperty("IconUri", out JsonElement psDataIconUriElement))
{
metadata["IconUrl"] = ParseHttpUrl(psDataIconUriElement.ToString()) as Uri;
}

if (!metadata.ContainsKey("ReleaseNotes") && psDataElement.TryGetProperty("ReleaseNotes", out JsonElement psDataReleaseNotesElement))
{
metadata["ReleaseNotes"] = psDataReleaseNotesElement.ToString();
}

if (!metadata.ContainsKey("Tags") && psDataElement.TryGetProperty("Tags", out JsonElement psDataTagsElement))
{
string[] pkgTags = Utils.EmptyStrArray;
if (psDataTagsElement.ValueKind == JsonValueKind.Array)
{
var arrayLength = psDataTagsElement.GetArrayLength();
List<string> tags = new List<string>(arrayLength);
foreach (var tag in psDataTagsElement.EnumerateArray())
{
tags.Add(tag.ToString());
}

pkgTags = tags.ToArray();
}
else if (psDataTagsElement.ValueKind == JsonValueKind.String)
{
string tagStr = psDataTagsElement.ToString();
pkgTags = tagStr.Split(Utils.WhitespaceSeparator, StringSplitOptions.RemoveEmptyEntries);
}

metadata["Tags"] = pkgTags;
}
}

var additionalMetadataHashtable = new Dictionary<string, string>
{
{ "NormalizedVersion", metadata["NormalizedVersion"].ToString() }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,16 @@ Describe 'Test HTTP Find-PSResource for ACR Server Protocol' -tags 'CI' {
$res.Dependencies.Length | Should -Be 1
$res.Dependencies[0].Name | Should -Be "Az.Accounts"
}

It "Should find resource and its associated author, licenseUri, projectUri, releaseNotes, etc properties" {
$res = Find-PSResource -Name "Az.Storage" -Version "8.0.0" -Repository $ACRRepoName
$res.Author | Should -Be "Microsoft Corporation"
$res.CompanyName | Should -Be "Microsoft Corporation"
$res.LicenseUri | Should -Be "https://aka.ms/azps-license"
$res.ProjectUri | Should -Be "https://github.com/Azure/azure-powershell"
$res.ReleaseNotes.Length | Should -Not -Be 0
$res.Tags.Length | Should -Be 5
}
}

Describe 'Test Find-PSResource for MAR Repository' -tags 'CI' {
Expand Down
Loading