Fixes #9872, originally merged in #9956. To upgrade to python3.12 as 3.8 is reaching EOL, we need to upgrade the core snap that certbot is based on. The latest version is core24, so we're going with that for longevity. We will want to notify third party snaps to make changes as well. They can release their snaps to a version higher than certbot's, and their users will not be upgraded until the matching (or greater) version of certbot is released. They should do this as otherwise including these changes will break their plugins. Key documents for this migration are https://snapcraft.io/docs/migrate-core22 and https://snapcraft.io/docs/migrate-core24. The discussion at https://forum.snapcraft.io/t/upgrading-classic-snap-to-core24-using-snapcraft-8-3-causes-python-3-12-errors-at-runtime/ is also relevant to understanding some changes, which may become unnecessary in future versions of snapcraft. * Migrate primary certbot snap to core24 and python 3.12 * Migrate plugin snaps to core24 and python 3.12 * Migrate to core24 in build_remote * Run snap tests using python 3.12 * Unstage pyvenv.cfg and set PYTHONPATH --------- Co-authored-by: Erica Portnoy <ebportnoy@gmail.com> Co-authored-by: Erica Portnoy <erica@eff.org>
160 lines
5.4 KiB
YAML
160 lines
5.4 KiB
YAML
jobs:
|
|
- job: docker_build
|
|
pool:
|
|
vmImage: ubuntu-22.04
|
|
strategy:
|
|
matrix:
|
|
arm32v6:
|
|
DOCKER_ARCH: arm32v6
|
|
arm64v8:
|
|
DOCKER_ARCH: arm64v8
|
|
amd64:
|
|
DOCKER_ARCH: amd64
|
|
# The default timeout of 60 minutes is a little low for compiling
|
|
# cryptography on ARM architectures.
|
|
timeoutInMinutes: 180
|
|
steps:
|
|
- bash: set -e && 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: |
|
|
set -e
|
|
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: set -e && 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: docker_test
|
|
dependsOn: docker_build
|
|
pool:
|
|
vmImage: ubuntu-22.04
|
|
strategy:
|
|
matrix:
|
|
arm32v6:
|
|
DOCKER_ARCH: arm32v6
|
|
arm64v8:
|
|
DOCKER_ARCH: arm64v8
|
|
amd64:
|
|
DOCKER_ARCH: amd64
|
|
steps:
|
|
- task: DownloadPipelineArtifact@2
|
|
inputs:
|
|
artifact: docker_$(DOCKER_ARCH)
|
|
path: $(Build.SourcesDirectory)
|
|
displayName: Retrieve Docker images
|
|
- bash: set -e && docker load --input $(Build.SourcesDirectory)/images.tar
|
|
displayName: Load Docker images
|
|
- bash: |
|
|
set -e && tools/docker/test.sh $(dockerTag) $DOCKER_ARCH
|
|
displayName: Run integration tests for Docker images
|
|
- job: snaps_build
|
|
pool:
|
|
vmImage: ubuntu-22.04
|
|
strategy:
|
|
matrix:
|
|
amd64:
|
|
SNAP_ARCH: amd64
|
|
armhf:
|
|
SNAP_ARCH: armhf
|
|
arm64:
|
|
SNAP_ARCH: arm64
|
|
timeoutInMinutes: 0
|
|
steps:
|
|
- script: |
|
|
set -e
|
|
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.12
|
|
addToPath: true
|
|
- task: DownloadSecureFile@1
|
|
name: credentials
|
|
inputs:
|
|
secureFile: launchpad-credentials
|
|
- script: |
|
|
set -e
|
|
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 ${SNAP_ARCH} --timeout $(snapBuildTimeout)
|
|
displayName: Build snaps
|
|
- script: |
|
|
set -e
|
|
mv *.snap $(Build.ArtifactStagingDirectory)
|
|
mv certbot-dns-*/*.snap $(Build.ArtifactStagingDirectory)
|
|
displayName: Prepare artifacts
|
|
- task: PublishPipelineArtifact@1
|
|
inputs:
|
|
path: $(Build.ArtifactStagingDirectory)
|
|
artifact: snaps_$(SNAP_ARCH)
|
|
displayName: Store snaps artifacts
|
|
- job: snap_run
|
|
dependsOn: snaps_build
|
|
pool:
|
|
vmImage: ubuntu-22.04
|
|
steps:
|
|
- task: UsePythonVersion@0
|
|
inputs:
|
|
versionSpec: 3.12
|
|
addToPath: true
|
|
- script: |
|
|
set -e
|
|
sudo apt-get update
|
|
sudo apt-get install -y --no-install-recommends nginx-light snapd
|
|
python3 -m venv venv
|
|
venv/bin/python tools/pip_install.py -U tox
|
|
displayName: Install dependencies
|
|
- task: DownloadPipelineArtifact@2
|
|
inputs:
|
|
artifact: snaps_amd64
|
|
path: $(Build.SourcesDirectory)/snap
|
|
displayName: Retrieve Certbot snaps
|
|
- script: |
|
|
set -e
|
|
sudo snap install --dangerous --classic snap/certbot_*.snap
|
|
displayName: Install Certbot snap
|
|
- script: |
|
|
set -e
|
|
venv/bin/python -m tox run -e integration-external,apacheconftest-external-with-pebble
|
|
displayName: Run tox
|
|
- job: snap_dns_run
|
|
dependsOn: snaps_build
|
|
pool:
|
|
vmImage: ubuntu-22.04
|
|
steps:
|
|
- script: |
|
|
set -e
|
|
sudo apt-get update
|
|
sudo apt-get install -y --no-install-recommends snapd
|
|
displayName: Install dependencies
|
|
- task: UsePythonVersion@0
|
|
inputs:
|
|
versionSpec: 3.12
|
|
addToPath: true
|
|
- task: DownloadPipelineArtifact@2
|
|
inputs:
|
|
artifact: snaps_amd64
|
|
path: $(Build.SourcesDirectory)/snap
|
|
displayName: Retrieve Certbot snaps
|
|
- script: |
|
|
set -e
|
|
python3 -m venv venv
|
|
venv/bin/python tools/pip_install.py -e certbot-ci
|
|
displayName: Prepare Certbot-CI
|
|
- script: |
|
|
set -e
|
|
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
|