@@ -243,7 +243,7 @@ public override FindResults FindVersion(string packageName, string version, Reso
243
243
244
244
return new FindResults ( stringResponse : Utils . EmptyStrArray , hashtableResponse : emptyHashResponses , responseType : acrFindResponseType ) ;
245
245
}
246
-
246
+
247
247
_cmdletPassedIn . WriteDebug ( $ "'{ packageName } ' version parsed as '{ requiredVersion } '") ;
248
248
bool includePrereleaseVersions = requiredVersion . IsPrerelease ;
249
249
@@ -563,124 +563,140 @@ internal Hashtable GetACRMetadata(string registry, string packageName, string ex
563
563
* }
564
564
*/
565
565
566
- Tuple < string , string > metadataTuple = GetMetadataProperty ( foundTags , packageName , out Exception exception ) ;
566
+ var serverPkgInfo = GetMetadataProperty ( foundTags , packageName , out Exception exception ) ;
567
567
if ( exception != null )
568
568
{
569
- errRecord = new ErrorRecord ( exception , "FindNameFailure " , ErrorCategory . InvalidResult , this ) ;
569
+ errRecord = new ErrorRecord ( exception , "ParseMetadataFailure " , ErrorCategory . InvalidResult , this ) ;
570
570
571
571
return requiredVersionResponse ;
572
572
}
573
573
574
- string metadataPkgName = metadataTuple . Item1 ;
575
- string metadata = metadataTuple . Item2 ;
576
- string pkgVersionString = String . Empty ;
577
- using ( JsonDocument metadataJSONDoc = JsonDocument . Parse ( metadata ) )
574
+ try
578
575
{
579
- JsonElement rootDom = metadataJSONDoc . RootElement ;
580
- if ( rootDom . TryGetProperty ( "ModuleVersion" , out JsonElement pkgVersionElement ) )
576
+ using ( JsonDocument metadataJSONDoc = JsonDocument . Parse ( serverPkgInfo . Metadata ) )
581
577
{
582
- // module metadata will have "ModuleVersion" property
583
- pkgVersionString = pkgVersionElement . ToString ( ) ;
584
- if ( rootDom . TryGetProperty ( "PrivateData" , out JsonElement pkgPrivateDataElement ) && pkgPrivateDataElement . TryGetProperty ( "PSData" , out JsonElement pkgPSDataElement )
585
- && pkgPSDataElement . TryGetProperty ( "Prerelease" , out JsonElement pkgPrereleaseLabelElement ) && ! String . IsNullOrEmpty ( pkgPrereleaseLabelElement . ToString ( ) . Trim ( ) ) )
578
+ string pkgVersionString = String . Empty ;
579
+ JsonElement rootDom = metadataJSONDoc . RootElement ;
580
+ if ( rootDom . TryGetProperty ( "ModuleVersion" , out JsonElement pkgVersionElement ) )
586
581
{
587
- pkgVersionString += $ "-{ pkgPrereleaseLabelElement . ToString ( ) } ";
582
+ // module metadata will have "ModuleVersion" property
583
+ pkgVersionString = pkgVersionElement . ToString ( ) ;
584
+ if ( rootDom . TryGetProperty ( "PrivateData" , out JsonElement pkgPrivateDataElement ) && pkgPrivateDataElement . TryGetProperty ( "PSData" , out JsonElement pkgPSDataElement )
585
+ && pkgPSDataElement . TryGetProperty ( "Prerelease" , out JsonElement pkgPrereleaseLabelElement ) && ! String . IsNullOrEmpty ( pkgPrereleaseLabelElement . ToString ( ) . Trim ( ) ) )
586
+ {
587
+ pkgVersionString += $ "-{ pkgPrereleaseLabelElement . ToString ( ) } ";
588
+ }
588
589
}
589
- }
590
- else if ( rootDom . TryGetProperty ( "Version" , out pkgVersionElement ) )
591
- {
592
- // script metadata will have "Version" property
593
- pkgVersionString = pkgVersionElement . ToString ( ) ;
594
- }
595
- else
596
- {
597
- errRecord = new ErrorRecord (
598
- new InvalidOrEmptyResponse ( $ "Response does not contain 'ModuleVersion' or 'Version' property in metadata for package '{ packageName } ' in '{ Repository . Name } '.") ,
599
- "FindNameFailure" ,
600
- ErrorCategory . InvalidResult ,
601
- this ) ;
590
+ else if ( rootDom . TryGetProperty ( "Version" , out pkgVersionElement ) )
591
+ {
592
+ // script metadata will have "Version" property
593
+ pkgVersionString = pkgVersionElement . ToString ( ) ;
594
+ }
595
+ else
596
+ {
597
+ errRecord = new ErrorRecord (
598
+ new InvalidOrEmptyResponse ( $ "Response does not contain 'ModuleVersion' or 'Version' property in metadata for package '{ packageName } ' in '{ Repository . Name } '.") ,
599
+ "ParseMetadataFailure" ,
600
+ ErrorCategory . InvalidResult ,
601
+ this ) ;
602
602
603
- return requiredVersionResponse ;
604
- }
603
+ return requiredVersionResponse ;
604
+ }
605
605
606
- if ( ! NuGetVersion . TryParse ( pkgVersionString , out NuGetVersion pkgVersion ) )
607
- {
608
- errRecord = new ErrorRecord (
609
- new ArgumentException ( $ "Version { pkgVersionString } to be parsed from metadata is not a valid NuGet version.") ,
610
- "FindNameFailure ",
611
- ErrorCategory . InvalidArgument ,
612
- this ) ;
606
+ if ( ! NuGetVersion . TryParse ( pkgVersionString , out NuGetVersion pkgVersion ) )
607
+ {
608
+ errRecord = new ErrorRecord (
609
+ new ArgumentException ( $ "Version { pkgVersionString } to be parsed from metadata is not a valid NuGet version.") ,
610
+ "ParseMetadataFailure ",
611
+ ErrorCategory . InvalidArgument ,
612
+ this ) ;
613
613
614
- return requiredVersionResponse ;
615
- }
614
+ return requiredVersionResponse ;
615
+ }
616
616
617
- if ( ! NuGetVersion . TryParse ( exactTagVersion , out NuGetVersion requiredVersion ) )
618
- {
619
- errRecord = new ErrorRecord (
620
- new ArgumentException ( $ "Version { exactTagVersion } to be parsed from method input is not a valid NuGet version.") ,
621
- "FindNameFailure ",
622
- ErrorCategory . InvalidArgument ,
623
- this ) ;
617
+ if ( ! NuGetVersion . TryParse ( exactTagVersion , out NuGetVersion requiredVersion ) )
618
+ {
619
+ errRecord = new ErrorRecord (
620
+ new ArgumentException ( $ "Version { exactTagVersion } to be parsed from method input is not a valid NuGet version.") ,
621
+ "ParseMetadataFailure ",
622
+ ErrorCategory . InvalidArgument ,
623
+ this ) ;
624
624
625
- return requiredVersionResponse ;
626
- }
625
+ return requiredVersionResponse ;
626
+ }
627
627
628
- _cmdletPassedIn . WriteDebug ( $ "'{ packageName } ' version parsed as '{ pkgVersion } '") ;
629
- if ( pkgVersion . ToNormalizedString ( ) == requiredVersion . ToNormalizedString ( ) )
630
- {
631
- requiredVersionResponse . Add ( metadataPkgName , metadata ) ;
628
+ _cmdletPassedIn . WriteDebug ( $ "'{ packageName } ' version parsed as '{ pkgVersion } '") ;
629
+ if ( pkgVersion . ToNormalizedString ( ) == requiredVersion . ToNormalizedString ( ) )
630
+ {
631
+ requiredVersionResponse = serverPkgInfo . ToHashtable ( ) ;
632
+ }
632
633
}
633
634
}
635
+ catch ( Exception e )
636
+ {
637
+ errRecord = new ErrorRecord (
638
+ new ArgumentException ( $ "Error parsing server metadata: { e . Message } ") ,
639
+ "ParseMetadataFailure" ,
640
+ ErrorCategory . InvalidData ,
641
+ this ) ;
642
+
643
+ return requiredVersionResponse ;
644
+ }
634
645
635
646
return requiredVersionResponse ;
636
647
}
637
648
638
- internal Tuple < string , string > GetMetadataProperty ( JObject foundTags , string packageName , out Exception exception )
649
+ internal ContainerRegistryInfo GetMetadataProperty ( JObject foundTags , string packageName , out Exception exception )
639
650
{
640
651
exception = null ;
641
- var emptyTuple = new Tuple < string , string > ( string . Empty , string . Empty ) ;
652
+ ContainerRegistryInfo serverPkgInfo = null ;
642
653
var layers = foundTags [ "layers" ] ;
643
654
if ( layers == null || layers [ 0 ] == null )
644
655
{
645
656
exception = new InvalidOrEmptyResponse ( $ "Response does not contain 'layers' element in manifest for package '{ packageName } ' in '{ Repository . Name } '.") ;
646
657
647
- return emptyTuple ;
658
+ return serverPkgInfo ;
648
659
}
649
660
650
661
var annotations = layers [ 0 ] [ "annotations" ] ;
651
662
if ( annotations == null )
652
663
{
653
664
exception = new InvalidOrEmptyResponse ( $ "Response does not contain 'annotations' element in manifest for package '{ packageName } ' in '{ Repository . Name } '.") ;
654
665
655
- return emptyTuple ;
666
+ return serverPkgInfo ;
656
667
}
657
668
658
- if ( annotations [ "metadata" ] == null )
669
+ // Check for package name
670
+ var pkgTitleJToken = annotations [ "org.opencontainers.image.title" ] ;
671
+ if ( pkgTitleJToken == null )
659
672
{
660
- exception = new InvalidOrEmptyResponse ( $ "Response does not contain 'metadata ' element in manifest for package '{ packageName } ' in '{ Repository . Name } '.") ;
673
+ exception = new InvalidOrEmptyResponse ( $ "Response does not contain 'org.opencontainers.image.title ' element for package '{ packageName } ' in '{ Repository . Name } '.") ;
661
674
662
- return emptyTuple ;
675
+ return serverPkgInfo ;
663
676
}
664
-
665
- var metadata = annotations [ "metadata" ] . ToString ( ) ;
666
-
667
- var metadataPkgTitleJToken = annotations [ "org.opencontainers.image.title" ] ;
668
- if ( metadataPkgTitleJToken == null )
677
+ string metadataPkgName = pkgTitleJToken . ToString ( ) ;
678
+ if ( string . IsNullOrWhiteSpace ( metadataPkgName ) )
669
679
{
670
- exception = new InvalidOrEmptyResponse ( $ "Response does not contain 'org.opencontainers.image.title' element for package '{ packageName } ' in '{ Repository . Name } '.") ;
680
+ exception = new InvalidOrEmptyResponse ( $ "Response element 'org.opencontainers.image.title' is empty for package '{ packageName } ' in '{ Repository . Name } '.") ;
671
681
672
- return emptyTuple ;
682
+ return serverPkgInfo ;
673
683
}
674
684
675
- string metadataPkgName = metadataPkgTitleJToken . ToString ( ) ;
676
- if ( string . IsNullOrWhiteSpace ( metadataPkgName ) )
685
+ // Check for package metadata
686
+ var pkgMetadataJToken = annotations [ "metadata" ] ;
687
+ if ( pkgMetadataJToken == null )
677
688
{
678
- exception = new InvalidOrEmptyResponse ( $ "Response element 'org.opencontainers.image.title' is empty for package '{ packageName } ' in '{ Repository . Name } '.") ;
689
+ exception = new InvalidOrEmptyResponse ( $ "Response does not contain 'metadata' element in manifest for package '{ packageName } ' in '{ Repository . Name } '.") ;
679
690
680
- return emptyTuple ;
691
+ return serverPkgInfo ;
681
692
}
693
+ var metadata = pkgMetadataJToken . ToString ( ) ;
694
+
695
+ // Check for package artifact type
696
+ var resourceTypeJToken = annotations [ "resourceType" ] ;
697
+ var resourceType = resourceTypeJToken != null ? resourceTypeJToken . ToString ( ) : string . Empty ;
682
698
683
- return new Tuple < string , string > ( metadataPkgName , metadata ) ;
699
+ return new ContainerRegistryInfo ( metadataPkgName , metadata , resourceType ) ;
684
700
}
685
701
686
702
internal JObject FindAcrManifest ( string registry , string packageName , string version , string acrAccessToken , out ErrorRecord errRecord )
@@ -1026,7 +1042,7 @@ internal bool PushNupkgACR(string psd1OrPs1File, string outputNupkgDir, string p
1026
1042
}
1027
1043
1028
1044
// Create and upload manifest
1029
- TryCreateAndUploadManifest ( fullNupkgFile , nupkgDigest , configDigest , pkgName , resourceType , metadataJson , configFilePath ,
1045
+ TryCreateAndUploadManifest ( fullNupkgFile , nupkgDigest , configDigest , pkgName , resourceType , metadataJson , configFilePath ,
1030
1046
pkgNameLower , pkgVersion , acrAccessToken ) ;
1031
1047
1032
1048
return true ;
@@ -1172,7 +1188,7 @@ private string CreateManifestContent(
1172
1188
jsonWriter . WriteValue ( fileName ) ;
1173
1189
jsonWriter . WritePropertyName ( "metadata" ) ;
1174
1190
jsonWriter . WriteValue ( metadata ) ;
1175
- jsonWriter . WritePropertyName ( "artifactType " ) ;
1191
+ jsonWriter . WritePropertyName ( "resourceType " ) ;
1176
1192
jsonWriter . WriteValue ( resourceType . ToString ( ) ) ;
1177
1193
jsonWriter . WriteEndObject ( ) ; // end of annotations object
1178
1194
@@ -1295,7 +1311,7 @@ private Hashtable[] FindPackagesWithVersionHelper(string packageName, VersionTyp
1295
1311
1296
1312
var pkgsInDescendingOrder = sortedQualifyingPkgs . Reverse ( ) ;
1297
1313
1298
- foreach ( var pkgVersionTag in pkgsInDescendingOrder )
1314
+ foreach ( var pkgVersionTag in pkgsInDescendingOrder )
1299
1315
{
1300
1316
string exactTagVersion = pkgVersionTag . Value . ToString ( ) ;
1301
1317
Hashtable metadata = GetACRMetadata ( Registry , packageNameLowercase , exactTagVersion , acrAccessToken , out errRecord ) ;
@@ -1310,7 +1326,7 @@ private Hashtable[] FindPackagesWithVersionHelper(string packageName, VersionTyp
1310
1326
// getOnlyLatest will be true for FindName(), as only the latest criteria satisfying version should be returned
1311
1327
break ;
1312
1328
}
1313
- }
1329
+ }
1314
1330
1315
1331
return latestVersionResponse . ToArray ( ) ;
1316
1332
}
0 commit comments