Conda Release Infrastructure
March 6, 2026 · View on GitHub
This doc is for developers who need to understand or modify the conda release infrastructure specified in conda-release.md.
Key Files
| Path | Purpose |
|---|---|
conda/conda-recipes/<package>/meta.yaml | Conda recipe for each package (or bundle). Defines build, dependencies, and tests. |
conda/conda-recipes/conda_env.yml | Stores AZURESDK_CONDA_VERSION — the version string used for all conda packages in a release (e.g., 2025.12.01). |
conda/conda-releaselogs/<package>.md | Per-package (or bundle) release log listing which PyPI package versions are included in each conda release. |
conda/update_conda_files.py | The main automation script. Updates versions, creates recipes, and generates release logs. |
conda/conda_helper_functions.py | Shared helpers for CSV parsing, bundle detection, PyPI queries, etc. |
eng/pipelines/conda-update-pipeline.yml | Pipeline definition for the update/PR workflow. |
eng/pipelines/templates/stages/conda-sdk-client.yml | Pipeline definition for building and releasing conda packages. Contains the CondaArtifacts list and per-package release toggles. |
eng/pipelines/templates/stages/archetype-conda-release.yml | Release stage template — uploads .conda artifacts to Anaconda. |
eng/pipelines/templates/steps/build-conda-artifacts.yml | Build step template — installs tooling and invokes sdk_build_conda. |
How update_conda_files.py Works
The script is the core of the update pipeline. When invoked (with an optional --release-date MM.DD argument), it performs these steps in order:
-
Bumps
AZURESDK_CONDA_VERSIONinconda_env.ymlto the target release date (or auto-increments by 3 months). -
Parses the Python package CSV to get the latest GA versions and release dates for all Azure SDK packages.
-
Categorizes packages into:
- Outdated — already in conda but with a newer GA version available.
- New — GA packages not yet included in conda.
- Data plane vs. management plane (management plane packages are all bundled together).
-
Updates
conda-sdk-client.yml:- Bumps
versionfields for outdated packages in theCondaArtifactslist. - Adds new
CondaArtifactsentries and release toggle parameters for new data plane packages. - Appends new management plane packages to the
azure-mgmtbundle'scheckoutlist (the list of package paths the pipeline checks out and includes in the bundle).
- Bumps
-
Creates
meta.yamlrecipes for new data plane packages (underconda/conda-recipes/<package>/). For bundled packages (determined by[tool.azure-sdk-conda]inpyproject.toml), a single recipe covers the entire bundle. -
Updates
azure-mgmt/meta.yamlimport tests for new management plane packages. -
Updates/creates release logs in
conda/conda-releaselogs/. -
Prints a report of any packages that couldn't be automatically processed and may need manual attention.
Package Bundles
Some packages are grouped into a single conda package (a "bundle"). For example, azure-storage bundles azure-storage-blob, azure-storage-queue, etc. Bundle membership is determined by the [tool.azure-sdk-conda] section in each package's pyproject.toml.
Bundled packages share:
- A single
meta.yamlrecipe (with combined dependencies and imports). - A single release log file.
- A single release toggle in
conda-sdk-client.yml.
Service teams are responsible for updating this metadata, and it is enforced in CI.
Build Pipeline (conda-sdk-client.yml)
Build stage:
See conda-builds.md.
Release stage (archetype-conda-release.yml):
- Requires deployment approval (environment:
package-publish). - Uploads all
.condafiles from theconda/noarchartifact to Anaconda usinganaconda-client, under theMicrosoftuser. - Requires Anaconda API token with the “Allow all operations on Conda repositories” and "Allow write access to the API" scopes (see Microsoft Open-Source Python docs)
Versioning
All conda packages in a release share the same version string: YYYY.MM.DD (e.g., 2025.12.01). This is set in conda/conda-recipes/conda_env.yml and referenced by every meta.yaml via environ.get('AZURESDK_CONDA_VERSION').
Building Locally
See conda-builds.md for instructions on building conda packages locally using sdk_build_conda.
Adding a New Package to Conda Manually
If the automation doesn't handle a new package correctly, the manual steps are:
-
Add a release toggle parameter in
conda-sdk-client.yml. -
Add a
CondaArtifactsentry withname,service,common_root,in_batch, andcheckoutfields. -
Create a
meta.yamlunderconda/conda-recipes/<package>/(use an existing recipe as a template). -
Create a release log under
conda/conda-releaselogs/<package>.md. -
For bundles, ensure each member package has
[tool.azure-sdk-conda]in itspyproject.tomlwith the bundle name:[tool.azure-sdk-conda] in_bundle = true bundle_name = "azure-storage" # The name of the conda bundle this package belongs to