jobs: - job: docker_build pool: vmImage: ubuntu-18.04 strategy: matrix: amd64: DOCKER_ARCH: amd64 # Do not run the heavy non-amd64 builds for test branches ${{ if not(startsWith(variables['Build.SourceBranchName'], 'test-')) }}: arm32v6: DOCKER_ARCH: arm32v6 arm64v8: DOCKER_ARCH: arm64v8 steps: - bash: tools/docker/build.sh $(dockerTag) $DOCKER_ARCH displayName: Build the Docker images # We don't filter for the Docker Hub organization to continue to allow # easy testing of these scripts on forks. - bash: | DOCKER_IMAGES=$(docker images --filter reference='*/certbot' --filter reference='*/dns-*' --format '{{.Repository}}') docker save --output images.tar $DOCKER_IMAGES displayName: Save the Docker images # If the name of the tar file or artifact changes, the deploy stage will # also need to be updated. - bash: mv images.tar $(Build.ArtifactStagingDirectory) displayName: Prepare Docker artifact - task: PublishPipelineArtifact@1 inputs: path: $(Build.ArtifactStagingDirectory) artifact: docker_$(DOCKER_ARCH) displayName: Store Docker artifact - job: installer_build pool: vmImage: vs2017-win2016 steps: - task: UsePythonVersion@0 inputs: versionSpec: 3.7 architecture: x86 addToPath: true - script: python windows-installer/construct.py displayName: Build Certbot installer - task: CopyFiles@2 inputs: sourceFolder: $(System.DefaultWorkingDirectory)/windows-installer/build/nsis contents: '*.exe' targetFolder: $(Build.ArtifactStagingDirectory) - task: PublishPipelineArtifact@1 inputs: path: $(Build.ArtifactStagingDirectory) # If we change the artifact's name, it should also be changed in tools/create_github_release.py artifact: windows-installer displayName: Publish Windows installer - job: installer_run dependsOn: installer_build strategy: matrix: win2019: imageName: windows-2019 win2016: imageName: vs2017-win2016 pool: vmImage: $(imageName) steps: - powershell: | if ($PSVersionTable.PSVersion.Major -ne 5) { throw "Powershell version is not 5.x" } condition: eq(variables['imageName'], 'vs2017-win2016') displayName: Check Powershell 5.x is used in vs2017-win2016 - task: UsePythonVersion@0 inputs: versionSpec: 3.7 addToPath: true - task: DownloadPipelineArtifact@2 inputs: artifact: windows-installer path: $(Build.SourcesDirectory)/bin displayName: Retrieve Windows installer - script: | py -3 -m venv venv venv\Scripts\python letsencrypt-auto-source\pieces\pipstrap.py venv\Scripts\python tools\pip_install.py -e certbot-ci displayName: Prepare Certbot-CI - script: | set PATH=%ProgramFiles(x86)%\Certbot\bin;%PATH% venv\Scripts\python -m pytest certbot-ci\windows_installer_integration_tests --allow-persistent-changes --installer-path $(Build.SourcesDirectory)\bin\certbot-beta-installer-win32.exe displayName: Run windows installer integration tests - script: | set PATH=%ProgramFiles(x86)%\Certbot\bin;%PATH% venv\Scripts\python -m pytest certbot-ci\certbot_integration_tests\certbot_tests -n 4 displayName: Run certbot integration tests - job: snaps_build pool: vmImage: ubuntu-18.04 timeoutInMinutes: 0 variables: # Do not run the heavy non-amd64 builds for test branches ${{ if not(startsWith(variables['Build.SourceBranchName'], 'test-')) }}: ARCHS: amd64 arm64 armhf ${{ if startsWith(variables['Build.SourceBranchName'], 'test-') }}: ARCHS: amd64 steps: - script: | sudo apt-get update sudo apt-get install -y --no-install-recommends snapd sudo snap install --classic snapcraft displayName: Install dependencies - task: UsePythonVersion@0 inputs: versionSpec: 3.8 addToPath: true - task: DownloadSecureFile@1 name: credentials inputs: secureFile: launchpad-credentials - script: | git config --global user.email "$(Build.RequestedForEmail)" git config --global user.name "$(Build.RequestedFor)" mkdir -p ~/.local/share/snapcraft/provider/launchpad cp $(credentials.secureFilePath) ~/.local/share/snapcraft/provider/launchpad/credentials python3 tools/snap/build_remote.py ALL --archs ${ARCHS} displayName: Build snaps - script: | mv *.snap $(Build.ArtifactStagingDirectory) mv certbot-dns-*/*.snap $(Build.ArtifactStagingDirectory) displayName: Prepare artifacts - task: PublishPipelineArtifact@1 inputs: path: $(Build.ArtifactStagingDirectory) artifact: snaps displayName: Store snaps artifacts - job: snap_run dependsOn: snaps_build pool: vmImage: ubuntu-18.04 steps: - task: UsePythonVersion@0 inputs: versionSpec: 3.8 addToPath: true - script: | sudo apt-get update sudo apt-get install -y --no-install-recommends nginx-light snapd python3 -m venv venv venv/bin/python letsencrypt-auto-source/pieces/pipstrap.py venv/bin/python tools/pip_install.py -U tox displayName: Install dependencies - task: DownloadPipelineArtifact@2 inputs: artifact: snaps path: $(Build.SourcesDirectory)/snap displayName: Retrieve Certbot snaps - script: | sudo snap install --dangerous --classic snap/certbot_*_amd64.snap displayName: Install Certbot snap - script: | venv/bin/python -m tox -e integration-external,apacheconftest-external-with-pebble displayName: Run tox - job: snap_dns_run dependsOn: snaps_build pool: vmImage: ubuntu-18.04 steps: - script: | sudo apt-get update sudo apt-get install -y --no-install-recommends snapd displayName: Install dependencies - task: UsePythonVersion@0 inputs: versionSpec: 3.8 addToPath: true - task: DownloadPipelineArtifact@2 inputs: artifact: snaps path: $(Build.SourcesDirectory)/snap displayName: Retrieve Certbot snaps - script: | python3 -m venv venv venv/bin/python letsencrypt-auto-source/pieces/pipstrap.py venv/bin/python tools/pip_install.py -e certbot-ci displayName: Prepare Certbot-CI - script: | sudo -E venv/bin/pytest certbot-ci/snap_integration_tests/dns_tests --allow-persistent-changes --snap-folder $(Build.SourcesDirectory)/snap --snap-arch amd64 displayName: Test DNS plugins snaps