# Starter pipeline # Start with a minimal pipeline that you can customize to build and deploy your code. # Add steps that build, run tests, deploy, and more: # https://aka.ms/yaml trigger: - master resources: repositories: - repository: sonic-swss type: github name: sonic-net/sonic-swss endpoint: sonic-net variables: - name: BUILD_BRANCH ${{ if eq(variables['Build.Reason'], 'PullRequest') }}: value: $(System.PullRequest.TargetBranch) ${{ else }}: value: $(Build.SourceBranchName) stages: - stage: Pretest jobs: - job: static_analysis displayName: "Static Analysis" timeoutInMinutes: 10 continueOnError: true pool: sonic-ubuntu-1c steps: - template: .azure-pipelines/pre-commit-check.yml - stage: Build jobs: - job: displayName: "Python3" variables: DIFF_COVER_CHECK_THRESHOLD: 80 DIFF_COVER_ENABLE: 'true' pool: vmImage: ubuntu-20.04 container: image: sonicdev-microsoft.azurecr.io:443/sonic-slave-bookworm:$(BUILD_BRANCH) steps: - script: | set -ex sudo apt-get update sudo apt-get install -y python3-pip sudo pip3 install requests==2.31.0 sudo apt-get install -y python3-protobuf displayName: "Install dependencies" - script: | sourceBranch=$(Build.SourceBranchName) if [[ "$(Build.Reason)" == "PullRequest" ]];then sourceBranch=$(System.PullRequest.TargetBranch) fi echo "Download artifact branch: $sourceBranch" echo "##vso[task.setvariable variable=sourceBranch]$sourceBranch" displayName: "Get correct artifact downloading branch" - task: DownloadPipelineArtifact@2 inputs: source: specific project: build pipeline: 142 artifact: sonic-buildimage.vs runVersion: 'latestFromBranch' runBranch: 'refs/heads/$(sourceBranch)' patterns: | **/*.deb **/*.whl displayName: "Download artifacts from latest sonic-buildimage build" - script: | set -xe sudo apt-get -y purge libnl-3-dev libnl-route-3-dev || true sudo dpkg -i libnl-3-200_*.deb sudo dpkg -i libnl-genl-3-200_*.deb sudo dpkg -i libnl-route-3-200_*.deb sudo dpkg -i libnl-nf-3-200_*.deb sudo dpkg -i libyang_1.0.73_amd64.deb sudo dpkg -i libyang-cpp_1.0.73_amd64.deb sudo dpkg -i python3-yang_1.0.73_amd64.deb workingDirectory: $(Pipeline.Workspace)/target/debs/bookworm/ displayName: 'Install Debian dependencies' - task: DownloadPipelineArtifact@2 inputs: source: specific project: build pipeline: 9 artifact: sonic-swss-common-bookworm runVersion: 'latestFromBranch' runBranch: 'refs/heads/$(sourceBranch)' displayName: "Download sonic swss common deb packages" - script: | set -xe sudo dpkg -i libswsscommon_1.0.0_amd64.deb sudo dpkg -i python3-swsscommon_1.0.0_amd64.deb workingDirectory: $(Pipeline.Workspace)/ displayName: 'Install swss-common dependencies' - task: DownloadPipelineArtifact@2 inputs: source: specific project: build pipeline: sonic-net.sonic-dash-api artifact: sonic-dash-api runVersion: 'latestFromBranch' runBranch: 'refs/heads/$(BUILD_BRANCH)' path: $(Build.ArtifactStagingDirectory)/download patterns: | libdashapi*.deb displayName: "Download dash api" - script: | set -xe sudo apt-get update sudo dpkg -i $(Build.ArtifactStagingDirectory)/download/libdashapi_*.deb workingDirectory: $(Pipeline.Workspace)/ displayName: 'Install libdashapi libraries' - script: | set -xe sudo pip3 install swsssdk-2.0.1-py3-none-any.whl sudo pip3 install sonic_py_common-1.0-py3-none-any.whl sudo pip3 install sonic_yang_mgmt-1.0-py3-none-any.whl sudo pip3 install sonic_yang_models-1.0-py3-none-any.whl sudo pip3 install sonic_config_engine-1.0-py3-none-any.whl sudo pip3 install sonic_platform_common-1.0-py3-none-any.whl workingDirectory: $(Pipeline.Workspace)/target/python-wheels/bookworm/ displayName: 'Install Python dependencies' - script: | set -ex # Install .NET CORE curl -sSL https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add - sudo apt-add-repository https://packages.microsoft.com/debian/12/prod sudo apt-get update sudo apt-get install -y dotnet-sdk-8.0 displayName: "Install .NET CORE" - script: | pip3 install ".[testing]" pip3 uninstall --yes sonic-utilities pytest displayName: 'Test Python 3' - task: PublishTestResults@2 inputs: testResultsFiles: '$(System.DefaultWorkingDirectory)/test-results.xml' testRunTitle: Python 3 failTaskOnFailedTests: true condition: succeededOrFailed() displayName: 'Publish Python 3 test results' - task: PublishCodeCoverageResults@1 inputs: codeCoverageTool: Cobertura summaryFileLocation: '$(System.DefaultWorkingDirectory)/coverage.xml' reportDirectory: '$(System.DefaultWorkingDirectory)/htmlcov/' displayName: 'Publish Python 3 test coverage' - script: | set -e python3 -m build -n displayName: 'Build Python 3 wheel' - publish: '$(System.DefaultWorkingDirectory)/dist/' artifact: wheels displayName: "Publish Python wheels"