diff --git a/.editorconfig b/.editorconfig index b4cda3b..cb3572c 100644 --- a/.editorconfig +++ b/.editorconfig @@ -50,4 +50,7 @@ dotnet_naming_symbols.public_members.applicable_kinds = property, field, method dotnet_naming_symbols.public_members.applicable_accessibilities = public dotnet_naming_symbols.public_members.required_modifiers = -dotnet_naming_style.public_uppercase_style.capitalization = pascal_case \ No newline at end of file +dotnet_naming_style.public_uppercase_style.capitalization = pascal_case + +# CA2007: Consider calling ConfigureAwait on the awaited task +dotnet_diagnostic.CA2007.severity = warning diff --git a/src/OrasProject.Oras/Packer.cs b/src/OrasProject.Oras/Packer.cs index f4816c2..7b9e08a 100644 --- a/src/OrasProject.Oras/Packer.cs +++ b/src/OrasProject.Oras/Packer.cs @@ -108,9 +108,9 @@ public static async Task PackManifestAsync( switch (version) { case ManifestVersion.Version1_0: - return await PackManifestV1_0Async(pusher, artifactType, options, cancellationToken); + return await PackManifestV1_0Async(pusher, artifactType, options, cancellationToken).ConfigureAwait(false); case ManifestVersion.Version1_1: - return await PackManifestV1_1Async(pusher, artifactType, options, cancellationToken); + return await PackManifestV1_1Async(pusher, artifactType, options, cancellationToken).ConfigureAwait(false); default: throw new NotSupportedException($"ManifestVersion({version}) is not supported"); } @@ -146,7 +146,7 @@ private static async Task PackManifestV1_0Async(IPushable pusher, st artifactType = MediaTypeUnknownConfig; } ValidateMediaType(artifactType); - configDescriptor = await PushCustomEmptyConfigAsync(pusher, artifactType, options.ConfigAnnotations, cancellationToken); + configDescriptor = await PushCustomEmptyConfigAsync(pusher, artifactType, options.ConfigAnnotations, cancellationToken).ConfigureAwait(false); } var annotations = EnsureAnnotationCreated(options.ManifestAnnotations, "org.opencontainers.image.created"); @@ -159,7 +159,7 @@ private static async Task PackManifestV1_0Async(IPushable pusher, st Annotations = annotations }; - return await PushManifestAsync(pusher, manifest, manifest.MediaType, manifest.Config.MediaType, manifest.Annotations, cancellationToken); + return await PushManifestAsync(pusher, manifest, manifest.MediaType, manifest.Config.MediaType, manifest.Annotations, cancellationToken).ConfigureAwait(false); } /// @@ -192,7 +192,7 @@ private static async Task PackManifestV1_1Async(IPushable pusher, st configDescriptor = Descriptor.Empty; options.Config = configDescriptor; var configBytes = new byte[] { 0x7B, 0x7D }; - await PushIfNotExistAsync(pusher, configDescriptor, configBytes, cancellationToken); + await PushIfNotExistAsync(pusher, configDescriptor, configBytes, cancellationToken).ConfigureAwait(false); } if (options.Layers == null || options.Layers.Count == 0) @@ -215,7 +215,7 @@ private static async Task PackManifestV1_1Async(IPushable pusher, st Annotations = annotations }; - return await PushManifestAsync(pusher, manifest, manifest.MediaType, manifest.ArtifactType, manifest.Annotations, cancellationToken); + return await PushManifestAsync(pusher, manifest, manifest.MediaType, manifest.ArtifactType, manifest.Annotations, cancellationToken).ConfigureAwait(false); } /// @@ -235,7 +235,7 @@ private static async Task PushManifestAsync(IPushable pusher, object manifestDesc.ArtifactType = artifactType; manifestDesc.Annotations = annotations; - await pusher.PushAsync(manifestDesc, new MemoryStream(manifestJson), cancellationToken); + await pusher.PushAsync(manifestDesc, new MemoryStream(manifestJson), cancellationToken).ConfigureAwait(false); return manifestDesc; } @@ -266,7 +266,7 @@ private static async Task PushCustomEmptyConfigAsync(IPushable pushe var configDescriptor = Descriptor.Create(configBytes, mediaType); configDescriptor.Annotations = annotations; - await PushIfNotExistAsync(pusher, configDescriptor, configBytes, cancellationToken); + await PushIfNotExistAsync(pusher, configDescriptor, configBytes, cancellationToken).ConfigureAwait(false); return configDescriptor; } @@ -280,7 +280,7 @@ private static async Task PushCustomEmptyConfigAsync(IPushable pushe /// private static async Task PushIfNotExistAsync(IPushable pusher, Descriptor descriptor, byte[] data, CancellationToken cancellationToken = default) { - await pusher.PushAsync(descriptor, new MemoryStream(data), cancellationToken); + await pusher.PushAsync(descriptor, new MemoryStream(data), cancellationToken).ConfigureAwait(false); } /// diff --git a/src/OrasProject.Oras/Registry/Remote/BlobStore.cs b/src/OrasProject.Oras/Registry/Remote/BlobStore.cs index d5bba1b..389830a 100644 --- a/src/OrasProject.Oras/Registry/Remote/BlobStore.cs +++ b/src/OrasProject.Oras/Registry/Remote/BlobStore.cs @@ -148,7 +148,7 @@ public async Task PushAsync(Descriptor expected, Stream content, CancellationTok url = location.IsAbsoluteUri ? location : new Uri(url, location); } - await CompletePushAsync(url, expected, content, cancellationToken); + await CompletePushAsync(url, expected, content, cancellationToken).ConfigureAwait(false); } /// @@ -255,7 +255,8 @@ async Task GetContentStream() return stream; } - await using (var contents = await GetContentStream()) + var contents = await GetContentStream().ConfigureAwait(false); + await using (contents.ConfigureAwait(false)) { await CompletePushAsync(url, descriptor, contents, cancellationToken).ConfigureAwait(false); } diff --git a/tests/OrasProject.Oras.Tests/OrasProject.Oras.Tests.csproj b/tests/OrasProject.Oras.Tests/OrasProject.Oras.Tests.csproj index f71d4cd..d64eb09 100644 --- a/tests/OrasProject.Oras.Tests/OrasProject.Oras.Tests.csproj +++ b/tests/OrasProject.Oras.Tests/OrasProject.Oras.Tests.csproj @@ -6,6 +6,9 @@ enable false + + + CA2007