{"id":"19f8c379-d483-4791-8f8b-119451153c22","shortId":"BSMzMj","kind":"skill","title":"azure-containerregistry-py","tagline":"Azure Container Registry SDK for Python. Use for managing container images, artifacts, and repositories.","description":"# Azure Container Registry SDK for Python\n\nManage container images, artifacts, and repositories in Azure Container Registry.\n\n## Installation\n\n```bash\npip install azure-containerregistry\n```\n\n## Environment Variables\n\n```bash\nAZURE_CONTAINERREGISTRY_ENDPOINT=https://<registry-name>.azurecr.io\n```\n\n## Authentication\n\n### Entra ID (Recommended)\n\n```python\nfrom azure.containerregistry import ContainerRegistryClient\nfrom azure.identity import DefaultAzureCredential\n\nclient = ContainerRegistryClient(\n    endpoint=os.environ[\"AZURE_CONTAINERREGISTRY_ENDPOINT\"],\n    credential=DefaultAzureCredential()\n)\n```\n\n### Anonymous Access (Public Registry)\n\n```python\nfrom azure.containerregistry import ContainerRegistryClient\n\nclient = ContainerRegistryClient(\n    endpoint=\"https://mcr.microsoft.com\",\n    credential=None,\n    audience=\"https://mcr.microsoft.com\"\n)\n```\n\n## List Repositories\n\n```python\nclient = ContainerRegistryClient(endpoint, DefaultAzureCredential())\n\nfor repository in client.list_repository_names():\n    print(repository)\n```\n\n## Repository Operations\n\n### Get Repository Properties\n\n```python\nproperties = client.get_repository_properties(\"my-image\")\nprint(f\"Created: {properties.created_on}\")\nprint(f\"Modified: {properties.last_updated_on}\")\nprint(f\"Manifests: {properties.manifest_count}\")\nprint(f\"Tags: {properties.tag_count}\")\n```\n\n### Update Repository Properties\n\n```python\nfrom azure.containerregistry import RepositoryProperties\n\nclient.update_repository_properties(\n    \"my-image\",\n    properties=RepositoryProperties(\n        can_delete=False,\n        can_write=False\n    )\n)\n```\n\n### Delete Repository\n\n```python\nclient.delete_repository(\"my-image\")\n```\n\n## List Tags\n\n```python\nfor tag in client.list_tag_properties(\"my-image\"):\n    print(f\"{tag.name}: {tag.created_on}\")\n```\n\n### Filter by Order\n\n```python\nfrom azure.containerregistry import ArtifactTagOrder\n\n# Most recent first\nfor tag in client.list_tag_properties(\n    \"my-image\",\n    order_by=ArtifactTagOrder.LAST_UPDATED_ON_DESCENDING\n):\n    print(f\"{tag.name}: {tag.last_updated_on}\")\n```\n\n## Manifest Operations\n\n### List Manifests\n\n```python\nfrom azure.containerregistry import ArtifactManifestOrder\n\nfor manifest in client.list_manifest_properties(\n    \"my-image\",\n    order_by=ArtifactManifestOrder.LAST_UPDATED_ON_DESCENDING\n):\n    print(f\"Digest: {manifest.digest}\")\n    print(f\"Tags: {manifest.tags}\")\n    print(f\"Size: {manifest.size_in_bytes}\")\n```\n\n### Get Manifest Properties\n\n```python\nmanifest = client.get_manifest_properties(\"my-image\", \"latest\")\nprint(f\"Digest: {manifest.digest}\")\nprint(f\"Architecture: {manifest.architecture}\")\nprint(f\"OS: {manifest.operating_system}\")\n```\n\n### Update Manifest Properties\n\n```python\nfrom azure.containerregistry import ArtifactManifestProperties\n\nclient.update_manifest_properties(\n    \"my-image\",\n    \"latest\",\n    properties=ArtifactManifestProperties(\n        can_delete=False,\n        can_write=False\n    )\n)\n```\n\n### Delete Manifest\n\n```python\n# Delete by digest\nclient.delete_manifest(\"my-image\", \"sha256:abc123...\")\n\n# Delete by tag\nmanifest = client.get_manifest_properties(\"my-image\", \"old-tag\")\nclient.delete_manifest(\"my-image\", manifest.digest)\n```\n\n## Tag Operations\n\n### Get Tag Properties\n\n```python\ntag = client.get_tag_properties(\"my-image\", \"latest\")\nprint(f\"Digest: {tag.digest}\")\nprint(f\"Created: {tag.created_on}\")\n```\n\n### Delete Tag\n\n```python\nclient.delete_tag(\"my-image\", \"old-tag\")\n```\n\n## Upload and Download Artifacts\n\n```python\nfrom azure.containerregistry import ContainerRegistryClient\n\nclient = ContainerRegistryClient(endpoint, DefaultAzureCredential())\n\n# Download manifest\nmanifest = client.download_manifest(\"my-image\", \"latest\")\nprint(f\"Media type: {manifest.media_type}\")\nprint(f\"Digest: {manifest.digest}\")\n\n# Download blob\nblob = client.download_blob(\"my-image\", \"sha256:abc123...\")\nwith open(\"layer.tar.gz\", \"wb\") as f:\n    for chunk in blob:\n        f.write(chunk)\n```\n\n## Async Client\n\n```python\nfrom azure.containerregistry.aio import ContainerRegistryClient\nfrom azure.identity.aio import DefaultAzureCredential\n\nasync def list_repos():\n    credential = DefaultAzureCredential()\n    client = ContainerRegistryClient(endpoint, credential)\n    \n    async for repo in client.list_repository_names():\n        print(repo)\n    \n    await client.close()\n    await credential.close()\n```\n\n## Clean Up Old Images\n\n```python\nfrom datetime import datetime, timedelta, timezone\n\ncutoff = datetime.now(timezone.utc) - timedelta(days=30)\n\nfor manifest in client.list_manifest_properties(\"my-image\"):\n    if manifest.last_updated_on < cutoff and not manifest.tags:\n        print(f\"Deleting {manifest.digest}\")\n        client.delete_manifest(\"my-image\", manifest.digest)\n```\n\n## Client Operations\n\n| Operation | Description |\n|-----------|-------------|\n| `list_repository_names` | List all repositories |\n| `get_repository_properties` | Get repository metadata |\n| `delete_repository` | Delete repository and all images |\n| `list_tag_properties` | List tags in repository |\n| `get_tag_properties` | Get tag metadata |\n| `delete_tag` | Delete specific tag |\n| `list_manifest_properties` | List manifests in repository |\n| `get_manifest_properties` | Get manifest metadata |\n| `delete_manifest` | Delete manifest by digest |\n| `download_manifest` | Download manifest content |\n| `download_blob` | Download layer blob |\n\n## Best Practices\n\n1. **Use Entra ID** for authentication in production\n2. **Delete by digest** not tag to avoid orphaned images\n3. **Lock production images** with can_delete=False\n4. **Clean up untagged manifests** regularly\n5. **Use async client** for high-throughput operations\n6. **Order by last_updated** to find recent/old images\n7. **Check manifest.tags** before deleting to avoid removing tagged images\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["azure","containerregistry","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows"],"capabilities":["skill","source-sickn33","skill-azure-containerregistry-py","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/azure-containerregistry-py","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34928 github stars · SKILL.md body (6,222 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-24T18:50:29.707Z","embedding":null,"createdAt":"2026-04-18T21:32:16.248Z","updatedAt":"2026-04-24T18:50:29.707Z","lastSeenAt":"2026-04-24T18:50:29.707Z","tsv":"'1':572 '2':580 '3':590 '30':472 '4':598 '5':604 '6':613 '7':622 'abc123':314,409 'access':72 'action':644 'anonym':71 'applic':638 'architectur':272 'artifact':16,28,371 'artifactmanifestord':224 'artifactmanifestorder.last':236 'artifactmanifestproperti':286,295 'artifacttagord':191 'artifacttagorder.last':206 'ask':682 'async':422,433,443,606 'audienc':86 'authent':49,577 'avoid':587,628 'await':452,454 'azur':2,5,19,32,40,45,66 'azure-containerregistri':39 'azure-containerregistry-pi':1 'azure.containerregistry':55,77,142,189,222,284,374 'azure.containerregistry.aio':426 'azure.identity':59 'azure.identity.aio':430 'azurecr.io':48 'bash':36,44 'best':570 'blob':401,402,404,419,566,569 'boundari':690 'byte':253 'check':623 'chunk':417,421 'clarif':684 'clean':456,599 'clear':657 'client':62,80,91,377,423,439,500,607 'client.close':453 'client.delete':162,308,328,360,494 'client.download':384,403 'client.get':110,259,319,341 'client.list':98,173,198,228,447,476 'client.update':145,287 'contain':6,14,20,26,33 'containerregistri':3,41,46,67 'containerregistrycli':57,63,79,81,92,376,378,428,440 'content':564 'count':131,136 'creat':118,354 'credenti':69,84,437,442 'credential.close':455 'criteria':693 'cutoff':467,486 'datetim':462,464 'datetime.now':468 'day':471 'def':434 'defaultazurecredenti':61,70,94,380,432,438 'delet':154,159,297,302,305,315,357,492,516,518,536,538,554,556,581,596,626 'descend':209,239 'describ':645,661 'descript':503 'digest':242,268,307,350,398,559,583 'download':370,381,400,560,562,565,567 'endpoint':47,64,68,82,93,379,441 'entra':50,574 'environ':42,673 'environment-specif':672 'execut':640 'expert':678 'f':117,122,128,133,180,211,241,245,249,267,271,275,349,353,391,397,415,491 'f.write':420 'fals':155,158,298,301,597 'filter':184 'find':619 'first':194 'get':105,254,336,510,513,530,533,548,551 'high':610 'high-throughput':609 'id':51,575 'imag':15,27,115,150,166,178,203,233,264,292,312,324,332,346,364,388,407,459,481,498,522,589,593,621,631 'import':56,60,78,143,190,223,285,375,427,431,463 'input':687 'instal':35,38 'last':616 'latest':265,293,347,389 'layer':568 'layer.tar.gz':412 'limit':649 'list':88,167,218,435,504,507,523,526,541,544 'lock':591 'manag':13,25 'manifest':129,216,219,226,229,255,258,260,280,288,303,309,318,320,329,382,383,385,474,477,495,542,545,549,552,555,557,561,563,602 'manifest.architecture':273 'manifest.digest':243,269,333,399,493,499 'manifest.last':483 'manifest.media':394 'manifest.operating':277 'manifest.size':251 'manifest.tags':247,489,624 'match':658 'mcr.microsoft.com':83,87 'media':392 'metadata':515,535,553 'miss':695 'modifi':123 'my-imag':113,148,164,176,201,231,262,290,310,322,330,344,362,386,405,479,496 'name':100,449,506 'none':85 'old':326,366,458 'old-tag':325,365 'open':411 'oper':104,217,335,501,502,612 'order':186,204,234,614 'orphan':588 'os':276 'os.environ':65 'output':667 'overview':648 'permiss':688 'pip':37 'practic':571 'print':101,116,121,127,132,179,210,240,244,248,266,270,274,348,352,390,396,450,490 'product':579,592 'properti':107,109,112,139,147,151,175,200,230,256,261,281,289,294,321,338,343,478,512,525,532,543,550 'properties.created':119 'properties.last':124 'properties.manifest':130 'properties.tag':135 'public':73 'py':4 'python':10,24,53,75,90,108,140,161,169,187,220,257,282,304,339,359,372,424,460 'recent':193 'recent/old':620 'recommend':52 'registri':7,21,34,74 'regular':603 'remov':629 'repo':436,445,451 'repositori':18,30,89,96,99,102,103,106,111,138,146,160,163,448,505,509,511,514,517,519,529,547 'repositoryproperti':144,152 'requir':686 'review':679 'safeti':689 'scope':660 'sdk':8,22 'sha256':313,408 'size':250 'skill':636,652 'skill-azure-containerregistry-py' 'source-sickn33' 'specif':539,674 'stop':680 'substitut':670 'success':692 'system':278 'tag':134,168,171,174,196,199,246,317,327,334,337,340,342,358,361,367,524,527,531,534,537,540,585,630 'tag.created':182,355 'tag.digest':351 'tag.last':213 'tag.name':181,212 'task':656 'test':676 'throughput':611 'timedelta':465,470 'timezon':466 'timezone.utc':469 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'treat':665 'type':393,395 'untag':601 'updat':125,137,207,214,237,279,484,617 'upload':368 'use':11,573,605,634,650 'valid':675 'variabl':43 'wb':413 'workflow':642 'write':157,300","prices":[{"id":"ae0895ad-f55b-4aa9-bbeb-32c70b17276e","listingId":"19f8c379-d483-4791-8f8b-119451153c22","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:32:16.248Z"}],"sources":[{"listingId":"19f8c379-d483-4791-8f8b-119451153c22","source":"github","sourceId":"sickn33/antigravity-awesome-skills/azure-containerregistry-py","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-containerregistry-py","isPrimary":false,"firstSeenAt":"2026-04-18T21:32:16.248Z","lastSeenAt":"2026-04-24T18:50:29.707Z"}],"details":{"listingId":"19f8c379-d483-4791-8f8b-119451153c22","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"azure-containerregistry-py","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34928,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-24T06:41:17Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"a88ab462274debdcc34e3395429429c7941e6851","skill_md_path":"skills/azure-containerregistry-py/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-containerregistry-py"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"azure-containerregistry-py","description":"Azure Container Registry SDK for Python. Use for managing container images, artifacts, and repositories."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/azure-containerregistry-py"},"updatedAt":"2026-04-24T18:50:29.707Z"}}