diff --git a/eng/pipelines/templates/stages/archetype-conda-release.yml b/eng/pipelines/templates/stages/archetype-conda-release.yml index ab2fcab95450..7665750caa6a 100644 --- a/eng/pipelines/templates/stages/archetype-conda-release.yml +++ b/eng/pipelines/templates/stages/archetype-conda-release.yml @@ -1,32 +1,76 @@ parameters: -- name: CondaArtifacts - type: object - 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 }}: + - ${{if and(in(variables['Build.Reason'], 'Manual', ''), eq(variables['System.TeamProject'], 'internal'))}}: + - 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: | - Write-Host "${{ artifact.name }} is ${{ artifact.inBatch }}" + Get-ChildItem -Recurse $(Pipeline.Workspace)/${{parameters.ArtifactName}} workingDirectory: $(Pipeline.Workspace) - displayName: Output Visible Conda Artifact + 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 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