Skip to content

Commit ba53100

Browse files
committed
Get metadata properties when finding a PSResource from a ContainerRegistry
1 parent 2a8c2e4 commit ba53100

File tree

2 files changed

+71
-9
lines changed

2 files changed

+71
-9
lines changed

src/code/PSResourceInfo.cs

Lines changed: 61 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -852,9 +852,9 @@ public static bool TryConvertFromContainerRegistryJson(
852852
pkgVersion = ParseHttpVersion(versionValue, out string prereleaseLabel);
853853
metadata["Version"] = pkgVersion;
854854

855-
if (rootDom.TryGetProperty("PrivateData", out JsonElement privateDataElement) && privateDataElement.TryGetProperty("PSData", out JsonElement psDataElement))
855+
if (rootDom.TryGetProperty("PrivateData", out JsonElement versionPrivateDataElement) && versionPrivateDataElement.TryGetProperty("PSData", out JsonElement versionPSDataElement))
856856
{
857-
if (psDataElement.TryGetProperty("Prerelease", out JsonElement pkgPrereleaseLabelElement) && !String.IsNullOrEmpty(pkgPrereleaseLabelElement.ToString().Trim()))
857+
if (versionPSDataElement.TryGetProperty("Prerelease", out JsonElement pkgPrereleaseLabelElement) && !String.IsNullOrEmpty(pkgPrereleaseLabelElement.ToString().Trim()))
858858
{
859859
prereleaseLabel = pkgPrereleaseLabelElement.ToString().Trim();
860860
versionValue += $"-{prereleaseLabel}";
@@ -938,14 +938,19 @@ public static bool TryConvertFromContainerRegistryJson(
938938
}
939939

940940
// Author
941-
if (rootDom.TryGetProperty("Authors", out JsonElement authorsElement) || rootDom.TryGetProperty("authors", out authorsElement))
941+
if (rootDom.TryGetProperty("Authors", out JsonElement authorsElement) || rootDom.TryGetProperty("authors", out authorsElement) || rootDom.TryGetProperty("Author", out authorsElement))
942942
{
943943
metadata["Authors"] = authorsElement.ToString();
944+
}
944945

945-
// CompanyName
946-
// CompanyName is not provided in v3 pkg metadata response, so we've just set it to the author,
947-
// which is often the company
948-
metadata["CompanyName"] = authorsElement.ToString();
946+
if (rootDom.TryGetProperty("CompanyName", out JsonElement companyNameElement))
947+
{
948+
metadata["CompanyName"] = companyNameElement.ToString();
949+
}
950+
else
951+
{
952+
// if CompanyName property is not provided set it to the Author value which is often the same.
953+
metadata["CompanyName"] = metadata["Authors"];
949954
}
950955

951956
// Copyright
@@ -978,15 +983,62 @@ public static bool TryConvertFromContainerRegistryJson(
978983
{
979984
metadata["Dependencies"] = ParseContainerRegistryDependencies(moduleListDepsElement, out errorMsg).ToArray();
980985
}
981-
else if (rootDom.TryGetProperty("PrivateData", out JsonElement privateDataElement) && privateDataElement.TryGetProperty("PSData", out JsonElement psDataElement))
986+
else if (rootDom.TryGetProperty("PrivateData", out JsonElement depsPrivateDataElement) && depsPrivateDataElement.TryGetProperty("PSData", out JsonElement depsPSDataElement))
982987
{
983-
if (psDataElement.TryGetProperty("ModuleList", out JsonElement privateDataModuleListDepsElement))
988+
if (depsPSDataElement.TryGetProperty("ModuleList", out JsonElement privateDataModuleListDepsElement))
984989
{
985990
metadata["Dependencies"] = ParseContainerRegistryDependencies(privateDataModuleListDepsElement, out errorMsg).ToArray();
986991
}
987992
}
988993
}
989994

995+
if (rootDom.TryGetProperty("PrivateData", out JsonElement privateDataElement) && privateDataElement.ValueKind == JsonValueKind.Object && privateDataElement.TryGetProperty("PSData", out JsonElement psDataElement))
996+
{
997+
// some properties that may be in PrivateData.PSData: LicenseUri, ProjectUri, IconUri, ReleaseNotes
998+
if (!metadata.ContainsKey("LicenseUrl") && psDataElement.TryGetProperty("LicenseUri", out JsonElement psDataLicenseUriElement))
999+
{
1000+
metadata["LicenseUrl"] = ParseHttpUrl(psDataLicenseUriElement.ToString()) as Uri;
1001+
}
1002+
1003+
if (!metadata.ContainsKey("ProjectUrl") && psDataElement.TryGetProperty("ProjectUri", out JsonElement psDataProjectUriElement))
1004+
{
1005+
metadata["ProjectUrl"] = ParseHttpUrl(psDataProjectUriElement.ToString()) as Uri;
1006+
}
1007+
1008+
if (!metadata.ContainsKey("IconUrl") && psDataElement.TryGetProperty("IconUri", out JsonElement psDataIconUriElement))
1009+
{
1010+
metadata["IconUrl"] = ParseHttpUrl(psDataIconUriElement.ToString()) as Uri;
1011+
}
1012+
1013+
if (!metadata.ContainsKey("ReleaseNotes") && psDataElement.TryGetProperty("ReleaseNotes", out JsonElement psDataReleaseNotesElement))
1014+
{
1015+
metadata["ReleaseNotes"] = psDataReleaseNotesElement.ToString();
1016+
}
1017+
1018+
if (!metadata.ContainsKey("Tags") && psDataElement.TryGetProperty("Tags", out JsonElement psDataTagsElement))
1019+
{
1020+
string[] pkgTags = Utils.EmptyStrArray;
1021+
if (psDataTagsElement.ValueKind == JsonValueKind.Array)
1022+
{
1023+
var arrayLength = psDataTagsElement.GetArrayLength();
1024+
List<string> tags = new List<string>(arrayLength);
1025+
foreach (var tag in psDataTagsElement.EnumerateArray())
1026+
{
1027+
tags.Add(tag.ToString());
1028+
}
1029+
1030+
pkgTags = tags.ToArray();
1031+
}
1032+
else if (psDataTagsElement.ValueKind == JsonValueKind.String)
1033+
{
1034+
string tagStr = psDataTagsElement.ToString();
1035+
pkgTags = tagStr.Split(Utils.WhitespaceSeparator, StringSplitOptions.RemoveEmptyEntries);
1036+
}
1037+
1038+
metadata["Tags"] = pkgTags;
1039+
}
1040+
}
1041+
9901042
var additionalMetadataHashtable = new Dictionary<string, string>
9911043
{
9921044
{ "NormalizedVersion", metadata["NormalizedVersion"].ToString() }

test/FindPSResourceTests/FindPSResourceContainerRegistryServer.Tests.ps1

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,16 @@ Describe 'Test HTTP Find-PSResource for ACR Server Protocol' -tags 'CI' {
252252
$res.Dependencies.Length | Should -Be 1
253253
$res.Dependencies[0].Name | Should -Be "Az.Accounts"
254254
}
255+
256+
It "Should find resource and its associated author, licenseUri, projectUri, releaseNotes, etc properties" {
257+
$res = Find-PSResource -Name "Az.Storage" -Version "8.0.0" -Repository $ACRRepoName
258+
$res.Author | Should -Be "Microsoft Corporation"
259+
$res.CompanyName | Should -Be "Microsoft Corporation"
260+
$res.LicenseUri | Should -Be "https://aka.ms/azps-license"
261+
$res.ProjectUri | Should -Be "https://github.com/Azure/azure-powershell"
262+
$res.ReleaseNotes.Length | Should -Not -Be 0
263+
$res.Tags.Length | Should -Be 5
264+
}
255265
}
256266

257267
Describe 'Test Find-PSResource for MAR Repository' -tags 'CI' {

0 commit comments

Comments
 (0)