Skip to content

Commit 72b4bf0

Browse files
Surayya Huseyn ZadaSurayya Huseyn Zada
authored andcommitted
optimize ParseImages in CreateImageIndex
1 parent 63847ba commit 72b4bf0

File tree

5 files changed

+24
-30
lines changed

5 files changed

+24
-30
lines changed

src/Containers/Microsoft.NET.Build.Containers/BuiltImage.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@ internal readonly struct BuiltImage
1616
/// <summary>
1717
/// Gets image digest.
1818
/// </summary>
19-
internal required string ImageDigest { get; init; }
19+
internal string? ImageDigest { get; init; }
2020

2121
/// <summary>
2222
/// Gets image SHA.
2323
/// </summary>
24-
internal required string ImageSha { get; init; }
24+
internal string? ImageSha { get; init; }
2525

2626
/// <summary>
2727
/// Gets image manifest.

src/Containers/Microsoft.NET.Build.Containers/LocalDaemons/DockerCli.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ private static async Task WriteDockerImageToStreamAsync(
311311
await WriteImageLayers(writer, image, sourceReference, d => $"{d.Substring("sha256:".Length)}/layer.tar", cancellationToken, layerTarballPaths)
312312
.ConfigureAwait(false);
313313

314-
string configTarballPath = $"{image.ImageSha}.json";
314+
string configTarballPath = $"{image.ImageSha!}.json";
315315
await WriteImageConfig(writer, image, configTarballPath, cancellationToken)
316316
.ConfigureAwait(false);
317317

@@ -492,7 +492,7 @@ private static async Task WriteOciImageToBlobs(
492492
await WriteImageLayers(writer, image, sourceReference, d => $"{_blobsPath}/{d.Substring("sha256:".Length)}", cancellationToken)
493493
.ConfigureAwait(false);
494494

495-
await WriteImageConfig(writer, image, $"{_blobsPath}/{image.ImageSha}", cancellationToken)
495+
await WriteImageConfig(writer, image, $"{_blobsPath}/{image.ImageSha!}", cancellationToken)
496496
.ConfigureAwait(false);
497497

498498
await WriteManifestForOciImage(writer, image, cancellationToken)

src/Containers/Microsoft.NET.Build.Containers/Registry/Registry.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -595,7 +595,7 @@ private async Task PushAsync(BuiltImage builtImage, SourceImageReference source,
595595
cancellationToken.ThrowIfCancellationRequested();
596596
using (MemoryStream stringStream = new MemoryStream(Encoding.UTF8.GetBytes(builtImage.Config)))
597597
{
598-
var configDigest = builtImage.ImageDigest;
598+
var configDigest = builtImage.ImageDigest!;
599599
_logger.LogInformation(Strings.Registry_ConfigUploadStarted, configDigest);
600600
await UploadBlobAsync(destination.Repository, configDigest, stringStream, cancellationToken).ConfigureAwait(false);
601601
_logger.LogInformation(Strings.Registry_ConfigUploaded);

src/Containers/Microsoft.NET.Build.Containers/Tasks/CreateImageIndex.cs

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -108,19 +108,27 @@ private BuiltImage[] ParseImages(DestinationImageReferenceKind destinationKind)
108108
break;
109109
}
110110

111-
var manifestV2 = JsonSerializer.Deserialize<ManifestV2>(manifest);
112-
if (manifestV2 == null)
113-
{
114-
Log.LogError(Strings.InvalidImageManifest);
115-
break;
116-
}
117-
118-
string imageDigest = manifestV2.Config.digest;
119-
string imageSha = DigestUtils.GetShaFromDigest(imageDigest);
120-
// We don't need layers for remote registry, as the individual images should be pushed already
121-
var layers = destinationKind == DestinationImageReferenceKind.RemoteRegistry ? null : manifestV2.Layers;
122111
(string architecture, string os) = GetArchitectureAndOsFromConfig(config);
123112

113+
// We don't need ImageDigest, ImageSha, Layers for remote registry, as the individual images should be pushed already
114+
string? imageDigest = null;
115+
string? imageSha = null;
116+
List<ManifestLayer>? layers = null;
117+
118+
if (destinationKind == DestinationImageReferenceKind.LocalRegistry)
119+
{
120+
var manifestV2 = JsonSerializer.Deserialize<ManifestV2>(manifest);
121+
if (manifestV2 == null)
122+
{
123+
Log.LogError(Strings.InvalidImageManifest);
124+
break;
125+
}
126+
127+
imageDigest = manifestV2.Config.digest;
128+
imageSha = DigestUtils.GetShaFromDigest(imageDigest);
129+
layers = manifestV2.Layers;
130+
}
131+
124132
images[i] = new BuiltImage()
125133
{
126134
Config = config,

src/Tests/Microsoft.NET.Build.Containers.UnitTests/ImageIndexGeneratorTests.cs

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,6 @@ public void UnsupportedMediaTypeThrows()
3131
new BuiltImage
3232
{
3333
Config = "",
34-
ImageDigest = "",
35-
ImageSha = "",
3634
Manifest = "",
3735
ManifestDigest = "",
3836
ManifestMediaType = "unsupported"
@@ -53,17 +51,13 @@ public void ImagesWithMixedMediaTypes(string supportedMediaType)
5351
new BuiltImage
5452
{
5553
Config = "",
56-
ImageDigest = "",
57-
ImageSha = "",
5854
Manifest = "",
5955
ManifestDigest = "",
6056
ManifestMediaType = supportedMediaType,
6157
},
6258
new BuiltImage
6359
{
6460
Config = "",
65-
ImageDigest = "",
66-
ImageSha = "",
6761
Manifest = "",
6862
ManifestDigest = "",
6963
ManifestMediaType = "anotherMediaType"
@@ -82,8 +76,6 @@ public void GenerateDockerManifestList()
8276
new BuiltImage
8377
{
8478
Config = "",
85-
ImageDigest = "",
86-
ImageSha = "",
8779
Manifest = "123",
8880
ManifestDigest = "sha256:digest1",
8981
ManifestMediaType = SchemaTypes.DockerManifestV2,
@@ -93,8 +85,6 @@ public void GenerateDockerManifestList()
9385
new BuiltImage
9486
{
9587
Config = "",
96-
ImageDigest = "",
97-
ImageSha = "",
9888
Manifest = "123",
9989
ManifestDigest = "sha256:digest2",
10090
ManifestMediaType = SchemaTypes.DockerManifestV2,
@@ -116,8 +106,6 @@ public void GenerateOciImageIndex()
116106
new BuiltImage
117107
{
118108
Config = "",
119-
ImageDigest = "",
120-
ImageSha = "",
121109
Manifest = "123",
122110
ManifestDigest = "sha256:digest1",
123111
ManifestMediaType = SchemaTypes.OciManifestV1,
@@ -127,8 +115,6 @@ public void GenerateOciImageIndex()
127115
new BuiltImage
128116
{
129117
Config = "",
130-
ImageDigest = "",
131-
ImageSha = "",
132118
Manifest = "123",
133119
ManifestDigest = "sha256:digest2",
134120
ManifestMediaType = SchemaTypes.OciManifestV1,

0 commit comments

Comments
 (0)