From 6e45cb1b3aa50fca9737c20ca4b0228b6e7490f6 Mon Sep 17 00:00:00 2001 From: jennypng <63012604+JennyPng@users.noreply.github.com> Date: Thu, 29 Jan 2026 17:37:54 -0800 Subject: [PATCH 1/2] initial pipeline draft --- .../stages/archetype-conda-release.yml | 79 +++++++++++++------ .../templates/stages/conda-sdk-client.yml | 24 +++++- 2 files changed, 78 insertions(+), 25 deletions(-) diff --git a/eng/pipelines/templates/stages/archetype-conda-release.yml b/eng/pipelines/templates/stages/archetype-conda-release.yml index ab2fcab95450..6e908e40f80f 100644 --- a/eng/pipelines/templates/stages/archetype-conda-release.yml +++ b/eng/pipelines/templates/stages/archetype-conda-release.yml @@ -4,29 +4,60 @@ parameters: - name: DependsOn type: string default: Build +- name: ArtifactName + type: string + default: 'conda' stages: - # - ${{if and(eq(variables['Build.Reason'], 'Manual'), eq(variables['System.TeamProject'], 'internal'))}}: - - stage: Release - displayName: 'Conda Release' - dependsOn: ${{parameters.DependsOn}} - condition: and(succeeded(), ne(variables['SetDevVersion'], 'true'), ne(variables['Skip.Release'], 'true'), ne(variables['Build.Repository.Name'], 'Azure/azure-sdk-for-python-pr')) - jobs: - - deployment: CondaRelease - displayName: "Publish Conda Artifact" - # environment: pypi - - pool: - name: 'azsdk-pool' - demands: ImageOverride -equals 'ubuntu-24.04' - - strategy: - runOnce: - deploy: - steps: - - checkout: self - - ${{ each artifact in parameters.CondaArtifacts }}: - - pwsh: | - Write-Host "${{ artifact.name }} is ${{ artifact.inBatch }}" - workingDirectory: $(Pipeline.Workspace) - displayName: Output Visible Conda Artifact + - ${{if and(in(variables['Build.Reason'], 'Manual', ''), eq(variables['System.TeamProject'], 'internal'))}}: + - ${{ each artifact in parameters.CondaArtifacts }}: + - stage: 'Release_${{artifact.name}}' + displayName: 'Release: ${{artifact.name}}' + dependsOn: ${{parameters.DependsOn}} + condition: and(succeeded(), ne(variables['SetDevVersion'], 'true'), ne(variables['Skip.Release'], 'true'), ne(variables['Build.Repository.Name'], 'Azure/azure-sdk-for-python-pr')) + jobs: + - deployment: PublishCondaPackage + displayName: "Publish Conda Artifact: ${{artifact.name}}" + environment: package-publish + + templateContext: + type: releaseJob + isProduction: true + inputs: + - input: pipelineArtifact + artifactName: ${{parameters.ArtifactName}} + targetPath: $(Pipeline.Workspace)/${{parameters.ArtifactName}} + + pool: + name: azsdk-pool + image: ubuntu-24.04 + os: linux + + strategy: + runOnce: + deploy: + steps: + - checkout: self + + - task: UsePythonVersion@0 + inputs: + versionSpec: '3.12' + + - pwsh: | + Get-ChildItem -Recurse $(Pipeline.Workspace)/${{parameters.ArtifactName}} + workingDirectory: $(Pipeline.Workspace) + displayName: Output Visible Conda Artifacts + + - script: | + set -e + python -m pip install anaconda-client + displayName: Install anaconda-client + + - script: | + set -e + anaconda upload --user $CONDA_USERNAME --skip-existing --private $(Pipeline.Workspace)/${{parameters.ArtifactName}}/${{artifact.name}}/*.tar.bz2 + echo "Uploaded ${{artifact.name}} to Anaconda" + displayName: 'Publish ${{artifact.name}} to Anaconda' + env: + ANACONDA_API_TOKEN: $(conda-release-apikey) + CONDA_USERNAME: Microsoft diff --git a/eng/pipelines/templates/stages/conda-sdk-client.yml b/eng/pipelines/templates/stages/conda-sdk-client.yml index 98b6811d2600..22b6d618fc24 100644 --- a/eng/pipelines/templates/stages/conda-sdk-client.yml +++ b/eng/pipelines/templates/stages/conda-sdk-client.yml @@ -1,3 +1,22 @@ +trigger: + branches: + include: + - main + paths: + include: + - conda/conda-recipes/* + - conda/conda-releaselogs/* + - eng/pipelines/templates/stages/conda-sdk-client.yml +pr: + branches: + include: + - main + paths: + include: + - conda/conda-recipes/* + - conda/conda-releaselogs/* + - eng/pipelines/templates/stages/conda-sdk-client.yml + parameters: - name: release_msal displayName: 'msal' @@ -906,4 +925,7 @@ extends: - package: azure-mgmt-workloadssapvirtualinstance version: 1.0.0 - + - template: /eng/pipelines/templates/stages/archetype-conda-release.yml@self + parameters: + DependsOn: Build_Universal_Dependencies + ArtifactName: conda From 16370d43959b84924ebdf24703342f3887468253 Mon Sep 17 00:00:00 2001 From: jennypng <63012604+JennyPng@users.noreply.github.com> Date: Fri, 30 Jan 2026 14:16:49 -0800 Subject: [PATCH 2/2] refinement --- .../stages/archetype-conda-release.yml | 119 ++++++++++-------- 1 file changed, 66 insertions(+), 53 deletions(-) diff --git a/eng/pipelines/templates/stages/archetype-conda-release.yml b/eng/pipelines/templates/stages/archetype-conda-release.yml index 6e908e40f80f..7665750caa6a 100644 --- a/eng/pipelines/templates/stages/archetype-conda-release.yml +++ b/eng/pipelines/templates/stages/archetype-conda-release.yml @@ -1,6 +1,4 @@ parameters: -- name: CondaArtifacts - type: object - name: DependsOn type: string default: Build @@ -10,54 +8,69 @@ parameters: stages: - ${{if and(in(variables['Build.Reason'], 'Manual', ''), eq(variables['System.TeamProject'], 'internal'))}}: - - ${{ each artifact in parameters.CondaArtifacts }}: - - stage: 'Release_${{artifact.name}}' - displayName: 'Release: ${{artifact.name}}' - dependsOn: ${{parameters.DependsOn}} - condition: and(succeeded(), ne(variables['SetDevVersion'], 'true'), ne(variables['Skip.Release'], 'true'), ne(variables['Build.Repository.Name'], 'Azure/azure-sdk-for-python-pr')) - jobs: - - deployment: PublishCondaPackage - displayName: "Publish Conda Artifact: ${{artifact.name}}" - environment: package-publish - - templateContext: - type: releaseJob - isProduction: true - inputs: - - input: pipelineArtifact - artifactName: ${{parameters.ArtifactName}} - targetPath: $(Pipeline.Workspace)/${{parameters.ArtifactName}} - - pool: - name: azsdk-pool - image: ubuntu-24.04 - os: linux - - strategy: - runOnce: - deploy: - steps: - - checkout: self - - - task: UsePythonVersion@0 - inputs: - versionSpec: '3.12' - - - pwsh: | - Get-ChildItem -Recurse $(Pipeline.Workspace)/${{parameters.ArtifactName}} - workingDirectory: $(Pipeline.Workspace) - displayName: Output Visible Conda Artifacts - - - script: | - set -e - python -m pip install anaconda-client - displayName: Install anaconda-client - - - script: | - set -e - anaconda upload --user $CONDA_USERNAME --skip-existing --private $(Pipeline.Workspace)/${{parameters.ArtifactName}}/${{artifact.name}}/*.tar.bz2 - echo "Uploaded ${{artifact.name}} to Anaconda" - displayName: 'Publish ${{artifact.name}} to Anaconda' - env: - ANACONDA_API_TOKEN: $(conda-release-apikey) - CONDA_USERNAME: Microsoft + - stage: Release_Conda + displayName: 'Release Conda Packages' + dependsOn: ${{parameters.DependsOn}} + condition: and(succeeded(), ne(variables['SetDevVersion'], 'true'), ne(variables['Skip.Release'], 'true'), ne(variables['Build.Repository.Name'], 'Azure/azure-sdk-for-python-pr')) + jobs: + - deployment: PublishCondaPackages + displayName: "Publish Conda Packages to Anaconda" + environment: package-publish + + templateContext: + type: releaseJob + isProduction: true + inputs: + - input: pipelineArtifact + artifactName: ${{parameters.ArtifactName}} + targetPath: $(Pipeline.Workspace)/${{parameters.ArtifactName}} + + pool: + name: azsdk-pool + image: ubuntu-24.04 + os: linux + + strategy: + runOnce: + deploy: + steps: + - checkout: self + + - task: UsePythonVersion@0 + inputs: + versionSpec: '3.12' + + - pwsh: | + Get-ChildItem -Recurse $(Pipeline.Workspace)/${{parameters.ArtifactName}} + workingDirectory: $(Pipeline.Workspace) + displayName: Output Visible Conda Artifacts + + - script: | + set -e + python -m pip install anaconda-client + displayName: Install anaconda-client + + - pwsh: | + $packages = Get-ChildItem -Path "$(Pipeline.Workspace)/${{parameters.ArtifactName}}/noarch" -Filter "*.conda" + foreach ($package in $packages) { + Write-Host "Uploading: $($package.FullName)" + $success = $false + for ($attempt = 1; $attempt -le 3; $attempt++) { + anaconda upload --user $env:CONDA_USERNAME --skip-existing --private $package.FullName + if ($LASTEXITCODE -eq 0) { + $success = $true + break + } + Write-Host "Attempt $attempt failed, retrying..." + Start-Sleep -Seconds 5 + } + if (-not $success) { + Write-Error "Failed to upload $($package.Name) after 3 attempts" + exit 1 + } + } + Write-Host "Uploaded all conda packages to Anaconda" + displayName: 'Publish all Conda packages to Anaconda' + env: + ANACONDA_API_TOKEN: $(conda-release-apikey) + CONDA_USERNAME: Microsoft