diff --git a/eng/jacoco-test-coverage/pom.xml b/eng/jacoco-test-coverage/pom.xml index 9dc892af27d4..719120b82e34 100644 --- a/eng/jacoco-test-coverage/pom.xml +++ b/eng/jacoco-test-coverage/pom.xml @@ -103,7 +103,7 @@ com.azure azure-containers-containerregistry - 1.1.0-beta.5 + 1.1.0 com.azure diff --git a/eng/versioning/version_client.txt b/eng/versioning/version_client.txt index 40330bcb2baa..c434d9a91d5a 100644 --- a/eng/versioning/version_client.txt +++ b/eng/versioning/version_client.txt @@ -71,7 +71,7 @@ com.azure:azure-communication-phonenumbers;1.1.1;1.2.0-beta.1 com.azure:azure-communication-networktraversal;1.1.0-beta.2;1.1.0-beta.3 com.azure:azure-communication-jobrouter;1.0.0-beta.1;1.0.0-beta.1 com.azure:azure-communication-rooms;1.0.0-beta.2;1.0.0-beta.3 -com.azure:azure-containers-containerregistry;1.0.14;1.1.0-beta.5 +com.azure:azure-containers-containerregistry;1.0.14;1.1.0 com.azure:azure-containers-containerregistry-perf;1.0.0-beta.1;1.0.0-beta.1 com.azure:azure-core;1.39.0;1.40.0-beta.1 com.azure:azure-core-amqp;2.8.5;2.9.0-beta.1 diff --git a/sdk/containerregistry/azure-containers-containerregistry-perf/pom.xml b/sdk/containerregistry/azure-containers-containerregistry-perf/pom.xml index b7e10248b95c..7876c9030365 100644 --- a/sdk/containerregistry/azure-containers-containerregistry-perf/pom.xml +++ b/sdk/containerregistry/azure-containers-containerregistry-perf/pom.xml @@ -25,7 +25,7 @@ com.azure azure-containers-containerregistry - 1.1.0-beta.5 + 1.1.0 com.azure diff --git a/sdk/containerregistry/azure-containers-containerregistry/CHANGELOG.md b/sdk/containerregistry/azure-containers-containerregistry/CHANGELOG.md index c39cf9aa9e79..4ccc878f6b6f 100644 --- a/sdk/containerregistry/azure-containers-containerregistry/CHANGELOG.md +++ b/sdk/containerregistry/azure-containers-containerregistry/CHANGELOG.md @@ -1,16 +1,25 @@ # Release History -## 1.1.0-beta.5 (Unreleased) +## 1.1.0 (2023-05-11) -### Features Added +### Features added from version 1.0.14 +- Added `ContainerRegistryContentClient` and `ContainerRegistryAsyncContentClient` classes that allow to upload and download images to Azure Container Registry. ### Breaking Changes from version 1.1.0-beta.4 +- Added sanity check for manifest size at download time - if manifest is bigger than 4MB, `ServiceResponseException` will be thrown. Previously no exception was thrown. +- Added sanity check for `Content-Length` header presence on the response when downloading blobs - if it's not present, `ServiceResponseException` will be thrown. + Previously, content was buffered and no exception was thrown. +- Renamed `ManifestMediaType.OCI_MANIFEST` to `ManifestMediaType.OCI_IMAGE_MANIFEST`. -- Added sanity check for manifest size at download time - if manifest is bigger than 4MB, `ServiceResponseException` will be thrown. +- There are no breaking changes from previous stable version. -### Bugs Fixed +### Other changes from version 1.0.14 +- `ContainerRegistryAudience.AZURE_RESOURCE_MANAGER_GERMANY` is deprecated following [Azure Germany cloud deprecation](https://learn.microsoft.com/azure/cloud-adoption-framework/migrate/azure-best-practices/multiple-regions) +- Default constructors on following classes were deprecated: `ArtifactManifestPlatform`, `ArtifactManifestOrder`, `ArtifactOperatingSystem`, `ArtifactTagOrder`, `ArtifactManifestPlatform`. -### Other Changes +#### Dependency Updates +- Upgraded `azure-core-http-netty` from `1.13.2` to version `1.13.3`. +- Upgraded `azure-core` from `1.38.0` to version `1.39.0`. ## 1.0.14 (2023-04-21) diff --git a/sdk/containerregistry/azure-containers-containerregistry/README.md b/sdk/containerregistry/azure-containers-containerregistry/README.md index 22b6aae4afc8..14862bd8c527 100644 --- a/sdk/containerregistry/azure-containers-containerregistry/README.md +++ b/sdk/containerregistry/azure-containers-containerregistry/README.md @@ -56,7 +56,7 @@ and then include the direct dependency in the dependencies section without the v com.azure azure-containers-containerregistry - 1.0.13 + 1.1.0 ``` [//]: # ({x-version-update-end}) diff --git a/sdk/containerregistry/azure-containers-containerregistry/pom.xml b/sdk/containerregistry/azure-containers-containerregistry/pom.xml index 51a213f98531..dd5a28449cf5 100644 --- a/sdk/containerregistry/azure-containers-containerregistry/pom.xml +++ b/sdk/containerregistry/azure-containers-containerregistry/pom.xml @@ -11,7 +11,7 @@ com.azure azure-containers-containerregistry - 1.1.0-beta.5 + 1.1.0 Microsoft Azure SDK for Container Registry This package contains Microsoft Azure SDK for Container Registry. diff --git a/sdk/containerregistry/azure-containers-containerregistry/src/main/java/com/azure/containers/containerregistry/ContainerRegistryContentAsyncClient.java b/sdk/containerregistry/azure-containers-containerregistry/src/main/java/com/azure/containers/containerregistry/ContainerRegistryContentAsyncClient.java index 0b55eab93055..0e5aa71f9f9c 100644 --- a/sdk/containerregistry/azure-containers-containerregistry/src/main/java/com/azure/containers/containerregistry/ContainerRegistryContentAsyncClient.java +++ b/sdk/containerregistry/azure-containers-containerregistry/src/main/java/com/azure/containers/containerregistry/ContainerRegistryContentAsyncClient.java @@ -132,7 +132,7 @@ public Mono setManifest(OciImageManifest manifest, String tag return monoError(LOGGER, new NullPointerException("'manifest' can't be null.")); } - return withContext(context -> setManifestWithResponse(BinaryData.fromObject(manifest), tag, ManifestMediaType.OCI_MANIFEST, context)) + return withContext(context -> setManifestWithResponse(BinaryData.fromObject(manifest), tag, ManifestMediaType.OCI_IMAGE_MANIFEST, context)) .flatMap(FluxUtil::toMono); } @@ -239,7 +239,7 @@ public Mono uploadBlob(BinaryData content) { *
      * contentClient.getManifest("latest")
      *     .doOnNext(downloadResult -> {
-     *         if (ManifestMediaType.OCI_MANIFEST.equals(downloadResult.getManifestMediaType())
+     *         if (ManifestMediaType.OCI_IMAGE_MANIFEST.equals(downloadResult.getManifestMediaType())
      *             || ManifestMediaType.DOCKER_MANIFEST.equals(downloadResult.getManifestMediaType())) {
      *             OciImageManifest manifest = downloadResult.getManifest().toObject(OciImageManifest.class);
      *             System.out.println("Got OCI manifest");
@@ -273,7 +273,7 @@ public Mono getManifest(String tagOrDigest) {
      * contentClient.getManifestWithResponse("latest")
      *     .doOnNext(response -> {
      *         GetManifestResult manifestResult = response.getValue();
-     *         if (ManifestMediaType.OCI_MANIFEST.equals(manifestResult.getManifestMediaType())
+     *         if (ManifestMediaType.OCI_IMAGE_MANIFEST.equals(manifestResult.getManifestMediaType())
      *             || ManifestMediaType.DOCKER_MANIFEST.equals(manifestResult.getManifestMediaType())) {
      *             OciImageManifest manifest = manifestResult.getManifest().toObject(OciImageManifest.class);
      *             System.out.println("Got OCI manifest");
diff --git a/sdk/containerregistry/azure-containers-containerregistry/src/main/java/com/azure/containers/containerregistry/ContainerRegistryContentClient.java b/sdk/containerregistry/azure-containers-containerregistry/src/main/java/com/azure/containers/containerregistry/ContainerRegistryContentClient.java
index 783f9e48279f..d9a2c2f597fb 100644
--- a/sdk/containerregistry/azure-containers-containerregistry/src/main/java/com/azure/containers/containerregistry/ContainerRegistryContentClient.java
+++ b/sdk/containerregistry/azure-containers-containerregistry/src/main/java/com/azure/containers/containerregistry/ContainerRegistryContentClient.java
@@ -127,7 +127,7 @@ public String getEndpoint() {
     @ServiceMethod(returns = ReturnType.SINGLE)
     public SetManifestResult setManifest(OciImageManifest manifest, String tag) {
         Objects.requireNonNull(manifest, "'manifest' cannot be null.");
-        return setManifestWithResponse(BinaryData.fromObject(manifest), tag, ManifestMediaType.OCI_MANIFEST, Context.NONE).getValue();
+        return setManifestWithResponse(BinaryData.fromObject(manifest), tag, ManifestMediaType.OCI_IMAGE_MANIFEST, Context.NONE).getValue();
     }
 
     /**
@@ -248,7 +248,7 @@ public UploadRegistryBlobResult uploadBlob(BinaryData content, Context context)
      * 
      * GetManifestResult latestResult = contentClient.getManifest("latest");
      * if (ManifestMediaType.DOCKER_MANIFEST.equals(latestResult.getManifestMediaType())
-     *     || ManifestMediaType.OCI_MANIFEST.equals(latestResult.getManifestMediaType())) {
+     *     || ManifestMediaType.OCI_IMAGE_MANIFEST.equals(latestResult.getManifestMediaType())) {
      *     OciImageManifest manifest = latestResult.getManifest().toObject(OciImageManifest.class);
      * } else {
      *     throw new IllegalArgumentException("Unexpected manifest type: " + latestResult.getManifestMediaType());
diff --git a/sdk/containerregistry/azure-containers-containerregistry/src/main/java/com/azure/containers/containerregistry/implementation/UtilsImpl.java b/sdk/containerregistry/azure-containers-containerregistry/src/main/java/com/azure/containers/containerregistry/implementation/UtilsImpl.java
index 08a02790ce94..b3636856fa6f 100644
--- a/sdk/containerregistry/azure-containers-containerregistry/src/main/java/com/azure/containers/containerregistry/implementation/UtilsImpl.java
+++ b/sdk/containerregistry/azure-containers-containerregistry/src/main/java/com/azure/containers/containerregistry/implementation/UtilsImpl.java
@@ -87,7 +87,7 @@ public final class UtilsImpl {
     public static final HttpHeaderName DOCKER_DIGEST_HEADER_NAME = HttpHeaderName.fromString("docker-content-digest");
 
     public static final String SUPPORTED_MANIFEST_TYPES = "*/*"
-        + "," + ManifestMediaType.OCI_MANIFEST
+        + "," + ManifestMediaType.OCI_IMAGE_MANIFEST
         + "," + ManifestMediaType.DOCKER_MANIFEST
         + ",application/vnd.oci.image.index.v1+json"
         + ",application/vnd.docker.distribution.manifest.list.v2+json"
diff --git a/sdk/containerregistry/azure-containers-containerregistry/src/main/java/com/azure/containers/containerregistry/models/ContainerRepositoryProperties.java b/sdk/containerregistry/azure-containers-containerregistry/src/main/java/com/azure/containers/containerregistry/models/ContainerRepositoryProperties.java
index ff233f48e6e7..ad1d50f881bd 100644
--- a/sdk/containerregistry/azure-containers-containerregistry/src/main/java/com/azure/containers/containerregistry/models/ContainerRepositoryProperties.java
+++ b/sdk/containerregistry/azure-containers-containerregistry/src/main/java/com/azure/containers/containerregistry/models/ContainerRepositoryProperties.java
@@ -15,7 +15,7 @@
 
 /** Properties of this repository. */
 @Fluent
-public class ContainerRepositoryProperties implements JsonSerializable {
+public final class ContainerRepositoryProperties implements JsonSerializable {
     /*
      * Registry login server name. This is likely to be similar to {registry-name}.azurecr.io.
      */
diff --git a/sdk/containerregistry/azure-containers-containerregistry/src/main/java/com/azure/containers/containerregistry/models/ManifestMediaType.java b/sdk/containerregistry/azure-containers-containerregistry/src/main/java/com/azure/containers/containerregistry/models/ManifestMediaType.java
index 4cff5f3df634..30cbef32ba6a 100644
--- a/sdk/containerregistry/azure-containers-containerregistry/src/main/java/com/azure/containers/containerregistry/models/ManifestMediaType.java
+++ b/sdk/containerregistry/azure-containers-containerregistry/src/main/java/com/azure/containers/containerregistry/models/ManifestMediaType.java
@@ -18,7 +18,7 @@ public final class ManifestMediaType extends ExpandableStringEnum {
-                if (ManifestMediaType.OCI_MANIFEST.equals(downloadResult.getManifestMediaType())
+                if (ManifestMediaType.OCI_IMAGE_MANIFEST.equals(downloadResult.getManifestMediaType())
                     || ManifestMediaType.DOCKER_MANIFEST.equals(downloadResult.getManifestMediaType())) {
                     OciImageManifest manifest = downloadResult.getManifest().toObject(OciImageManifest.class);
                     System.out.println("Got OCI manifest");
@@ -149,7 +149,7 @@ private static void getManifestWithResponse() {
         contentClient.getManifestWithResponse("latest")
             .doOnNext(response -> {
                 GetManifestResult manifestResult = response.getValue();
-                if (ManifestMediaType.OCI_MANIFEST.equals(manifestResult.getManifestMediaType())
+                if (ManifestMediaType.OCI_IMAGE_MANIFEST.equals(manifestResult.getManifestMediaType())
                     || ManifestMediaType.DOCKER_MANIFEST.equals(manifestResult.getManifestMediaType())) {
                     OciImageManifest manifest = manifestResult.getManifest().toObject(OciImageManifest.class);
                     System.out.println("Got OCI manifest");
diff --git a/sdk/containerregistry/azure-containers-containerregistry/src/test/java/com/azure/containers/containerregistry/ContainerRegistryContentClientIntegrationTests.java b/sdk/containerregistry/azure-containers-containerregistry/src/test/java/com/azure/containers/containerregistry/ContainerRegistryContentClientIntegrationTests.java
index 644a1a61d38a..87023b332c52 100644
--- a/sdk/containerregistry/azure-containers-containerregistry/src/test/java/com/azure/containers/containerregistry/ContainerRegistryContentClientIntegrationTests.java
+++ b/sdk/containerregistry/azure-containers-containerregistry/src/test/java/com/azure/containers/containerregistry/ContainerRegistryContentClientIntegrationTests.java
@@ -120,7 +120,7 @@ public void canUploadOciManifestBinaryData(HttpClient httpClient) {
         client = getContentClient("oci-artifact", httpClient);
         setManifestPrerequisites();
 
-        SetManifestOptions options  = new SetManifestOptions(BinaryData.fromObject(MANIFEST), ManifestMediaType.OCI_MANIFEST);
+        SetManifestOptions options  = new SetManifestOptions(BinaryData.fromObject(MANIFEST), ManifestMediaType.OCI_IMAGE_MANIFEST);
         SetManifestResult result = client.setManifestWithResponse(options, Context.NONE).getValue();
         assertNotNull(result);
         assertNotNull(result.getDigest());
diff --git a/sdk/containerregistry/azure-containers-containerregistry/src/test/java/com/azure/containers/containerregistry/ContainerRegistryContentClientTests.java b/sdk/containerregistry/azure-containers-containerregistry/src/test/java/com/azure/containers/containerregistry/ContainerRegistryContentClientTests.java
index 24dd335f119c..46760f88eed4 100644
--- a/sdk/containerregistry/azure-containers-containerregistry/src/test/java/com/azure/containers/containerregistry/ContainerRegistryContentClientTests.java
+++ b/sdk/containerregistry/azure-containers-containerregistry/src/test/java/com/azure/containers/containerregistry/ContainerRegistryContentClientTests.java
@@ -75,7 +75,7 @@
 public class ContainerRegistryContentClientTests {
     private static final BinaryData SMALL_CONTENT = BinaryData.fromString("foobar");
     private static final String SMALL_CONTENT_SHA256 = "sha256:c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2";
-    private static final String DEFAULT_MANIFEST_CONTENT_TYPE = "*/*," + ManifestMediaType.OCI_MANIFEST + "," + ManifestMediaType.DOCKER_MANIFEST + ",application/vnd.oci.image.index.v1+json"
+    private static final String DEFAULT_MANIFEST_CONTENT_TYPE = "*/*," + ManifestMediaType.OCI_IMAGE_MANIFEST + "," + ManifestMediaType.DOCKER_MANIFEST + ",application/vnd.oci.image.index.v1+json"
         + ",application/vnd.docker.distribution.manifest.list.v2+json,application/vnd.cncf.oras.artifact.manifest.v1+json";
     private static final BinaryData MANIFEST_DATA = BinaryData.fromObject(MANIFEST);
     private static final BinaryData OCI_INDEX = BinaryData.fromString("{\"schemaVersion\":2,\"mediaType\":\"application/vnd.oci.image.index.v1+json\","
@@ -166,7 +166,7 @@ public void getManifest() {
 
         assertArrayEquals(MANIFEST_DATA.toBytes(), result.getManifest().toBytes());
         assertNotNull(result.getManifest().toObject(ManifestMediaType.class));
-        assertEquals(ManifestMediaType.OCI_MANIFEST, result.getManifestMediaType());
+        assertEquals(ManifestMediaType.OCI_IMAGE_MANIFEST, result.getManifestMediaType());
     }
 
     @SyncAsyncTest
@@ -469,7 +469,7 @@ public static HttpClient createClientManifests(BinaryData content, String digest
             assertEquals(DEFAULT_MANIFEST_CONTENT_TYPE, request.getHeaders().getValue(HttpHeaderName.ACCEPT));
             HttpHeaders headers = new HttpHeaders()
                 .add(UtilsImpl.DOCKER_DIGEST_HEADER_NAME, digest)
-                .add(HttpHeaderName.CONTENT_TYPE, returnContentType == null ? ManifestMediaType.OCI_MANIFEST.toString() : returnContentType.toString())
+                .add(HttpHeaderName.CONTENT_TYPE, returnContentType == null ? ManifestMediaType.OCI_IMAGE_MANIFEST.toString() : returnContentType.toString())
                 .add(HttpHeaderName.CONTENT_LENGTH, content.getLength().toString());
             return new MockHttpResponse(request, 200, headers, content.toBytes());
         });