vsts/templates/steps-build-docker-image.yaml (150 lines of code) (raw):

parameters: langauge: '' repo: $(Horton.Repo) commit: $(Horton.Commit) forced_image: $(Horton.ForcedImage) job_tag: 'linux' variant: '' repo_address: $(IOTHUB-E2E-REPO-ADDRESS) repo_user: $(IOTHUB-E2E-REPO-USER) repo_password: $(IOTHUB-E2E-REPO-PASSWORD) steps: - template: steps-ensure-e2e-fx-repo.yaml - powershell: | function IsEmpty($s) { ( ($s -eq $null) -or ( $s -eq "" ) -or ( $s.StartsWith("$") ) ) } function GetArchitecture() { $plat = (uname -m) | Out-String if ($plat.StartsWith("armv7")) { "arm64" } else { "x64" } } $BuildImage="yes" if ( -not (IsEmpty($env:ForcedImage)) ) { $BuildImage="no" } $IsPr = "no" $LanguageToPass=$env:Language $RepoToPass=$env:Repo $CommitToPass = $env:Commit $VariantToPass = $env:Variant if (IsEmpty($CommitToPass)) { $CommitToPass="master" } if (IsEmpty($VariantToPass)) { $VariantToPass="" } if (IsEmpty($LanguageToPass)) { if ($VariantToPass -like "node16") { $LanguageToPass="node" } elseif ($VariantToPass -like "node18") { $LanguageToPass="node" } elseif ($VariantToPass -like "py37") { $LanguageToPass="pythonv2" } elseif ($VariantToPass -like "py38") { $LanguageToPass="pythonv2" } elseif ($VariantToPass -like "py39") { $LanguageToPass="pythonv2" } elseif ($VariantToPass -like "py310") { $LanguageToPass="pythonv2" } } if (IsEmpty($RepoToPass)) { if ($LanguageToPass -like 'c') { $RepoToPass="Azure/azure-iot-sdk-c" } elseif ($LanguageToPass -like 'node') { $RepoToPass="Azure/azure-iot-sdk-node" } elseif ($LanguageToPass -like 'csharp') { $RepoToPass="Azure/azure-iot-sdk-csharp" } elseif ($LanguageToPass -like 'java') { $RepoToPass="Azure/azure-iot-sdk-java" } elseif ($LanguageToPass -like 'pythonv2') { $RepoToPass="Azure/azure-iot-sdk-python" } } if ($RepoToPass -like 'https://github.com/*') { $RepoToPass=$RepoToPass.Substring('https://github.com/'.length) } if ("$env:SYSTEM_PULLREQUEST_TARGETBRANCH" -ne "") { $CommitToPass = $env:SYSTEM_PULLREQUEST_TARGETBRANCH $IsPr = "yes" } if ( $CommitToPass -like "master" ) { if ($LanguageToPass -like 'pythonv2') { $CommitToPass="v2" } else { $CommitToPass="main" } } $Architecture=GetArchitecture Write-Host "##vso[task.setvariable variable=architecture]${Architecture}" Write-Host "##vso[task.setvariable variable=buildImage]${BuildImage}" Write-Host "##vso[task.setvariable variable=IsPr]${IsPr}" Write-Host "##vso[task.setvariable variable=RepoToPass]${RepoToPass}" Write-Host "##vso[task.setvariable variable=CommitToPass]${CommitToPass}" Write-Host "##vso[task.setvariable variable=LanguageToPass]${LanguageToPass}" Write-Host "##vso[task.setvariable variable=VariantToPass]${VariantToPass}" Write-Host "Architecture=${Architecture}" Write-Host "BuildImage=${BuildImage}" Write-Host "IsPr=${IsPr}" Write-Host "RepoToPass=${RepoToPass}" Write-Host "CommitToPass=${CommitToPass}" Write-Host "LanguageToPass=${LanguageToPass}" Write-Host "VariantToPass=${VariantToPass}" displayName: Custom task execution logic env: Commit: ${{ parameters.commit }} ForcedImage: ${{ parameters.forced_image }} Repo: ${{ parameters.repo }} Variant: ${{ parameters.variant }} Language: ${{ parameters.language }} ignoreLASTEXITCODE: false errorActionPreference: Stop failOnStderr: true - task: UsePythonVersion@0 inputs: versionSpec: '3.7' architecture: $(architecture) - bash: source ${HORTON_FRAMEWORKROOT}/bin/activate_horton && pip list displayName: 'Create Horton environment' condition: and(succeeded(), eq(variables['buildImage'],'yes')) - bash: | cd ${BUILD_SOURCESDIRECTORY} && echo "saving patch from ${CommitToPass} to HEAD" && git diff -p origin/${CommitToPass} --binary > ${AGENT_BUILDDIRECTORY}/patchfile && mkdir -p $(Build.ArtifactStagingDirectory)/${{ parameters.job_tag }} && cp ${AGENT_BUILDDIRECTORY}/patchfile $(Build.ArtifactStagingDirectory)/${{ parameters.job_tag }} && mv ${AGENT_BUILDDIRECTORY}/patchfile ${HORTON_FRAMEWORKROOT}/docker_images/$(LanguageToPass) displayName: "create patch for pull request changes" condition: and( succeeded(), eq(variables['buildImage'],'yes'), not(eq(variables['Horton.FrameworkRoot'], variables['Build.SourcesDirectory'])), eq(variables['IsPr'],'yes') ) env: CommitToPass: $(CommitToPass) - task: PublishBuildArtifacts@1 displayName: "publish patch" inputs: pathtoPublish: '$(Build.ArtifactStagingDirectory)/' ArtifactName: 'patch' condition: and( succeeded(), eq(variables['buildImage'],'yes'), not(eq(variables['Horton.FrameworkRoot'], variables['Build.SourcesDirectory'])), eq(variables['IsPr'],'yes') ) - bash: | docker login -u ${{ parameters.repo_user }} -p ${{ parameters.repo_password }} ${{ parameters.repo_address }} displayName: 'docker login' condition: and(succeeded(), eq(variables['buildImage'],'yes')) - bash: | ${HORTON_FRAMEWORKROOT}/bin/horton build --language $(LanguageToPass) --repo $(RepoToPass) --commit $(CommitToPass) --variant $(VariantToPass) displayName: "build docker image ${{ parameters.language }} ${{ parameters.variant }}" env: IOTHUB_E2E_REPO_ADDRESS: $(IOTHUB-E2E-REPO-ADDRESS) IOTHUB_E2E_REPO_USER: $(IOTHUB-E2E-REPO-USER) IOTHUB_E2E_REPO_PASSWORD: $(IOTHUB-E2E-REPO-PASSWORD) condition: and(succeeded(), eq(variables['buildImage'],'yes'))