diff --git a/specification/containerregistry/cspell.yaml b/specification/containerregistry/cspell.yaml index 68d39f21908c..a4669be30f2f 100644 --- a/specification/containerregistry/cspell.yaml +++ b/specification/containerregistry/cspell.yaml @@ -28,6 +28,7 @@ words: - wgxm - wwkz - ywhk + - azcontainerregistry overrides: - filename: >- **/specification/containerregistry/data-plane/Microsoft.ContainerRegistry/preview/2018-08-10/containerregistry.json diff --git a/specification/containerregistry/data-plane/Registry/client.tsp b/specification/containerregistry/data-plane/Registry/client.tsp new file mode 100644 index 000000000000..54d41f8a1f13 --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/client.tsp @@ -0,0 +1,126 @@ +import "./main.tsp"; + +import "@azure-tools/typespec-client-generator-core"; + +using Azure.ClientGenerator.Core; + +@@usage(ContainerRegistry.TokenGrantType, Usage.output); +@@usage(ContainerRegistry.AcrErrors, Usage.output); + +@@clientName(ContainerRegistry, "ContainerRegistry"); +// Rename ChangeableAttributes models to WriteableProperties for Python SDK backward compatibility +@@clientName(ContainerRegistry.ManifestChangeableAttributes, + "ManifestWriteableProperties", + "python" +); +@@clientName(ContainerRegistry.TagChangeableAttributes, + "TagWriteableProperties", + "python" +); +@@clientName(ContainerRegistry.RepositoryChangeableAttributes, + "RepositoryWriteableProperties", + "python" +); + +// Client name mappings for ContainerRepositoryProperties +@@clientName(ContainerRegistry.ContainerRepositoryProperties.registry, + "registryLoginServer" +); +@@clientName(ContainerRegistry.ContainerRepositoryProperties.imageName, "name"); +@@clientName(ContainerRegistry.ContainerRepositoryProperties.createdTime, + "createdOn" +); +@@clientName(ContainerRegistry.ContainerRepositoryProperties.lastUpdateTime, + "lastUpdatedOn" +); + +// Client name mappings for RepositoryChangeableAttributes +@@clientName(ContainerRegistry.RepositoryChangeableAttributes.deleteEnabled, + "canDelete" +); +@@clientName(ContainerRegistry.RepositoryChangeableAttributes.writeEnabled, + "canWrite" +); +@@clientName(ContainerRegistry.RepositoryChangeableAttributes.listEnabled, + "canList" +); +@@clientName(ContainerRegistry.RepositoryChangeableAttributes.readEnabled, + "canRead" +); + +// Client name mappings for DeleteRepositoryResult +@@clientName(ContainerRegistry.DeleteRepositoryResult.manifestsDeleted, + "deletedManifests" +); +@@clientName(ContainerRegistry.DeleteRepositoryResult.tagsDeleted, + "deletedTags" +); + +// Client name mappings for TagList +@@clientName(ContainerRegistry.TagList.registry, "registryLoginServer"); +@@clientName(ContainerRegistry.TagList.imageName, "repository"); +@@clientName(ContainerRegistry.TagList.tags, "tagAttributeBases"); + +// Client name mappings for TagAttributesBase +@@clientName(ContainerRegistry.TagAttributesBase.createdTime, "createdOn"); +@@clientName(ContainerRegistry.TagAttributesBase.lastUpdateTime, + "lastUpdatedOn" +); + +// Client name mappings for TagChangeableAttributes +@@clientName(ContainerRegistry.TagChangeableAttributes.deleteEnabled, + "canDelete" +); +@@clientName(ContainerRegistry.TagChangeableAttributes.writeEnabled, + "canWrite" +); +@@clientName(ContainerRegistry.TagChangeableAttributes.listEnabled, "canList"); +@@clientName(ContainerRegistry.TagChangeableAttributes.readEnabled, "canRead"); + +// Client name mappings for ArtifactTagProperties +@@clientName(ContainerRegistry.ArtifactTagProperties.registry, + "registryLoginServer" +); +@@clientName(ContainerRegistry.ArtifactTagProperties.imageName, + "repositoryName" +); + +// Client name mappings for AcrManifests +@@clientName(ContainerRegistry.AcrManifests.registry, "registryLoginServer"); +@@clientName(ContainerRegistry.AcrManifests.imageName, "repository"); + +// Client name mappings for ManifestAttributesBase +@@clientName(ContainerRegistry.ManifestAttributesBase.imageSize, "size"); +@@clientName(ContainerRegistry.ManifestAttributesBase.createdTime, "createdOn"); +@@clientName(ContainerRegistry.ManifestAttributesBase.lastUpdateTime, + "lastUpdatedOn" +); +@@clientName(ContainerRegistry.ManifestAttributesBase.os, "operatingSystem"); +@@clientName(ContainerRegistry.ManifestAttributesBase.references, + "relatedArtifacts" +); + +// Client name mappings for ArtifactManifestPlatform +@@clientName(ContainerRegistry.ArtifactManifestPlatform.os, "operatingSystem"); + +// Client name mappings for ManifestChangeableAttributes +@@clientName(ContainerRegistry.ManifestChangeableAttributes.deleteEnabled, + "canDelete" +); +@@clientName(ContainerRegistry.ManifestChangeableAttributes.writeEnabled, + "canWrite" +); +@@clientName(ContainerRegistry.ManifestChangeableAttributes.listEnabled, + "canList" +); +@@clientName(ContainerRegistry.ManifestChangeableAttributes.readEnabled, + "canRead" +); + +// Client name mappings for ArtifactManifestProperties +@@clientName(ContainerRegistry.ArtifactManifestProperties.registry, + "registryLoginServer" +); +@@clientName(ContainerRegistry.ArtifactManifestProperties.imageName, + "repositoryName" +); diff --git a/specification/containerregistry/data-plane/Registry/examples/2021-07-01/CancelBlobUpload.json b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/CancelBlobUpload.json new file mode 100644 index 000000000000..1b2a90808cc1 --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/CancelBlobUpload.json @@ -0,0 +1,11 @@ +{ + "parameters": { + "nextBlobUuidLink": "v2/blobland/blobs/uploads/2b28c60d-d296-44b7-b2b4-1f01c63195c6?_nouploadcache=false&_state=VYABvUSCNW2yY5e5VabLHppXqwU0K7cvT0YUdq57KBt7Ik5hbWUiOiJibG9ibGFuZCIsIlVVSUQiOiIyYjI4YzYwZC1kMjk2LTQ0YjctYjJiNC0xZjAxYzYzMTk1YzYiLCJPZmZzZXQiOjAsIlN0YXJ0ZWRBdCI6IjIwMTktMDgtMjdUMjM6NTI6NDcuMDUzNjU2Mjg1WiJ9", + "url": "acrapi.azurecr.io" + }, + "responses": { + "204": {} + }, + "operationId": "ContainerRegistryBlob_CancelUpload", + "title": "End a blob upload" +} diff --git a/specification/containerregistry/data-plane/Registry/examples/2021-07-01/CheckBlob.json b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/CheckBlob.json new file mode 100644 index 000000000000..f9520f5a374f --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/CheckBlob.json @@ -0,0 +1,21 @@ +{ + "parameters": { + "name": "prod/bash", + "digest": "sha256:16463e0c481e161aabb735437d30b3c9c7391c2747cc564bb927e843b73dcb39", + "url": "acrapi.azurecr.io" + }, + "responses": { + "200": { + "headers": { + "Content-Length": 5635 + } + }, + "307": { + "headers": { + "Location": "https://csharpsdktest.azurecr.io/v2/prod/bash/blobs/sha256:3131d2b2b3352091117a3abe745d01a3fed472b7327c3183602247937800e3a6" + } + } + }, + "operationId": "ContainerRegistryBlob_CheckBlobExists", + "title": "Head for a Blob Chunk" +} diff --git a/specification/containerregistry/data-plane/Registry/examples/2021-07-01/CheckBlobChunk.json b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/CheckBlobChunk.json new file mode 100644 index 000000000000..e3dbc38caad6 --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/CheckBlobChunk.json @@ -0,0 +1,18 @@ +{ + "parameters": { + "name": "prod/bash", + "range": "bytes=0-299", + "digest": "sha256:16463e0c481e161aabb735437d30b3c9c7391c2747cc564bb927e843b73dcb39", + "url": "acrapi.azurecr.io" + }, + "responses": { + "200": { + "headers": { + "Content-Length": "300", + "Content-Range": "bytes 0-299/5635" + } + } + }, + "operationId": "ContainerRegistryBlob_CheckChunkExists", + "title": "Get headers without blob Chunk" +} diff --git a/specification/containerregistry/data-plane/Registry/examples/2021-07-01/CreateManifest.json b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/CreateManifest.json new file mode 100644 index 000000000000..8a7f52be5cb7 --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/CreateManifest.json @@ -0,0 +1,21 @@ +{ + "parameters": { + "name": "hello-world", + "payload": { + "schemaVersion": 2 + }, + "reference": "a20190628-081044z", + "url": "acrapi.azurecr.io" + }, + "responses": { + "201": { + "headers": { + "Content-Length": 0, + "Docker-Content-Digest": "sha256:15685c48490175b7dde62e6bfcfb54d9420c6495ea6404776e2facca3da93cd8", + "Location": "/v2/hello-world/manifests/sha256:15685c48490175b7dde62e6bfcfb54d9420c6495ea6404776e2facca3da93cd8" + } + } + }, + "operationId": "ContainerRegistry_CreateManifest", + "title": "Put manifest" +} diff --git a/specification/containerregistry/data-plane/Registry/examples/2021-07-01/DeleteAcrRepository.json b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/DeleteAcrRepository.json new file mode 100644 index 000000000000..8c903f79af71 --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/DeleteAcrRepository.json @@ -0,0 +1,13 @@ +{ + "parameters": { + "name": "nanoserver", + "api-version": "2021-07-01", + "url": "acrapi.azurecr.io" + }, + "responses": { + "202": {}, + "404": {} + }, + "operationId": "ContainerRegistry_DeleteRepository", + "title": "Delete a repository" +} diff --git a/specification/containerregistry/data-plane/Registry/examples/2021-07-01/DeleteBlob.json b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/DeleteBlob.json new file mode 100644 index 000000000000..d60fa8ae1e5b --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/DeleteBlob.json @@ -0,0 +1,12 @@ +{ + "parameters": { + "name": "prod/bash", + "digest": "sha256:16463e0c481e161aabb735437d30b3c9c7391c2747cc564bb927e843b73dcb39", + "url": "acrapi.azurecr.io" + }, + "responses": { + "202": {} + }, + "operationId": "ContainerRegistryBlob_DeleteBlob", + "title": "Delete a blob" +} diff --git a/specification/containerregistry/data-plane/Registry/examples/2021-07-01/DeleteManifest.json b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/DeleteManifest.json new file mode 100644 index 000000000000..ff31e6754aef --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/DeleteManifest.json @@ -0,0 +1,13 @@ +{ + "parameters": { + "name": "alpine", + "reference": "3.7", + "url": "acrapi.azurecr.io" + }, + "responses": { + "202": {}, + "404": {} + }, + "operationId": "ContainerRegistry_DeleteManifest", + "title": "Delete manifest" +} diff --git a/specification/containerregistry/data-plane/Registry/examples/2021-07-01/DeleteTag.json b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/DeleteTag.json new file mode 100644 index 000000000000..1c2a7a449226 --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/DeleteTag.json @@ -0,0 +1,14 @@ +{ + "parameters": { + "name": "nanoserver", + "api-version": "2021-07-01", + "reference": "4.7.2-20180905-nanoserver-1803", + "url": "acrapi.azurecr.io" + }, + "responses": { + "202": {}, + "404": {} + }, + "operationId": "ContainerRegistry_DeleteTag", + "title": "Delete a tag" +} diff --git a/specification/containerregistry/data-plane/Registry/examples/2021-07-01/EndBlobUpload.json b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/EndBlobUpload.json new file mode 100644 index 000000000000..5c922b4dfb2f --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/EndBlobUpload.json @@ -0,0 +1,18 @@ +{ + "parameters": { + "digest": "sha256:a05a7abc31b0caadd5058069eaa623cdd0538512dbddacc7ca5bad73c3957c5e", + "nextBlobUuidLink": "v2/blobland/blobs/uploads/2b28c60d-d296-44b7-b2b4-1f01c63195c6?_nouploadcache=false&_state=VYABvUSCNW2yY5e5VabLHppXqwU0K7cvT0YUdq57KBt7Ik5hbWUiOiJibG9ibGFuZCIsIlVVSUQiOiIyYjI4YzYwZC1kMjk2LTQ0YjctYjJiNC0xZjAxYzYzMTk1YzYiLCJPZmZzZXQiOjAsIlN0YXJ0ZWRBdCI6IjIwMTktMDgtMjdUMjM6NTI6NDcuMDUzNjU2Mjg1WiJ9", + "url": "acrapi.azurecr.io", + "value": "usuallyEmpty" + }, + "responses": { + "201": { + "headers": { + "Docker-Content-Digest": "sha256:a05a7abc31b0caadd5058069eaa623cdd0538512dbddacc7ca5bad73c3957c5e", + "Location": "/v2/blobland/blobs/sha256:a05a7abc31b0caadd5058069eaa623cdd0538512dbddacc7ca5bad73c3957c5e" + } + } + }, + "operationId": "ContainerRegistryBlob_CompleteUpload", + "title": "End a blob upload" +} diff --git a/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetAccessToken.json b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetAccessToken.json new file mode 100644 index 000000000000..0eccfbe221bd --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetAccessToken.json @@ -0,0 +1,16 @@ +{ + "parameters": { + "scope": "registry:catalog:*", + "service": "someregistry.azurecr.io", + "url": "acrapi.azurecr.io" + }, + "responses": { + "200": { + "body": { + "access_token": "eyJ0eXAiOiJKJhbGcigdCI6IkN0ZlFaOExlLTMejlnIiwidGlkIjoiNzbmOTgWItMmQ3Y2QwMTFkYjQ3Ii..." + } + } + }, + "operationId": "Authentication_GetAcrAccessTokenFromLogin", + "title": "Get Access Token with username and password" +} diff --git a/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetBlob.json b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetBlob.json new file mode 100644 index 000000000000..2bfd02a7ebd8 --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetBlob.json @@ -0,0 +1,22 @@ +{ + "parameters": { + "name": "prod/bash", + "digest": "sha256:16463e0c481e161aabb735437d30b3c9c7391c2747cc564bb927e843b73dcb39", + "url": "acrapi.azurecr.io" + }, + "responses": { + "200": { + "body": "eyJhcmNoaXRlY3R1cmUiOiJhbWQ2NCIsImNvbmZpZyI6eyJIb3N0bmFtZSI6IiIsIkRvbWFpbm5hbWUiOiIiLCJVc2VyIjoiIiwiQXR0YWNoU3RkaW4iOmZhbHNlLCJBdHRhY2hTdGRvdXQiOmZhbHNlLCJBdHRhY2hTdGRlcnIiOmZhbHNlLCJUdHkiOmZhbHNlLCJPcGVuU3RkaW4iOmZhbHNlLCJTdGRpbk9uY2UiOmZhbHNlLCJFbnYiOlsiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iLCJfQkFTSF9HUEdfS0VZPTdDMDEzNUZCMDg4QUFGNkM2NkM2NTBCOUJCNTg2OUYwNjRFQTc0QUIiLCJfQkFTSF9WRVJTSU9OPTUuMCIsIl9CQVNIX1BBVENIX0xFVkVMPTAiLCJfQkFTSF9MQVRFU1RfUEFUQ0g9NyJdLCJDbWQiOlsiYmFzaCJdLCJBcmdzRXNjYXBlZCI6dHJ1ZSwiSW1hZ2UiOiJzaGEyNTY6MzhhZDJmYmM5ZjljMGE4N2RmZTBhMmIxOWJkY2E5NGJlNDVmNDY2M2Y3M2ZkMDlmZWZlZTQ5MmFmZDJjMDE0NCIsIlZvbHVtZXMiOm51bGwsIldvcmtpbmdEaXIiOiIiLCJFbnRyeXBvaW50IjpbImRvY2tlci1lbnRyeXBvaW50LnNoIl0sIk9uQnVpbGQiOm51bGwsIkxhYmVscyI6bnVsbH0sImNvbnRhaW5lciI6IjRiMDU0NmZhNDlkZjVkY2FlZDViNjYzNzE3ZjQ0MmNlZjcxYTFiOTVjMGZmYjQyYzhjNWNlNzIzMWI5MGMwMjYiLCJjb250YWluZXJfY29uZmlnIjp7Ikhvc3RuYW1lIjoiNGIwNTQ2ZmE0OWRmIiwiRG9tYWlubmFtZSI6IiIsIlVzZXIiOiIiLCJBdHRhY2hTdGRpbiI6ZmFsc2UsIkF0dGFjaFN0ZG91dCI6ZmFsc2UsIkF0dGFjaFN0ZGVyciI6ZmFsc2UsIlR0eSI6ZmFsc2UsIk9wZW5TdGRpbiI6ZmFsc2UsIlN0ZGluT25jZSI6ZmFsc2UsIkVudiI6WyJQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbiIsIl9CQVNIX0dQR19LRVk9N0MwMTM1RkIwODhBQUY2QzY2QzY1MEI5QkI1ODY5RjA2NEVBNzRBQiIsIl9CQVNIX1ZFUlNJT049NS4wIiwiX0JBU0hfUEFUQ0hfTEVWRUw9MCIsIl9CQVNIX0xBVEVTVF9QQVRDSD03Il0sIkNtZCI6WyIvYmluL3NoIiwiLWMiLCIjKG5vcCkgIiwiQ01EIFtcImJhc2hcIl0iXSwiQXJnc0VzY2FwZWQiOnRydWUsIkltYWdlIjoic2hhMjU2OjM4YWQyZmJjOWY5YzBhODdkZmUwYTJiMTliZGNhOTRiZTQ1ZjQ2NjNmNzNmZDA5ZmVmZWU0OTJhZmQyYzAxNDQiLCJWb2x1bWVzIjpudWxsLCJXb3JraW5nRGlyIjoiIiwiRW50cnlwb2ludCI6WyJkb2NrZXItZW50cnlwb2ludC5zaCJdLCJPbkJ1aWxkIjpudWxsLCJMYWJlbHMiOnt9fSwiY3JlYXRlZCI6IjIwMTktMDctMTNUMDE6MTY6MDYuNTI3NTE1OTAyWiIsImRvY2tlcl92ZXJzaW9uIjoiMTguMDYuMS1jZSIsImhpc3RvcnkiOlt7ImNyZWF0ZWQiOiIyMDE5LTA3LTExVDIyOjIwOjUyLjEzOTcwOTM1NVoiLCJjcmVhdGVkX2J5IjoiL2Jpbi9zaCAtYyAjKG5vcCkgQUREIGZpbGU6MGViNWVhMzU3NDFkMjNmZTM5Y2JhYzI0NWIzYTVkODQ4NTZlZDYzODRmNGZmMDdkNDk2MzY5ZWU2ZDk2MGJhZCBpbiAvICJ9LHsiY3JlYXRlZCI6IjIwMTktMDctMTFUMjI6MjA6NTIuMzc1Mjg2NDA0WiIsImNyZWF0ZWRfYnkiOiIvYmluL3NoIC1jICMobm9wKSAgQ01EIFtcIi9iaW4vc2hcIl0iLCJlbXB0eV9sYXllciI6dHJ1ZX0seyJjcmVhdGVkIjoiMjAxOS0wNy0xM1QwMToxNToxMy41Njc2Njk4MTJaIiwiY3JlYXRlZF9ieSI6Ii9iaW4vc2ggLWMgIyhub3ApICBFTlYgX0JBU0hfR1BHX0tFWT03QzAxMzVGQjA4OEFBRjZDNjZDNjUwQjlCQjU4NjlGMDY0RUE3NEFCIiwiZW1wdHlfbGF5ZXIiOnRydWV9LHsiY3JlYXRlZCI6IjIwMTktMDctMTNUMDE6MTU6MTMuNzQ1NjUyMDk4WiIsImNyZWF0ZWRfYnkiOiIvYmluL3NoIC1jICMobm9wKSAgRU5WIF9CQVNIX1ZFUlNJT049NS4wIiwiZW1wdHlfbGF5ZXIiOnRydWV9LHsiY3JlYXRlZCI6IjIwMTktMDctMTNUMDE6MTU6MTMuOTQwNDU1NDE5WiIsImNyZWF0ZWRfYnkiOiIvYmluL3NoIC1jICMobm9wKSAgRU5WIF9CQVNIX1BBVENIX0xFVkVMPTAiLCJlbXB0eV9sYXllciI6dHJ1ZX0seyJjcmVhdGVkIjoiMjAxOS0wNy0xM1QwMToxNToxNC4wOTkzMDAwNzVaIiwiY3JlYXRlZF9ieSI6Ii9iaW4vc2ggLWMgIyhub3ApICBFTlYgX0JBU0hfTEFURVNUX1BBVENIPTciLCJlbXB0eV9sYXllciI6dHJ1ZX0seyJjcmVhdGVkIjoiMjAxOS0wNy0xM1QwMToxNjowNS45Mjg0MjkyNjJaIiwiY3JlYXRlZF9ieSI6Ii9iaW4vc2ggLWMgc2V0IC1ldXg7IFx0XHRhcGsgYWRkIC0tbm8tY2FjaGUgLS12aXJ0dWFsIC5idWlsZC1kZXBzIFx0XHRiaXNvbiBcdFx0Y29yZXV0aWxzIFx0XHRkcGtnLWRldiBkcGtnIFx0XHRnY2MgXHRcdGdudXBnIFx0XHRsaWJjLWRldiBcdFx0bWFrZSBcdFx0bmN1cnNlcy1kZXYgXHRcdHBhdGNoIFx0XHR0YXIgXHQ7IFx0XHR2ZXJzaW9uPVwiJF9CQVNIX1ZFUlNJT05cIjsgXHRpZiBbIFwiJF9CQVNIX1BBVENIX0xFVkVMXCIgLWd0IDAgXTsgdGhlbiBcdFx0dmVyc2lvbj1cIiR2ZXJzaW9uLiRfQkFTSF9QQVRDSF9MRVZFTFwiOyBcdGZpOyBcdHdnZXQgLU8gYmFzaC50YXIuZ3ogXCJodHRwczovL2Z0cC5nbnUub3JnL2dudS9iYXNoL2Jhc2gtJHZlcnNpb24udGFyLmd6XCI7IFx0d2dldCAtTyBiYXNoLnRhci5nei5zaWcgXCJodHRwczovL2Z0cC5nbnUub3JnL2dudS9iYXNoL2Jhc2gtJHZlcnNpb24udGFyLmd6LnNpZ1wiOyBcdFx0aWYgWyBcIiRfQkFTSF9MQVRFU1RfUEFUQ0hcIiAtZ3QgXCIkX0JBU0hfUEFUQ0hfTEVWRUxcIiBdOyB0aGVuIFx0XHRta2RpciAtcCBiYXNoLXBhdGNoZXM7IFx0XHRmaXJzdD1cIiQocHJpbnRmICclMDNkJyBcIiQoKCBfQkFTSF9QQVRDSF9MRVZFTCArIDEgKSlcIilcIjsgXHRcdGxhc3Q9XCIkKHByaW50ZiAnJTAzZCcgXCIkX0JBU0hfTEFURVNUX1BBVENIXCIpXCI7IFx0XHRmb3IgcGF0Y2ggaW4gJChzZXEgLXcgXCIkZmlyc3RcIiBcIiRsYXN0XCIpOyBkbyBcdFx0XHR1cmw9XCJodHRwczovL2Z0cC5nbnUub3JnL2dudS9iYXNoL2Jhc2gtJF9CQVNIX1ZFUlNJT04tcGF0Y2hlcy9iYXNoJHtfQkFTSF9WRVJTSU9OLy8uL30tJHBhdGNoXCI7IFx0XHRcdHdnZXQgLU8gXCJiYXNoLXBhdGNoZXMvJHBhdGNoXCIgXCIkdXJsXCI7IFx0XHRcdHdnZXQgLU8gXCJiYXNoLXBhdGNoZXMvJHBhdGNoLnNpZ1wiIFwiJHVybC5zaWdcIjsgXHRcdGRvbmU7IFx0Zmk7IFx0XHRleHBvcnQgR05VUEdIT01FPVwiJChta3RlbXAgLWQpXCI7IFx0Z3BnIC0tYmF0Y2ggLS1rZXlzZXJ2ZXIgaGEucG9vbC5za3Mta2V5c2VydmVycy5uZXQgLS1yZWN2LWtleXMgXCIkX0JBU0hfR1BHX0tFWVwiOyBcdGdwZyAtLWJhdGNoIC0tdmVyaWZ5IGJhc2gudGFyLmd6LnNpZyBiYXNoLnRhci5nejsgXHRncGdjb25mIC0ta2lsbCBhbGw7IFx0cm0gYmFzaC50YXIuZ3ouc2lnOyBcdGlmIFsgLWQgYmFzaC1wYXRjaGVzIF07IHRoZW4gXHRcdGZvciBzaWcgaW4gYmFzaC1wYXRjaGVzLyouc2lnOyBkbyBcdFx0XHRwPVwiJHtzaWclLnNpZ31cIjsgXHRcdFx0Z3BnIC0tYmF0Y2ggLS12ZXJpZnkgXCIkc2lnXCIgXCIkcFwiOyBcdFx0XHRybSBcIiRzaWdcIjsgXHRcdGRvbmU7IFx0Zmk7IFx0cm0gLXJmIFwiJEdOVVBHSE9NRVwiOyBcdFx0bWtkaXIgLXAgL3Vzci9zcmMvYmFzaDsgXHR0YXIgXHRcdC0tZXh0cmFjdCBcdFx0LS1maWxlPWJhc2gudGFyLmd6IFx0XHQtLXN0cmlwLWNvbXBvbmVudHM9MSBcdFx0LS1kaXJlY3Rvcnk9L3Vzci9zcmMvYmFzaCBcdDsgXHRybSBiYXNoLnRhci5nejsgXHRcdGlmIFsgLWQgYmFzaC1wYXRjaGVzIF07IHRoZW4gXHRcdGZvciBwIGluIGJhc2gtcGF0Y2hlcy8qOyBkbyBcdFx0XHRwYXRjaCBcdFx0XHRcdC0tZGlyZWN0b3J5PS91c3Ivc3JjL2Jhc2ggXHRcdFx0XHQtLWlucHV0PVwiJChyZWFkbGluayAtZiBcIiRwXCIpXCIgXHRcdFx0XHQtLXN0cmlwPTAgXHRcdFx0OyBcdFx0XHRybSBcIiRwXCI7IFx0XHRkb25lOyBcdFx0cm1kaXIgYmFzaC1wYXRjaGVzOyBcdGZpOyBcdFx0Y2QgL3Vzci9zcmMvYmFzaDsgXHRnbnVBcmNoPVwiJChkcGtnLWFyY2hpdGVjdHVyZSAtLXF1ZXJ5IERFQl9CVUlMRF9HTlVfVFlQRSlcIjsgXHQuL2NvbmZpZ3VyZSBcdFx0LS1idWlsZD1cIiRnbnVBcmNoXCIgXHRcdC0tZW5hYmxlLXJlYWRsaW5lIFx0XHQtLXdpdGgtY3Vyc2VzIFx0XHQtLXdpdGhvdXQtYmFzaC1tYWxsb2MgXHR8fCB7IFx0XHRjYXQgXHUwMDNlXHUwMDI2MiBjb25maWcubG9nOyBcdFx0ZmFsc2U7IFx0fTsgXHRtYWtlIC1qIFwiJChucHJvYylcIjsgXHRtYWtlIGluc3RhbGw7IFx0Y2QgLzsgXHRybSAtciAvdXNyL3NyYy9iYXNoOyBcdFx0cm0gLXIgXHRcdC91c3IvbG9jYWwvc2hhcmUvZG9jL2Jhc2gvKi5odG1sIFx0XHQvdXNyL2xvY2FsL3NoYXJlL2luZm8gXHRcdC91c3IvbG9jYWwvc2hhcmUvbG9jYWxlIFx0XHQvdXNyL2xvY2FsL3NoYXJlL21hbiBcdDsgXHRcdHJ1bkRlcHM9XCIkKCBcdFx0c2NhbmVsZiAtLW5lZWRlZCAtLW5vYmFubmVyIC0tZm9ybWF0ICclbiNwJyAtLXJlY3Vyc2l2ZSAvdXNyL2xvY2FsIFx0XHRcdHwgdHIgJywnICdcXG4nIFx0XHRcdHwgc29ydCAtdSBcdFx0XHR8IGF3ayAnc3lzdGVtKFwiWyAtZSAvdXNyL2xvY2FsL2xpYi9cIiAkMSBcIiBdXCIpID09IDAgeyBuZXh0IH0geyBwcmludCBcInNvOlwiICQxIH0nIFx0KVwiOyBcdGFwayBhZGQgLS1uby1jYWNoZSAtLXZpcnR1YWwgLmJhc2gtcnVuZGVwcyAkcnVuRGVwczsgXHRhcGsgZGVsIC5idWlsZC1kZXBzOyBcdFx0WyBcIiQod2hpY2ggYmFzaClcIiA9ICcvdXNyL2xvY2FsL2Jpbi9iYXNoJyBdOyBcdGJhc2ggLS12ZXJzaW9uOyBcdFsgXCIkKGJhc2ggLWMgJ2VjaG8gXCIke0JBU0hfVkVSU0lPTiUlW14wLTkuXSp9XCInKVwiID0gXCIke19CQVNIX1ZFUlNJT04lJS0qfS4kX0JBU0hfTEFURVNUX1BBVENIXCIgXTsifSx7ImNyZWF0ZWQiOiIyMDE5LTA3LTEzVDAxOjE2OjA2LjE2NDEyODQxMloiLCJjcmVhdGVkX2J5IjoiL2Jpbi9zaCAtYyAjKG5vcCkgQ09QWSBmaWxlOjY1MWIzYmViZWJhOGJlOTE2MmM1NmIzZWI1NjExOTk5MDUyMzVmM2UxYzc4MTEyMzJiNmM5ZjQ4YWMzMzM2NTEgaW4gL3Vzci9sb2NhbC9iaW4vICJ9LHsiY3JlYXRlZCI6IjIwMTktMDctMTNUMDE6MTY6MDYuMzE5Mzc1ODg0WiIsImNyZWF0ZWRfYnkiOiIvYmluL3NoIC1jICMobm9wKSAgRU5UUllQT0lOVCBbXCJkb2NrZXItZW50cnlwb2ludC5zaFwiXSIsImVtcHR5X2xheWVyIjp0cnVlfSx7ImNyZWF0ZWQiOiIyMDE5LTA3LTEzVDAxOjE2OjA2LjUyNzUxNTkwMloiLCJjcmVhdGVkX2J5IjoiL2Jpbi9zaCAtYyAjKG5vcCkgIENNRCBbXCJiYXNoXCJdIiwiZW1wdHlfbGF5ZXIiOnRydWV9XSwib3MiOiJsaW51eCIsInJvb3RmcyI6eyJ0eXBlIjoibGF5ZXJzIiwiZGlmZl9pZHMiOlsic2hhMjU2OjFiZmVlYmQ2NTMyM2I4ZGRmNWJkNmE1MWNjNzA5N2I3Mjc4OGJjOTgyZTlhYjMyODBkNTNkM2M2MTNhZGZmYTciLCJzaGEyNTY6NDgzYzk4MGFjNmFiZjYzZmM0ZDcyNjJiMTdhMTk1NGQ2MjI2NmRhYzMwMjliNWJlMzg0ZDAzYjM5MjI5ODAzZSIsInNoYTI1Njo1ZjVmOTNhOTMzMDUyMTBhOTZjYzQxN2Y1NzlkNzBhNDk2YmJmMGRiOGU4MGVhMWU5NDM2NjgyYzM3OWYyNWQ5Il19fQ==", + "headers": { + "Content-Length": 5635 + } + }, + "307": { + "headers": { + "Location": "https://csharpsdktest.azurecr.io/v2/prod/bash/blobs/sha256:3131d2b2b3352091117a3abe745d01a3fed472b7327c3183602247937800e3a6" + } + } + }, + "operationId": "ContainerRegistryBlob_GetBlob", + "title": "Get a blob from digest" +} diff --git a/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetBlobChunk.json b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetBlobChunk.json new file mode 100644 index 000000000000..c0a23b802873 --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetBlobChunk.json @@ -0,0 +1,19 @@ +{ + "parameters": { + "name": "prod/bash", + "range": "bytes=0-299", + "digest": "sha256:16463e0c481e161aabb735437d30b3c9c7391c2747cc564bb927e843b73dcb39", + "url": "acrapi.azurecr.io" + }, + "responses": { + "206": { + "body": "eyJhcmNoaXRlY3R1cmUiOiJhbWQ2NCIsImNvbmZpZyI6eyJIb3N0bmFtZSI6IiIsIkRvbWFpbm5hbWUiOiIiLCJVc2VyIjoiIiwiQXR0YWNoU3RkaW4iOmZhbHNlLCJBdHRhY2hTdGRvdXQiOmZhbHNlLCJBdHRhY2hTdGRlcnIiOmZhbHNlLCJUdHkiOmZhbHNlLCJPcGVuU3RkaW4iOmZhbHNlLCJTdGRpbk9uY2UiOmZhbHNlLCJFbnYiOlsiUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluOi9iaW4iLCJfQkFTSF9HUEdfS0VZPTdDMDEzNUZCMDg4QUFGNkM2NkM2NTBCOUJC", + "headers": { + "Content-Length": "300", + "Content-Range": "bytes 0-299/5635" + } + } + }, + "operationId": "ContainerRegistryBlob_GetChunk", + "title": "Get a blob Chunk" +} diff --git a/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetBlobStatus.json b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetBlobStatus.json new file mode 100644 index 000000000000..040caaf706c2 --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetBlobStatus.json @@ -0,0 +1,17 @@ +{ + "parameters": { + "api-version": "2021-07-01", + "nextBlobUuidLink": "v2/blobland/blobs/uploads/2b28c60d-d296-44b7-b2b4-1f01c63195c6?_nouploadcache=false&_state=VYABvUSCNW2yY5e5VabLHppXqwU0K7cvT0YUdq57KBt7Ik5hbWUiOiJibG9ibGFuZCIsIlVVSUQiOiIyYjI4YzYwZC1kMjk2LTQ0YjctYjJiNC0xZjAxYzYzMTk1YzYiLCJPZmZzZXQiOjAsIlN0YXJ0ZWRBdCI6IjIwMTktMDgtMjdUMjM6NTI6NDcuMDUzNjU2Mjg1WiJ9", + "url": "acrapi.azurecr.io" + }, + "responses": { + "204": { + "headers": { + "Docker-Upload-Uuid": "2b28c60d-d296-44b7-b2b4-1f01c63195c6", + "Range": "0-0" + } + } + }, + "operationId": "ContainerRegistryBlob_GetUploadStatus", + "title": "Get blob status" +} diff --git a/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetDockerRegistryV2Support.json b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetDockerRegistryV2Support.json new file mode 100644 index 000000000000..9e5ddc5060b5 --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetDockerRegistryV2Support.json @@ -0,0 +1,10 @@ +{ + "parameters": { + "url": "acrapi.azurecr.io" + }, + "responses": { + "200": {} + }, + "operationId": "ContainerRegistry_CheckDockerV2Support", + "title": "Check Docker Registry V2 Support" +} diff --git a/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetManifest.json b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetManifest.json new file mode 100644 index 000000000000..366dc5730796 --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetManifest.json @@ -0,0 +1,50 @@ +{ + "parameters": { + "name": "hello-world-dangling", + "accept": "application/vnd.docker.distribution.manifest.v2+json", + "reference": "20190628-033033z", + "url": "acrapi.azurecr.io" + }, + "responses": { + "200": { + "body": { + "config": { + "digest": "sha256:691fbc2d44fff48357bba69ab0505b9bf12b2b250a925a84a0b8e8e7eed390b2", + "mediaType": "application/vnd.docker.container.image.v1+json", + "size": 5824 + }, + "layers": [ + { + "digest": "sha256:a073c86ecf9e0f29180e80e9638d4c741970695851ea48247276c32c57e40282", + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 2014658 + }, + { + "digest": "sha256:0e28711eb56d78f1e3dfde1807eba529d1346222bcd07d1cb1e436a18a0388bd", + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 19778035 + }, + { + "digest": "sha256:e460dd483fddb555911f7ed188c319fd97542c60e36843dcb1c5d753f733e1fa", + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 1074044 + }, + { + "digest": "sha256:6aa301222093bfb8cf424ccb387f59e2c9510c3a30cca7fbcf8c954f88e6600c", + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 5827 + }, + { + "digest": "sha256:9c5d80083a57d565f684e0155707204d497a5ad965279f92927452f15dae17e6", + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 568 + } + ], + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "schemaVersion": 2 + } + } + }, + "operationId": "ContainerRegistry_GetManifest", + "title": "Get manifest" +} diff --git a/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetManifestAttributes.json b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetManifestAttributes.json new file mode 100644 index 000000000000..8f9ecef5c889 --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetManifestAttributes.json @@ -0,0 +1,35 @@ +{ + "parameters": { + "name": "nanoserver", + "api-version": "2021-07-01", + "digest": "sha256:110d2b6c84592561338aa040b1b14b7ab81c2f9edbd564c2285dd7d70d777086", + "url": "acrapi.azurecr.io" + }, + "responses": { + "200": { + "body": { + "imageName": "nanoserver", + "manifest": { + "architecture": "amd64", + "changeableAttributes": { + "deleteEnabled": true, + "listEnabled": true, + "readEnabled": true, + "writeEnabled": true + }, + "createdTime": "2018-09-06T06:17:20.9983915Z", + "digest": "sha256:110d2b6c84592561338aa040b1b14b7ab81c2f9edbd564c2285dd7d70d777086", + "imageSize": 2401606, + "lastUpdateTime": "2018-09-06T06:17:20.9983915Z", + "os": "windows", + "tags": [ + "4.7.2-20180905-nanoserver-1803" + ] + }, + "registry": "acrapi.azurecr.io" + } + } + }, + "operationId": "ContainerRegistry_GetManifestProperties", + "title": "Get manifest attributes" +} diff --git a/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetManifestList.json b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetManifestList.json new file mode 100644 index 000000000000..dede59db1743 --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetManifestList.json @@ -0,0 +1,53 @@ +{ + "parameters": { + "name": "nanoserver", + "api-version": "2021-07-01", + "url": "acrapi.azurecr.io" + }, + "responses": { + "200": { + "body": { + "imageName": "nanoserver", + "manifests": [ + { + "architecture": "amd64", + "changeableAttributes": { + "deleteEnabled": true, + "listEnabled": true, + "readEnabled": true, + "writeEnabled": true + }, + "createdTime": "2018-09-06T06:17:20.9983915Z", + "digest": "sha256:110d2b6c84592561338aa040b1b14b7ab81c2f9edbd564c2285dd7d70d777086", + "imageSize": 2401606, + "lastUpdateTime": "2018-09-06T06:17:20.9983915Z", + "os": "windows", + "tags": [ + "4.7.2-20180905-nanoserver-1803" + ] + }, + { + "architecture": "amd64", + "changeableAttributes": { + "deleteEnabled": true, + "listEnabled": true, + "readEnabled": true, + "writeEnabled": true + }, + "createdTime": "2018-09-07T16:30:46.5651701Z", + "digest": "sha256:7af5cd1dde3e8f5c2c9103860afa4ca871a6075373b6564b0e7b1b47866dab52", + "imageSize": 4135121, + "lastUpdateTime": "2018-09-07T16:30:46.5651701Z", + "os": "windows", + "tags": [ + "4.7.2-20180906-nanoserver-1803" + ] + } + ], + "registry": "acrapi.azurecr.io" + } + } + }, + "operationId": "ContainerRegistry_GetManifests", + "title": "Get list of available manifests" +} diff --git a/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetRepositoryAttributes.json b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetRepositoryAttributes.json new file mode 100644 index 000000000000..17eab0975aff --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetRepositoryAttributes.json @@ -0,0 +1,27 @@ +{ + "parameters": { + "name": "nanoserver", + "api-version": "2021-07-01", + "url": "acrapi.azurecr.io" + }, + "responses": { + "200": { + "body": { + "changeableAttributes": { + "deleteEnabled": true, + "listEnabled": true, + "readEnabled": true, + "writeEnabled": true + }, + "createdTime": "2018-09-06T06:17:20.9531248Z", + "imageName": "nanoserver", + "lastUpdateTime": "2018-09-07T16:30:46.6583219Z", + "manifestCount": 2, + "registry": "acrapi.azurecr.io", + "tagCount": 2 + } + } + }, + "operationId": "ContainerRegistry_GetProperties", + "title": "Get details of repository" +} diff --git a/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetRepositoryList.json b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetRepositoryList.json new file mode 100644 index 000000000000..ae4ffd6f1036 --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetRepositoryList.json @@ -0,0 +1,18 @@ +{ + "parameters": { + "api-version": "2021-07-01", + "url": "acrapi.azurecr.io" + }, + "responses": { + "200": { + "body": { + "repositories": [ + "production/alpine", + "testing/alpine" + ] + } + } + }, + "operationId": "ContainerRegistry_GetRepositories", + "title": "Get repositories in a registry" +} diff --git a/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetTagAttributes.json b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetTagAttributes.json new file mode 100644 index 000000000000..0bc9ecc9b58a --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetTagAttributes.json @@ -0,0 +1,30 @@ +{ + "parameters": { + "name": "test/bash", + "api-version": "2021-07-01", + "reference": "sha256:eabe547f78d4c18c708dd97ec3166cf7464cc651f1cbb67e7afas407405b7ad7b6", + "url": "acrapi.azurecr.io" + }, + "responses": { + "200": { + "body": { + "imageName": "test/bash", + "registry": "acrapi.azurecr.io", + "tag": { + "name": "tagName", + "changeableAttributes": { + "deleteEnabled": true, + "listEnabled": true, + "readEnabled": true, + "writeEnabled": false + }, + "createdTime": "2018-10-05T20:54:24.1286047Z", + "digest": "sha256:eabe547f78d4c18c708dd97ec3166cf7464cc651f1cbb67e70d407405b7ad7b6", + "lastUpdateTime": "2018-10-05T20:54:24.1286047Z" + } + } + } + }, + "operationId": "ContainerRegistry_GetTagProperties", + "title": "Get tag attributes" +} diff --git a/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetTagList.json b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetTagList.json new file mode 100644 index 000000000000..7c5a6f494581 --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/GetTagList.json @@ -0,0 +1,43 @@ +{ + "parameters": { + "name": "nanoserver", + "api-version": "2021-07-01", + "url": "acrapi.azurecr.io" + }, + "responses": { + "200": { + "body": { + "imageName": "nanoserver", + "registry": "acrapi.azurecr.io", + "tags": [ + { + "name": "4.7.2-20180905-nanoserver-1803", + "changeableAttributes": { + "deleteEnabled": true, + "listEnabled": true, + "readEnabled": true, + "writeEnabled": true + }, + "createdTime": "2018-09-06T06:17:21.0856539Z", + "digest": "sha256:110d2b6c84592561338aa040b1b14b7ab81c2f9edbd564c2285dd7d70d777086", + "lastUpdateTime": "2018-09-06T06:17:21.0856539Z" + }, + { + "name": "4.7.2-20180906-nanoserver-1803", + "changeableAttributes": { + "deleteEnabled": true, + "listEnabled": true, + "readEnabled": true, + "writeEnabled": true + }, + "createdTime": "2018-09-06T16:30:43.3860166Z", + "digest": "sha256:7af5cd1dde3e8f5c2c9103860afa4ca871a6075373b6564b0e7b1b47866dab52", + "lastUpdateTime": "2018-09-07T16:30:46.7022734Z" + } + ] + } + } + }, + "operationId": "ContainerRegistry_GetTags", + "title": "Get tags of a repository" +} diff --git a/specification/containerregistry/data-plane/Registry/examples/2021-07-01/MountBlob.json b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/MountBlob.json new file mode 100644 index 000000000000..db47907272ad --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/MountBlob.json @@ -0,0 +1,18 @@ +{ + "parameters": { + "name": "newimage", + "from": "sha256:16463e0c481e161aabb735437d30b3c9c7391c2747cc564bb927e843b73dcb39", + "mount": "prod/bash", + "url": "acrapi.azurecr.io" + }, + "responses": { + "201": { + "headers": { + "Docker-Content-Digest": "sha256:16463e0c481e161aabb735437d30b3c9c7391c2747cc564bb927e843b73dcb39", + "Location": "/v2/somethingnew/blobs/sha256:16463e0c481e161aabb735437d30b3c9c7391c2747cc564bb927e843b73dcb39" + } + } + }, + "operationId": "ContainerRegistryBlob_MountBlob", + "title": "Mount a blob from repository" +} diff --git a/specification/containerregistry/data-plane/Registry/examples/2021-07-01/PostAccessToken.json b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/PostAccessToken.json new file mode 100644 index 000000000000..4b29ccb2c576 --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/PostAccessToken.json @@ -0,0 +1,19 @@ +{ + "parameters": { + "api-version": "2021-07-01", + "grantType": "refresh_token", + "refresh_token": "eyJ0eXAiOiJKJhbGci1dCI6IkN0ZlFDOExlLTMejlnIiwidGlkIjoiNzJmOTgWItMmQ3Y2QwMTFkYjQ3Ii...", + "scope": "registry:catalog:*", + "service": "someregistry.azurecr.io", + "url": "acrapi.azurecr.io" + }, + "responses": { + "200": { + "body": { + "access_token": "eyJ0eXAiOiJKJhbGcigdCI6IkN0ZlFaOExlLTMejlnIiwidGlkIjoiNzbmOTgWItMmQ3Y2QwMTFkYjQ3Ii..." + } + } + }, + "operationId": "Authentication_ExchangeAcrRefreshTokenForAcrAccessToken", + "title": "Get Access Token with Refresh Token" +} diff --git a/specification/containerregistry/data-plane/Registry/examples/2021-07-01/PostRefreshToken.json b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/PostRefreshToken.json new file mode 100644 index 000000000000..2bf619073e97 --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/PostRefreshToken.json @@ -0,0 +1,19 @@ +{ + "parameters": { + "access_token": "eyJ0eXAiOiJKJhbGci1dCI6IkN0ZlFDOExlLTMejlnIiwidGlkIjoiNzJmOTgWItMmQ3Y2QwMTFkYjQ3Ii...", + "api-version": "2021-07-01", + "grantType": "access_token", + "service": "someregistry.azurecr.io", + "tenant": "02f900bf-86f1-31af-p1ab-2b7cd0nndb47", + "url": "acrapi.azurecr.io" + }, + "responses": { + "200": { + "body": { + "refresh_token": "eyJ0eXAiOiJKJhbGcigdCI6IkN0ZlFaOExlLTMejlnIiwidGlkIjoiNzbmOTgWItMmQ3Y2QwMTFkYjQ3Ii..." + } + } + }, + "operationId": "Authentication_ExchangeAadAccessTokenForAcrRefreshToken", + "title": "Exchange AAD Token for ACR Refresh" +} diff --git a/specification/containerregistry/data-plane/Registry/examples/2021-07-01/StartBlobUpload.json b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/StartBlobUpload.json new file mode 100644 index 000000000000..464a59315b83 --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/StartBlobUpload.json @@ -0,0 +1,17 @@ +{ + "parameters": { + "name": "newimg", + "url": "acrapi.azurecr.io" + }, + "responses": { + "202": { + "headers": { + "Docker-Upload-Uuid": "f6d3451c-3352-43ff-b67c-fd0cfc793066", + "Location": "/v2/blobland/blobs/uploads/f6d3451c-3352-43ff-b67c-fd0cfc793066?_nouploadcache=false&_state=iWTaVpaWiz23JTt8ZsYFPEU5JwLOFgdumWOmqGxIYGt7Ik5hbWUiOiJibG9ibGFuZCIsIlVVSUQiOiJmNmQzNDUxYy0zMzUyLTQzZmYtYjY3Yy1mZDBjZmM3OTMwNjYiLCJPZmZzZXQiOjAsIlN0YXJ0ZWRBdCI6IjIwMTktMDgtMjdUMjM6NTI6NTQuNTM1MDQ5ODY1WiJ9", + "Range": "0-0" + } + } + }, + "operationId": "ContainerRegistryBlob_StartUpload", + "title": "Start a blob upload" +} diff --git a/specification/containerregistry/data-plane/Registry/examples/2021-07-01/UpdateManifestAttributes.json b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/UpdateManifestAttributes.json new file mode 100644 index 000000000000..4c427d216fac --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/UpdateManifestAttributes.json @@ -0,0 +1,38 @@ +{ + "parameters": { + "name": "nanoserver", + "api-version": "2021-07-01", + "digest": "sha256:110d2b6c84592561338aa040b1b14b7ab81c2f9edbd564c2285dd7d70d777086", + "url": "acrapi.azurecr.io", + "value": { + "writeEnabled": false + } + }, + "responses": { + "200": { + "body": { + "imageName": "nanoserver", + "manifest": { + "architecture": "amd64", + "changeableAttributes": { + "deleteEnabled": true, + "listEnabled": true, + "readEnabled": true, + "writeEnabled": false + }, + "createdTime": "2018-09-06T06:17:20.9983915Z", + "digest": "sha256:110d2b6c84592561338aa040b1b14b7ab81c2f9edbd564c2285dd7d70d777086", + "imageSize": 2401606, + "lastUpdateTime": "2018-09-06T06:17:20.9983915Z", + "os": "windows", + "tags": [ + "4.7.2-20180905-nanoserver-1803" + ] + }, + "registry": "acrapi.azurecr.io" + } + } + }, + "operationId": "ContainerRegistry_UpdateManifestProperties", + "title": "Update attributes of a manifest" +} diff --git a/specification/containerregistry/data-plane/Registry/examples/2021-07-01/UpdateRepositoryAttributes.json b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/UpdateRepositoryAttributes.json new file mode 100644 index 000000000000..3a1a92782e8c --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/UpdateRepositoryAttributes.json @@ -0,0 +1,30 @@ +{ + "parameters": { + "name": "nanoserver", + "api-version": "2021-07-01", + "url": "acrapi.azurecr.io", + "value": { + "writeEnabled": false + } + }, + "responses": { + "200": { + "body": { + "changeableAttributes": { + "deleteEnabled": true, + "listEnabled": true, + "readEnabled": true, + "writeEnabled": false + }, + "createdTime": "2018-09-06T06:17:20.9531248Z", + "imageName": "nanoserver", + "lastUpdateTime": "2018-09-07T16:30:46.6583219Z", + "manifestCount": 2, + "registry": "acrapi.azurecr.io", + "tagCount": 2 + } + } + }, + "operationId": "ContainerRegistry_UpdateProperties", + "title": "Update repository attributes" +} diff --git a/specification/containerregistry/data-plane/Registry/examples/2021-07-01/UpdateTagAttributes.json b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/UpdateTagAttributes.json new file mode 100644 index 000000000000..9a93115d98f4 --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/UpdateTagAttributes.json @@ -0,0 +1,33 @@ +{ + "parameters": { + "name": "nanoserver", + "api-version": "2021-07-01", + "reference": "4.7.2-20180905-nanoserver-1803", + "url": "acrapi.azurecr.io", + "value": { + "writeEnabled": false + } + }, + "responses": { + "200": { + "body": { + "imageName": "test/bash", + "registry": "acrapi.azurecr.io", + "tag": { + "name": "tagName", + "changeableAttributes": { + "deleteEnabled": true, + "listEnabled": true, + "readEnabled": true, + "writeEnabled": false + }, + "createdTime": "2018-10-05T20:54:24.1286047Z", + "digest": "sha256:eabe547f78d4c18c708dd97ec3166cf7464cc651f1cbb67e70d407405b7ad7b6", + "lastUpdateTime": "2018-10-05T20:54:24.1286047Z" + } + } + } + }, + "operationId": "ContainerRegistry_UpdateTagAttributes", + "title": "Update attributes of a tag" +} diff --git a/specification/containerregistry/data-plane/Registry/examples/2021-07-01/UploadBlob.json b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/UploadBlob.json new file mode 100644 index 000000000000..3a3cbe5732a5 --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/examples/2021-07-01/UploadBlob.json @@ -0,0 +1,18 @@ +{ + "parameters": { + "nextBlobUuidLink": "v2/blobland/blobs/uploads/2b28c60d-d296-44b7-b2b4-1f01c63195c6?_nouploadcache=false&_state=VYABvUSCNW2yY5e5VabLHppXqwU0K7cvT0YUdq57KBt7Ik5hbWUiOiJibG9ibGFuZCIsIlVVSUQiOiIyYjI4YzYwZC1kMjk2LTQ0YjctYjJiNC0xZjAxYzYzMTk1YzYiLCJPZmZzZXQiOjAsIlN0YXJ0ZWRBdCI6IjIwMTktMDgtMjdUMjM6NTI6NDcuMDUzNjU2Mjg1WiJ9", + "url": "acrapi.azurecr.io", + "value": "U29tZXRoaW5nRWxzZQ==" + }, + "responses": { + "202": { + "headers": { + "Docker-Upload-Uuid": "f6d3451c-3352-43ff-b67c-fd0cfc793066", + "Location": "/v2/blobland/blobs/uploads/f6d3451c-3352-43ff-b67c-fd0cfc793066?_nouploadcache=false&_state=9G2t2KQOw-ANeo5TrnwVb5OeAUIe0NaEJ2jxwLT6Y1J7Ik5hbWUiOiJibG9ibGFuZCIsIlVVSUQiOiJmNmQzNDUxYy0zMzUyLTQzZmYtYjY3Yy1mZDBjZmM3OTMwNjYiLCJPZmZzZXQiOjEzLCJTdGFydGVkQXQiOiIyMDE5LTA4LTI3VDIzOjUyOjU0WiJ9", + "Range": "0-12" + } + } + }, + "operationId": "ContainerRegistryBlob_UploadChunk", + "title": "Upload Blob" +} diff --git a/specification/containerregistry/data-plane/Registry/main.tsp b/specification/containerregistry/data-plane/Registry/main.tsp new file mode 100644 index 000000000000..1e0122c2ea01 --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/main.tsp @@ -0,0 +1,48 @@ +/** + * PLEASE DO NOT REMOVE - USED FOR CONVERTER METRICS + * Generated by package: @autorest/openapi-to-typespec + * Parameters used: + * isFullCompatible: false + * guessResourceKey: false + * Version: 0.11.12 + * Date: 2025-11-10T16:16:12.397Z + */ +import "@typespec/rest"; +import "@typespec/http"; +import "./routes.tsp"; + +using TypeSpec.Http; +using TypeSpec.Versioning; + +/** + * Metadata API definition for the Azure Container Registry runtime + */ +@service(#{ title: "Azure Container Registry" }) +@versioned(Versions) +@server( + "{endpoint}", + "Metadata API definition for the Azure Container Registry runtime", + { + endpoint: url, + } +) +@useAuth( + OAuth2Auth<[ + { + type: OAuth2FlowType.implicit, + authorizationUrl: "https://login.microsoftonline.com/common/oauth2/authorize", + scopes: ["https://containerregistry.azure.net/.default"], + } + ]> +) +namespace ContainerRegistry; + +/** + * The available API versions. + */ +enum Versions { + /** + * The 2021-07-01 API version. + */ + v2021_07_01: "2021-07-01", +} diff --git a/specification/containerregistry/data-plane/Registry/models.tsp b/specification/containerregistry/data-plane/Registry/models.tsp new file mode 100644 index 000000000000..bf8c59251f84 --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/models.tsp @@ -0,0 +1,1235 @@ +import "@typespec/rest"; +import "@typespec/http"; +import "@azure-tools/typespec-azure-core"; + +using TypeSpec.Http; +using Azure.Core; + +namespace ContainerRegistry; + +/** The multipart body parameter for AAD token exchange. */ +model MultipartBodyParameter { + /** + * Can take a value of access_token_refresh_token, or access_token, or + * refresh_token + */ + grantType: HttpPart; + + /** + * Indicates the name of your Azure container registry. + */ + service: HttpPart; + + /** + * AAD tenant associated to the AAD credentials. + */ + tenant?: HttpPart; + + /** + * AAD refresh token, mandatory when grant_type is access_token_refresh_token or + * refresh_token + */ + refreshToken?: HttpPart; + + /** + * AAD access token, mandatory when grant_type is access_token_refresh_token or + * access_token. + */ + accessToken?: HttpPart; +} + +/** + * The artifact platform's architecture. + */ +union ArtifactArchitecture { + string, + + /** + * i386 + */ + I386: "386", + + /** + * AMD64 + */ + Amd64: "amd64", + + /** + * ARM + */ + Arm: "arm", + + /** + * ARM64 + */ + Arm64: "arm64", + + /** + * MIPS + */ + Mips: "mips", + + /** + * MIPSLE + */ + MipsLe: "mipsle", + + /** + * MIPS64 + */ + Mips64: "mips64", + + /** + * MIPS64LE + */ + Mips64Le: "mips64le", + + /** + * PPC64 + */ + Ppc64: "ppc64", + + /** + * PPC64LE + */ + Ppc64Le: "ppc64le", + + /** + * RISCv64 + */ + RiscV64: "riscv64", + + /** + * s390x + */ + S390x: "s390x", + + /** + * Wasm + */ + Wasm: "wasm", +} + +/** The artifact platform's operating system. */ +union ArtifactOperatingSystem { + string, + + /** AIX operating system */ + Aix: "aix", + + /** Android operating system */ + Android: "android", + + /** Darwin operating system */ + Darwin: "darwin", + + /** Dragonfly operating system */ + Dragonfly: "dragonfly", + + /** FreeBSD operating system */ + FreeBsd: "freebsd", + + /** Illumos operating system */ + Illumos: "illumos", + + /** iOS operating system */ + iOS: "ios", + + /** JavaScript operating system */ + JS: "js", + + /** Linux operating system */ + Linux: "linux", + + /** NetBSD operating system */ + NetBsd: "netbsd", + + /** OpenBSD operating system */ + OpenBsd: "openbsd", + + /** Plan 9 operating system */ + Plan9: "plan9", + + /** Solaris operating system */ + Solaris: "solaris", + + /** Windows operating system */ + Windows: "windows", +} + +/** + * Can take a value of access_token_refresh_token, or access_token, or + * refresh_token + */ +union PostContentSchemaGrantType { + string, + + /** Grant type for exchanging both access token and refresh token */ + access_token_refresh_token: "access_token_refresh_token", + + /** Grant type for exchanging access token only */ + access_token: "access_token", + + /** Grant type for exchanging refresh token only */ + refresh_token: "refresh_token", +} + +/** + * Grant type is expected to be refresh_token + */ +union TokenGrantType { + string, + + /** Grant type for refreshing the token */ + refresh_token: "refresh_token", + + /** Grant type for password authentication */ + password: "password", +} + +/** + * Sort options for ordering tags in a collection. + */ +union ArtifactTagOrder { + string, + + /** + * Do not provide an orderby value in the request. + */ + None: "none", + + /** + * Order tags by LastUpdatedOn field, from most recently updated to least recently + * updated. + */ + LastUpdatedOnDescending: "timedesc", + + /** + * Order tags by LastUpdatedOn field, from least recently updated to most recently + * updated. + */ + LastUpdatedOnAscending: "timeasc", +} + +/** + * Sort options for ordering manifests in a collection. + */ +union ArtifactManifestOrder { + string, + + /** + * Do not provide an orderby value in the request. + */ + None: "none", + + /** + * Order manifests by LastUpdatedOn field, from most recently updated to least + * recently updated. + */ + LastUpdatedOnDescending: "timedesc", + + /** + * Order manifest by LastUpdatedOn field, from least recently updated to most + * recently updated. + */ + LastUpdatedOnAscending: "timeasc", +} + +/** + * Acr error response describing why the operation failed + */ +@error +model AcrErrors { + /** + * Array of detailed error + */ + errors?: AcrErrorInfo[]; +} + +/** + * Error information + */ +model AcrErrorInfo { + /** + * Error code + */ + code?: string; + + /** + * Error message + */ + message?: string; + + /** + * Error details + */ + detail?: {}; +} + +/** + * Returns the requested manifest file + */ +#suppress "@azure-tools/typespec-azure-core/composition-over-inheritance" "For backward compatibility" +model ManifestWrapper extends Manifest { + /** + * Media type for this Manifest + */ + mediaType?: string; + + /** + * (ManifestList, OCIIndex) List of V2 image layer information + */ + manifests?: ManifestListAttributes[]; + + /** + * (V2, OCI) Image config descriptor + */ + config?: Descriptor; + + /** + * (V2, OCI) List of V2 image layer information + */ + layers?: Descriptor[]; + + /** + * (OCI, OCIIndex) Additional metadata + */ + annotations?: Annotations; + + /** + * (V1) CPU architecture + */ + architecture?: string; + + /** + * (V1) Image name + */ + name?: string; + + /** + * (V1) Image tag + */ + tag?: string; + + /** + * (V1) List of layer information + */ + fsLayers?: FsLayer[]; + + /** + * (V1) Image history + */ + history?: History[]; + + /** + * (V1) Image signature + */ + signatures?: ImageSignature[]; +} + +/** Attributes of a manifest in a manifest list. */ +model ManifestListAttributes { + /** + * The MIME type of the referenced object. This will generally be + * application/vnd.docker.image.manifest.v2+json, but it could also be + * application/vnd.docker.image.manifest.v1+json + */ + mediaType?: string; + + /** + * The size in bytes of the object + */ + size?: int64; + + /** + * The digest of the content, as defined by the Registry V2 HTTP API Specification + */ + digest?: string; + + /** + * The platform object describes the platform which the image in the manifest runs + * on. A full list of valid operating system and architecture values are listed in + * the Go language documentation for $GOOS and $GOARCH + */ + platform?: Platform; +} + +/** + * The platform object describes the platform which the image in the manifest runs + * on. A full list of valid operating system and architecture values are listed in + * the Go language documentation for $GOOS and $GOARCH + */ +model Platform { + /** + * Specifies the CPU architecture, for example amd64 or ppc64le. + */ + architecture?: string; + + /** + * The os field specifies the operating system, for example linux or windows. + */ + os?: string; + + /** + * The optional os.version field specifies the operating system version, for + * example 10.0.10586. + */ + @encodedName("application/json", "os.version") + osVersion?: string; + + /** + * The optional os.features field specifies an array of strings, each listing a + * required OS feature (for example on Windows win32k + */ + @encodedName("application/json", "os.features") + osFeatures?: string[]; + + /** + * The optional variant field specifies a variant of the CPU, for example armv6l + * to specify a particular CPU variant of the ARM CPU. + */ + variant?: string; + + /** + * The optional features field specifies an array of strings, each listing a + * required CPU feature (for example sse4 or aes + */ + features?: string[]; +} + +/** + * Docker V2 image layer descriptor including config and layers + */ +model Descriptor { + /** + * Layer media type + */ + mediaType?: string; + + /** + * Layer size + */ + size?: int64; + + /** + * Layer digest + */ + digest?: string; + + /** + * Specifies a list of URIs from which this object may be downloaded. + */ + urls?: string[]; + + /** + * Additional information provided through arbitrary metadata. + */ + annotations?: Annotations; +} + +/** + * Additional information provided through arbitrary metadata. + */ +model Annotations { + ...Record>; + + /** + * Date and time on which the image was built (string, date-time as defined by + * https://tools.ietf.org/html/rfc3339#section-5.6) + */ + // FIXME: (utcDateTime) Please double check that this is the correct type for your scenario. + @encodedName("application/json", "org.opencontainers.image.created") + created?: utcDateTime; + + /** + * Contact details of the people or organization responsible for the image. + */ + @encodedName("application/json", "org.opencontainers.image.authors") + authors?: string; + + /** + * URL to find more information on the image. + */ + @encodedName("application/json", "org.opencontainers.image.url") + url?: string; + + /** + * URL to get documentation on the image. + */ + @encodedName("application/json", "org.opencontainers.image.documentation") + documentation?: string; + + /** + * URL to get source code for building the image. + */ + @encodedName("application/json", "org.opencontainers.image.source") + source?: string; + + /** + * Version of the packaged software. The version MAY match a label or tag in the + * source code repository, may also be Semantic versioning-compatible + */ + @encodedName("application/json", "org.opencontainers.image.version") + version?: string; + + /** + * Source control revision identifier for the packaged software. + */ + @encodedName("application/json", "org.opencontainers.image.revision") + revision?: string; + + /** + * Name of the distributing entity, organization or individual. + */ + @encodedName("application/json", "org.opencontainers.image.vendor") + vendor?: string; + + /** + * License(s) under which contained software is distributed as an SPDX License + * Expression. + */ + @encodedName("application/json", "org.opencontainers.image.licenses") + licenses?: string; + + /** + * Name of the reference for a target. + */ + @encodedName("application/json", "org.opencontainers.image.ref.name") + name?: string; + + /** + * Human-readable title of the image + */ + @encodedName("application/json", "org.opencontainers.image.title") + title?: string; + + /** + * Human-readable description of the software packaged in the image + */ + @encodedName("application/json", "org.opencontainers.image.description") + description?: string; +} + +/** + * Image layer information + */ +model FsLayer { + /** + * SHA of an image layer + */ + blobSum?: string; +} + +/** + * A list of unstructured historical data for v1 compatibility + */ +model History { + /** + * The raw v1 compatibility information + */ + v1Compatibility?: string; +} + +/** + * Signature of a signed manifest + */ +model ImageSignature { + /** + * A JSON web signature + */ + header?: JWK; + + /** + * A signature for the image manifest, signed by a libtrust private key + */ + signature?: string; + + /** + * The signed protected header + */ + protected?: string; +} + +/** + * A JSON web signature + */ +#suppress "@azure-tools/typespec-azure-core/casing-style" "For backward compatibility" +#suppress "@azure-tools/typespec-client-generator-core/property-name-conflict" "For backward compatibility" +model JWK { + /** + * JSON web key parameter + */ + jwk?: JWKHeader; + + /** + * The algorithm used to sign or encrypt the JWT + */ + alg?: string; +} + +/** + * JSON web key parameter + */ +#suppress "@azure-tools/typespec-azure-core/casing-style" "For backward compatibility" +model JWKHeader { + /** + * crv value + */ + crv?: string; + + /** + * kid value + */ + kid?: string; + + /** + * kty value + */ + kty?: string; + + /** + * x value + */ + x?: string; + + /** + * y value + */ + y?: string; +} + +/** + * Returns the requested manifest file + */ +model Manifest { + /** + * Schema version + */ + schemaVersion?: int32; +} + +/** + * List of repositories + */ +#suppress "@azure-tools/typespec-client-generator-core/property-name-conflict" "For backward compatibility" +model Repositories { + /** + * Repository names + */ + @pageItems + repositories?: string[]; + + /** + * Link to the next page of results + */ + @nextLink + link?: string; +} + +/** + * Properties of this repository. + */ +model ContainerRepositoryProperties { + /** + * Registry login server name. This is likely to be similar to + * {registry-name}.azurecr.io. + */ + @visibility(Lifecycle.Read) + registry: string; + + /** + * Image name + */ + @visibility(Lifecycle.Read) + imageName: string; + + /** + * Image created time + */ + @visibility(Lifecycle.Read) + // FIXME: (utcDateTime) Please double check that this is the correct type for your scenario. + createdTime: utcDateTime; + + /** + * Image last update time + */ + @visibility(Lifecycle.Read) + // FIXME: (utcDateTime) Please double check that this is the correct type for your scenario. + lastUpdateTime: utcDateTime; + + /** + * Number of the manifests + */ + @visibility(Lifecycle.Read) + manifestCount: int32; + + /** + * Number of the tags + */ + @visibility(Lifecycle.Read) + tagCount: int32; + + /** + * Writeable properties of the resource + */ + changeableAttributes: RepositoryChangeableAttributes; +} + +/** + * Changeable attributes for Repository + */ +model RepositoryChangeableAttributes { + /** + * Delete enabled + */ + deleteEnabled?: boolean; + + /** + * Write enabled + */ + writeEnabled?: boolean; + + /** + * List enabled + */ + listEnabled?: boolean; + + /** + * Read enabled + */ + readEnabled?: boolean; +} + +/** + * Deleted repository + */ +model DeleteRepositoryResult { + /** + * SHA of the deleted image + */ + @visibility(Lifecycle.Read) + manifestsDeleted?: string[]; + + /** + * Tag of the deleted image + */ + @visibility(Lifecycle.Read) + tagsDeleted?: string[]; +} + +/** + * List of tag details + */ +model TagList { + /** + * Registry login server name. This is likely to be similar to + * {registry-name}.azurecr.io. + */ + registry: string; + + /** + * Image name + */ + imageName: string; + + /** + * List of tag attribute details + */ + @pageItems + tags: TagAttributesBase[]; + + /** + * Link to the next page of results + */ + @nextLink + link?: string; +} + +/** + * Tag attribute details + */ +model TagAttributesBase { + /** + * Tag name + */ + @visibility(Lifecycle.Read) + name: string; + + /** + * Tag digest + */ + @visibility(Lifecycle.Read) + digest: string; + + /** + * Tag created time + */ + @visibility(Lifecycle.Read) + // FIXME: (utcDateTime) Please double check that this is the correct type for your scenario. + createdTime: utcDateTime; + + /** + * Tag last update time + */ + @visibility(Lifecycle.Read) + // FIXME: (utcDateTime) Please double check that this is the correct type for your scenario. + lastUpdateTime: utcDateTime; + + /** + * Is signed + */ + signed?: boolean; + + /** + * Writeable properties of the resource + */ + changeableAttributes: TagChangeableAttributes; +} + +/** + * Changeable attributes + */ +model TagChangeableAttributes { + /** + * Delete enabled + */ + deleteEnabled?: boolean; + + /** + * Write enabled + */ + writeEnabled?: boolean; + + /** + * List enabled + */ + listEnabled?: boolean; + + /** + * Read enabled + */ + readEnabled?: boolean; +} + +/** + * Tag attributes + */ +model ArtifactTagProperties { + /** + * Registry login server name. This is likely to be similar to + * {registry-name}.azurecr.io. + */ + @visibility(Lifecycle.Read) + registry: string; + + /** + * Image name + */ + @visibility(Lifecycle.Read) + imageName: string; + + /** + * List of tag attribute details + */ + @visibility(Lifecycle.Read) + tag: TagAttributesBase; +} + +/** + * Manifest attributes + */ +model AcrManifests { + /** + * Registry login server name. This is likely to be similar to + * {registry-name}.azurecr.io. + */ + registry?: string; + + /** + * Image name + */ + imageName?: string; + + /** + * List of manifests + */ + @pageItems + manifests?: ManifestAttributesBase[]; + + /** + * Link to the next page of results + */ + @nextLink + link?: string; +} + +/** + * Manifest details + */ +model ManifestAttributesBase { + /** + * Manifest + */ + @visibility(Lifecycle.Read) + digest: string; + + /** + * Image size + */ + @visibility(Lifecycle.Read) + imageSize?: int64; + + /** + * Created time + */ + @visibility(Lifecycle.Read) + // FIXME: (utcDateTime) Please double check that this is the correct type for your scenario. + createdTime: utcDateTime; + + /** + * Last update time + */ + @visibility(Lifecycle.Read) + // FIXME: (utcDateTime) Please double check that this is the correct type for your scenario. + lastUpdateTime: utcDateTime; + + /** + * CPU architecture + */ + @visibility(Lifecycle.Read) + architecture?: ArtifactArchitecture; + + /** + * Operating system + */ + @visibility(Lifecycle.Read) + os?: ArtifactOperatingSystem; + + /** + * List of artifacts that are referenced by this manifest list, with information + * about the platform each supports. This list will be empty if this is a leaf + * manifest and not a manifest list. + */ + @visibility(Lifecycle.Read) + references?: ArtifactManifestPlatform[]; + + /** + * Config blob media type + */ + configMediaType?: string; + + /** + * List of tags + */ + @visibility(Lifecycle.Read) + tags?: string[]; + + /** + * Writeable properties of the resource + */ + changeableAttributes?: ManifestChangeableAttributes; +} + +/** + * The artifact's platform, consisting of operating system and architecture. + */ +model ArtifactManifestPlatform { + /** + * Manifest digest + */ + @visibility(Lifecycle.Read) + digest: string; + + /** + * CPU architecture + */ + @visibility(Lifecycle.Read) + architecture?: ArtifactArchitecture; + + /** + * Operating system + */ + @visibility(Lifecycle.Read) + os?: ArtifactOperatingSystem; +} + +/** + * Changeable attributes + */ +model ManifestChangeableAttributes { + /** + * Delete enabled + */ + deleteEnabled?: boolean; + + /** + * Write enabled + */ + writeEnabled?: boolean; + + /** + * List enabled + */ + listEnabled?: boolean; + + /** + * Read enabled + */ + readEnabled?: boolean; +} + +/** + * Manifest attributes details + */ +model ArtifactManifestProperties { + /** + * Registry login server name. This is likely to be similar to + * {registry-name}.azurecr.io. + */ + @visibility(Lifecycle.Read) + registry?: string; + + /** + * Repository name + */ + @visibility(Lifecycle.Read) + imageName?: string; + + /** + * Manifest attributes + */ + @visibility(Lifecycle.Read) + manifest: ManifestAttributesBase; +} + +/** The ACR refresh token response containing the refresh token for authentication. */ +model AcrRefreshToken { + /** + * The refresh token to be used for generating access tokens + */ + @encodedName("application/json", "refresh_token") + refreshToken?: string; +} + +/** The ACR access token response containing the access token for authentication. */ +model AcrAccessToken { + /** + * The access token for performing authenticated requests + */ + @encodedName("application/json", "access_token") + accessToken?: string; +} + +/** + * Result of the request to list tags of the image + */ +model RepositoryTags { + /** + * Name of the image + */ + name?: string; + + /** + * List of tags + */ + tags?: string[]; +} + +/** + * Tag + */ +model TagAttributesTag { + /** + * SignatureRecord value + */ + signatureRecord?: string; +} + +/** + * List of manifest attributes + */ +model ManifestAttributesManifest { + /** + * List of manifest attributes details + */ + references?: ArtifactManifestPlatform[]; +} + +/** + * Returns the requested Docker multi-arch-manifest file + */ +#suppress "@azure-tools/typespec-azure-core/composition-over-inheritance" "For backward compatibility" +model ManifestList extends Manifest { + /** + * Media type for this Manifest + */ + mediaType?: string; + + /** + * List of V2 image layer information + */ + manifests?: ManifestListAttributes[]; +} + +/** + * Returns the requested Docker V2 Manifest file + */ +#suppress "@azure-tools/typespec-azure-core/composition-over-inheritance" "For backward compatibility" +model V2Manifest extends Manifest { + /** + * Media type for this Manifest + */ + mediaType?: string; + + /** + * V2 image config descriptor + */ + config?: Descriptor; + + /** + * List of V2 image layer information + */ + layers?: Descriptor[]; +} + +/** + * Returns the requested OCI Manifest file + */ +#suppress "@azure-tools/typespec-azure-core/composition-over-inheritance" "For backward compatibility" +#suppress "@azure-tools/typespec-azure-core/casing-style" "For backward compatibility" +model OCIManifest extends Manifest { + /** + * V2 image config descriptor + */ + config?: Descriptor; + + /** + * List of V2 image layer information + */ + layers?: Descriptor[]; + + /** + * Additional information provided through arbitrary metadata. + */ + annotations?: Annotations; +} + +/** + * Returns the requested OCI index file + */ +#suppress "@azure-tools/typespec-azure-core/composition-over-inheritance" "For backward compatibility" +#suppress "@azure-tools/typespec-azure-core/casing-style" "For backward compatibility" +model OCIIndex extends Manifest { + /** + * List of OCI image layer information + */ + manifests?: ManifestListAttributes[]; + + /** + * Additional information provided through arbitrary metadata. + */ + annotations?: Annotations; +} + +/** + * Returns the requested V1 manifest file + */ +#suppress "@azure-tools/typespec-azure-core/composition-over-inheritance" "For backward compatibility" +model V1Manifest extends Manifest { + /** + * CPU architecture + */ + architecture?: string; + + /** + * Image name + */ + name?: string; + + /** + * Image tag + */ + tag?: string; + + /** + * List of layer information + */ + fsLayers?: FsLayer[]; + + /** + * Image history + */ + history?: History[]; + + /** + * Image signature + */ + signatures?: ImageSignature[]; +} + +/** + * Paths108HwamOauth2ExchangePostRequestbodyContentApplicationXWwwFormUrlencodedSchema + */ +#suppress "@azure-tools/typespec-azure-core/casing-style" "For backward compatibility" +model Paths108HwamOauth2ExchangePostRequestbodyContentApplicationXWwwFormUrlencodedSchema { + /** + * Can take a value of access_token_refresh_token, or access_token, or + * refresh_token + */ + @encodedName("application/x-www-form-urlencoded", "grant_type") + grantType: PostContentSchemaGrantType; + + /** + * Indicates the name of your Azure container registry. + */ + service: string; + + /** + * AAD tenant associated to the AAD credentials. + */ + tenant?: string; + + /** + * AAD refresh token, mandatory when grant_type is access_token_refresh_token or + * refresh_token + */ + @encodedName("application/x-www-form-urlencoded", "refresh_token") + acrRefreshToken?: string; + + /** + * AAD access token, mandatory when grant_type is access_token_refresh_token or + * access_token. + */ + @encodedName("application/x-www-form-urlencoded", "access_token") + accessToken?: string; +} + +/** + * Paths108HwamOauth2ExchangePostRequestbodyContentApplicationXWwwFormUrlencodedSchema + */ +#suppress "@azure-tools/typespec-azure-core/casing-style" "For backward compatibility" +model PathsV3R3RxOauth2TokenPostRequestbodyContentApplicationXWwwFormUrlencodedSchema { + /** + * Indicates the name of your Azure container registry. + */ + service: string; + + /** + * Which is expected to be a valid scope, and can be specified more than once for + * multiple scope requests. You obtained this from the Www-Authenticate response + * header from the challenge. + */ + scope: string; + + /** + * Must be a valid ACR refresh token + */ + @encodedName("application/x-www-form-urlencoded", "refresh_token") + refreshToken: string; + + /** + * Grant type is expected to be refresh_token + */ + @encodedName("application/x-www-form-urlencoded", "grant_type") + grantType: TokenGrantType; +} diff --git a/specification/containerregistry/data-plane/Registry/readme.md b/specification/containerregistry/data-plane/Registry/readme.md index e2a7d79a4d58..26a870690219 100644 --- a/specification/containerregistry/data-plane/Registry/readme.md +++ b/specification/containerregistry/data-plane/Registry/readme.md @@ -27,6 +27,20 @@ These are the global settings for the ContainerRegistry API. # common openapi-type: data-plane tag: package-2021-07 + +suppressions: + - code: LroExtension + where: + - $.paths["/{nextBlobUuidLink}"].patch + - $.paths["/acr/v1/{name}"].delete + - $.paths["/acr/v1/{name}/_tags/{reference}"].delete + - $.paths["/v2/{name}/blobs/{digest}"].delete + - $.paths["/v2/{name}/manifests/{reference}"].delete + reason: These operations return 202 as an acceptance response per Docker Registry V2 API spec, not as an async LRO. The original swagger did not have x-ms-long-running-operation on these operations. + - code: AvoidAnonymousTypes + where: + - $.definitions["Annotations"].additionalProperties + reason: TypeSpec-generated data-plane spec. SDK is generated directly from TypeSpec, not swagger. ``` ### Tag: package-2021-07 diff --git a/specification/containerregistry/data-plane/Registry/routes.tsp b/specification/containerregistry/data-plane/Registry/routes.tsp new file mode 100644 index 000000000000..6316c3e8a559 --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/routes.tsp @@ -0,0 +1,903 @@ +import "@azure-tools/typespec-azure-core"; +import "@typespec/rest"; +import "./models.tsp"; + +using TypeSpec.Http; +using Azure.Core; +using Azure.Core.Foundations; + +namespace ContainerRegistry; + +/** + * Custom operation template that uses AcrErrors for error responses + * instead of Azure.Core.Foundations.ErrorResponse + */ +op AcrOperation< + TParams extends TypeSpec.Reflection.Model = {}, + TResponse extends TypeSpec.Reflection.Model | void = void, + TTraits extends TypeSpec.Reflection.Model = {} +> is Foundations.Operation; + +interface ContainerRegistry { + /** + * Tells whether this Docker Registry instance supports Docker Registry HTTP API v2 + */ + #suppress "@azure-tools/typespec-azure-core/use-standard-names" "Preserving existing API operation name for backward compatibility" + #suppress "@azure-tools/typespec-azure-core/use-standard-operations" "Existing API - must use current operation signature for backward compatibility" + @route("/v2/") + @get + checkDockerV2Support is AcrOperation< + {}, + { + @statusCode statusCode: 200; + } + >; + + /** + * Get the manifest identified by `name` and `reference` where `reference` can be + * a tag or digest. + */ + #suppress "@azure-tools/typespec-azure-core/use-standard-operations" "Existing API - must use current operation signature for backward compatibility" + @route("/v2/{name}/manifests/{reference}") + @get + getManifest is AcrOperation< + { + /** + * Name of the image (including the namespace) + */ + @path + name: string; + + /** + * A tag or a digest, pointing to a specific image + */ + @path + reference: string; + + /** + * Accept header string delimited by comma. For example, + * application/vnd.docker.distribution.manifest.v2+json + */ + @header + accept?: string; + }, + ManifestWrapper + >; + + /** + * Put the manifest identified by `name` and `reference` where `reference` can be + * a tag or digest. + */ + #suppress "@azure-tools/typespec-azure-core/use-standard-operations" "Existing API - must use current operation signature for backward compatibility" + @route("/v2/{name}/manifests/{reference}") + @put + createManifest is AcrOperation< + { + /** + * Content type for the manifest + */ + @header("Content-Type") + contentType: "application/vnd.docker.distribution.manifest.v2+json"; + + /** + * Name of the image (including the namespace) + */ + @path + name: string; + + /** + * A tag or a digest, pointing to a specific image + */ + @path + reference: string; + + /** + * Manifest body, can take v1 or v2 values depending on accept header + */ + @bodyRoot + payload: Manifest; + }, + { + @statusCode statusCode: 201; + @header("Location") location: string; + @header("Content-Length") contentLength: int64; + @header("Docker-Content-Digest") dockerContentDigest: string; + } + >; + + /** + * Delete the manifest identified by `name` and `reference`. Note that a manifest + * can _only_ be deleted by `digest`. + */ + #suppress "@azure-tools/typespec-azure-core/use-standard-operations" "Existing API - must use current operation signature for backward compatibility" + @route("/v2/{name}/manifests/{reference}") + @delete + deleteManifest is AcrOperation< + { + /** + * Name of the image (including the namespace) + */ + @path + name: string; + + /** + * Digest of a BLOB + */ + @path + reference: string; + }, + TypeSpec.Http.AcceptedResponse | NotFoundResponse + >; + + /** + * List repositories + */ + #suppress "@azure-tools/typespec-azure-core/use-standard-operations" "Existing API - must use current operation signature for backward compatibility" + #suppress "@azure-tools/typespec-azure-core/use-standard-names" "Preserving existing API operation name for backward compatibility" + @route("/acr/v1/_catalog") + @list + getRepositories is AcrOperation< + { + /** Query parameter for the last item in previous query. Result set will include values lexically after last. */ + @query("last") + last?: string; + + /** Query parameter for max number of items */ + @query("n") + n?: int32; + }, + { + /** next paginated result */ + @header("Link") + link?: string; + + @bodyRoot + body: Repositories; + } + >; + + /** + * Get repository attributes + */ + #suppress "@azure-tools/typespec-azure-core/use-standard-operations" "Existing API - must use current operation signature for backward compatibility" + @route("/acr/v1/{name}") + @get + getProperties is AcrOperation< + { + /** + * Name of the image (including the namespace) + */ + @path + name: string; + }, + ContainerRepositoryProperties + >; + + /** + * Delete the repository identified by `name` + */ + #suppress "@azure-tools/typespec-azure-core/use-standard-operations" "Existing API - must use current operation signature for backward compatibility" + @route("/acr/v1/{name}") + @delete + deleteRepository is AcrOperation< + { + /** + * Name of the image (including the namespace) + */ + @path + name: string; + }, + { + /** The repository is deleted */ + @statusCode statusCode: 202; + } | { + /** The repository was not found */ + @statusCode statusCode: 404; + } + >; + + /** + * Update the attribute identified by `name` where `reference` is the name of the + * repository. + */ + #suppress "@azure-tools/typespec-azure-core/use-standard-operations" "Existing API - must use current operation signature for backward compatibility" + @route("/acr/v1/{name}") + @patch(#{ implicitOptionality: true }) + updateProperties is AcrOperation< + { + /** + * Name of the image (including the namespace) + */ + @path + name: string; + + /** + * Repository attribute value + */ + @bodyRoot + value?: RepositoryChangeableAttributes; + }, + ContainerRepositoryProperties + >; + + /** + * List tags of a repository + */ + #suppress "@azure-tools/typespec-azure-core/use-standard-operations" "Existing API - must use current operation signature for backward compatibility" + @route("/acr/v1/{name}/_tags") + @get + getTags is AcrOperation< + { + /** + * Name of the image (including the namespace) + */ + @path + name: string; + + /** + * Query parameter for the last item in previous query. Result set will include + * values lexically after last. + */ + @query("last") + last?: string; + + /** + * query parameter for max number of items + */ + @query("n") + n?: int32; + + /** + * orderby query parameter + */ + @query("orderby") + orderby?: ArtifactTagOrder; + + /** + * filter by digest + */ + @query("digest") + digest?: string; + }, + { + /** next paginated result */ + @header("Link") + link?: string; + + @bodyRoot + body: TagList; + } + >; + + /** + * Get tag attributes by tag + */ + #suppress "@azure-tools/typespec-azure-core/use-standard-operations" "Existing API - must use current operation signature for backward compatibility" + @route("/acr/v1/{name}/_tags/{reference}") + @get + getTagProperties is AcrOperation< + { + /** + * Name of the image (including the namespace) + */ + @path + name: string; + + /** + * Tag name + */ + @path + reference: string; + }, + ArtifactTagProperties + >; + + /** + * Update tag attributes + */ + #suppress "@azure-tools/typespec-azure-core/use-standard-operations" "Existing API - must use current operation signature for backward compatibility" + @route("/acr/v1/{name}/_tags/{reference}") + @patch(#{ implicitOptionality: true }) + updateTagAttributes is AcrOperation< + { + /** + * Name of the image (including the namespace) + */ + @path + name: string; + + /** + * Tag name + */ + @path + reference: string; + + /** + * Tag attribute value + */ + @bodyRoot + value?: TagChangeableAttributes; + }, + ArtifactTagProperties + >; + + /** + * Delete tag + */ + #suppress "@azure-tools/typespec-azure-core/use-standard-operations" "Existing API - must use current operation signature for backward compatibility" + @route("/acr/v1/{name}/_tags/{reference}") + @delete + deleteTag is AcrOperation< + { + /** + * Name of the image (including the namespace) + */ + @path + name: string; + + /** + * Tag name + */ + @path + reference: string; + }, + { + @statusCode statusCode: 202; + } | NotFoundResponse + >; + + /** + * List manifests of a repository + */ + #suppress "@azure-tools/typespec-azure-core/use-standard-operations" "Existing API - must use current operation signature for backward compatibility" + @route("/acr/v1/{name}/_manifests") + @get + getManifests is AcrOperation< + { + /** + * Name of the image (including the namespace) + */ + @path + name: string; + + /** + * Query parameter for the last item in previous query. Result set will include + * values lexically after last. + */ + @query("last") + last?: string; + + /** + * query parameter for max number of items + */ + @query("n") + n?: int32; + + /** + * orderby query parameter + */ + @query("orderby") + orderby?: ArtifactManifestOrder; + }, + { + /** next paginated result */ + @header("Link") + link?: string; + + @bodyRoot + body: AcrManifests; + } + >; + + /** + * Get manifest attributes + */ + #suppress "@azure-tools/typespec-azure-core/use-standard-operations" "Existing API - must use current operation signature for backward compatibility" + @route("/acr/v1/{name}/_manifests/{digest}") + @get + getManifestProperties is AcrOperation< + { + /** + * Name of the image (including the namespace) + */ + @path + name: string; + + /** + * Digest of a BLOB + */ + @path + digest: string; + }, + ArtifactManifestProperties + >; + + /** + * Update properties of a manifest + */ + #suppress "@azure-tools/typespec-azure-core/use-standard-operations" "Existing API - must use current operation signature for backward compatibility" + @route("/acr/v1/{name}/_manifests/{digest}") + @patch(#{ implicitOptionality: true }) + updateManifestProperties is AcrOperation< + { + /** + * Name of the image (including the namespace) + */ + @path + name: string; + + /** + * Digest of a BLOB + */ + @path + digest: string; + + /** + * Manifest attribute value + */ + @bodyRoot + value?: ManifestChangeableAttributes; + }, + ArtifactManifestProperties + >; +} + +interface ContainerRegistryBlob { + /** + * Retrieve the blob from the registry identified by digest. + */ + #suppress "@azure-tools/typespec-azure-core/use-standard-operations" "Existing API - must use current operation signature for backward compatibility" + @sharedRoute + @route("/v2/{name}/blobs/{digest}") + @get + getBlob is AcrOperation< + { + /** + * Name of the image (including the namespace) + */ + @path + name: string; + + /** + * Digest of a BLOB + */ + @path + digest: string; + }, + { + /** The blob identified by digest is available. The blob content will be present in the body of the response. */ + @statusCode statusCode: 200; + + /** The length of the requested blob content. */ + @header("Content-Length") contentLength: int64; + + /** Digest of the targeted content for the request. */ + @header("Docker-Content-Digest") dockerContentDigest: string; + + /** blob binary data */ + @bodyRoot body: bytes; + } | { + /** The blob identified by digest is available at the provided location. */ + @statusCode statusCode: 307; + + /** The location where the layer should be accessible. */ + @header("Location") location: string; + } + >; + + /** + * Same as GET, except only the headers are returned. + */ + #suppress "@azure-tools/typespec-azure-core/use-standard-operations" "Existing API - must use current operation signature for backward compatibility" + @sharedRoute + @route("/v2/{name}/blobs/{digest}") + @head + checkBlobExists is AcrOperation< + { + /** + * Name of the image (including the namespace) + */ + @path + name: string; + + /** + * Digest of a BLOB + */ + @path + digest: string; + }, + { + /** The blob identified by digest is available. The blob content will be present in the body of the response. */ + @statusCode statusCode: 200; + + /** The length of the requested blob content. */ + @header("Content-Length") contentLength: int64; + + /** Digest of the targeted content for the request. */ + @header("Docker-Content-Digest") dockerContentDigest: string; + } | { + /** The blob identified by digest is available at the provided location. */ + @statusCode statusCode: 307; + + /** The location where the layer should be accessible. */ + @header("Location") location: string; + } + >; + + /** + * Removes an already uploaded blob. + */ + #suppress "@azure-tools/typespec-azure-core/use-standard-operations" "Existing API - must use current operation signature for backward compatibility" + @route("/v2/{name}/blobs/{digest}") + @delete + deleteBlob is AcrOperation< + { + /** + * Name of the image (including the namespace) + */ + @path + name: string; + + /** + * Digest of a BLOB + */ + @path + digest: string; + }, + { + /** The blob identified by digest is available. The blob content will be present in the body of the response. */ + @statusCode statusCode: 202; + + /** Digest of the targeted content for the request. */ + @header("Docker-Content-Digest") dockerContentDigest: string; + } + >; + + /** + * Mount a blob identified by the `mount` parameter from another repository. + */ + #suppress "@azure-tools/typespec-azure-core/use-standard-operations" "Existing API - must use current operation signature for backward compatibility" + @sharedRoute + @route("/v2/{name}/blobs/uploads/") + @post + mountBlob is AcrOperation< + { + /** + * Name of the image (including the namespace) + */ + @path + name: string; + + /** + * Name of the source repository. + */ + @query("from") + from: string; + + /** + * Digest of blob to mount from the source repository. + */ + @query("mount") + mount: string; + }, + { + /** The blob has been created in the registry and is available at the provided location. */ + @statusCode statusCode: 201; + + /** Provided location for blob */ + @header("Location") location: string; + + /** Identifies the docker upload uuid for the current request. */ + @header("Docker-Upload-UUID") dockerUploadUuid: string; + + /** Digest of the targeted content for the request. */ + @header("Docker-Content-Digest") dockerContentDigest: string; + } + >; + + /** + * Retrieve status of upload identified by uuid. The primary purpose of this + * endpoint is to resolve the current status of a resumable upload. + */ + #suppress "@azure-tools/typespec-azure-core/use-standard-operations" "Existing API - must use current operation signature for backward compatibility" + @route("/{+nextBlobUuidLink}") + @get + getUploadStatus is AcrOperation< + { + /** + * Link acquired from upload start or previous chunk. Note, do not include initial + * / (must do substring(1) ) + */ + @path + nextBlobUuidLink: string; + }, + { + /** The upload is known and in progress. The last received offset is available in the Range header. */ + @statusCode statusCode: 204; + + /** Range indicating the current progress of the upload. */ + @header("Range") range: string; + + @header("Docker-Upload-UUID") dockerUploadUuid: string; + } + >; + + /** + * Upload a stream of data without completing the upload. + */ + #suppress "@azure-tools/typespec-azure-core/use-standard-operations" "Existing API - must use current operation signature for backward compatibility" + #suppress "@azure-tools/typespec-azure-core/byos" "Existing API" + @route("/{+nextBlobUuidLink}") + @patch(#{ implicitOptionality: true }) + uploadChunk is AcrOperation< + { + /** + * Link acquired from upload start or previous chunk. Note, do not include initial + * / (must do substring(1) ) + */ + @path + nextBlobUuidLink: string; + + /** + * Raw data of blob + */ + @bodyRoot + value: bytes; + }, + { + /** The stream of data has been accepted and the current progress is available in the range header. The updated upload location is available in the Location header. */ + @statusCode statusCode: 202; + + /** Provided location for blob */ + @header("Location") location: string; + + /** Range indicating the current progress of the upload. */ + @header("Range") range: string; + + /** Identifies the docker upload uuid for the current request. */ + @header("Docker-Upload-UUID") dockerUploadUuid: string; + } + >; + + /** + * Complete the upload, providing all the data in the body, if necessary. A + * request without a body will just complete the upload with previously uploaded + * content. + */ + #suppress "@azure-tools/typespec-azure-core/use-standard-names" "Ensuring existing operation name for backward compatibility" + #suppress "@azure-tools/typespec-azure-core/use-standard-operations" "Existing API - must use current operation signature for backward compatibility" + #suppress "@azure-tools/typespec-azure-core/byos" "Existing API" + @route("/{+nextBlobUuidLink}") + @put + completeUpload is AcrOperation< + { + /** + * Digest of a BLOB + */ + @query("digest") + digest: string; + + /** + * Link acquired from upload start or previous chunk. Note, do not include initial + * / (must do substring(1) ) + */ + @path + nextBlobUuidLink: string; + + /** + * Optional raw data of blob + */ + @bodyRoot + value?: bytes; + }, + { + /** The upload has been completed and accepted by the registry. */ + @statusCode statusCode: 201; + + /** Provided location for blob */ + @header("Location") location: string; + + /** Range indicating the current progress of the upload. */ + @header("Range") range: string; + + /** Digest of the targeted content for the request. */ + @header("Docker-Content-Digest") dockerContentDigest: string; + } + >; + + /** + * Cancel outstanding upload processes, releasing associated resources. If this is + * not called, the unfinished uploads will eventually timeout. + */ + #suppress "@azure-tools/typespec-azure-core/use-standard-names" "Preserving existing API operation name for backward compatibility" + #suppress "@azure-tools/typespec-azure-core/use-standard-operations" "Existing API - must use current operation signature for backward compatibility" + @route("/{+nextBlobUuidLink}") + @delete + cancelUpload is AcrOperation< + { + /** + * Link acquired from upload start or previous chunk. Note, do not include initial + * / (must do substring(1) ) + */ + @path + nextBlobUuidLink: string; + }, + NoContentResponse + >; + + /** + * Initiate a resumable blob upload with an empty request body. + */ + #suppress "@azure-tools/typespec-azure-core/use-standard-operations" "Existing API - must use current operation signature for backward compatibility" + @sharedRoute + @route("/v2/{name}/blobs/uploads/") + @post + startUpload is AcrOperation< + { + /** + * Name of the image (including the namespace) + */ + @path + name: string; + }, + { + /** The upload has been created. The Location header must be used to complete the upload. The response should be identical to a GET request on the contents of the returned Location header. */ + @statusCode statusCode: 202; + + /** Provided location for blob */ + @header("Location") location: string; + + /** Range indicating the current progress of the upload. */ + @header("Range") range: string; + + /** Identifies the docker upload uuid for the current request. */ + @header("Docker-Upload-UUID") dockerUploadUuid: string; + } + >; + + /** + * Retrieve the blob from the registry identified by `digest`. This endpoint may + * also support RFC7233 compliant range requests. Support can be detected by + * issuing a HEAD request. If the header `Accept-Range: bytes` is returned, range + * requests can be used to fetch partial content. + */ + #suppress "@azure-tools/typespec-azure-core/use-standard-operations" "Existing API - must use current operation signature for backward compatibility" + @sharedRoute + @route("/v2/{name}/blobs/{digest}") + @get + getChunk is AcrOperation< + { + /** + * Name of the image (including the namespace) + */ + @path + name: string; + + /** + * Digest of a BLOB + */ + @path + digest: string; + + /** + * Format : bytes=-, HTTP Range header specifying blob chunk. + */ + #suppress "@azure-tools/typespec-azure-core/casing-style" "backward compatibility" + @header + Range: string; + }, + { + /** The blob identified by digest is available. The specified chunk of blob content will be present in the body of the request. */ + @statusCode statusCode: 206; + + /** The length of the requested blob content. */ + @header("Content-Length") contentLength: int64; + + /** Content range of the blob chunk. */ + @header("Content-Range") contentRange: string; + + @body responseBody: bytes; + } + >; + + /** + * Same as GET, except only the headers are returned. + */ + #suppress "@azure-tools/typespec-azure-core/use-standard-operations" "Existing API - must use current operation signature for backward compatibility" + @sharedRoute + @route("/v2/{name}/blobs/{digest}") + @head + checkChunkExists is AcrOperation< + { + /** + * Name of the image (including the namespace) + */ + @path + name: string; + + /** + * Digest of a BLOB + */ + @path + digest: string; + + /** + * Format : bytes=-, HTTP Range header specifying blob chunk. + */ + #suppress "@azure-tools/typespec-azure-core/casing-style" "backward compatibility" + @header + Range: string; + }, + { + /** The blob identified by digest is available. The specified chunk of blob content will be present in the body of the request. */ + @statusCode statusCode: 200; + + /** The length of the requested blob content. */ + @header("Content-Length") contentLength: int64; + + /** Content range of the blob chunk. */ + @header("Content-Range") contentRange: string; + } + >; +} + +interface Authentication { + /** + * Exchange AAD tokens for an ACR refresh Token + */ + #suppress "@azure-tools/typespec-azure-core/use-standard-operations" "not yet an Azure operation" + #suppress "@azure-tools/typespec-azure-core/no-openapi" "non-standard operations" + #suppress "@azure-tools/typespec-azure-core/operation-missing-api-version" "not yet versioned" + #suppress "@azure-tools/typespec-azure-core/byos" "mirrored API" + @route("/oauth2/exchange") + @post + exchangeAadAccessTokenForAcrRefreshToken( + /** The content type */ + @header contentType: "multipart/form-data", + + /** The body of the request */ + @multipartBody body: MultipartBodyParameter, + ): AcrRefreshToken | AcrErrors; + + /** + * Exchange ACR Refresh token for an ACR Access Token + */ + #suppress "@azure-tools/typespec-azure-core/use-standard-operations" "not yet an Azure operation" + #suppress "@azure-tools/typespec-azure-core/no-openapi" "non-standard operations" + #suppress "@azure-tools/typespec-azure-core/operation-missing-api-version" "not yet versioned" + #suppress "@azure-tools/typespec-azure-core/byos" "mirrored API" + @route("/oauth2/token") + @post + exchangeAcrRefreshTokenForAcrAccessToken( + /** The content type */ + @header contentType: "multipart/form-data", + + /** The body of the request */ + @multipartBody body: MultipartBodyParameter, + ): AcrAccessToken | AcrErrors; + + /** + * Exchange Username, Password and Scope for an ACR Access Token + */ + #suppress "@azure-tools/typespec-azure-core/use-standard-operations" "Existing API - must use current operation signature for backward compatibility" + @route("/oauth2/token") + @get + getAcrAccessTokenFromLogin is AcrOperation< + { + /** + * Indicates the name of your Azure container registry. + */ + @query("service") + service: string; + + /** + * Expected to be a valid scope, and can be specified more than once for multiple + * scope requests. You can obtain this from the Www-Authenticate response header + * from the challenge. + */ + @query("scope") + scope: string; + }, + AcrAccessToken + >; +} diff --git a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/containerregistry.json b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/containerregistry.json index ff327366e37e..39d27efd2109 100644 --- a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/containerregistry.json +++ b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/containerregistry.json @@ -2,1320 +2,1535 @@ "swagger": "2.0", "info": { "title": "Azure Container Registry", + "version": "2021-07-01", "description": "Metadata API definition for the Azure Container Registry runtime", - "version": "2021-07-01" + "x-typespec-generated": [ + { + "emitter": "@azure-tools/typespec-autorest" + } + ] }, + "schemes": [ + "https" + ], "x-ms-parameterized-host": { - "hostTemplate": "{url}", + "hostTemplate": "{endpoint}", "useSchemePrefix": false, - "positionInOperation": "first", "parameters": [ { - "$ref": "#/parameters/Url" + "name": "endpoint", + "in": "path", + "required": true, + "type": "string", + "format": "uri", + "x-ms-skip-url-encoding": true } ] }, - "securityDefinitions": { - "registry_auth": { - "type": "basic" - }, - "registry_oauth2": { - "type": "apiKey", - "in": "header", - "name": "Authorization" - } - }, + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], "security": [ { - "registry_auth": [], - "registry_oauth2": [] + "OAuth2Auth": [ + "https://containerregistry.azure.net/.default" + ] } ], - "tags": [ - { - "name": "ContainerRegistry", - "description": "Registry Operations" - }, - { - "name": "ContainerRegistryBlob", - "description": "Blob Operations" + "securityDefinitions": { + "OAuth2Auth": { + "type": "oauth2", + "flow": "implicit", + "authorizationUrl": "https://login.microsoftonline.com/common/oauth2/authorize", + "scopes": { + "https://containerregistry.azure.net/.default": "" + } } - ], - "schemes": [ - "https" - ], - "produces": [ - "application/json" - ], + }, + "tags": [], "paths": { - "/v2/": { + "/{nextBlobUuidLink}": { "get": { - "tags": [ - "Registry" - ], - "description": "Tells whether this Docker Registry instance supports Docker Registry HTTP API v2", - "operationId": "ContainerRegistry_CheckDockerV2Support", - "x-ms-examples": { - "Check Docker Registry V2 Support": { - "$ref": "./examples/GetDockerRegistryV2Support.json" + "operationId": "ContainerRegistryBlob_GetUploadStatus", + "description": "Retrieve status of upload identified by uuid. The primary purpose of this\nendpoint is to resolve the current status of a resumable upload.", + "parameters": [ + { + "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" + }, + { + "name": "nextBlobUuidLink", + "in": "path", + "description": "Link acquired from upload start or previous chunk. Note, do not include initial\n/ (must do substring(1) )", + "required": true, + "type": "string", + "x-ms-skip-url-encoding": true } - }, + ], "responses": { - "200": { - "description": "Successful response. API v2 supported" + "204": { + "description": "There is no content to send for this request, but the headers may be useful. ", + "headers": { + "Docker-Upload-UUID": { + "type": "string" + }, + "Range": { + "type": "string", + "description": "Range indicating the current progress of the upload." + } + } }, "default": { - "description": "ACR error response describing why the operation failed.", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/AcrErrors" } } - } - } - }, - "/v2/{name}/manifests/{reference}": { - "get": { - "tags": [ - "Repository" - ], - "description": "Get the manifest identified by `name` and `reference` where `reference` can be a tag or digest.", + }, "x-ms-examples": { - "Get manifest": { - "$ref": "./examples/GetManifest.json" + "Get blob status": { + "$ref": "./examples/GetBlobStatus.json" } - }, - "operationId": "ContainerRegistry_GetManifest", + } + }, + "put": { + "operationId": "ContainerRegistryBlob_CompleteUpload", + "description": "Complete the upload, providing all the data in the body, if necessary. A\nrequest without a body will just complete the upload with previously uploaded\ncontent.", + "consumes": [ + "application/octet-stream" + ], "parameters": [ { - "$ref": "#/parameters/ImageName" + "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" }, { - "$ref": "#/parameters/ImageReference" + "name": "digest", + "in": "query", + "description": "Digest of a BLOB", + "required": true, + "type": "string" }, { - "name": "accept", - "in": "header", - "description": "Accept header string delimited by comma. For example, application/vnd.docker.distribution.manifest.v2+json", + "name": "nextBlobUuidLink", + "in": "path", + "description": "Link acquired from upload start or previous chunk. Note, do not include initial\n/ (must do substring(1) )", + "required": true, + "type": "string", + "x-ms-skip-url-encoding": true + }, + { + "name": "value", + "in": "body", + "description": "Optional raw data of blob", "required": false, - "type": "string" + "schema": { + "type": "string", + "format": "binary" + } } ], "responses": { - "200": { - "description": "Returns the requested manifest file in a larger combined group", - "schema": { - "$ref": "#/definitions/ManifestWrapper" + "201": { + "description": "The request has succeeded and a new resource has been created as a result.", + "headers": { + "Docker-Content-Digest": { + "type": "string", + "description": "Digest of the targeted content for the request." + }, + "Location": { + "type": "string", + "description": "Provided location for blob" + }, + "Range": { + "type": "string", + "description": "Range indicating the current progress of the upload." + } } }, "default": { - "description": "ACR error response describing why the operation failed.", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/AcrErrors" } } - } - }, - "put": { - "tags": [ - "Repository" - ], - "x-ms-long-running-operation": false, - "description": "Put the manifest identified by `name` and `reference` where `reference` can be a tag or digest.", + }, "x-ms-examples": { - "Put manifest": { - "$ref": "./examples/CreateManifest.json" + "End a blob upload": { + "$ref": "./examples/EndBlobUpload.json" } - }, + } + }, + "patch": { + "operationId": "ContainerRegistryBlob_UploadChunk", + "description": "Upload a stream of data without completing the upload.", "consumes": [ - "application/vnd.docker.distribution.manifest.v2+json" + "application/octet-stream" ], - "operationId": "ContainerRegistry_CreateManifest", "parameters": [ { - "$ref": "#/parameters/ImageName" + "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" }, { - "$ref": "#/parameters/ImageReference" + "name": "nextBlobUuidLink", + "in": "path", + "description": "Link acquired from upload start or previous chunk. Note, do not include initial\n/ (must do substring(1) )", + "required": true, + "type": "string", + "x-ms-skip-url-encoding": true }, { - "$ref": "#/parameters/ManifestBody" + "name": "value", + "in": "body", + "description": "Raw data of blob", + "required": true, + "schema": { + "type": "string", + "format": "binary" + } } ], "responses": { - "201": { - "description": "The manifest is updated", - "schema": {}, + "202": { + "description": "The request has been accepted for processing, but processing has not yet completed.", "headers": { - "Docker-Content-Digest": { + "Docker-Upload-UUID": { "type": "string", "description": "Identifies the docker upload uuid for the current request." }, "Location": { "type": "string", - "description": "The canonical location url of the uploaded manifest." + "description": "Provided location for blob" }, - "Content-Length": { - "type": "integer", - "format": "int64", - "description": "The length of the requested blob content." + "Range": { + "type": "string", + "description": "Range indicating the current progress of the upload." } } }, "default": { - "description": "ACR error response describing why the operation failed.", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/AcrErrors" } } + }, + "x-ms-examples": { + "Upload Blob": { + "$ref": "./examples/UploadBlob.json" + } } }, "delete": { - "tags": [ - "Repository" - ], - "description": "Delete the manifest identified by `name` and `reference`. Note that a manifest can _only_ be deleted by `digest`.", - "x-ms-examples": { - "Delete manifest": { - "$ref": "./examples/DeleteManifest.json" - } - }, - "operationId": "ContainerRegistry_DeleteManifest", + "operationId": "ContainerRegistryBlob_CancelUpload", + "description": "Cancel outstanding upload processes, releasing associated resources. If this is\nnot called, the unfinished uploads will eventually timeout.", "parameters": [ { - "$ref": "#/parameters/ImageName" + "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" }, { - "$ref": "#/parameters/DigestReference" + "name": "nextBlobUuidLink", + "in": "path", + "description": "Link acquired from upload start or previous chunk. Note, do not include initial\n/ (must do substring(1) )", + "required": true, + "type": "string", + "x-ms-skip-url-encoding": true } ], "responses": { - "202": { - "description": "The manifest has been deleted" - }, - "404": { - "description": "The manifest was not found" + "204": { + "description": "There is no content to send for this request, but the headers may be useful." }, "default": { - "description": "ACR error response describing why the operation failed.", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/AcrErrors" } } + }, + "x-ms-examples": { + "End a blob upload": { + "$ref": "./examples/CancelBlobUpload.json" + } } } }, - "/v2/{name}/blobs/{digest}": { + "/acr/v1/{name}": { "get": { - "produces": [ - "application/octet-stream" - ], - "tags": [ - "ContainerRegistryBlob" - ], + "operationId": "ContainerRegistry_GetProperties", + "description": "Get repository attributes", "parameters": [ { - "$ref": "#/parameters/ImageName" + "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" }, { - "$ref": "#/parameters/Digest" + "name": "name", + "in": "path", + "description": "Name of the image (including the namespace)", + "required": true, + "type": "string" } ], - "x-ms-examples": { - "Get a blob from digest": { - "$ref": "./examples/GetBlob.json" - } - }, - "description": "Retrieve the blob from the registry identified by digest.", - "operationId": "ContainerRegistryBlob_GetBlob", "responses": { "200": { - "description": "The blob identified by digest is available. The blob content will be present in the body of the response.", + "description": "The request has succeeded.", "schema": { - "description": "blob binary data", - "type": "file", - "format": "file" - }, - "headers": { - "Content-Length": { - "type": "integer", - "format": "int64", - "description": "The length of the requested blob content." - }, - "Docker-Content-Digest": { - "description": "Digest of the targeted content for the request.", - "type": "string" - } - } - }, - "307": { - "description": "The blob identified by digest is available at the provided location.", - "headers": { - "Location": { - "type": "string", - "description": "The location where the layer should be accessible." - } + "$ref": "#/definitions/ContainerRepositoryProperties" } }, "default": { - "description": "ACR error response describing why the operation failed.", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/AcrErrors" } } - } - }, - "head": { - "tags": [ - "ContainerRegistryBlob" - ], - "description": "Same as GET, except only the headers are returned.", - "operationId": "ContainerRegistryBlob_CheckBlobExists", + }, "x-ms-examples": { - "Head for a Blob Chunk": { - "$ref": "./examples/CheckBlob.json" + "Get details of repository": { + "$ref": "./examples/GetRepositoryAttributes.json" } - }, + } + }, + "patch": { + "operationId": "ContainerRegistry_UpdateProperties", + "description": "Update the attribute identified by `name` where `reference` is the name of the\nrepository.", "parameters": [ { - "$ref": "#/parameters/ImageName" + "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" }, { - "$ref": "#/parameters/Digest" + "name": "name", + "in": "path", + "description": "Name of the image (including the namespace)", + "required": true, + "type": "string" + }, + { + "name": "value", + "in": "body", + "description": "Repository attribute value", + "required": false, + "schema": { + "$ref": "#/definitions/RepositoryChangeableAttributes" + } } ], "responses": { "200": { - "description": "The blob identified by digest is available. The blob content will be present in the body of the response.", - "headers": { - "Content-Length": { - "type": "integer", - "format": "int64", - "description": "The length of the requested blob content." - }, - "Docker-Content-Digest": { - "description": "Digest of the targeted content for the request.", - "type": "string" - } - } - }, - "307": { - "description": "The blob identified by digest is available at the provided location.", - "headers": { - "Location": { - "type": "string", - "description": "The location where the layer should be accessible." - } + "description": "The request has succeeded.", + "schema": { + "$ref": "#/definitions/ContainerRepositoryProperties" } }, "default": { - "description": "ACR error response describing why the operation failed.", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/AcrErrors" } } + }, + "x-ms-examples": { + "Update repository attributes": { + "$ref": "./examples/UpdateRepositoryAttributes.json" + } } }, "delete": { + "operationId": "ContainerRegistry_DeleteRepository", + "description": "Delete the repository identified by `name`", "parameters": [ { - "$ref": "#/parameters/ImageName" + "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" }, { - "$ref": "#/parameters/Digest" + "name": "name", + "in": "path", + "description": "Name of the image (including the namespace)", + "required": true, + "type": "string" } ], - "description": "Removes an already uploaded blob.", - "produces": [ - "application/octet-stream" - ], - "tags": [ - "ContainerRegistryBlob" - ], - "operationId": "ContainerRegistryBlob_DeleteBlob", - "x-ms-examples": { - "Delete a blob": { - "$ref": "./examples/DeleteBlob.json" - } - }, "responses": { "202": { - "description": "The blob identified by digest is available. The blob content will be present in the body of the response.", - "schema": { - "description": "blob binary data", - "type": "file", - "format": "file" - }, - "headers": { - "Docker-Content-Digest": { - "description": "Digest of the targeted content for the request.", - "type": "string" - } - } + "description": "The request has been accepted for processing, but processing has not yet completed." + }, + "404": { + "description": "The server cannot find the requested resource." }, "default": { - "description": "ACR error response describing why the operation failed.", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/AcrErrors" } } + }, + "x-ms-examples": { + "Delete a repository": { + "$ref": "./examples/DeleteAcrRepository.json" + } } } }, - "/v2/{name}/blobs/uploads/": { - "post": { - "tags": [ - "ContainerRegistryBlob" - ], - "description": "Mount a blob identified by the `mount` parameter from another repository.", - "operationId": "ContainerRegistryBlob_MountBlob", - "x-ms-examples": { - "Mount a blob from repository": { - "$ref": "./examples/MountBlob.json" - } - }, + "/acr/v1/{name}/_manifests": { + "get": { + "operationId": "ContainerRegistry_GetManifests", + "description": "List manifests of a repository", "parameters": [ { - "$ref": "#/parameters/ImageName" + "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" + }, + { + "name": "name", + "in": "path", + "description": "Name of the image (including the namespace)", + "required": true, + "type": "string" + }, + { + "name": "last", + "in": "query", + "description": "Query parameter for the last item in previous query. Result set will include\nvalues lexically after last.", + "required": false, + "type": "string" }, { - "$ref": "#/parameters/From" + "name": "n", + "in": "query", + "description": "query parameter for max number of items", + "required": false, + "type": "integer", + "format": "int32" }, { - "$ref": "#/parameters/Mount" + "name": "orderby", + "in": "query", + "description": "orderby query parameter", + "required": false, + "type": "string", + "enum": [ + "none", + "timedesc", + "timeasc" + ], + "x-ms-enum": { + "name": "ArtifactManifestOrder", + "modelAsString": true, + "values": [ + { + "name": "None", + "value": "none", + "description": "Do not provide an orderby value in the request." + }, + { + "name": "LastUpdatedOnDescending", + "value": "timedesc", + "description": "Order manifests by LastUpdatedOn field, from most recently updated to least\nrecently updated." + }, + { + "name": "LastUpdatedOnAscending", + "value": "timeasc", + "description": "Order manifest by LastUpdatedOn field, from least recently updated to most\nrecently updated." + } + ] + } } ], "responses": { - "201": { - "description": "The blob has been created in the registry and is available at the provided location.", + "200": { + "description": "The request has succeeded.", + "schema": { + "$ref": "#/definitions/AcrManifests" + }, "headers": { - "Location": { - "description": "Provided location for blob", - "type": "string" - }, - "Docker-Upload-UUID": { - "description": "Identifies the docker upload uuid for the current request.", - "type": "string" - }, - "Docker-Content-Digest": { - "description": "Digest of the targeted content for the request.", - "type": "string" + "Link": { + "type": "string", + "description": "next paginated result" } } }, "default": { - "description": "ACR error response describing why the operation failed.", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/AcrErrors" } } + }, + "x-ms-examples": { + "Get list of available manifests": { + "$ref": "./examples/GetManifestList.json" + } } } }, - "/{nextBlobUuidLink}": { + "/acr/v1/{name}/_manifests/{digest}": { "get": { - "tags": [ - "ContainerRegistryBlob" - ], + "operationId": "ContainerRegistry_GetManifestProperties", + "description": "Get manifest attributes", "parameters": [ { - "$ref": "#/parameters/NextLink" + "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" + }, + { + "name": "name", + "in": "path", + "description": "Name of the image (including the namespace)", + "required": true, + "type": "string" + }, + { + "name": "digest", + "in": "path", + "description": "Digest of a BLOB", + "required": true, + "type": "string" } ], - "description": "Retrieve status of upload identified by uuid. The primary purpose of this endpoint is to resolve the current status of a resumable upload.", - "operationId": "ContainerRegistryBlob_GetUploadStatus", - "x-ms-examples": { - "Get blob status": { - "$ref": "./examples/GetBlobStatus.json" - } - }, "responses": { - "204": { - "description": "The upload is known and in progress. The last received offset is available in the Range header.", - "headers": { - "Range": { - "description": "Range indicating the current progress of the upload.", - "type": "string" - }, - "Docker-Upload-UUID": { - "description": "Identifies the docker upload uuid for the current request.", - "type": "string" - } + "200": { + "description": "The request has succeeded.", + "schema": { + "$ref": "#/definitions/ArtifactManifestProperties" } }, "default": { - "description": "ACR error response describing why the operation failed.", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/AcrErrors" } } + }, + "x-ms-examples": { + "Get manifest attributes": { + "$ref": "./examples/GetManifestAttributes.json" + } } }, "patch": { - "security": [ - { - "registry_auth": [], - "registry_oauth2": [] - } - ], - "tags": [ - "ContainerRegistryBlob" - ], - "description": "Upload a stream of data without completing the upload.", - "operationId": "ContainerRegistryBlob_UploadChunk", - "x-ms-examples": { - "Upload Blob": { - "$ref": "./examples/UploadBlob.json" - } - }, - "consumes": [ - "application/octet-stream" - ], + "operationId": "ContainerRegistry_UpdateManifestProperties", + "description": "Update properties of a manifest", "parameters": [ { - "$ref": "#/parameters/RawData" + "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" + }, + { + "name": "name", + "in": "path", + "description": "Name of the image (including the namespace)", + "required": true, + "type": "string" + }, + { + "name": "digest", + "in": "path", + "description": "Digest of a BLOB", + "required": true, + "type": "string" }, { - "$ref": "#/parameters/NextLink" + "name": "value", + "in": "body", + "description": "Manifest attribute value", + "required": false, + "schema": { + "$ref": "#/definitions/ManifestChangeableAttributes" + } } ], "responses": { - "202": { - "description": "The stream of data has been accepted and the current progress is available in the range header. The updated upload location is available in the Location header.", - "headers": { - "Location": { - "description": "Provided location for blob", - "type": "string" - }, - "Range": { - "description": "Range indicating the current progress of the upload.", - "type": "string" - }, - "Docker-Upload-UUID": { - "description": "Identifies the docker upload uuid for the current request.", - "type": "string" - } + "200": { + "description": "The request has succeeded.", + "schema": { + "$ref": "#/definitions/ArtifactManifestProperties" } }, "default": { - "description": "ACR error response describing why the operation failed.", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/AcrErrors" } } - } - }, - "put": { - "tags": [ - "ContainerRegistryBlob" - ], - "consumes": [ - "application/octet-stream" - ], - "description": "Complete the upload, providing all the data in the body, if necessary. A request without a body will just complete the upload with previously uploaded content.", - "operationId": "ContainerRegistryBlob_CompleteUpload", + }, "x-ms-examples": { - "End a blob upload": { - "$ref": "./examples/EndBlobUpload.json" + "Update attributes of a manifest": { + "$ref": "./examples/UpdateManifestAttributes.json" } - }, + } + } + }, + "/acr/v1/{name}/_tags": { + "get": { + "operationId": "ContainerRegistry_GetTags", + "description": "List tags of a repository", "parameters": [ { - "$ref": "#/parameters/BlobQueryDigest" + "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" + }, + { + "name": "name", + "in": "path", + "description": "Name of the image (including the namespace)", + "required": true, + "type": "string" + }, + { + "name": "last", + "in": "query", + "description": "Query parameter for the last item in previous query. Result set will include\nvalues lexically after last.", + "required": false, + "type": "string" + }, + { + "name": "n", + "in": "query", + "description": "query parameter for max number of items", + "required": false, + "type": "integer", + "format": "int32" }, { - "$ref": "#/parameters/RawDataOptional" + "name": "orderby", + "in": "query", + "description": "orderby query parameter", + "required": false, + "type": "string", + "enum": [ + "none", + "timedesc", + "timeasc" + ], + "x-ms-enum": { + "name": "ArtifactTagOrder", + "modelAsString": true, + "values": [ + { + "name": "None", + "value": "none", + "description": "Do not provide an orderby value in the request." + }, + { + "name": "LastUpdatedOnDescending", + "value": "timedesc", + "description": "Order tags by LastUpdatedOn field, from most recently updated to least recently\nupdated." + }, + { + "name": "LastUpdatedOnAscending", + "value": "timeasc", + "description": "Order tags by LastUpdatedOn field, from least recently updated to most recently\nupdated." + } + ] + } }, { - "$ref": "#/parameters/NextLink" + "name": "digest", + "in": "query", + "description": "filter by digest", + "required": false, + "type": "string" } ], "responses": { - "201": { - "description": "The upload has been completed and accepted by the registry.", + "200": { + "description": "The request has succeeded.", + "schema": { + "$ref": "#/definitions/TagList" + }, "headers": { - "Location": { - "description": "Provided location for blob", - "type": "string" - }, - "Range": { - "description": "Range indicating the current progress of the upload.", - "type": "string" - }, - "Docker-Content-Digest": { - "description": "Digest of the targeted content for the request.", - "type": "string" + "Link": { + "type": "string", + "description": "next paginated result" } } }, "default": { - "description": "ACR error response describing why the operation failed.", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/AcrErrors" } } - } - }, - "delete": { - "tags": [ - "ContainerRegistryBlob" - ], - "parameters": [ - { - "$ref": "#/parameters/NextLink" - } - ], - "description": "Cancel outstanding upload processes, releasing associated resources. If this is not called, the unfinished uploads will eventually timeout.", - "operationId": "ContainerRegistryBlob_CancelUpload", - "x-ms-examples": { - "End a blob upload": { - "$ref": "./examples/CancelBlobUpload.json" - } }, - "responses": { - "204": { - "description": "The upload has been successfully deleted." - }, - "default": { - "description": "ACR error response describing why the operation failed.", - "schema": { - "$ref": "#/definitions/AcrErrors" - } + "x-ms-examples": { + "Get tags of a repository": { + "$ref": "./examples/GetTagList.json" } } } }, - "/acr/v1/_catalog": { + "/acr/v1/{name}/_tags/{reference}": { "get": { - "tags": [ - "Registry" - ], - "description": "List repositories", - "operationId": "ContainerRegistry_GetRepositories", - "x-ms-pageable": { - "itemName": "repositories", - "nextLinkName": "link" - }, - "x-ms-examples": { - "Get repositories in a registry": { - "$ref": "./examples/GetRepositoryList.json" - } - }, + "operationId": "ContainerRegistry_GetTagProperties", + "description": "Get tag attributes by tag", "parameters": [ { - "$ref": "#/parameters/QueryLast" + "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" }, { - "$ref": "#/parameters/QueryNum" + "name": "name", + "in": "path", + "description": "Name of the image (including the namespace)", + "required": true, + "type": "string" }, { - "$ref": "#/parameters/ApiVersionParameter" + "name": "reference", + "in": "path", + "description": "Tag name", + "required": true, + "type": "string" } ], "responses": { "200": { - "headers": { - "Link": { - "description": "next paginated result", - "type": "string" - } - }, - "description": "Returns a list of repositories", + "description": "The request has succeeded.", "schema": { - "$ref": "#/definitions/Repositories" + "$ref": "#/definitions/ArtifactTagProperties" } }, "default": { - "description": "ACR error response describing why the operation failed.", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/AcrErrors" } } + }, + "x-ms-examples": { + "Get tag attributes": { + "$ref": "./examples/GetTagAttributes.json" + } } - } - }, - "/acr/v1/{name}": { - "get": { - "tags": [ - "Registry" - ], - "description": "Get repository properties", - "operationId": "ContainerRegistry_GetRepositoryProperties", - "x-ms-examples": { - "Get details of repository": { - "$ref": "./examples/GetRepositoryAttributes.json" - } - }, + }, + "patch": { + "operationId": "ContainerRegistry_UpdateTagAttributes", + "description": "Update tag attributes", "parameters": [ { - "$ref": "#/parameters/ImageName" + "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" + }, + { + "name": "name", + "in": "path", + "description": "Name of the image (including the namespace)", + "required": true, + "type": "string" + }, + { + "name": "reference", + "in": "path", + "description": "Tag name", + "required": true, + "type": "string" }, { - "$ref": "#/parameters/ApiVersionParameter" + "name": "value", + "in": "body", + "description": "Tag attribute value", + "required": false, + "schema": { + "$ref": "#/definitions/TagChangeableAttributes" + } } ], "responses": { "200": { - "description": "Returns a list of attributes", + "description": "The request has succeeded.", "schema": { - "$ref": "#/definitions/RepositoryAttributes" + "$ref": "#/definitions/ArtifactTagProperties" } }, "default": { - "description": "ACR error response describing why the operation failed.", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/AcrErrors" } } + }, + "x-ms-examples": { + "Update attributes of a tag": { + "$ref": "./examples/UpdateTagAttributes.json" + } } }, "delete": { - "tags": [ - "Registry" - ], - "description": "Delete the repository identified by `name`", - "operationId": "ContainerRegistry_DeleteRepository", - "x-ms-examples": { - "Delete a repository": { - "$ref": "./examples/DeleteAcrRepository.json" - } - }, + "operationId": "ContainerRegistry_DeleteTag", + "description": "Delete tag", "parameters": [ { - "$ref": "#/parameters/ImageName" + "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" }, { - "$ref": "#/parameters/ApiVersionParameter" + "name": "name", + "in": "path", + "description": "Name of the image (including the namespace)", + "required": true, + "type": "string" + }, + { + "name": "reference", + "in": "path", + "description": "Tag name", + "required": true, + "type": "string" } ], "responses": { "202": { - "description": "The repository is deleted", - "schema": { - "$ref": "#/definitions/DeletedRepository" - } + "description": "The request has been accepted for processing, but processing has not yet completed." }, "404": { - "description": "The repository was not found" + "description": "The server cannot find the requested resource." }, "default": { - "description": "ACR error response describing why the operation failed.", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/AcrErrors" } } - } - }, - "patch": { - "tags": [ - "Registry" - ], - "description": "Update repository properties. `reference` is the name of the repository. The attribute identified by `name`.", - "operationId": "ContainerRegistry_UpdateRepositoryProperties", + }, "x-ms-examples": { - "Update repository attributes": { - "$ref": "./examples/UpdateRepositoryAttributes.json" + "Delete a tag": { + "$ref": "./examples/DeleteTag.json" } - }, - "consumes": [ - "application/json" - ], + } + } + }, + "/acr/v1/_catalog": { + "get": { + "operationId": "ContainerRegistry_GetRepositories", + "description": "List repositories", "parameters": [ { - "$ref": "#/parameters/ImageName" + "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" }, { - "$ref": "#/parameters/RepositoryAttributeValue" + "name": "last", + "in": "query", + "description": "Query parameter for the last item in previous query. Result set will include values lexically after last.", + "required": false, + "type": "string" }, { - "$ref": "#/parameters/ApiVersionParameter" + "name": "n", + "in": "query", + "description": "Query parameter for max number of items", + "required": false, + "type": "integer", + "format": "int32" } ], "responses": { "200": { - "description": "The attributes are updated", + "description": "The request has succeeded.", "schema": { - "$ref": "#/definitions/RepositoryAttributes" + "$ref": "#/definitions/Repositories" + }, + "headers": { + "Link": { + "type": "string", + "description": "next paginated result" + } } }, "default": { - "description": "ACR error response describing why the operation failed.", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/AcrErrors" } } - } - } - }, - "/acr/v1/{name}/_tags": { - "get": { - "tags": [ - "Repository" - ], - "description": "List tags of a repository", - "operationId": "ContainerRegistry_GetTags", + }, "x-ms-examples": { - "Get tags of a repository": { - "$ref": "./examples/GetTagList.json" + "Get repositories in a registry": { + "$ref": "./examples/GetRepositoryList.json" } }, "x-ms-pageable": { - "itemName": "tags", - "nextLinkName": "link" - }, + "nextLinkName": "link", + "itemName": "repositories" + } + } + }, + "/oauth2/exchange": { + "post": { + "operationId": "Authentication_ExchangeAadAccessTokenForAcrRefreshToken", + "description": "Exchange AAD tokens for an ACR refresh Token", + "consumes": [ + "multipart/form-data" + ], "parameters": [ { - "$ref": "#/parameters/ImageName" - }, - { - "$ref": "#/parameters/QueryLast" + "name": "grantType", + "in": "formData", + "description": "Can take a value of access_token_refresh_token, or access_token, or\nrefresh_token", + "required": true, + "type": "string", + "enum": [ + "access_token_refresh_token", + "access_token", + "refresh_token" + ], + "x-ms-enum": { + "name": "PostContentSchemaGrantType", + "modelAsString": true, + "values": [ + { + "name": "access_token_refresh_token", + "value": "access_token_refresh_token", + "description": "Grant type for exchanging both access token and refresh token" + }, + { + "name": "access_token", + "value": "access_token", + "description": "Grant type for exchanging access token only" + }, + { + "name": "refresh_token", + "value": "refresh_token", + "description": "Grant type for exchanging refresh token only" + } + ] + } }, { - "$ref": "#/parameters/QueryNum" + "name": "service", + "in": "formData", + "description": "Indicates the name of your Azure container registry.", + "required": true, + "type": "string" }, { - "$ref": "#/parameters/QueryOrderBy" + "name": "tenant", + "in": "formData", + "description": "AAD tenant associated to the AAD credentials.", + "required": false, + "type": "string" }, { - "$ref": "#/parameters/QueryDigest" + "name": "refreshToken", + "in": "formData", + "description": "AAD refresh token, mandatory when grant_type is access_token_refresh_token or\nrefresh_token", + "required": false, + "type": "string" }, { - "$ref": "#/parameters/ApiVersionParameter" + "name": "accessToken", + "in": "formData", + "description": "AAD access token, mandatory when grant_type is access_token_refresh_token or\naccess_token.", + "required": false, + "type": "string" } ], "responses": { "200": { - "headers": { - "Link": { - "description": "next paginated result", - "type": "string" - } - }, - "description": "Tag details of a repository", + "description": "The request has succeeded.", "schema": { - "$ref": "#/definitions/TagList" + "$ref": "#/definitions/AcrRefreshToken" } }, "default": { - "description": "ACR error response describing why the operation failed.", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/AcrErrors" } } + }, + "x-ms-examples": { + "Exchange AAD Token for ACR Refresh": { + "$ref": "./examples/PostRefreshToken.json" + } } } }, - "/acr/v1/{name}/_tags/{reference}": { + "/oauth2/token": { "get": { - "tags": [ - "Repository" - ], - "description": "Get tag attributes by tag", - "operationId": "ContainerRegistry_GetTagProperties", - "x-ms-examples": { - "Get tag attributes": { - "$ref": "./examples/GetTagAttributes.json" - } - }, + "operationId": "Authentication_GetAcrAccessTokenFromLogin", + "description": "Exchange Username, Password and Scope for an ACR Access Token", "parameters": [ { - "$ref": "#/parameters/ImageName" + "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" }, { - "$ref": "#/parameters/TagReference" + "name": "service", + "in": "query", + "description": "Indicates the name of your Azure container registry.", + "required": true, + "type": "string" }, { - "$ref": "#/parameters/ApiVersionParameter" + "name": "scope", + "in": "query", + "description": "Expected to be a valid scope, and can be specified more than once for multiple\nscope requests. You can obtain this from the Www-Authenticate response header\nfrom the challenge.", + "required": true, + "type": "string" } ], "responses": { "200": { - "description": "Tag attributes", + "description": "The request has succeeded.", "schema": { - "$ref": "#/definitions/TagAttributes" + "$ref": "#/definitions/AcrAccessToken" } }, "default": { - "description": "ACR error response describing why the operation failed.", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/AcrErrors" } } + }, + "x-ms-examples": { + "Get Access Token with username and password": { + "$ref": "./examples/GetAccessToken.json" + } } }, - "patch": { - "tags": [ - "Repository" - ], - "description": "Update tag attributes", - "operationId": "ContainerRegistry_UpdateTagAttributes", + "post": { + "operationId": "Authentication_ExchangeAcrRefreshTokenForAcrAccessToken", + "description": "Exchange ACR Refresh token for an ACR Access Token", "consumes": [ - "application/json" + "multipart/form-data" ], - "x-ms-examples": { - "Update attributes of a tag": { - "$ref": "./examples/UpdateTagAttributes.json" - } - }, "parameters": [ { - "$ref": "#/parameters/ImageName" + "name": "grantType", + "in": "formData", + "description": "Can take a value of access_token_refresh_token, or access_token, or\nrefresh_token", + "required": true, + "type": "string", + "enum": [ + "access_token_refresh_token", + "access_token", + "refresh_token" + ], + "x-ms-enum": { + "name": "PostContentSchemaGrantType", + "modelAsString": true, + "values": [ + { + "name": "access_token_refresh_token", + "value": "access_token_refresh_token", + "description": "Grant type for exchanging both access token and refresh token" + }, + { + "name": "access_token", + "value": "access_token", + "description": "Grant type for exchanging access token only" + }, + { + "name": "refresh_token", + "value": "refresh_token", + "description": "Grant type for exchanging refresh token only" + } + ] + } + }, + { + "name": "service", + "in": "formData", + "description": "Indicates the name of your Azure container registry.", + "required": true, + "type": "string" }, { - "$ref": "#/parameters/TagReference" + "name": "tenant", + "in": "formData", + "description": "AAD tenant associated to the AAD credentials.", + "required": false, + "type": "string" }, { - "$ref": "#/parameters/TagAttributeValue" + "name": "refreshToken", + "in": "formData", + "description": "AAD refresh token, mandatory when grant_type is access_token_refresh_token or\nrefresh_token", + "required": false, + "type": "string" }, { - "$ref": "#/parameters/ApiVersionParameter" + "name": "accessToken", + "in": "formData", + "description": "AAD access token, mandatory when grant_type is access_token_refresh_token or\naccess_token.", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "The attributes are updated", + "description": "The request has succeeded.", "schema": { - "$ref": "#/definitions/TagAttributes" + "$ref": "#/definitions/AcrAccessToken" } }, "default": { - "description": "ACR error response describing why the operation failed.", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/AcrErrors" } } + }, + "x-ms-examples": { + "Get Access Token with Refresh Token": { + "$ref": "./examples/PostAccessToken.json" + } } - }, - "delete": { - "tags": [ - "Repository" - ], - "description": "Delete tag", - "operationId": "ContainerRegistry_DeleteTag", - "consumes": [ + } + }, + "/v2/{name}/blobs/{digest}": { + "get": { + "operationId": "ContainerRegistryBlob_GetBlob", + "description": "Retrieve the blob from the registry identified by digest.", + "produces": [ + "application/octet-stream", "application/json" ], - "x-ms-examples": { - "Delete a tag": { - "$ref": "./examples/DeleteTag.json" - } - }, "parameters": [ { - "$ref": "#/parameters/ImageName" + "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" }, { - "$ref": "#/parameters/TagReference" + "name": "name", + "in": "path", + "description": "Name of the image (including the namespace)", + "required": true, + "type": "string" }, { - "$ref": "#/parameters/ApiVersionParameter" + "name": "digest", + "in": "path", + "description": "Digest of a BLOB", + "required": true, + "type": "string" } ], "responses": { - "202": { - "description": "The tag is deleted" + "200": { + "description": "The request has succeeded.", + "schema": { + "type": "file" + }, + "headers": { + "Content-Length": { + "type": "integer", + "format": "int64", + "description": "The length of the requested blob content." + }, + "Docker-Content-Digest": { + "type": "string", + "description": "Digest of the targeted content for the request." + } + } }, - "404": { - "description": "The tag was not found" + "307": { + "description": "Redirection", + "headers": { + "Location": { + "type": "string", + "description": "The location where the layer should be accessible." + } + } }, "default": { - "description": "ACR error response describing why the operation failed.", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/AcrErrors" } } + }, + "x-ms-examples": { + "Get a blob from digest": { + "$ref": "./examples/GetBlob.json" + } } - } - }, - "/acr/v1/{name}/_manifests": { - "get": { - "tags": [ - "Repository" - ], - "description": "List manifests of a repository", - "operationId": "ContainerRegistry_GetManifests", - "x-ms-examples": { - "Get list of available manifests": { - "$ref": "./examples/GetManifestList.json" - } - }, - "x-ms-pageable": { - "itemName": "manifests", - "nextLinkName": "link" - }, + }, + "delete": { + "operationId": "ContainerRegistryBlob_DeleteBlob", + "description": "Removes an already uploaded blob.", "parameters": [ { - "$ref": "#/parameters/ImageName" + "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" }, { - "$ref": "#/parameters/QueryLast" - }, - { - "$ref": "#/parameters/QueryNum" - }, - { - "$ref": "#/parameters/QueryOrderBy" + "name": "name", + "in": "path", + "description": "Name of the image (including the namespace)", + "required": true, + "type": "string" }, { - "$ref": "#/parameters/ApiVersionParameter" + "name": "digest", + "in": "path", + "description": "Digest of a BLOB", + "required": true, + "type": "string" } ], "responses": { - "200": { + "202": { + "description": "The request has been accepted for processing, but processing has not yet completed.", "headers": { - "Link": { - "description": "next paginated result", - "type": "string" + "Docker-Content-Digest": { + "type": "string", + "description": "Digest of the targeted content for the request." } - }, - "description": "Returns a list of manifests", - "schema": { - "$ref": "#/definitions/AcrManifests" } }, "default": { - "description": "ACR error response describing why the operation failed.", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/AcrErrors" } } - } - } - }, - "/acr/v1/{name}/_manifests/{digest}": { - "get": { - "tags": [ - "Repository" - ], - "description": "Get manifest attributes", - "operationId": "ContainerRegistry_GetManifestProperties", + }, "x-ms-examples": { - "Get manifest attributes": { - "$ref": "./examples/GetManifestAttributes.json" + "Delete a blob": { + "$ref": "./examples/DeleteBlob.json" } - }, + } + }, + "head": { + "operationId": "ContainerRegistryBlob_CheckBlobExists", + "description": "Same as GET, except only the headers are returned.", "parameters": [ { - "$ref": "#/parameters/ImageName" + "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" }, { - "$ref": "#/parameters/Digest" + "name": "name", + "in": "path", + "description": "Name of the image (including the namespace)", + "required": true, + "type": "string" }, { - "$ref": "#/parameters/ApiVersionParameter" + "name": "digest", + "in": "path", + "description": "Digest of a BLOB", + "required": true, + "type": "string" } ], "responses": { "200": { - "description": "List of attributes", - "schema": { - "$ref": "#/definitions/ManifestAttributes" + "description": "The request has succeeded.", + "headers": { + "Content-Length": { + "type": "integer", + "format": "int64", + "description": "The length of the requested blob content." + }, + "Docker-Content-Digest": { + "type": "string", + "description": "Digest of the targeted content for the request." + } + } + }, + "307": { + "description": "Redirection", + "headers": { + "Location": { + "type": "string", + "description": "The location where the layer should be accessible." + } } }, "default": { - "description": "ACR error response describing why the operation failed.", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/AcrErrors" } } - } - }, - "patch": { - "tags": [ - "Repository" - ], - "description": "Update properties of a manifest", - "operationId": "ContainerRegistry_UpdateManifestProperties", - "consumes": [ - "application/json" - ], + }, "x-ms-examples": { - "Update attributes of a manifest": { - "$ref": "./examples/UpdateManifestAttributes.json" + "Head for a Blob Chunk": { + "$ref": "./examples/CheckBlob.json" } - }, + } + } + }, + "/v2/{name}/blobs/uploads/": { + "post": { + "operationId": "ContainerRegistryBlob_MountBlob", + "description": "Mount a blob identified by the `mount` parameter from another repository.", "parameters": [ { - "$ref": "#/parameters/ImageName" + "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" }, { - "$ref": "#/parameters/Digest" + "name": "name", + "in": "path", + "description": "Name of the image (including the namespace)", + "required": true, + "type": "string" }, { - "$ref": "#/parameters/ManifestAttributeValue" + "name": "from", + "in": "query", + "description": "Name of the source repository.", + "required": true, + "type": "string" }, { - "$ref": "#/parameters/ApiVersionParameter" + "name": "mount", + "in": "query", + "description": "Digest of blob to mount from the source repository.", + "required": true, + "type": "string" } ], "responses": { - "200": { - "description": "The attributes are updated", - "schema": { - "$ref": "#/definitions/ManifestAttributes" + "201": { + "description": "The request has succeeded and a new resource has been created as a result.", + "headers": { + "Docker-Content-Digest": { + "type": "string", + "description": "Digest of the targeted content for the request." + }, + "Docker-Upload-UUID": { + "type": "string", + "description": "Identifies the docker upload uuid for the current request." + }, + "Location": { + "type": "string", + "description": "Provided location for blob" + } } }, "default": { - "description": "ACR error response describing why the operation failed.", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/AcrErrors" } } + }, + "x-ms-examples": { + "Mount a blob from repository": { + "$ref": "./examples/MountBlob.json" + } } } }, - "/oauth2/exchange": { - "post": { - "tags": [ - "AcrToken", - "RefreshToken" - ], - "description": "Exchange AAD tokens for an ACR refresh Token", - "operationId": "Authentication_ExchangeAadAccessTokenForAcrRefreshToken", - "consumes": [ - "application/x-www-form-urlencoded" - ], + "/v2/{name}/manifests/{reference}": { + "get": { + "operationId": "ContainerRegistry_GetManifest", + "description": "Get the manifest identified by `name` and `reference` where `reference` can be\na tag or digest.", "parameters": [ { - "$ref": "#/parameters/Grant_type" + "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" }, { - "$ref": "#/parameters/Service" - }, - { - "$ref": "#/parameters/Tenant" - }, - { - "$ref": "#/parameters/RefreshToken" + "name": "name", + "in": "path", + "description": "Name of the image (including the namespace)", + "required": true, + "type": "string" }, { - "$ref": "#/parameters/AccessToken" + "name": "reference", + "in": "path", + "description": "A tag or a digest, pointing to a specific image", + "required": true, + "type": "string" }, { - "$ref": "#/parameters/ApiVersionParameter" + "name": "accept", + "in": "header", + "description": "Accept header string delimited by comma. For example,\napplication/vnd.docker.distribution.manifest.v2+json", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "ACR refresh token acquired", + "description": "The request has succeeded.", "schema": { - "$ref": "#/definitions/RefreshToken" + "$ref": "#/definitions/ManifestWrapper" } }, "default": { - "description": "ACR error response describing why the operation failed.", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/AcrErrors" } } }, - "security": [], "x-ms-examples": { - "Exchange AAD Token for ACR Refresh": { - "$ref": "./examples/PostRefreshToken.json" + "Get manifest": { + "$ref": "./examples/GetManifest.json" } } - } - }, - "/oauth2/token": { - "post": { - "tags": [ - "AcrToken", - "AccessToken" - ], - "description": "Exchange ACR Refresh token for an ACR Access Token", - "operationId": "Authentication_ExchangeAcrRefreshTokenForAcrAccessToken", + }, + "put": { + "operationId": "ContainerRegistry_CreateManifest", + "description": "Put the manifest identified by `name` and `reference` where `reference` can be\na tag or digest.", "consumes": [ - "application/x-www-form-urlencoded" + "application/vnd.docker.distribution.manifest.v2+json" ], "parameters": [ { - "$ref": "#/parameters/Service" + "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" }, { - "name": "scope", - "in": "formData", + "name": "name", + "in": "path", + "description": "Name of the image (including the namespace)", "required": true, - "description": "Which is expected to be a valid scope, and can be specified more than once for multiple scope requests. You obtained this from the Www-Authenticate response header from the challenge.", "type": "string" }, { - "name": "refresh_token", - "x-ms-client-name": "acrRefreshToken", - "in": "formData", + "name": "reference", + "in": "path", + "description": "A tag or a digest, pointing to a specific image", "required": true, - "description": "Must be a valid ACR refresh token", "type": "string" }, { - "name": "grant_type", - "in": "formData", - "description": "Grant type is expected to be refresh_token", + "name": "payload", + "in": "body", + "description": "Manifest body, can take v1 or v2 values depending on accept header", "required": true, - "type": "string", - "enum": [ - "refresh_token", - "password" - ], - "x-ms-enum": { - "name": "TokenGrantType" - }, - "x-accessibility": "internal", - "x-ms-client-default": "refresh_token" - }, - { - "$ref": "#/parameters/ApiVersionParameter" + "schema": { + "$ref": "#/definitions/Manifest" + } } ], "responses": { - "200": { - "description": "ACR access token acquired", - "schema": { - "$ref": "#/definitions/AccessToken" + "201": { + "description": "The request has succeeded and a new resource has been created as a result.", + "headers": { + "Content-Length": { + "type": "integer", + "format": "int64" + }, + "Docker-Content-Digest": { + "type": "string" + }, + "Location": { + "type": "string" + } } }, "default": { - "description": "ACR error response describing why the operation failed.", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/AcrErrors" } } }, - "security": [], "x-ms-examples": { - "Get Access Token with Refresh Token": { - "$ref": "./examples/PostAccessToken.json" + "Put manifest": { + "$ref": "./examples/CreateManifest.json" } } }, - "get": { - "tags": [ - "AcrToken", - "AccessToken", - "userLogin" - ], - "description": "Exchange Username, Password and Scope for an ACR Access Token", - "operationId": "Authentication_GetAcrAccessTokenFromLogin", + "delete": { + "operationId": "ContainerRegistry_DeleteManifest", + "description": "Delete the manifest identified by `name` and `reference`. Note that a manifest\ncan _only_ be deleted by `digest`.", "parameters": [ { - "name": "service", - "in": "query", + "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" + }, + { + "name": "name", + "in": "path", + "description": "Name of the image (including the namespace)", "required": true, - "description": "Indicates the name of your Azure container registry.", "type": "string" }, { - "name": "scope", - "in": "query", + "name": "reference", + "in": "path", + "description": "Digest of a BLOB", "required": true, - "description": "Expected to be a valid scope, and can be specified more than once for multiple scope requests. You can obtain this from the Www-Authenticate response header from the challenge.", "type": "string" } ], "responses": { - "200": { - "description": "Access token acquired", - "schema": { - "$ref": "#/definitions/AccessToken" - } + "202": { + "description": "The request has been accepted for processing, but processing has not yet completed." + }, + "404": { + "description": "The server cannot find the requested resource." }, "default": { - "description": "ACR error response describing why the operation failed.", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/AcrErrors" } } }, - "security": [ - { - "registry_auth": [] - } - ], "x-ms-examples": { - "Get Access Token with username and password": { - "$ref": "./examples/GetAccessToken.json" + "Delete manifest": { + "$ref": "./examples/DeleteManifest.json" } } } - } - }, - "x-ms-paths": { - "/v2/{name}/blobs/uploads/?mode=resumable": { - "post": { - "tags": [ - "ContainerRegistryBlob" - ], - "description": "Initiate a resumable blob upload with an empty request body.", - "operationId": "ContainerRegistryBlob_StartUpload", - "x-ms-examples": { - "Start a blob upload": { - "$ref": "./examples/StartBlobUpload.json" - } - }, + }, + "/v2/": { + "get": { + "operationId": "ContainerRegistry_CheckDockerV2Support", + "description": "Tells whether this Docker Registry instance supports Docker Registry HTTP API v2", "parameters": [ { - "$ref": "#/parameters/ImageName" + "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" } ], "responses": { - "202": { - "description": "The upload has been created. The Location header must be used to complete the upload. The response should be identical to a GET request on the contents of the returned Location header.", - "headers": { - "Location": { - "description": "Provided location for blob", - "type": "string" - }, - "Range": { - "description": "Range indicating the current progress of the upload.", - "type": "string" - }, - "Docker-Upload-UUID": { - "description": "Identifies the docker upload uuid for the current request.", - "type": "string" - } - } + "200": { + "description": "The request has succeeded." }, "default": { - "description": "ACR error response describing why the operation failed.", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/AcrErrors" } } - } - } - }, - "/v2/{name}/blobs/{digest}?mode=chunk": { + }, + "x-ms-examples": { + "Check Docker Registry V2 Support": { + "$ref": "./examples/GetDockerRegistryV2Support.json" + } + } + } + } + }, + "x-ms-paths": { + "/v2/{name}/blobs/{digest}?_overload=getChunk": { "get": { + "operationId": "ContainerRegistryBlob_GetChunk", + "description": "Retrieve the blob from the registry identified by `digest`. This endpoint may\nalso support RFC7233 compliant range requests. Support can be detected by\nissuing a HEAD request. If the header `Accept-Range: bytes` is returned, range\nrequests can be used to fetch partial content.", "produces": [ - "application/octet-stream" - ], - "tags": [ - "ContainerRegistryBlob" + "application/octet-stream", + "application/json" ], - "description": "Retrieve the blob from the registry identified by `digest`. This endpoint may also support RFC7233 compliant range requests. Support can be detected by issuing a HEAD request. If the header `Accept-Range: bytes` is returned, range requests can be used to fetch partial content.", - "operationId": "ContainerRegistryBlob_GetChunk", "parameters": [ { - "$ref": "#/parameters/ImageName" + "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" }, { - "$ref": "#/parameters/Digest" + "name": "name", + "in": "path", + "description": "Name of the image (including the namespace)", + "required": true, + "type": "string" + }, + { + "name": "digest", + "in": "path", + "description": "Digest of a BLOB", + "required": true, + "type": "string" }, { - "$ref": "#/parameters/Range" + "name": "range", + "in": "header", + "description": "Format : bytes=-, HTTP Range header specifying blob chunk.", + "required": true, + "type": "string", + "x-ms-client-name": "Range" } ], - "x-ms-examples": { - "Get a blob Chunk": { - "$ref": "./examples/GetBlobChunk.json" - } - }, "responses": { "206": { - "description": "The blob identified by digest is available. The specified chunk of blob content will be present in the body of the request.", + "description": "Successful", "schema": { - "description": "blob binary data", - "type": "file", - "format": "file" + "type": "file" }, "headers": { "Content-Length": { @@ -1325,43 +1540,58 @@ }, "Content-Range": { "type": "string", - "description": "Content range of blob chunk." + "description": "Content range of the blob chunk." } } }, "default": { - "description": "ACR error response describing why the operation failed.", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/AcrErrors" } } + }, + "x-ms-examples": { + "Get a blob Chunk": { + "$ref": "./examples/GetBlobChunk.json" + } } - }, + } + }, + "/v2/{name}/blobs/{digest}?_overload=checkChunkExists": { "head": { - "tags": [ - "ContainerRegistryBlob" - ], + "operationId": "ContainerRegistryBlob_CheckChunkExists", + "description": "Same as GET, except only the headers are returned.", "parameters": [ { - "$ref": "#/parameters/ImageName" + "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" + }, + { + "name": "name", + "in": "path", + "description": "Name of the image (including the namespace)", + "required": true, + "type": "string" }, { - "$ref": "#/parameters/Digest" + "name": "digest", + "in": "path", + "description": "Digest of a BLOB", + "required": true, + "type": "string" }, { - "$ref": "#/parameters/Range" + "name": "range", + "in": "header", + "description": "Format : bytes=-, HTTP Range header specifying blob chunk.", + "required": true, + "type": "string", + "x-ms-client-name": "Range" } ], - "description": "Same as GET, except only the headers are returned.", - "operationId": "ContainerRegistryBlob_CheckChunkExists", - "x-ms-examples": { - "Get headers without blob Chunk": { - "$ref": "./examples/CheckBlobChunk.json" - } - }, "responses": { "200": { - "description": "The blob identified by digest is available. The specified chunk of blob content will be present in the body of the request.", + "description": "The request has succeeded.", "headers": { "Content-Length": { "type": "integer", @@ -1370,295 +1600,226 @@ }, "Content-Range": { "type": "string", - "description": "Content range of blob chunk." + "description": "Content range of the blob chunk." + } + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/AcrErrors" + } + } + }, + "x-ms-examples": { + "Get headers without blob Chunk": { + "$ref": "./examples/CheckBlobChunk.json" + } + } + } + }, + "/v2/{name}/blobs/uploads/?_overload=startUpload": { + "post": { + "operationId": "ContainerRegistryBlob_StartUpload", + "description": "Initiate a resumable blob upload with an empty request body.", + "parameters": [ + { + "$ref": "#/parameters/Azure.Core.Foundations.ApiVersionParameter" + }, + { + "name": "name", + "in": "path", + "description": "Name of the image (including the namespace)", + "required": true, + "type": "string" + } + ], + "responses": { + "202": { + "description": "The request has been accepted for processing, but processing has not yet completed.", + "headers": { + "Docker-Upload-UUID": { + "type": "string", + "description": "Identifies the docker upload uuid for the current request." + }, + "Location": { + "type": "string", + "description": "Provided location for blob" + }, + "Range": { + "type": "string", + "description": "Range indicating the current progress of the upload." } } }, "default": { - "description": "ACR error response describing why the operation failed.", + "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/AcrErrors" } } + }, + "x-ms-examples": { + "Start a blob upload": { + "$ref": "./examples/StartBlobUpload.json" + } } } } }, "definitions": { - "RepositoryAttributes": { - "required": [ - "registry", - "imageName", - "createdTime", - "lastUpdateTime", - "manifestCount", - "tagCount", - "changeableAttributes" - ], - "x-ms-client-name": "ContainerRepositoryProperties", + "AcrAccessToken": { "type": "object", - "description": "Properties of this repository.", + "description": "The ACR access token response containing the access token for authentication.", "properties": { - "registry": { - "type": "string", - "readOnly": true, - "description": "Registry login server name. This is likely to be similar to {registry-name}.azurecr.io.", - "x-ms-client-name": "registryLoginServer" - }, - "imageName": { + "access_token": { "type": "string", - "readOnly": true, - "description": "Image name", - "x-ms-client-name": "name" - }, - "createdTime": { + "description": "The access token for performing authenticated requests", + "x-ms-client-name": "accessToken" + } + } + }, + "AcrErrorInfo": { + "type": "object", + "description": "Error information", + "properties": { + "code": { "type": "string", - "readOnly": true, - "format": "date-time", - "description": "Image created time", - "x-ms-client-name": "createdOn" + "description": "Error code" }, - "lastUpdateTime": { + "message": { "type": "string", - "readOnly": true, - "format": "date-time", - "description": "Image last update time", - "x-ms-client-name": "lastUpdatedOn" - }, - "manifestCount": { - "type": "integer", - "readOnly": true, - "description": "Number of the manifests" - }, - "tagCount": { - "type": "integer", - "readOnly": true, - "description": "Number of the tags" + "description": "Error message" }, - "changeableAttributes": { - "description": "Writeable properties of the resource", - "$ref": "#/definitions/RepositoryChangeableAttributes", - "x-ms-client-flatten": true + "detail": { + "type": "object", + "description": "Error details" } - }, - "example": { - "registry": "registryname.azurecr.io", - "changeableAttributes": { - "readEnabled": true, - "listEnabled": true, - "deleteEnabled": true, - "writeEnabled": true - }, - "imageName": "imageName", - "createdTime": "2018-09-07T16:30:46.6583219Z", - "tagCount": 6, - "manifestCount": 2, - "lastUpdateTime": "2018-09-07T16:30:46.6583219Z" } }, - "TagList": { - "required": [ - "registry", - "imageName", - "tags" - ], - "description": "List of tag details", - "x-accessibility": "internal", + "AcrErrors": { + "type": "object", + "description": "Acr error response describing why the operation failed", + "properties": { + "errors": { + "type": "array", + "description": "Array of detailed error", + "items": { + "$ref": "#/definitions/AcrErrorInfo" + } + } + } + }, + "AcrManifests": { + "type": "object", + "description": "Manifest attributes", "properties": { "registry": { "type": "string", - "description": "Registry login server name. This is likely to be similar to {registry-name}.azurecr.io.", - "x-ms-client-name": "RegistryLoginServer" + "description": "Registry login server name. This is likely to be similar to\n{registry-name}.azurecr.io." }, "imageName": { "type": "string", - "description": "Image name", - "x-ms-client-name": "repository" + "description": "Image name" }, - "tags": { + "manifests": { "type": "array", - "description": "List of tag attribute details", - "x-ms-client-name": "TagAttributeBases", - "x-accessibility": "internal", + "description": "List of manifests", "items": { - "$ref": "#/definitions/TagAttributesBase" + "$ref": "#/definitions/ManifestAttributesBase" } }, "link": { - "type": "string" + "type": "string", + "description": "Link to the next page of results" } - }, - "example": { - "registry": "registry", - "imageName": "imageName", - "tags": [ - { - "changeableAttributes": { - "readEnabled": true, - "listEnabled": true, - "deleteEnabled": true, - "writeEnabled": true - }, - "name": "name", - "digest": "digest", - "createdTime": "createdTime", - "signed": true, - "lastUpdateTime": "lastUpdateTime" - }, - { - "changeableAttributes": { - "readEnabled": true, - "listEnabled": true, - "deleteEnabled": true, - "writeEnabled": true - }, - "name": "name", - "digest": "digest", - "createdTime": "createdTime", - "signed": true, - "lastUpdateTime": "lastUpdateTime" - } - ] } }, - "TagAttributes": { - "required": [ - "registry", - "imageName", - "tag" - ], - "x-ms-client-name": "ArtifactTagProperties", - "description": "Tag attributes", + "AcrRefreshToken": { + "type": "object", + "description": "The ACR refresh token response containing the refresh token for authentication.", "properties": { - "registry": { - "type": "string", - "readOnly": true, - "description": "Registry login server name. This is likely to be similar to {registry-name}.azurecr.io.", - "x-ms-client-name": "registryLoginServer" - }, - "imageName": { + "refresh_token": { "type": "string", - "readOnly": true, - "description": "Image name", - "x-ms-client-name": "repositoryName" - }, - "tag": { - "x-ms-client-flatten": true, - "description": "List of tag attribute details", - "readOnly": true, - "$ref": "#/definitions/TagAttributesBase" - } - }, - "example": { - "registry": "registry", - "imageName": "imageName", - "tag": { - "changeableAttributes": { - "readEnabled": true, - "listEnabled": true, - "deleteEnabled": true, - "writeEnabled": true - }, - "name": "name", - "digest": "digest", - "createdTime": "createdTime", - "signed": true, - "lastUpdateTime": "lastUpdateTime" + "description": "The refresh token to be used for generating access tokens", + "x-ms-client-name": "refreshToken" } } }, - "TagAttributesBase": { - "required": [ - "name", - "digest", - "createdTime", - "lastUpdateTime", - "changeableAttributes" - ], - "description": "Tag attribute details", - "x-accessibility": "internal", + "Annotations": { + "type": "object", + "description": "Additional information provided through arbitrary metadata.", "properties": { - "name": { + "org.opencontainers.image.created": { "type": "string", - "readOnly": true, - "description": "Tag name" + "format": "date-time", + "description": "Date and time on which the image was built (string, date-time as defined by\nhttps://tools.ietf.org/html/rfc3339#section-5.6)", + "x-ms-client-name": "created" }, - "digest": { + "org.opencontainers.image.authors": { "type": "string", - "readOnly": true, - "description": "Tag digest" + "description": "Contact details of the people or organization responsible for the image.", + "x-ms-client-name": "authors" }, - "createdTime": { + "org.opencontainers.image.url": { "type": "string", - "readOnly": true, - "format": "date-time", - "description": "Tag created time", - "x-ms-client-name": "createdOn" + "description": "URL to find more information on the image.", + "x-ms-client-name": "url" }, - "lastUpdateTime": { + "org.opencontainers.image.documentation": { "type": "string", - "readOnly": true, - "format": "date-time", - "description": "Tag last update time", - "x-ms-client-name": "lastUpdatedOn" + "description": "URL to get documentation on the image.", + "x-ms-client-name": "documentation" }, - "signed": { - "type": "boolean", - "description": "Is signed" + "org.opencontainers.image.source": { + "type": "string", + "description": "URL to get source code for building the image.", + "x-ms-client-name": "source" }, - "changeableAttributes": { - "$ref": "#/definitions/TagChangeableAttributes", - "description": "Writeable properties of the resource", - "x-ms-client-flatten": true - } - }, - "example": { - "changeableAttributes": { - "readEnabled": true, - "listEnabled": true, - "deleteEnabled": true, - "writeEnabled": true - }, - "name": "tagname", - "digest": "sha256:0873c923e00e0fd2ba78041bfb64a105e1ecb7678916d1f7776311e45bf5634b", - "createdTime": "2018-08-10T17:28:44.1082945Z", - "signed": true, - "lastUpdateTime": "2018-08-10T17:28:44.1082945Z" - } - }, - "TagOrderBy": { - "type": "string", - "description": "Sort options for ordering tags in a collection.", - "enum": [ - "none", - "timedesc", - "timeasc" - ], - "x-ms-enum": { - "name": "ArtifactTagOrderBy", - "values": [ - { - "value": "none", - "name": "None", - "description": "Do not provide an orderby value in the request." - }, - { - "value": "timedesc", - "name": "LastUpdatedOnDescending", - "description": "Order tags by LastUpdatedOn field, from most recently updated to least recently updated." - }, - { - "value": "timeasc", - "name": "LastUpdatedOnAscending", - "description": "Order tags by LastUpdatedOn field, from least recently updated to most recently updated." - } - ] + "org.opencontainers.image.version": { + "type": "string", + "description": "Version of the packaged software. The version MAY match a label or tag in the\nsource code repository, may also be Semantic versioning-compatible", + "x-ms-client-name": "version" + }, + "org.opencontainers.image.revision": { + "type": "string", + "description": "Source control revision identifier for the packaged software.", + "x-ms-client-name": "revision" + }, + "org.opencontainers.image.vendor": { + "type": "string", + "description": "Name of the distributing entity, organization or individual.", + "x-ms-client-name": "vendor" + }, + "org.opencontainers.image.licenses": { + "type": "string", + "description": "License(s) under which contained software is distributed as an SPDX License\nExpression.", + "x-ms-client-name": "licenses" + }, + "org.opencontainers.image.ref.name": { + "type": "string", + "description": "Name of the reference for a target.", + "x-ms-client-name": "name" + }, + "org.opencontainers.image.title": { + "type": "string", + "description": "Human-readable title of the image", + "x-ms-client-name": "title" + }, + "org.opencontainers.image.description": { + "type": "string", + "description": "Human-readable description of the software packaged in the image", + "x-ms-client-name": "description" + } }, - "x-accessibility": "public" + "additionalProperties": { + "additionalProperties": {}, + "type": "object" + } }, "ArtifactArchitecture": { - "description": "The artifact platform's architecture.", "type": "string", + "description": "The artifact platform's architecture.", "enum": [ "386", "amd64", @@ -1669,7 +1830,7 @@ "mips64", "mips64le", "ppc64", - "ppc641e", + "ppc64le", "riscv64", "s390x", "wasm" @@ -1679,76 +1840,154 @@ "modelAsString": true, "values": [ { - "value": "386", "name": "I386", + "value": "386", "description": "i386" }, { - "value": "amd64", "name": "Amd64", + "value": "amd64", "description": "AMD64" }, { - "value": "arm", "name": "Arm", + "value": "arm", "description": "ARM" }, { - "value": "arm64", "name": "Arm64", + "value": "arm64", "description": "ARM64" }, { - "value": "mips", "name": "Mips", + "value": "mips", "description": "MIPS" }, { - "value": "mipsle", "name": "MipsLe", + "value": "mipsle", "description": "MIPSLE" }, { - "value": "mips64", "name": "Mips64", + "value": "mips64", "description": "MIPS64" }, { - "value": "mips64le", "name": "Mips64Le", + "value": "mips64le", "description": "MIPS64LE" }, { - "value": "ppc64", "name": "Ppc64", + "value": "ppc64", "description": "PPC64" }, { - "value": "ppc64le", "name": "Ppc64Le", + "value": "ppc64le", "description": "PPC64LE" }, { - "value": "riscv64", "name": "RiscV64", + "value": "riscv64", "description": "RISCv64" }, { - "value": "s390x", "name": "S390x", + "value": "s390x", "description": "s390x" }, { - "value": "wasm", "name": "Wasm", + "value": "wasm", "description": "Wasm" } ] + } + }, + "ArtifactManifestOrder": { + "type": "string", + "description": "Sort options for ordering manifests in a collection.", + "enum": [ + "none", + "timedesc", + "timeasc" + ], + "x-ms-enum": { + "name": "ArtifactManifestOrder", + "modelAsString": true, + "values": [ + { + "name": "None", + "value": "none", + "description": "Do not provide an orderby value in the request." + }, + { + "name": "LastUpdatedOnDescending", + "value": "timedesc", + "description": "Order manifests by LastUpdatedOn field, from most recently updated to least\nrecently updated." + }, + { + "name": "LastUpdatedOnAscending", + "value": "timeasc", + "description": "Order manifest by LastUpdatedOn field, from least recently updated to most\nrecently updated." + } + ] + } + }, + "ArtifactManifestPlatform": { + "type": "object", + "description": "The artifact's platform, consisting of operating system and architecture.", + "properties": { + "digest": { + "type": "string", + "description": "Manifest digest", + "readOnly": true + }, + "architecture": { + "$ref": "#/definitions/ArtifactArchitecture", + "description": "CPU architecture", + "readOnly": true + }, + "os": { + "$ref": "#/definitions/ArtifactOperatingSystem", + "description": "Operating system", + "readOnly": true + } + }, + "required": [ + "digest" + ] + }, + "ArtifactManifestProperties": { + "type": "object", + "description": "Manifest attributes details", + "properties": { + "registry": { + "type": "string", + "description": "Registry login server name. This is likely to be similar to\n{registry-name}.azurecr.io.", + "readOnly": true + }, + "imageName": { + "type": "string", + "description": "Repository name", + "readOnly": true + }, + "manifest": { + "$ref": "#/definitions/ManifestAttributesBase", + "description": "Manifest attributes", + "readOnly": true + } }, - "x-accessibility": "public" + "required": [ + "manifest" + ] }, "ArtifactOperatingSystem": { "type": "string", + "description": "The artifact platform's operating system.", "enum": [ "aix", "android", @@ -1770,398 +2009,266 @@ "modelAsString": true, "values": [ { - "value": "aix", "name": "Aix", - "description": "" + "value": "aix", + "description": "AIX operating system" }, { - "value": "android", "name": "Android", - "description": "" + "value": "android", + "description": "Android operating system" }, { - "value": "darwin", "name": "Darwin", - "description": "" + "value": "darwin", + "description": "Darwin operating system" }, { - "value": "dragonfly", "name": "Dragonfly", - "description": "" + "value": "dragonfly", + "description": "Dragonfly operating system" }, { - "value": "freebsd", "name": "FreeBsd", - "description": "" + "value": "freebsd", + "description": "FreeBSD operating system" }, { - "value": "illumos", "name": "Illumos", - "description": "" + "value": "illumos", + "description": "Illumos operating system" }, { - "value": "ios", "name": "iOS", - "description": "" + "value": "ios", + "description": "iOS operating system" }, { - "value": "js", "name": "JS", - "description": "" + "value": "js", + "description": "JavaScript operating system" }, { - "value": "linux", "name": "Linux", - "description": "" + "value": "linux", + "description": "Linux operating system" }, { - "value": "netbsd", "name": "NetBsd", - "description": "" + "value": "netbsd", + "description": "NetBSD operating system" }, { - "value": "openbsd", "name": "OpenBsd", - "description": "" + "value": "openbsd", + "description": "OpenBSD operating system" }, { - "value": "plan9", "name": "Plan9", - "description": "" + "value": "plan9", + "description": "Plan 9 operating system" }, { - "value": "solaris", "name": "Solaris", - "description": "" + "value": "solaris", + "description": "Solaris operating system" }, { - "value": "windows", "name": "Windows", - "description": "" + "value": "windows", + "description": "Windows operating system" } ] - }, - "x-accessibility": "public" + } }, - "AcrManifests": { - "description": "Manifest attributes", - "properties": { - "registry": { - "type": "string", - "description": "Registry login server name. This is likely to be similar to {registry-name}.azurecr.io.", - "x-ms-client-name": "registryLoginServer" - }, - "imageName": { - "type": "string", - "description": "Image name", - "x-ms-client-name": "repository" - }, - "manifests": { - "type": "array", - "description": "List of manifests", - "items": { - "$ref": "#/definitions/ManifestAttributesBase", - "description": "Manifest details" - } - }, - "link": { - "type": "string" - } - }, - "x-accessibility": "internal", - "example": { - "registry": "registry", - "imageName": "imageName", - "manifests": [ - { - "changeableAttributes": { - "readEnabled": true, - "listEnabled": true, - "deleteEnabled": true, - "writeEnabled": true - }, - "os": "os", - "digest": "digest", - "imageSize": 2401606, - "createdTime": "createdTime", - "mediaType": "mediaType", - "configMediaType": "configMediaType", - "lastUpdateTime": "lastUpdateTime", - "architecture": "architecture", - "tags": [ - "tags", - "tags" - ] - }, - { - "changeableAttributes": { - "readEnabled": true, - "listEnabled": true, - "deleteEnabled": true, - "writeEnabled": true - }, - "os": "os", - "digest": "digest", - "imageSize": 2401606, - "createdTime": "createdTime", - "mediaType": "mediaType", - "configMediaType": "configMediaType", - "lastUpdateTime": "lastUpdateTime", - "architecture": "architecture", - "tags": [ - "tags", - "tags" - ] + "ArtifactTagOrder": { + "type": "string", + "description": "Sort options for ordering tags in a collection.", + "enum": [ + "none", + "timedesc", + "timeasc" + ], + "x-ms-enum": { + "name": "ArtifactTagOrder", + "modelAsString": true, + "values": [ + { + "name": "None", + "value": "none", + "description": "Do not provide an orderby value in the request." + }, + { + "name": "LastUpdatedOnDescending", + "value": "timedesc", + "description": "Order tags by LastUpdatedOn field, from most recently updated to least recently\nupdated." + }, + { + "name": "LastUpdatedOnAscending", + "value": "timeasc", + "description": "Order tags by LastUpdatedOn field, from least recently updated to most recently\nupdated." } ] } }, - "ManifestAttributes": { - "required": [ - "manifest" - ], - "x-ms-client-name": "ArtifactManifestProperties", - "description": "Manifest attributes details", + "ArtifactTagProperties": { + "type": "object", + "description": "Tag attributes", "properties": { "registry": { - "description": "Registry login server name. This is likely to be similar to {registry-name}.azurecr.io.", - "readOnly": true, "type": "string", - "x-ms-client-name": "registryLoginServer" + "description": "Registry login server name. This is likely to be similar to\n{registry-name}.azurecr.io.", + "readOnly": true }, "imageName": { - "description": "Repository name", "type": "string", - "readOnly": true, - "x-ms-client-name": "repositoryName" + "description": "Image name", + "readOnly": true }, - "manifest": { - "x-ms-client-flatten": true, - "readOnly": true, - "description": "Manifest attributes", - "$ref": "#/definitions/ManifestAttributesBase" + "tag": { + "$ref": "#/definitions/TagAttributesBase", + "description": "List of tag attribute details", + "readOnly": true } }, - "example": { - "registry": "acrapi.azurecr.io", - "imageName": "nanoserver", - "manifest": { - "digest": "sha256:110d2b6c84592561338aa040b1b14b7ab81c2f9edbd564c2285dd7d70d777086", - "imageSize": 2401606, - "createdTime": "2018-09-06T06:17:20.9983915Z", - "lastUpdateTime": "2018-09-06T06:17:20.9983915Z", - "architecture": "amd64", - "os": "windows", - "mediaType": "application/vnd.docker.distribution.manifest.v2+json", - "configMediaType": "application/vnd.docker.container.image.v1+json", - "tags": [ - "4.7.2-20180905-nanoserver-1803" - ], - "changeableAttributes": { - "deleteEnabled": true, - "writeEnabled": true, - "readEnabled": true, - "listEnabled": true - } - } - } - }, - "ManifestAttributesBase": { "required": [ - "digest", - "createdTime", - "lastUpdateTime" - ], + "registry", + "imageName", + "tag" + ] + }, + "ContainerRepositoryProperties": { "type": "object", - "description": "Manifest details", - "x-accessibility": "internal", + "description": "Properties of this repository.", "properties": { - "digest": { + "registry": { "type": "string", - "readOnly": true, - "description": "Manifest" + "description": "Registry login server name. This is likely to be similar to\n{registry-name}.azurecr.io.", + "readOnly": true }, - "imageSize": { - "type": "integer", - "readOnly": true, - "format": "int64", - "description": "Image size", - "x-ms-client-name": "size" + "imageName": { + "type": "string", + "description": "Image name", + "readOnly": true }, "createdTime": { "type": "string", - "readOnly": true, "format": "date-time", - "description": "Created time", - "x-ms-client-name": "createdOn" + "description": "Image created time", + "readOnly": true }, "lastUpdateTime": { "type": "string", - "readOnly": true, "format": "date-time", - "description": "Last update time", - "x-ms-client-name": "lastUpdatedOn" + "description": "Image last update time", + "readOnly": true }, - "architecture": { - "$ref": "#/definitions/ArtifactArchitecture", - "description": "CPU architecture", - "readOnly": true, - "x-nullable": true - }, - "os": { - "$ref": "#/definitions/ArtifactOperatingSystem", - "description": "Operating system", - "x-ms-client-name": "operatingSystem", - "readOnly": true, - "x-nullable": true - }, - "references": { - "type": "array", - "readOnly": true, - "description": "List of artifacts that are referenced by this manifest list, with information about the platform each supports. This list will be empty if this is a leaf manifest and not a manifest list.", - "x-ms-client-name": "relatedArtifacts", - "items": { - "$ref": "#/definitions/ManifestAttributes_manifest_references", - "description": "Manifest attributes details" - } - }, - "configMediaType": { - "type": "string", - "description": "Config blob media type" + "manifestCount": { + "type": "integer", + "format": "int32", + "description": "Number of the manifests", + "readOnly": true }, - "tags": { - "type": "array", - "readOnly": true, - "description": "List of tags", - "items": { - "type": "string", - "description": "Tag name" - } + "tagCount": { + "type": "integer", + "format": "int32", + "description": "Number of the tags", + "readOnly": true }, "changeableAttributes": { - "$ref": "#/definitions/ManifestChangeableAttributes", - "description": "Writeable properties of the resource", - "x-ms-client-flatten": true + "$ref": "#/definitions/RepositoryChangeableAttributes", + "description": "Writeable properties of the resource" } }, - "example": { - "changeableAttributes": { - "readEnabled": true, - "listEnabled": true, - "deleteEnabled": true, - "writeEnabled": true - }, - "os": "os", - "digest": "digest", - "imageSize": 2401606, - "createdTime": "createdTime", - "mediaType": "mediaType", - "configMediaType": "configMediaType", - "lastUpdateTime": "lastUpdateTime", - "architecture": "architecture", - "tags": [ - "tags", - "tags" - ] - } + "required": [ + "registry", + "imageName", + "createdTime", + "lastUpdateTime", + "manifestCount", + "tagCount", + "changeableAttributes" + ] }, - "RefreshToken": { + "DeleteRepositoryResult": { "type": "object", + "description": "Deleted repository", "properties": { - "refresh_token": { - "description": "The refresh token to be used for generating access tokens", - "type": "string" - } - }, - "x-accessibility": "internal", - "x-ms-client-name": "AcrRefreshToken" - }, - "ManifestOrderBy": { - "type": "string", - "enum": [ - "none", - "timedesc", - "timeasc" - ], - "x-ms-enum": { - "name": "ArtifactManifestOrderBy", - "values": [ - { - "value": "none", - "name": "None", - "description": "Do not provide an orderby value in the request." + "manifestsDeleted": { + "type": "array", + "description": "SHA of the deleted image", + "items": { + "type": "string" }, - { - "value": "timedesc", - "name": "LastUpdatedOnDescending", - "description": "Order manifests by LastUpdatedOn field, from most recently updated to least recently updated." + "readOnly": true + }, + "tagsDeleted": { + "type": "array", + "description": "Tag of the deleted image", + "items": { + "type": "string" }, - { - "value": "timeasc", - "name": "LastUpdatedOnAscending", - "description": "Order manifest by LastUpdatedOn field, from least recently updated to most recently updated." - } - ] - }, - "default": "none", - "description": "Sort options for ordering manifests in a collection.", - "x-accessibility": "public" - }, - "AccessToken": { - "type": "object", - "properties": { - "access_token": { - "description": "The access token for performing authenticated requests", - "type": "string" + "readOnly": true } - }, - "x-accessibility": "internal", - "x-ms-client-name": "AcrAccessToken" + } }, - "AcrErrors": { - "description": "Acr error response describing why the operation failed", + "Descriptor": { + "type": "object", + "description": "Docker V2 image layer descriptor including config and layers", "properties": { - "errors": { + "mediaType": { + "type": "string", + "description": "Layer media type" + }, + "size": { + "type": "integer", + "format": "int64", + "description": "Layer size" + }, + "digest": { + "type": "string", + "description": "Layer digest" + }, + "urls": { "type": "array", - "description": "Array of detailed error", + "description": "Specifies a list of URIs from which this object may be downloaded.", "items": { - "$ref": "#/definitions/AcrErrorInfo" + "type": "string" } + }, + "annotations": { + "$ref": "#/definitions/Annotations", + "description": "Additional information provided through arbitrary metadata." } } }, - "RepositoryTags": { - "description": "Result of the request to list tags of the image", - "x-accessibility": "internal", + "FsLayer": { + "type": "object", + "description": "Image layer information", "properties": { - "name": { + "blobSum": { "type": "string", - "description": "Name of the image" - }, - "tags": { - "type": "array", - "description": "List of tags", - "items": { - "type": "string", - "description": "Tag name" - } + "description": "SHA of an image layer" + } + } + }, + "History": { + "type": "object", + "description": "A list of unstructured historical data for v1 compatibility", + "properties": { + "v1Compatibility": { + "type": "string", + "description": "The raw v1 compatibility information" } - }, - "example": { - "name": "name", - "tags": [ - "tags", - "tags" - ] } }, "ImageSignature": { + "type": "object", "description": "Signature of a signed manifest", - "x-accessibility": "internal", "properties": { "header": { - "description": "A JSON web signature", - "$ref": "#/definitions/JWK" + "$ref": "#/definitions/JWK", + "description": "A JSON web signature" }, "signature": { "type": "string", @@ -2171,28 +2278,15 @@ "type": "string", "description": "The signed protected header" } - }, - "example": { - "header": { - "jwk": { - "crv": "P-256", - "kid": "WGXM:EYWQ:DA53:LQUP:BCWG:5RDG:S3ZM:ETH7:VMQS:WWKZ:EWDG:V74Q", - "kty": "EC", - "x": "OxZ9k5BVjPZ7jb3BmBD4X0d8MVPJqfF4NeSe8reoqnY", - "y": "EaCqTe4-vYwhk7qU6Bs2-AeLGOVtCe_-IY2MdE0Vfyc" - }, - "alg": "ES256" - }, - "signature": "p73LfotMGD8nNXz2g9YX2XtSllb4GI5-b3vjqP5N0nkv8QXg-r5z_omGiVbOZE2BYG1X_4TIN23l1KSEqsXxOg", - "protected": "eyJmb3JtYXRMZW5ndGgiOjI5ODYsImZvcm1hdFRhaWwiOiJDbjAiLCJ0aW1lIjoiMjAxOC0wOS0yMFQyMzo0MTo1MloifQ" } }, "JWK": { + "type": "object", "description": "A JSON web signature", - "x-accessibility": "internal", "properties": { "jwk": { - "$ref": "#/definitions/JWKHeader" + "$ref": "#/definitions/JWKHeader", + "description": "JSON web key parameter" }, "alg": { "type": "string", @@ -2201,8 +2295,8 @@ } }, "JWKHeader": { + "type": "object", "description": "JSON web key parameter", - "x-accessibility": "internal", "properties": { "crv": { "type": "string", @@ -2226,311 +2320,168 @@ } } }, - "History": { - "description": "A list of unstructured historical data for v1 compatibility", - "x-accessibility": "internal", + "Manifest": { + "type": "object", + "description": "Returns the requested manifest file", "properties": { - "v1Compatibility": { - "type": "string", - "description": "The raw v1 compatibility information" + "schemaVersion": { + "type": "integer", + "format": "int32", + "description": "Schema version" } - }, - "example": { - "v1Compatibility": "v1 compatibility info" } }, - "Repositories": { - "description": "List of repositories", + "ManifestAttributesBase": { + "type": "object", + "description": "Manifest details", "properties": { - "repositories": { + "digest": { + "type": "string", + "description": "Manifest", + "readOnly": true + }, + "imageSize": { + "type": "integer", + "format": "int64", + "description": "Image size", + "readOnly": true + }, + "createdTime": { + "type": "string", + "format": "date-time", + "description": "Created time", + "readOnly": true + }, + "lastUpdateTime": { + "type": "string", + "format": "date-time", + "description": "Last update time", + "readOnly": true + }, + "architecture": { + "$ref": "#/definitions/ArtifactArchitecture", + "description": "CPU architecture", + "readOnly": true + }, + "os": { + "$ref": "#/definitions/ArtifactOperatingSystem", + "description": "Operating system", + "readOnly": true + }, + "references": { "type": "array", - "description": "Repository names", + "description": "List of artifacts that are referenced by this manifest list, with information\nabout the platform each supports. This list will be empty if this is a leaf\nmanifest and not a manifest list.", "items": { - "type": "string" - } + "$ref": "#/definitions/ArtifactManifestPlatform" + }, + "readOnly": true }, - "link": { - "type": "string" - } - }, - "x-accessibility": "internal", - "example": { - "repositories": [ - "production/alpine", - "testing/alpine" - ] - } - }, - "DeletedRepository": { - "x-ms-client-name": "DeleteRepositoryResult", - "description": "Deleted repository", - "properties": { - "manifestsDeleted": { + "configMediaType": { + "type": "string", + "description": "Config blob media type" + }, + "tags": { "type": "array", - "readOnly": true, - "description": "SHA of the deleted image", + "description": "List of tags", "items": { "type": "string" }, - "x-ms-client-name": "deletedManifests" + "readOnly": true }, - "tagsDeleted": { + "changeableAttributes": { + "$ref": "#/definitions/ManifestChangeableAttributes", + "description": "Writeable properties of the resource" + } + }, + "required": [ + "digest", + "createdTime", + "lastUpdateTime" + ] + }, + "ManifestAttributesManifest": { + "type": "object", + "description": "List of manifest attributes", + "properties": { + "references": { "type": "array", - "readOnly": true, - "description": "Tag of the deleted image", + "description": "List of manifest attributes details", "items": { - "type": "string" - }, - "x-ms-client-name": "deletedTags" + "$ref": "#/definitions/ArtifactManifestPlatform" + } } } }, - "AcrErrorInfo": { - "description": "Error information", + "ManifestChangeableAttributes": { + "type": "object", + "description": "Changeable attributes", "properties": { - "code": { - "description": "Error code", - "type": "string" + "deleteEnabled": { + "type": "boolean", + "description": "Delete enabled" }, - "message": { - "type": "string", - "description": "Error message" + "writeEnabled": { + "type": "boolean", + "description": "Write enabled" }, - "detail": { - "type": "object", - "description": "Error details" + "listEnabled": { + "type": "boolean", + "description": "List enabled" + }, + "readEnabled": { + "type": "boolean", + "description": "Read enabled" } } }, - "FsLayer": { - "description": "Image layer information", - "x-accessibility": "internal", - "properties": { - "blobSum": { - "type": "string", - "description": "SHA of an image layer" - } - }, - "example": { - "blobSum": "sha256:1f7d468f830cb0ed4beb8edc9438f18096e8c682e56a35242f60e6c61b718b30" - } - }, - "Descriptor": { - "description": "Docker V2 image layer descriptor including config and layers", - "x-accessibility": "internal", + "ManifestList": { + "type": "object", + "description": "Returns the requested Docker multi-arch-manifest file", "properties": { "mediaType": { "type": "string", - "description": "Layer media type" - }, - "size": { - "type": "integer", - "format": "int64", - "description": "Layer size" - }, - "digest": { - "type": "string", - "description": "Layer digest" + "description": "Media type for this Manifest" }, - "urls": { + "manifests": { "type": "array", - "description": "Specifies a list of URIs from which this object may be downloaded.", + "description": "List of V2 image layer information", "items": { - "description": "Must conform to RFC 3986. Entries should use the http and https schemes, as defined in RFC 7230.", - "type": "string" + "$ref": "#/definitions/ManifestListAttributes" } - }, - "annotations": { - "$ref": "#/definitions/Annotations" - } - }, - "example": { - "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", - "size": 2107098, - "digest": "sha256:5d20c808ce198565ff70b3ed23a991dd49afac45dece63474b27ce6ed036adc6" - } - }, - "TagChangeableAttributes": { - "description": "Changeable attributes", - "x-ms-client-name": "TagWriteableProperties", - "x-accessibility": "internal", - "properties": { - "deleteEnabled": { - "type": "boolean", - "description": "Delete enabled", - "x-ms-client-name": "canDelete" - }, - "writeEnabled": { - "type": "boolean", - "description": "Write enabled", - "x-ms-client-name": "canWrite" - }, - "listEnabled": { - "type": "boolean", - "description": "List enabled", - "x-ms-client-name": "canList" - }, - "readEnabled": { - "type": "boolean", - "description": "Read enabled", - "x-ms-client-name": "canRead" } }, - "example": { - "readEnabled": true, - "listEnabled": true, - "deleteEnabled": true, - "writeEnabled": true - } - }, - "TagAttributes_tag": { - "description": "Tag", - "properties": { - "signatureRecord": { - "description": "SignatureRecord value", - "type": "string" + "allOf": [ + { + "$ref": "#/definitions/Manifest" } - }, - "example": { - "signatureRecord": "signatureRecord" - } + ] }, - "ManifestAttributes_manifest_references": { - "required": [ - "digest" - ], - "x-ms-client-name": "ArtifactManifestPlatform", - "description": "The artifact's platform, consisting of operating system and architecture.", + "ManifestListAttributes": { + "type": "object", + "description": "Attributes of a manifest in a manifest list.", "properties": { - "digest": { + "mediaType": { "type": "string", - "readOnly": true, - "description": "Manifest digest" - }, - "architecture": { - "$ref": "#/definitions/ArtifactArchitecture", - "readOnly": true, - "description": "CPU architecture" - }, - "os": { - "$ref": "#/definitions/ArtifactOperatingSystem", - "readOnly": true, - "description": "Operating system", - "x-ms-client-name": "operatingSystem" - } - }, - "example": { - "os": "os", - "digest": "digest", - "architecture": "architecture" - } - }, - "ManifestAttributes_manifest": { - "description": "List of manifest attributes", - "properties": { - "references": { - "type": "array", - "description": "List of manifest attributes details", - "items": { - "$ref": "#/definitions/ManifestAttributes_manifest_references", - "description": "Manifest attributes details" - } - } - }, - "example": { - "references": [ - { - "os": "os", - "digest": "digest", - "architecture": "architecture" - }, - { - "os": "os", - "digest": "digest", - "architecture": "architecture" - } - ] - } - }, - "ManifestChangeableAttributes": { - "description": "Changeable attributes", - "x-ms-client-name": "ManifestWriteableProperties", - "x-accessibility": "internal", - "properties": { - "deleteEnabled": { - "type": "boolean", - "description": "Delete enabled", - "x-ms-client-name": "canDelete" - }, - "writeEnabled": { - "type": "boolean", - "description": "Write enabled", - "x-ms-client-name": "canWrite" - }, - "listEnabled": { - "type": "boolean", - "description": "List enabled", - "x-ms-client-name": "canList" - }, - "readEnabled": { - "type": "boolean", - "description": "Read enabled", - "x-ms-client-name": "canRead" - } - }, - "example": { - "readEnabled": true, - "listEnabled": true, - "deleteEnabled": true, - "writeEnabled": true - } - }, - "RepositoryChangeableAttributes": { - "description": "Changeable attributes for Repository", - "x-ms-client-name": "RepositoryWriteableProperties", - "x-accessibility": "internal", - "properties": { - "deleteEnabled": { - "type": "boolean", - "description": "Delete enabled", - "x-ms-client-name": "canDelete" + "description": "The MIME type of the referenced object. This will generally be\napplication/vnd.docker.image.manifest.v2+json, but it could also be\napplication/vnd.docker.image.manifest.v1+json" }, - "writeEnabled": { - "type": "boolean", - "description": "Write enabled", - "x-ms-client-name": "canWrite" + "size": { + "type": "integer", + "format": "int64", + "description": "The size in bytes of the object" }, - "listEnabled": { - "type": "boolean", - "description": "List enabled", - "x-ms-client-name": "canList" + "digest": { + "type": "string", + "description": "The digest of the content, as defined by the Registry V2 HTTP API Specification" }, - "readEnabled": { - "type": "boolean", - "description": "Read enabled", - "x-ms-client-name": "canRead" - } - }, - "example": { - "readEnabled": true, - "listEnabled": true, - "deleteEnabled": true, - "writeEnabled": true - } - }, - "Manifest": { - "description": "Returns the requested manifest file", - "x-accessibility": "internal", - "properties": { - "schemaVersion": { - "type": "integer", - "description": "Schema version" + "platform": { + "$ref": "#/definitions/Platform", + "description": "The platform object describes the platform which the image in the manifest runs\non. A full list of valid operating system and architecture values are listed in\nthe Go language documentation for $GOOS and $GOARCH" } } }, "ManifestWrapper": { + "type": "object", "description": "Returns the requested manifest file", - "x-accessibility": "internal", "properties": { "mediaType": { "type": "string", @@ -2544,8 +2495,8 @@ } }, "config": { - "description": "(V2, OCI) Image config descriptor", - "$ref": "#/definitions/Descriptor" + "$ref": "#/definitions/Descriptor", + "description": "(V2, OCI) Image config descriptor" }, "layers": { "type": "array", @@ -2555,8 +2506,8 @@ } }, "annotations": { - "description": "(OCI, OCIIndex) Additional metadata", - "$ref": "#/definitions/Annotations" + "$ref": "#/definitions/Annotations", + "description": "(OCI, OCIIndex) Additional metadata" }, "architecture": { "type": "string", @@ -2598,21 +2549,20 @@ } ] }, - "ManifestList": { - "x-ms-discriminator-value": "application/vnd.docker.distribution.manifest.list.v2+json", - "description": "Returns the requested Docker multi-arch-manifest file", - "x-accessibility": "internal", + "OCIIndex": { + "type": "object", + "description": "Returns the requested OCI index file", "properties": { - "mediaType": { - "type": "string", - "description": "Media type for this Manifest" - }, "manifests": { "type": "array", - "description": "List of V2 image layer information", + "description": "List of OCI image layer information", "items": { "$ref": "#/definitions/ManifestListAttributes" } + }, + "annotations": { + "$ref": "#/definitions/Annotations", + "description": "Additional information provided through arbitrary metadata." } }, "allOf": [ @@ -2621,30 +2571,93 @@ } ] }, - "ManifestListAttributes": { - "x-accessibility": "internal", + "OCIManifest": { + "type": "object", + "description": "Returns the requested OCI Manifest file", "properties": { - "mediaType": { + "config": { + "$ref": "#/definitions/Descriptor", + "description": "V2 image config descriptor" + }, + "layers": { + "type": "array", + "description": "List of V2 image layer information", + "items": { + "$ref": "#/definitions/Descriptor" + } + }, + "annotations": { + "$ref": "#/definitions/Annotations", + "description": "Additional information provided through arbitrary metadata." + } + }, + "allOf": [ + { + "$ref": "#/definitions/Manifest" + } + ] + }, + "Paths108HwamOauth2ExchangePostRequestbodyContentApplicationXWwwFormUrlencodedSchema": { + "type": "object", + "description": "Paths108HwamOauth2ExchangePostRequestbodyContentApplicationXWwwFormUrlencodedSchema", + "properties": { + "grantType": { + "$ref": "#/definitions/PostContentSchemaGrantType", + "description": "Can take a value of access_token_refresh_token, or access_token, or\nrefresh_token" + }, + "service": { "type": "string", - "description": "The MIME type of the referenced object. This will generally be application/vnd.docker.image.manifest.v2+json, but it could also be application/vnd.docker.image.manifest.v1+json" + "description": "Indicates the name of your Azure container registry." }, - "size": { - "type": "integer", - "format": "int64", - "description": "The size in bytes of the object" + "tenant": { + "type": "string", + "description": "AAD tenant associated to the AAD credentials." }, - "digest": { + "acrRefreshToken": { "type": "string", - "description": "The digest of the content, as defined by the Registry V2 HTTP API Specification" + "description": "AAD refresh token, mandatory when grant_type is access_token_refresh_token or\nrefresh_token" }, - "platform": { - "$ref": "#/definitions/Platform" + "accessToken": { + "type": "string", + "description": "AAD access token, mandatory when grant_type is access_token_refresh_token or\naccess_token." } - } + }, + "required": [ + "grantType", + "service" + ] + }, + "PathsV3R3RxOauth2TokenPostRequestbodyContentApplicationXWwwFormUrlencodedSchema": { + "type": "object", + "description": "Paths108HwamOauth2ExchangePostRequestbodyContentApplicationXWwwFormUrlencodedSchema", + "properties": { + "service": { + "type": "string", + "description": "Indicates the name of your Azure container registry." + }, + "scope": { + "type": "string", + "description": "Which is expected to be a valid scope, and can be specified more than once for\nmultiple scope requests. You obtained this from the Www-Authenticate response\nheader from the challenge." + }, + "refreshToken": { + "type": "string", + "description": "Must be a valid ACR refresh token" + }, + "grantType": { + "$ref": "#/definitions/TokenGrantType", + "description": "Grant type is expected to be refresh_token" + } + }, + "required": [ + "service", + "scope", + "refreshToken", + "grantType" + ] }, "Platform": { - "description": "The platform object describes the platform which the image in the manifest runs on. A full list of valid operating system and architecture values are listed in the Go language documentation for $GOOS and $GOARCH", - "x-accessibility": "internal", + "type": "object", + "description": "The platform object describes the platform which the image in the manifest runs\non. A full list of valid operating system and architecture values are listed in\nthe Go language documentation for $GOOS and $GOARCH", "properties": { "architecture": { "type": "string", @@ -2656,123 +2669,248 @@ }, "os.version": { "type": "string", - "description": "The optional os.version field specifies the operating system version, for example 10.0.10586." + "description": "The optional os.version field specifies the operating system version, for\nexample 10.0.10586.", + "x-ms-client-name": "osVersion" }, "os.features": { "type": "array", - "description": "The optional os.features field specifies an array of strings, each listing a required OS feature (for example on Windows win32k", + "description": "The optional os.features field specifies an array of strings, each listing a\nrequired OS feature (for example on Windows win32k", "items": { "type": "string" - } + }, + "x-ms-client-name": "osFeatures" }, "variant": { "type": "string", - "description": "The optional variant field specifies a variant of the CPU, for example armv6l to specify a particular CPU variant of the ARM CPU." + "description": "The optional variant field specifies a variant of the CPU, for example armv6l\nto specify a particular CPU variant of the ARM CPU." }, "features": { "type": "array", - "description": "The optional features field specifies an array of strings, each listing a required CPU feature (for example sse4 or aes", + "description": "The optional features field specifies an array of strings, each listing a\nrequired CPU feature (for example sse4 or aes", "items": { "type": "string" } } } }, - "V2Manifest": { - "x-ms-discriminator-value": "application/vnd.docker.distribution.manifest.v2+json", - "x-accessibility": "internal", - "description": "Returns the requested Docker V2 Manifest file", - "properties": { - "mediaType": { - "type": "string", - "description": "Media type for this Manifest" - }, - "config": { - "description": "V2 image config descriptor", - "$ref": "#/definitions/Descriptor" - }, - "layers": { - "type": "array", - "description": "List of V2 image layer information", - "items": { - "$ref": "#/definitions/Descriptor" - } - } - }, - "allOf": [ - { - "$ref": "#/definitions/Manifest" - } + "PostContentSchemaGrantType": { + "type": "string", + "description": "Can take a value of access_token_refresh_token, or access_token, or\nrefresh_token", + "enum": [ + "access_token_refresh_token", + "access_token", + "refresh_token" ], - "example": { - "schemaVersion": 2, - "mediaType": "application/vnd.docker.distribution.manifest.v2+json", - "config": { - "mediaType": "application/vnd.docker.container.image.v1+json", - "size": 1512, - "digest": "sha256:6d1ef012b5674ad8a127ecfa9b5e6f5178d171b90ee462846974177fd9bdd39f" - }, - "layers": [ + "x-ms-enum": { + "name": "PostContentSchemaGrantType", + "modelAsString": true, + "values": [ + { + "name": "access_token_refresh_token", + "value": "access_token_refresh_token", + "description": "Grant type for exchanging both access token and refresh token" + }, + { + "name": "access_token", + "value": "access_token", + "description": "Grant type for exchanging access token only" + }, { - "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", - "size": 2107098, - "digest": "sha256:5d20c808ce198565ff70b3ed23a991dd49afac45dece63474b27ce6ed036adc6" + "name": "refresh_token", + "value": "refresh_token", + "description": "Grant type for exchanging refresh token only" } ] } }, - "OCIManifest": { - "x-ms-discriminator-value": "application/vnd.oci.image.manifest.v1+json", - "x-accessibility": "internal", - "description": "Returns the requested OCI Manifest file", + "Repositories": { + "type": "object", + "description": "List of repositories", "properties": { - "config": { - "description": "V2 image config descriptor", - "$ref": "#/definitions/Descriptor" - }, - "layers": { + "repositories": { "type": "array", - "description": "List of V2 image layer information", + "description": "Repository names", "items": { - "$ref": "#/definitions/Descriptor" + "type": "string" } }, - "annotations": { - "$ref": "#/definitions/Annotations" + "link": { + "type": "string", + "description": "Link to the next page of results" } - }, - "allOf": [ - { - "$ref": "#/definitions/Manifest" + } + }, + "RepositoryChangeableAttributes": { + "type": "object", + "description": "Changeable attributes for Repository", + "properties": { + "deleteEnabled": { + "type": "boolean", + "description": "Delete enabled" + }, + "writeEnabled": { + "type": "boolean", + "description": "Write enabled" + }, + "listEnabled": { + "type": "boolean", + "description": "List enabled" + }, + "readEnabled": { + "type": "boolean", + "description": "Read enabled" } - ] + } }, - "OCIIndex": { - "x-ms-discriminator-value": "application/vnd.oci.image.index.v1+json", - "x-accessibility": "internal", - "description": "Returns the requested OCI index file", + "RepositoryTags": { + "type": "object", + "description": "Result of the request to list tags of the image", "properties": { - "manifests": { + "name": { + "type": "string", + "description": "Name of the image" + }, + "tags": { "type": "array", - "description": "List of OCI image layer information", + "description": "List of tags", "items": { - "$ref": "#/definitions/ManifestListAttributes" + "type": "string" } + } + } + }, + "TagAttributesBase": { + "type": "object", + "description": "Tag attribute details", + "properties": { + "name": { + "type": "string", + "description": "Tag name", + "readOnly": true }, - "annotations": { - "$ref": "#/definitions/Annotations" + "digest": { + "type": "string", + "description": "Tag digest", + "readOnly": true + }, + "createdTime": { + "type": "string", + "format": "date-time", + "description": "Tag created time", + "readOnly": true + }, + "lastUpdateTime": { + "type": "string", + "format": "date-time", + "description": "Tag last update time", + "readOnly": true + }, + "signed": { + "type": "boolean", + "description": "Is signed" + }, + "changeableAttributes": { + "$ref": "#/definitions/TagChangeableAttributes", + "description": "Writeable properties of the resource" } }, - "allOf": [ - { - "$ref": "#/definitions/Manifest" + "required": [ + "name", + "digest", + "createdTime", + "lastUpdateTime", + "changeableAttributes" + ] + }, + "TagAttributesTag": { + "type": "object", + "description": "Tag", + "properties": { + "signatureRecord": { + "type": "string", + "description": "SignatureRecord value" + } + } + }, + "TagChangeableAttributes": { + "type": "object", + "description": "Changeable attributes", + "properties": { + "deleteEnabled": { + "type": "boolean", + "description": "Delete enabled" + }, + "writeEnabled": { + "type": "boolean", + "description": "Write enabled" + }, + "listEnabled": { + "type": "boolean", + "description": "List enabled" + }, + "readEnabled": { + "type": "boolean", + "description": "Read enabled" + } + } + }, + "TagList": { + "type": "object", + "description": "List of tag details", + "properties": { + "registry": { + "type": "string", + "description": "Registry login server name. This is likely to be similar to\n{registry-name}.azurecr.io." + }, + "imageName": { + "type": "string", + "description": "Image name" + }, + "tags": { + "type": "array", + "description": "List of tag attribute details", + "items": { + "$ref": "#/definitions/TagAttributesBase" + } + }, + "link": { + "type": "string", + "description": "Link to the next page of results" } + }, + "required": [ + "registry", + "imageName", + "tags" ] }, + "TokenGrantType": { + "type": "string", + "description": "Grant type is expected to be refresh_token", + "enum": [ + "refresh_token", + "password" + ], + "x-ms-enum": { + "name": "TokenGrantType", + "modelAsString": true, + "values": [ + { + "name": "refresh_token", + "value": "refresh_token", + "description": "Grant type for refreshing the token" + }, + { + "name": "password", + "value": "password", + "description": "Grant type for password authentication" + } + ] + } + }, "V1Manifest": { + "type": "object", "description": "Returns the requested V1 manifest file", - "x-ms-discriminator-value": "application/vnd.oci.image.manifest.v1+json", - "x-accessibility": "internal", "properties": { "architecture": { "type": "string", @@ -2814,367 +2952,43 @@ } ] }, - "Annotations": { - "description": "Additional information provided through arbitrary metadata.", - "x-accessibility": "internal", + "V2Manifest": { "type": "object", - "x-nullable": true, - "additionalProperties": { - "type": "object" - }, + "description": "Returns the requested Docker V2 Manifest file", "properties": { - "org.opencontainers.image.created": { - "description": "Date and time on which the image was built (string, date-time as defined by https://tools.ietf.org/html/rfc3339#section-5.6)", - "type": "string", - "format": "date-time", - "x-ms-client-name": "Created" - }, - "org.opencontainers.image.authors": { - "description": "Contact details of the people or organization responsible for the image.", - "type": "string", - "x-ms-client-name": "Authors" - }, - "org.opencontainers.image.url": { - "description": "URL to find more information on the image.", - "type": "string", - "x-ms-client-name": "Url" - }, - "org.opencontainers.image.documentation": { - "description": "URL to get documentation on the image.", - "type": "string", - "x-ms-client-name": "Documentation" - }, - "org.opencontainers.image.source": { - "description": "URL to get source code for building the image.", - "type": "string", - "x-ms-client-name": "Source" - }, - "org.opencontainers.image.version": { - "description": "Version of the packaged software. The version MAY match a label or tag in the source code repository, may also be Semantic versioning-compatible", - "type": "string", - "x-ms-client-name": "Version" - }, - "org.opencontainers.image.revision": { - "description": "Source control revision identifier for the packaged software.", - "type": "string", - "x-ms-client-name": "Revision" - }, - "org.opencontainers.image.vendor": { - "description": "Name of the distributing entity, organization or individual.", - "type": "string", - "x-ms-client-name": "Vendor" - }, - "org.opencontainers.image.licenses": { - "description": "License(s) under which contained software is distributed as an SPDX License Expression.", - "type": "string", - "x-ms-client-name": "Licenses" - }, - "org.opencontainers.image.ref.name": { - "description": "Name of the reference for a target.", + "mediaType": { "type": "string", - "x-ms-client-name": "Name" + "description": "Media type for this Manifest" }, - "org.opencontainers.image.title": { - "description": "Human-readable title of the image", - "type": "string", - "x-ms-client-name": "Title" + "config": { + "$ref": "#/definitions/Descriptor", + "description": "V2 image config descriptor" }, - "org.opencontainers.image.description": { - "description": "Human-readable description of the software packaged in the image", - "type": "string", - "x-ms-client-name": "Description" + "layers": { + "type": "array", + "description": "List of V2 image layer information", + "items": { + "$ref": "#/definitions/Descriptor" + } } - } + }, + "allOf": [ + { + "$ref": "#/definitions/Manifest" + } + ] } }, "parameters": { - "Url": { - "name": "url", - "x-ms-client-name": "loginUri", - "description": "Registry login URL", - "required": true, - "type": "string", - "in": "path", - "x-ms-skip-url-encoding": true, - "x-ms-parameter-location": "client" - }, - "ImageReference": { - "name": "reference", - "in": "path", - "description": "A tag or a digest, pointing to a specific image", - "required": true, - "type": "string", - "x-ms-parameter-location": "method" - }, - "ManifestReference": { - "name": "reference", - "in": "path", - "description": "Tag or digest of the target manifest", - "required": true, - "type": "string", - "x-ms-parameter-location": "method" - }, - "TagReference": { - "name": "reference", - "in": "path", - "description": "Tag name", - "required": true, - "type": "string", - "x-ms-parameter-location": "method" - }, - "Digest": { - "name": "digest", - "in": "path", - "description": "Digest of a BLOB", - "required": true, - "type": "string", - "x-ms-parameter-location": "method" - }, - "DigestReference": { - "name": "reference", - "in": "path", - "description": "Digest of a BLOB", - "required": true, - "type": "string", - "x-ms-parameter-location": "method" - }, - "BlobQueryDigest": { - "name": "digest", - "in": "query", - "description": "Digest of a BLOB", - "required": true, - "type": "string", - "x-ms-parameter-location": "method" - }, - "RepositoryAttributeValue": { - "name": "value", - "in": "body", - "description": "Repository attribute value", - "required": false, - "schema": { - "$ref": "#/definitions/RepositoryChangeableAttributes" - }, - "x-ms-parameter-location": "method" - }, - "TagAttributeValue": { - "name": "value", - "in": "body", - "description": "Tag attribute value", - "required": false, - "schema": { - "$ref": "#/definitions/TagChangeableAttributes" - }, - "x-ms-parameter-location": "method" - }, - "ManifestAttributeValue": { - "name": "value", - "in": "body", - "description": "Manifest attribute value", - "required": false, - "schema": { - "$ref": "#/definitions/ManifestChangeableAttributes" - }, - "x-ms-parameter-location": "method" - }, - "QueryOrderBy": { - "name": "orderby", - "in": "query", - "description": "orderby query parameter", - "required": false, - "type": "string", - "x-ms-parameter-location": "method" - }, - "QueryNum": { - "name": "n", - "in": "query", - "description": "query parameter for max number of items", - "required": false, - "type": "integer", - "x-ms-parameter-location": "method" - }, - "QueryLast": { - "name": "last", - "in": "query", - "description": "Query parameter for the last item in previous query. Result set will include values lexically after last.", - "required": false, - "type": "string", - "x-ms-parameter-location": "method" - }, - "QueryDigest": { - "name": "digest", - "in": "query", - "description": "filter by digest", - "required": false, - "type": "string", - "x-ms-parameter-location": "method" - }, - "Grant_type": { - "name": "grant_type", - "description": "Can take a value of access_token_refresh_token, or access_token, or refresh_token", - "type": "string", - "in": "formData", - "required": true, - "enum": [ - "access_token_refresh_token", - "access_token", - "refresh_token" - ], - "x-ms-parameter-location": "method", - "x-accessibility": "internal" - }, - "Service": { - "name": "service", - "in": "formData", - "required": true, - "description": "Indicates the name of your Azure container registry.", - "type": "string", - "x-ms-parameter-location": "method" - }, - "Tenant": { - "name": "tenant", - "in": "formData", - "required": false, - "description": "AAD tenant associated to the AAD credentials.", - "type": "string", - "x-ms-parameter-location": "method" - }, - "Scope": { - "name": "scope", - "in": "formData", - "required": true, - "description": "Which is expected to be a valid scope, and can be specified more than once for multiple scope requests. You can obtain this from the Www-Authenticate response header from the challenge.", - "type": "string", - "x-ms-parameter-location": "method" - }, - "RefreshToken": { - "name": "refresh_token", - "in": "formData", - "required": false, - "description": "AAD refresh token, mandatory when grant_type is access_token_refresh_token or refresh_token", - "type": "string", - "x-ms-parameter-location": "method" - }, - "AccessToken": { - "name": "access_token", - "x-ms-client-name": "aadAccessToken", - "in": "formData", - "required": false, - "description": "AAD access token, mandatory when grant_type is access_token_refresh_token or access_token.", - "type": "string", - "x-ms-parameter-location": "method" - }, - "ImageName": { - "name": "name", - "in": "path", - "description": "Name of the image (including the namespace)", - "required": true, - "type": "string", - "x-ms-parameter-location": "method" - }, - "ManifestBody": { - "description": "Manifest body, can take v1 or v2 values depending on accept header", - "name": "payload", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/Manifest" - }, - "x-ms-parameter-location": "method" - }, - "RawData": { - "name": "value", - "description": "Raw data of blob", - "in": "body", - "schema": { - "type": "object", - "format": "file" - }, - "required": true, - "x-ms-parameter-location": "method" - }, - "RawDataOptional": { - "name": "value", - "description": "Optional raw data of blob", - "in": "body", - "schema": { - "type": "object", - "format": "file" - }, - "required": false, - "x-ms-parameter-location": "method" - }, - "From": { - "name": "from", - "type": "string", - "in": "query", - "description": "Name of the source repository.", - "required": true, - "x-ms-parameter-location": "method" - }, - "Mount": { - "name": "mount", - "description": "Digest of blob to mount from the source repository.", - "type": "string", + "Azure.Core.Foundations.ApiVersionParameter": { + "name": "api-version", "in": "query", + "description": "The API version to use for this operation.", "required": true, - "x-ms-parameter-location": "method" - }, - "Uuid": { - "name": "uuid", - "description": "A uuid identifying the upload.", "type": "string", - "in": "path", - "required": true, - "x-ms-parameter-location": "method" - }, - "Content-Range": { - "name": "Content-Range", - "in": "header", - "description": "Range of bytes identifying the desired block of content represented by the body. Start must the end offset retrieved via status check plus one. Note that this is a non-standard use of the `Content-Range` header.", - "type": "string", - "required": true, - "x-ms-parameter-location": "method" - }, - "Range": { - "name": "Range", - "type": "string", - "description": "Format : bytes=-, HTTP Range header specifying blob chunk.", - "in": "header", - "required": true, - "x-ms-parameter-location": "method" - }, - "NoUploadCache": { - "description": "Acquired from NextLink", - "name": "_nouploadcache", - "in": "query", - "type": "boolean", - "required": false, - "x-ms-parameter-location": "method" - }, - "State": { - "description": "Acquired from NextLink", - "name": "_state", - "in": "query", - "type": "string", - "required": false, - "x-ms-parameter-location": "method" - }, - "NextLink": { - "name": "nextBlobUuidLink", - "x-ms-client-name": "location", - "type": "string", - "description": "Link acquired from upload start or previous chunk. Note, do not include initial / (must do substring(1) )", - "in": "path", - "required": true, + "minLength": 1, "x-ms-parameter-location": "method", - "x-ms-skip-url-encoding": true - }, - "ApiVersionParameter": { - "name": "api-version", - "in": "query", - "required": false, - "type": "string", - "description": "Client Api Version." + "x-ms-client-name": "apiVersion" } } } diff --git a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/CancelBlobUpload.json b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/CancelBlobUpload.json index ebaf8543938d..1b2a90808cc1 100644 --- a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/CancelBlobUpload.json +++ b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/CancelBlobUpload.json @@ -1,9 +1,11 @@ { "parameters": { - "url": "acrapi.azurecr.io", - "nextBlobUuidLink": "v2/blobland/blobs/uploads/2b28c60d-d296-44b7-b2b4-1f01c63195c6?_nouploadcache=false&_state=VYABvUSCNW2yY5e5VabLHppXqwU0K7cvT0YUdq57KBt7Ik5hbWUiOiJibG9ibGFuZCIsIlVVSUQiOiIyYjI4YzYwZC1kMjk2LTQ0YjctYjJiNC0xZjAxYzYzMTk1YzYiLCJPZmZzZXQiOjAsIlN0YXJ0ZWRBdCI6IjIwMTktMDgtMjdUMjM6NTI6NDcuMDUzNjU2Mjg1WiJ9" + "nextBlobUuidLink": "v2/blobland/blobs/uploads/2b28c60d-d296-44b7-b2b4-1f01c63195c6?_nouploadcache=false&_state=VYABvUSCNW2yY5e5VabLHppXqwU0K7cvT0YUdq57KBt7Ik5hbWUiOiJibG9ibGFuZCIsIlVVSUQiOiIyYjI4YzYwZC1kMjk2LTQ0YjctYjJiNC0xZjAxYzYzMTk1YzYiLCJPZmZzZXQiOjAsIlN0YXJ0ZWRBdCI6IjIwMTktMDgtMjdUMjM6NTI6NDcuMDUzNjU2Mjg1WiJ9", + "url": "acrapi.azurecr.io" }, "responses": { "204": {} - } + }, + "operationId": "ContainerRegistryBlob_CancelUpload", + "title": "End a blob upload" } diff --git a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/CheckBlob.json b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/CheckBlob.json index d4c6202a6381..f9520f5a374f 100644 --- a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/CheckBlob.json +++ b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/CheckBlob.json @@ -1,8 +1,8 @@ { "parameters": { - "url": "acrapi.azurecr.io", "name": "prod/bash", - "digest": "sha256:16463e0c481e161aabb735437d30b3c9c7391c2747cc564bb927e843b73dcb39" + "digest": "sha256:16463e0c481e161aabb735437d30b3c9c7391c2747cc564bb927e843b73dcb39", + "url": "acrapi.azurecr.io" }, "responses": { "200": { @@ -15,5 +15,7 @@ "Location": "https://csharpsdktest.azurecr.io/v2/prod/bash/blobs/sha256:3131d2b2b3352091117a3abe745d01a3fed472b7327c3183602247937800e3a6" } } - } + }, + "operationId": "ContainerRegistryBlob_CheckBlobExists", + "title": "Head for a Blob Chunk" } diff --git a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/CheckBlobChunk.json b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/CheckBlobChunk.json index 698976bbd810..e3dbc38caad6 100644 --- a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/CheckBlobChunk.json +++ b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/CheckBlobChunk.json @@ -1,9 +1,9 @@ { "parameters": { - "url": "acrapi.azurecr.io", "name": "prod/bash", + "range": "bytes=0-299", "digest": "sha256:16463e0c481e161aabb735437d30b3c9c7391c2747cc564bb927e843b73dcb39", - "Range": "bytes=0-299" + "url": "acrapi.azurecr.io" }, "responses": { "200": { @@ -12,5 +12,7 @@ "Content-Range": "bytes 0-299/5635" } } - } + }, + "operationId": "ContainerRegistryBlob_CheckChunkExists", + "title": "Get headers without blob Chunk" } diff --git a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/CreateManifest.json b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/CreateManifest.json index 75005409328c..8a7f52be5cb7 100644 --- a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/CreateManifest.json +++ b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/CreateManifest.json @@ -1,18 +1,21 @@ { "parameters": { - "url": "acrapi.azurecr.io", "name": "hello-world", + "payload": { + "schemaVersion": 2 + }, "reference": "a20190628-081044z", - "payload": "{\"schemaVersion\":2,\"mediaType\":\"application/vnd.docker.distribution.manifest.v2+json\",\"config\":{\"mediaType\":\"application/vnd.docker.container.image.v1+json\",\"size\":1512,\"digest\":\"sha256:6d1ef012b5674ad8a127ecfa9b5e6f5178d171b90ee462846974177fd9bdd39f\"},\"layers\":[{\"mediaType\":\"application/vnd.docker.image.rootfs.diff.tar.gzip\",\"size\":2107098,\"digest\":\"sha256:5d20c808ce198565ff70b3ed23a991dd49afac45dece63474b27ce6ed036adc6\"}]}" + "url": "acrapi.azurecr.io" }, "responses": { "201": { "headers": { + "Content-Length": 0, "Docker-Content-Digest": "sha256:15685c48490175b7dde62e6bfcfb54d9420c6495ea6404776e2facca3da93cd8", - "Location": "/v2/hello-world/manifests/sha256:15685c48490175b7dde62e6bfcfb54d9420c6495ea6404776e2facca3da93cd8", - "Content-Length": 0 - }, - "body": {} + "Location": "/v2/hello-world/manifests/sha256:15685c48490175b7dde62e6bfcfb54d9420c6495ea6404776e2facca3da93cd8" + } } - } + }, + "operationId": "ContainerRegistry_CreateManifest", + "title": "Put manifest" } diff --git a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/DeleteAcrRepository.json b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/DeleteAcrRepository.json index 5cb537cc4688..8c903f79af71 100644 --- a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/DeleteAcrRepository.json +++ b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/DeleteAcrRepository.json @@ -1,11 +1,13 @@ { "parameters": { - "url": "acrapi.azurecr.io", "name": "nanoserver", - "api-version": "2021-07-01" + "api-version": "2021-07-01", + "url": "acrapi.azurecr.io" }, "responses": { "202": {}, "404": {} - } + }, + "operationId": "ContainerRegistry_DeleteRepository", + "title": "Delete a repository" } diff --git a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/DeleteBlob.json b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/DeleteBlob.json index 337732bbc7c9..d60fa8ae1e5b 100644 --- a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/DeleteBlob.json +++ b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/DeleteBlob.json @@ -1,12 +1,12 @@ { "parameters": { - "url": "acrapi.azurecr.io", "name": "prod/bash", - "digest": "sha256:16463e0c481e161aabb735437d30b3c9c7391c2747cc564bb927e843b73dcb39" + "digest": "sha256:16463e0c481e161aabb735437d30b3c9c7391c2747cc564bb927e843b73dcb39", + "url": "acrapi.azurecr.io" }, "responses": { - "202": { - "body": "" - } - } + "202": {} + }, + "operationId": "ContainerRegistryBlob_DeleteBlob", + "title": "Delete a blob" } diff --git a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/DeleteManifest.json b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/DeleteManifest.json index 6d8c3845faf4..ff31e6754aef 100644 --- a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/DeleteManifest.json +++ b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/DeleteManifest.json @@ -1,11 +1,13 @@ { "parameters": { - "url": "acrapi.azurecr.io", "name": "alpine", - "reference": "3.7" + "reference": "3.7", + "url": "acrapi.azurecr.io" }, "responses": { "202": {}, "404": {} - } + }, + "operationId": "ContainerRegistry_DeleteManifest", + "title": "Delete manifest" } diff --git a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/DeleteTag.json b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/DeleteTag.json index 27d65868d713..1c2a7a449226 100644 --- a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/DeleteTag.json +++ b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/DeleteTag.json @@ -1,12 +1,14 @@ { "parameters": { - "url": "acrapi.azurecr.io", "name": "nanoserver", + "api-version": "2021-07-01", "reference": "4.7.2-20180905-nanoserver-1803", - "api-version": "2021-07-01" + "url": "acrapi.azurecr.io" }, "responses": { "202": {}, "404": {} - } + }, + "operationId": "ContainerRegistry_DeleteTag", + "title": "Delete a tag" } diff --git a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/EndBlobUpload.json b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/EndBlobUpload.json index 14aa8fc58927..5c922b4dfb2f 100644 --- a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/EndBlobUpload.json +++ b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/EndBlobUpload.json @@ -1,16 +1,18 @@ { "parameters": { - "url": "acrapi.azurecr.io", - "nextBlobUuidLink": "v2/blobland/blobs/uploads/2b28c60d-d296-44b7-b2b4-1f01c63195c6?_nouploadcache=false&_state=VYABvUSCNW2yY5e5VabLHppXqwU0K7cvT0YUdq57KBt7Ik5hbWUiOiJibG9ibGFuZCIsIlVVSUQiOiIyYjI4YzYwZC1kMjk2LTQ0YjctYjJiNC0xZjAxYzYzMTk1YzYiLCJPZmZzZXQiOjAsIlN0YXJ0ZWRBdCI6IjIwMTktMDgtMjdUMjM6NTI6NDcuMDUzNjU2Mjg1WiJ9", "digest": "sha256:a05a7abc31b0caadd5058069eaa623cdd0538512dbddacc7ca5bad73c3957c5e", + "nextBlobUuidLink": "v2/blobland/blobs/uploads/2b28c60d-d296-44b7-b2b4-1f01c63195c6?_nouploadcache=false&_state=VYABvUSCNW2yY5e5VabLHppXqwU0K7cvT0YUdq57KBt7Ik5hbWUiOiJibG9ibGFuZCIsIlVVSUQiOiIyYjI4YzYwZC1kMjk2LTQ0YjctYjJiNC0xZjAxYzYzMTk1YzYiLCJPZmZzZXQiOjAsIlN0YXJ0ZWRBdCI6IjIwMTktMDgtMjdUMjM6NTI6NDcuMDUzNjU2Mjg1WiJ9", + "url": "acrapi.azurecr.io", "value": "usuallyEmpty" }, "responses": { "201": { "headers": { - "Location": "/v2/blobland/blobs/sha256:a05a7abc31b0caadd5058069eaa623cdd0538512dbddacc7ca5bad73c3957c5e", - "Docker-Content-Digest": "sha256:a05a7abc31b0caadd5058069eaa623cdd0538512dbddacc7ca5bad73c3957c5e" + "Docker-Content-Digest": "sha256:a05a7abc31b0caadd5058069eaa623cdd0538512dbddacc7ca5bad73c3957c5e", + "Location": "/v2/blobland/blobs/sha256:a05a7abc31b0caadd5058069eaa623cdd0538512dbddacc7ca5bad73c3957c5e" } } - } + }, + "operationId": "ContainerRegistryBlob_CompleteUpload", + "title": "End a blob upload" } diff --git a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetAccessToken.json b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetAccessToken.json index 1bfbebd14cdf..0eccfbe221bd 100644 --- a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetAccessToken.json +++ b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetAccessToken.json @@ -1,8 +1,8 @@ { "parameters": { - "url": "acrapi.azurecr.io", + "scope": "registry:catalog:*", "service": "someregistry.azurecr.io", - "scope": "registry:catalog:*" + "url": "acrapi.azurecr.io" }, "responses": { "200": { @@ -10,5 +10,7 @@ "access_token": "eyJ0eXAiOiJKJhbGcigdCI6IkN0ZlFaOExlLTMejlnIiwidGlkIjoiNzbmOTgWItMmQ3Y2QwMTFkYjQ3Ii..." } } - } + }, + "operationId": "Authentication_GetAcrAccessTokenFromLogin", + "title": "Get Access Token with username and password" } diff --git a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetBlob.json b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetBlob.json index ab5a4471a3fd..2bfd02a7ebd8 100644 --- a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetBlob.json +++ b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetBlob.json @@ -1,8 +1,8 @@ { "parameters": { - "url": "acrapi.azurecr.io", "name": "prod/bash", - "digest": "sha256:16463e0c481e161aabb735437d30b3c9c7391c2747cc564bb927e843b73dcb39" + "digest": "sha256:16463e0c481e161aabb735437d30b3c9c7391c2747cc564bb927e843b73dcb39", + "url": "acrapi.azurecr.io" }, "responses": { "200": { @@ -16,5 +16,7 @@ "Location": "https://csharpsdktest.azurecr.io/v2/prod/bash/blobs/sha256:3131d2b2b3352091117a3abe745d01a3fed472b7327c3183602247937800e3a6" } } - } + }, + "operationId": "ContainerRegistryBlob_GetBlob", + "title": "Get a blob from digest" } diff --git a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetBlobChunk.json b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetBlobChunk.json index 9135267b4e48..c0a23b802873 100644 --- a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetBlobChunk.json +++ b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetBlobChunk.json @@ -1,9 +1,9 @@ { "parameters": { - "url": "acrapi.azurecr.io", "name": "prod/bash", + "range": "bytes=0-299", "digest": "sha256:16463e0c481e161aabb735437d30b3c9c7391c2747cc564bb927e843b73dcb39", - "Range": "bytes=0-299" + "url": "acrapi.azurecr.io" }, "responses": { "206": { @@ -13,5 +13,7 @@ "Content-Range": "bytes 0-299/5635" } } - } + }, + "operationId": "ContainerRegistryBlob_GetChunk", + "title": "Get a blob Chunk" } diff --git a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetBlobStatus.json b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetBlobStatus.json index a373e1803fa0..040caaf706c2 100644 --- a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetBlobStatus.json +++ b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetBlobStatus.json @@ -1,14 +1,17 @@ { "parameters": { - "url": "acrapi.azurecr.io", - "nextBlobUuidLink": "v2/blobland/blobs/uploads/2b28c60d-d296-44b7-b2b4-1f01c63195c6?_nouploadcache=false&_state=VYABvUSCNW2yY5e5VabLHppXqwU0K7cvT0YUdq57KBt7Ik5hbWUiOiJibG9ibGFuZCIsIlVVSUQiOiIyYjI4YzYwZC1kMjk2LTQ0YjctYjJiNC0xZjAxYzYzMTk1YzYiLCJPZmZzZXQiOjAsIlN0YXJ0ZWRBdCI6IjIwMTktMDgtMjdUMjM6NTI6NDcuMDUzNjU2Mjg1WiJ9" + "api-version": "2021-07-01", + "nextBlobUuidLink": "v2/blobland/blobs/uploads/2b28c60d-d296-44b7-b2b4-1f01c63195c6?_nouploadcache=false&_state=VYABvUSCNW2yY5e5VabLHppXqwU0K7cvT0YUdq57KBt7Ik5hbWUiOiJibG9ibGFuZCIsIlVVSUQiOiIyYjI4YzYwZC1kMjk2LTQ0YjctYjJiNC0xZjAxYzYzMTk1YzYiLCJPZmZzZXQiOjAsIlN0YXJ0ZWRBdCI6IjIwMTktMDgtMjdUMjM6NTI6NDcuMDUzNjU2Mjg1WiJ9", + "url": "acrapi.azurecr.io" }, "responses": { "204": { "headers": { - "Range": "0-0", - "Docker-Upload-Uuid": "2b28c60d-d296-44b7-b2b4-1f01c63195c6" + "Docker-Upload-Uuid": "2b28c60d-d296-44b7-b2b4-1f01c63195c6", + "Range": "0-0" } } - } + }, + "operationId": "ContainerRegistryBlob_GetUploadStatus", + "title": "Get blob status" } diff --git a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetDockerRegistryV2Support.json b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetDockerRegistryV2Support.json index c978e2bf140e..9e5ddc5060b5 100644 --- a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetDockerRegistryV2Support.json +++ b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetDockerRegistryV2Support.json @@ -4,5 +4,7 @@ }, "responses": { "200": {} - } + }, + "operationId": "ContainerRegistry_CheckDockerV2Support", + "title": "Check Docker Registry V2 Support" } diff --git a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetManifest.json b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetManifest.json index 34c734d985a6..366dc5730796 100644 --- a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetManifest.json +++ b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetManifest.json @@ -1,48 +1,50 @@ { "parameters": { - "url": "acrapi.azurecr.io", "name": "hello-world-dangling", + "accept": "application/vnd.docker.distribution.manifest.v2+json", "reference": "20190628-033033z", - "accept": "application/vnd.docker.distribution.manifest.v2+json" + "url": "acrapi.azurecr.io" }, "responses": { "200": { "body": { - "schemaVersion": 2, - "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "config": { + "digest": "sha256:691fbc2d44fff48357bba69ab0505b9bf12b2b250a925a84a0b8e8e7eed390b2", "mediaType": "application/vnd.docker.container.image.v1+json", - "size": 5824, - "digest": "sha256:691fbc2d44fff48357bba69ab0505b9bf12b2b250a925a84a0b8e8e7eed390b2" + "size": 5824 }, "layers": [ { + "digest": "sha256:a073c86ecf9e0f29180e80e9638d4c741970695851ea48247276c32c57e40282", "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", - "size": 2014658, - "digest": "sha256:a073c86ecf9e0f29180e80e9638d4c741970695851ea48247276c32c57e40282" + "size": 2014658 }, { + "digest": "sha256:0e28711eb56d78f1e3dfde1807eba529d1346222bcd07d1cb1e436a18a0388bd", "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", - "size": 19778035, - "digest": "sha256:0e28711eb56d78f1e3dfde1807eba529d1346222bcd07d1cb1e436a18a0388bd" + "size": 19778035 }, { + "digest": "sha256:e460dd483fddb555911f7ed188c319fd97542c60e36843dcb1c5d753f733e1fa", "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", - "size": 1074044, - "digest": "sha256:e460dd483fddb555911f7ed188c319fd97542c60e36843dcb1c5d753f733e1fa" + "size": 1074044 }, { + "digest": "sha256:6aa301222093bfb8cf424ccb387f59e2c9510c3a30cca7fbcf8c954f88e6600c", "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", - "size": 5827, - "digest": "sha256:6aa301222093bfb8cf424ccb387f59e2c9510c3a30cca7fbcf8c954f88e6600c" + "size": 5827 }, { + "digest": "sha256:9c5d80083a57d565f684e0155707204d497a5ad965279f92927452f15dae17e6", "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", - "size": 568, - "digest": "sha256:9c5d80083a57d565f684e0155707204d497a5ad965279f92927452f15dae17e6" + "size": 568 } - ] + ], + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "schemaVersion": 2 } } - } + }, + "operationId": "ContainerRegistry_GetManifest", + "title": "Get manifest" } diff --git a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetManifestAttributes.json b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetManifestAttributes.json index ec62fcde39db..8f9ecef5c889 100644 --- a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetManifestAttributes.json +++ b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetManifestAttributes.json @@ -1,33 +1,35 @@ { "parameters": { - "url": "acrapi.azurecr.io", "name": "nanoserver", + "api-version": "2021-07-01", "digest": "sha256:110d2b6c84592561338aa040b1b14b7ab81c2f9edbd564c2285dd7d70d777086", - "api-version": "2021-07-01" + "url": "acrapi.azurecr.io" }, "responses": { "200": { "body": { - "registry": "acrapi.azurecr.io", "imageName": "nanoserver", "manifest": { + "architecture": "amd64", + "changeableAttributes": { + "deleteEnabled": true, + "listEnabled": true, + "readEnabled": true, + "writeEnabled": true + }, + "createdTime": "2018-09-06T06:17:20.9983915Z", "digest": "sha256:110d2b6c84592561338aa040b1b14b7ab81c2f9edbd564c2285dd7d70d777086", "imageSize": 2401606, - "createdTime": "2018-09-06T06:17:20.9983915Z", "lastUpdateTime": "2018-09-06T06:17:20.9983915Z", - "architecture": "amd64", "os": "windows", "tags": [ "4.7.2-20180905-nanoserver-1803" - ], - "changeableAttributes": { - "deleteEnabled": true, - "writeEnabled": true, - "readEnabled": true, - "listEnabled": true - } - } + ] + }, + "registry": "acrapi.azurecr.io" } } - } + }, + "operationId": "ContainerRegistry_GetManifestProperties", + "title": "Get manifest attributes" } diff --git a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetManifestList.json b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetManifestList.json index f031bb92b904..dede59db1743 100644 --- a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetManifestList.json +++ b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetManifestList.json @@ -1,51 +1,53 @@ { "parameters": { - "url": "acrapi.azurecr.io", "name": "nanoserver", - "api-version": "2021-07-01" + "api-version": "2021-07-01", + "url": "acrapi.azurecr.io" }, "responses": { "200": { "body": { - "registry": "acrapi.azurecr.io", "imageName": "nanoserver", "manifests": [ { + "architecture": "amd64", + "changeableAttributes": { + "deleteEnabled": true, + "listEnabled": true, + "readEnabled": true, + "writeEnabled": true + }, + "createdTime": "2018-09-06T06:17:20.9983915Z", "digest": "sha256:110d2b6c84592561338aa040b1b14b7ab81c2f9edbd564c2285dd7d70d777086", "imageSize": 2401606, - "createdTime": "2018-09-06T06:17:20.9983915Z", "lastUpdateTime": "2018-09-06T06:17:20.9983915Z", - "architecture": "amd64", "os": "windows", "tags": [ "4.7.2-20180905-nanoserver-1803" - ], + ] + }, + { + "architecture": "amd64", "changeableAttributes": { "deleteEnabled": true, - "writeEnabled": true, + "listEnabled": true, "readEnabled": true, - "listEnabled": true - } - }, - { + "writeEnabled": true + }, + "createdTime": "2018-09-07T16:30:46.5651701Z", "digest": "sha256:7af5cd1dde3e8f5c2c9103860afa4ca871a6075373b6564b0e7b1b47866dab52", "imageSize": 4135121, - "createdTime": "2018-09-07T16:30:46.5651701Z", "lastUpdateTime": "2018-09-07T16:30:46.5651701Z", - "architecture": "amd64", "os": "windows", "tags": [ "4.7.2-20180906-nanoserver-1803" - ], - "changeableAttributes": { - "deleteEnabled": true, - "writeEnabled": true, - "readEnabled": true, - "listEnabled": true - } + ] } - ] + ], + "registry": "acrapi.azurecr.io" } } - } + }, + "operationId": "ContainerRegistry_GetManifests", + "title": "Get list of available manifests" } diff --git a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetRepositoryAttributes.json b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetRepositoryAttributes.json index 9f9040e2c539..17eab0975aff 100644 --- a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetRepositoryAttributes.json +++ b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetRepositoryAttributes.json @@ -1,25 +1,27 @@ { "parameters": { - "url": "acrapi.azurecr.io", "name": "nanoserver", - "api-version": "2021-07-01" + "api-version": "2021-07-01", + "url": "acrapi.azurecr.io" }, "responses": { "200": { "body": { - "registry": "acrapi.azurecr.io", - "imageName": "nanoserver", - "createdTime": "2018-09-06T06:17:20.9531248Z", - "lastUpdateTime": "2018-09-07T16:30:46.6583219Z", - "manifestCount": 2, - "tagCount": 2, "changeableAttributes": { "deleteEnabled": true, - "writeEnabled": true, + "listEnabled": true, "readEnabled": true, - "listEnabled": true - } + "writeEnabled": true + }, + "createdTime": "2018-09-06T06:17:20.9531248Z", + "imageName": "nanoserver", + "lastUpdateTime": "2018-09-07T16:30:46.6583219Z", + "manifestCount": 2, + "registry": "acrapi.azurecr.io", + "tagCount": 2 } } - } + }, + "operationId": "ContainerRegistry_GetProperties", + "title": "Get details of repository" } diff --git a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetRepositoryList.json b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetRepositoryList.json index f1d31a0b506c..ae4ffd6f1036 100644 --- a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetRepositoryList.json +++ b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetRepositoryList.json @@ -1,7 +1,7 @@ { "parameters": { - "url": "acrapi.azurecr.io", - "api-version": "2021-07-01" + "api-version": "2021-07-01", + "url": "acrapi.azurecr.io" }, "responses": { "200": { @@ -12,5 +12,7 @@ ] } } - } + }, + "operationId": "ContainerRegistry_GetRepositories", + "title": "Get repositories in a registry" } diff --git a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetTagAttributes.json b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetTagAttributes.json index 8de2dfcc0266..0bc9ecc9b58a 100644 --- a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetTagAttributes.json +++ b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetTagAttributes.json @@ -1,28 +1,30 @@ { "parameters": { - "url": "acrapi.azurecr.io", "name": "test/bash", + "api-version": "2021-07-01", "reference": "sha256:eabe547f78d4c18c708dd97ec3166cf7464cc651f1cbb67e7afas407405b7ad7b6", - "api-version": "2021-07-01" + "url": "acrapi.azurecr.io" }, "responses": { "200": { "body": { - "registry": "acrapi.azurecr.io", "imageName": "test/bash", + "registry": "acrapi.azurecr.io", "tag": { "name": "tagName", - "digest": "sha256:eabe547f78d4c18c708dd97ec3166cf7464cc651f1cbb67e70d407405b7ad7b6", - "createdTime": "2018-10-05T20:54:24.1286047Z", - "lastUpdateTime": "2018-10-05T20:54:24.1286047Z", "changeableAttributes": { "deleteEnabled": true, - "writeEnabled": false, + "listEnabled": true, "readEnabled": true, - "listEnabled": true - } + "writeEnabled": false + }, + "createdTime": "2018-10-05T20:54:24.1286047Z", + "digest": "sha256:eabe547f78d4c18c708dd97ec3166cf7464cc651f1cbb67e70d407405b7ad7b6", + "lastUpdateTime": "2018-10-05T20:54:24.1286047Z" } } } - } + }, + "operationId": "ContainerRegistry_GetTagProperties", + "title": "Get tag attributes" } diff --git a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetTagList.json b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetTagList.json index a69db470e864..7c5a6f494581 100644 --- a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetTagList.json +++ b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/GetTagList.json @@ -1,41 +1,43 @@ { "parameters": { - "url": "acrapi.azurecr.io", "name": "nanoserver", - "api-version": "2021-07-01" + "api-version": "2021-07-01", + "url": "acrapi.azurecr.io" }, "responses": { "200": { "body": { - "registry": "acrapi.azurecr.io", "imageName": "nanoserver", + "registry": "acrapi.azurecr.io", "tags": [ { "name": "4.7.2-20180905-nanoserver-1803", - "digest": "sha256:110d2b6c84592561338aa040b1b14b7ab81c2f9edbd564c2285dd7d70d777086", - "createdTime": "2018-09-06T06:17:21.0856539Z", - "lastUpdateTime": "2018-09-06T06:17:21.0856539Z", "changeableAttributes": { "deleteEnabled": true, - "writeEnabled": true, + "listEnabled": true, "readEnabled": true, - "listEnabled": true - } + "writeEnabled": true + }, + "createdTime": "2018-09-06T06:17:21.0856539Z", + "digest": "sha256:110d2b6c84592561338aa040b1b14b7ab81c2f9edbd564c2285dd7d70d777086", + "lastUpdateTime": "2018-09-06T06:17:21.0856539Z" }, { "name": "4.7.2-20180906-nanoserver-1803", - "digest": "sha256:7af5cd1dde3e8f5c2c9103860afa4ca871a6075373b6564b0e7b1b47866dab52", - "createdTime": "2018-09-06T16:30:43.3860166Z", - "lastUpdateTime": "2018-09-07T16:30:46.7022734Z", "changeableAttributes": { "deleteEnabled": true, - "writeEnabled": true, + "listEnabled": true, "readEnabled": true, - "listEnabled": true - } + "writeEnabled": true + }, + "createdTime": "2018-09-06T16:30:43.3860166Z", + "digest": "sha256:7af5cd1dde3e8f5c2c9103860afa4ca871a6075373b6564b0e7b1b47866dab52", + "lastUpdateTime": "2018-09-07T16:30:46.7022734Z" } ] } } - } + }, + "operationId": "ContainerRegistry_GetTags", + "title": "Get tags of a repository" } diff --git a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/MountBlob.json b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/MountBlob.json index 3d369fb51c6b..db47907272ad 100644 --- a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/MountBlob.json +++ b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/MountBlob.json @@ -1,16 +1,18 @@ { "parameters": { - "url": "acrapi.azurecr.io", "name": "newimage", + "from": "sha256:16463e0c481e161aabb735437d30b3c9c7391c2747cc564bb927e843b73dcb39", "mount": "prod/bash", - "from": "sha256:16463e0c481e161aabb735437d30b3c9c7391c2747cc564bb927e843b73dcb39" + "url": "acrapi.azurecr.io" }, "responses": { "201": { "headers": { - "Location": "/v2/somethingnew/blobs/sha256:16463e0c481e161aabb735437d30b3c9c7391c2747cc564bb927e843b73dcb39", - "Docker-Content-Digest": "sha256:16463e0c481e161aabb735437d30b3c9c7391c2747cc564bb927e843b73dcb39" + "Docker-Content-Digest": "sha256:16463e0c481e161aabb735437d30b3c9c7391c2747cc564bb927e843b73dcb39", + "Location": "/v2/somethingnew/blobs/sha256:16463e0c481e161aabb735437d30b3c9c7391c2747cc564bb927e843b73dcb39" } } - } + }, + "operationId": "ContainerRegistryBlob_MountBlob", + "title": "Mount a blob from repository" } diff --git a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/PostAccessToken.json b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/PostAccessToken.json index 93e5836f6754..4b29ccb2c576 100644 --- a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/PostAccessToken.json +++ b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/PostAccessToken.json @@ -1,11 +1,11 @@ { "parameters": { - "url": "acrapi.azurecr.io", - "grant_type": "refresh_token", - "service": "someregistry.azurecr.io", - "scope": "registry:catalog:*", + "api-version": "2021-07-01", + "grantType": "refresh_token", "refresh_token": "eyJ0eXAiOiJKJhbGci1dCI6IkN0ZlFDOExlLTMejlnIiwidGlkIjoiNzJmOTgWItMmQ3Y2QwMTFkYjQ3Ii...", - "api-version": "2021-07-01" + "scope": "registry:catalog:*", + "service": "someregistry.azurecr.io", + "url": "acrapi.azurecr.io" }, "responses": { "200": { @@ -13,5 +13,7 @@ "access_token": "eyJ0eXAiOiJKJhbGcigdCI6IkN0ZlFaOExlLTMejlnIiwidGlkIjoiNzbmOTgWItMmQ3Y2QwMTFkYjQ3Ii..." } } - } + }, + "operationId": "Authentication_ExchangeAcrRefreshTokenForAcrAccessToken", + "title": "Get Access Token with Refresh Token" } diff --git a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/PostRefreshToken.json b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/PostRefreshToken.json index 63f07f770d11..2bf619073e97 100644 --- a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/PostRefreshToken.json +++ b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/PostRefreshToken.json @@ -1,11 +1,11 @@ { "parameters": { - "grant_type": "access_token", - "url": "acrapi.azurecr.io", + "access_token": "eyJ0eXAiOiJKJhbGci1dCI6IkN0ZlFDOExlLTMejlnIiwidGlkIjoiNzJmOTgWItMmQ3Y2QwMTFkYjQ3Ii...", + "api-version": "2021-07-01", + "grantType": "access_token", "service": "someregistry.azurecr.io", "tenant": "02f900bf-86f1-31af-p1ab-2b7cd0nndb47", - "access_token": "eyJ0eXAiOiJKJhbGci1dCI6IkN0ZlFDOExlLTMejlnIiwidGlkIjoiNzJmOTgWItMmQ3Y2QwMTFkYjQ3Ii...", - "api-version": "2021-07-01" + "url": "acrapi.azurecr.io" }, "responses": { "200": { @@ -13,5 +13,7 @@ "refresh_token": "eyJ0eXAiOiJKJhbGcigdCI6IkN0ZlFaOExlLTMejlnIiwidGlkIjoiNzbmOTgWItMmQ3Y2QwMTFkYjQ3Ii..." } } - } + }, + "operationId": "Authentication_ExchangeAadAccessTokenForAcrRefreshToken", + "title": "Exchange AAD Token for ACR Refresh" } diff --git a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/StartBlobUpload.json b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/StartBlobUpload.json index 81790a114c7e..464a59315b83 100644 --- a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/StartBlobUpload.json +++ b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/StartBlobUpload.json @@ -1,15 +1,17 @@ { "parameters": { - "url": "acrapi.azurecr.io", - "name": "newimg" + "name": "newimg", + "url": "acrapi.azurecr.io" }, "responses": { "202": { "headers": { + "Docker-Upload-Uuid": "f6d3451c-3352-43ff-b67c-fd0cfc793066", "Location": "/v2/blobland/blobs/uploads/f6d3451c-3352-43ff-b67c-fd0cfc793066?_nouploadcache=false&_state=iWTaVpaWiz23JTt8ZsYFPEU5JwLOFgdumWOmqGxIYGt7Ik5hbWUiOiJibG9ibGFuZCIsIlVVSUQiOiJmNmQzNDUxYy0zMzUyLTQzZmYtYjY3Yy1mZDBjZmM3OTMwNjYiLCJPZmZzZXQiOjAsIlN0YXJ0ZWRBdCI6IjIwMTktMDgtMjdUMjM6NTI6NTQuNTM1MDQ5ODY1WiJ9", - "Range": "0-0", - "Docker-Upload-Uuid": "f6d3451c-3352-43ff-b67c-fd0cfc793066" + "Range": "0-0" } } - } + }, + "operationId": "ContainerRegistryBlob_StartUpload", + "title": "Start a blob upload" } diff --git a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/UpdateManifestAttributes.json b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/UpdateManifestAttributes.json index 39472a120e4d..4c427d216fac 100644 --- a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/UpdateManifestAttributes.json +++ b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/UpdateManifestAttributes.json @@ -1,9 +1,9 @@ { "parameters": { - "url": "acrapi.azurecr.io", "name": "nanoserver", - "digest": "sha256:110d2b6c84592561338aa040b1b14b7ab81c2f9edbd564c2285dd7d70d777086", "api-version": "2021-07-01", + "digest": "sha256:110d2b6c84592561338aa040b1b14b7ab81c2f9edbd564c2285dd7d70d777086", + "url": "acrapi.azurecr.io", "value": { "writeEnabled": false } @@ -11,26 +11,28 @@ "responses": { "200": { "body": { - "registry": "acrapi.azurecr.io", "imageName": "nanoserver", "manifest": { + "architecture": "amd64", + "changeableAttributes": { + "deleteEnabled": true, + "listEnabled": true, + "readEnabled": true, + "writeEnabled": false + }, + "createdTime": "2018-09-06T06:17:20.9983915Z", "digest": "sha256:110d2b6c84592561338aa040b1b14b7ab81c2f9edbd564c2285dd7d70d777086", "imageSize": 2401606, - "createdTime": "2018-09-06T06:17:20.9983915Z", "lastUpdateTime": "2018-09-06T06:17:20.9983915Z", - "architecture": "amd64", "os": "windows", "tags": [ "4.7.2-20180905-nanoserver-1803" - ], - "changeableAttributes": { - "deleteEnabled": true, - "writeEnabled": false, - "readEnabled": true, - "listEnabled": true - } - } + ] + }, + "registry": "acrapi.azurecr.io" } } - } + }, + "operationId": "ContainerRegistry_UpdateManifestProperties", + "title": "Update attributes of a manifest" } diff --git a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/UpdateRepositoryAttributes.json b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/UpdateRepositoryAttributes.json index 6361027635d0..3a1a92782e8c 100644 --- a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/UpdateRepositoryAttributes.json +++ b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/UpdateRepositoryAttributes.json @@ -1,8 +1,8 @@ { "parameters": { - "url": "acrapi.azurecr.io", "name": "nanoserver", "api-version": "2021-07-01", + "url": "acrapi.azurecr.io", "value": { "writeEnabled": false } @@ -10,19 +10,21 @@ "responses": { "200": { "body": { - "registry": "acrapi.azurecr.io", - "imageName": "nanoserver", - "createdTime": "2018-09-06T06:17:20.9531248Z", - "lastUpdateTime": "2018-09-07T16:30:46.6583219Z", - "manifestCount": 2, - "tagCount": 2, "changeableAttributes": { "deleteEnabled": true, - "writeEnabled": false, + "listEnabled": true, "readEnabled": true, - "listEnabled": true - } + "writeEnabled": false + }, + "createdTime": "2018-09-06T06:17:20.9531248Z", + "imageName": "nanoserver", + "lastUpdateTime": "2018-09-07T16:30:46.6583219Z", + "manifestCount": 2, + "registry": "acrapi.azurecr.io", + "tagCount": 2 } } - } + }, + "operationId": "ContainerRegistry_UpdateProperties", + "title": "Update repository attributes" } diff --git a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/UpdateTagAttributes.json b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/UpdateTagAttributes.json index 299b4ff11ae7..9a93115d98f4 100644 --- a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/UpdateTagAttributes.json +++ b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/UpdateTagAttributes.json @@ -1,29 +1,33 @@ { "parameters": { - "url": "acrapi.azurecr.io", "name": "nanoserver", - "reference": "4.7.2-20180905-nanoserver-1803", "api-version": "2021-07-01", - "value": "{\"writeEnabled\": false}" + "reference": "4.7.2-20180905-nanoserver-1803", + "url": "acrapi.azurecr.io", + "value": { + "writeEnabled": false + } }, "responses": { "200": { "body": { - "registry": "acrapi.azurecr.io", "imageName": "test/bash", + "registry": "acrapi.azurecr.io", "tag": { "name": "tagName", - "digest": "sha256:eabe547f78d4c18c708dd97ec3166cf7464cc651f1cbb67e70d407405b7ad7b6", - "createdTime": "2018-10-05T20:54:24.1286047Z", - "lastUpdateTime": "2018-10-05T20:54:24.1286047Z", "changeableAttributes": { "deleteEnabled": true, - "writeEnabled": false, + "listEnabled": true, "readEnabled": true, - "listEnabled": true - } + "writeEnabled": false + }, + "createdTime": "2018-10-05T20:54:24.1286047Z", + "digest": "sha256:eabe547f78d4c18c708dd97ec3166cf7464cc651f1cbb67e70d407405b7ad7b6", + "lastUpdateTime": "2018-10-05T20:54:24.1286047Z" } } } - } + }, + "operationId": "ContainerRegistry_UpdateTagAttributes", + "title": "Update attributes of a tag" } diff --git a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/UploadBlob.json b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/UploadBlob.json index 2bb09422ee67..3a3cbe5732a5 100644 --- a/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/UploadBlob.json +++ b/specification/containerregistry/data-plane/Registry/stable/2021-07-01/examples/UploadBlob.json @@ -1,16 +1,18 @@ { "parameters": { - "url": "acrapi.azurecr.io", "nextBlobUuidLink": "v2/blobland/blobs/uploads/2b28c60d-d296-44b7-b2b4-1f01c63195c6?_nouploadcache=false&_state=VYABvUSCNW2yY5e5VabLHppXqwU0K7cvT0YUdq57KBt7Ik5hbWUiOiJibG9ibGFuZCIsIlVVSUQiOiIyYjI4YzYwZC1kMjk2LTQ0YjctYjJiNC0xZjAxYzYzMTk1YzYiLCJPZmZzZXQiOjAsIlN0YXJ0ZWRBdCI6IjIwMTktMDgtMjdUMjM6NTI6NDcuMDUzNjU2Mjg1WiJ9", + "url": "acrapi.azurecr.io", "value": "U29tZXRoaW5nRWxzZQ==" }, "responses": { "202": { "headers": { + "Docker-Upload-Uuid": "f6d3451c-3352-43ff-b67c-fd0cfc793066", "Location": "/v2/blobland/blobs/uploads/f6d3451c-3352-43ff-b67c-fd0cfc793066?_nouploadcache=false&_state=9G2t2KQOw-ANeo5TrnwVb5OeAUIe0NaEJ2jxwLT6Y1J7Ik5hbWUiOiJibG9ibGFuZCIsIlVVSUQiOiJmNmQzNDUxYy0zMzUyLTQzZmYtYjY3Yy1mZDBjZmM3OTMwNjYiLCJPZmZzZXQiOjEzLCJTdGFydGVkQXQiOiIyMDE5LTA4LTI3VDIzOjUyOjU0WiJ9", - "Range": "0-12", - "Docker-Upload-Uuid": "f6d3451c-3352-43ff-b67c-fd0cfc793066" + "Range": "0-12" } } - } + }, + "operationId": "ContainerRegistryBlob_UploadChunk", + "title": "Upload Blob" } diff --git a/specification/containerregistry/data-plane/Registry/tspconfig.yaml b/specification/containerregistry/data-plane/Registry/tspconfig.yaml new file mode 100644 index 000000000000..75f7dd05b8c6 --- /dev/null +++ b/specification/containerregistry/data-plane/Registry/tspconfig.yaml @@ -0,0 +1,65 @@ +parameters: + "service-dir": + default: "sdk/containerregistry" + +emit: + - "@azure-tools/typespec-autorest" + +linter: + extends: + - "@azure-tools/typespec-azure-rulesets/data-plane" + +options: + "@azure-tools/typespec-autorest": + azure-resource-provider-folder: "data-plane" + emitter-output-dir: "{project-root}" + examples-dir: "{project-root}/examples" + output-file: "{version-status}/{version}/containerregistry.json" + "@azure-tools/typespec-python": + emitter-output-dir: "{output-dir}/{service-dir}/azure-containerregistry" + package-name: "azure-containerregistry" + package-pprint-name: "Azure Container Registry" + namespace: "azure.containerregistry._generated" + package-version: "1.2.0" + flavor: "azure" + generate-test: false + generate-sample: false + "@azure-tools/typespec-java": + emitter-output-dir: "{output-dir}/{service-dir}/azure-containers-containerregistry" + package-name: "com.azure.containers.containerregistry" + package-version: "1.2.19" + namespace: "com.azure.containers.containerregistry" + generate-test: false + generate-sample: false + flavor: "azure" + "@azure-tools/typespec-csharp": + namespace: "Azure.Containers.ContainerRegistry" + package-name: "Azure.Containers.ContainerRegistry" + emitter-output-dir: "{output-dir}/{service-dir}/{namespace}" + package-version: "1.1.1" + clear-output-folder: true + model-namespace: false + generate-test: false + generate-sample: false + flavor: "azure" + "@azure-tools/typespec-ts": + emitter-output-dir: "{output-dir}/{service-dir}/container-registry" + service-dir: "sdk/containerregistry/" + is-modular-library: true + package-dir: "container-registry" + package-details: + name: "@azure/container-registry" + version: "1.1.0" + generate-test: false + generate-sample: false + flavor: "azure" + "@azure-tools/typespec-go": + containing-module: "github.com/Azure/azure-sdk-for-go/sdk/containers/azcontainerregistry" + emitter-output-dir: "{output-dir}/{service-dir}/azcontainerregistry" + module-name: "github.com/Azure/azure-sdk-for-go/sdk/containers/azcontainerregistry" + package-name: "azcontainerregistry" + package-version: "0.2.4" + inject-spans: true + generate-test: false + generate-sample: false + flavor: "azure"