mirror of
https://github.com/certbot/certbot.git
synced 2026-06-07 07:42:08 -04:00
Fixes #8041 This PR makes Azure Pipeline build the DNS plugins snaps for the 3 architectures during the CI. It leverages the existing logic for building the Certbot snap in order to deploy a QEMU environment with Docker, and leverages the local PyPI index to speed up the build when installing `cffi` and `cryptography`. All DNS plugins snaps are constructed in one unique docker container, in order to save the time required to install the system dependencies upon first start of `snapcraft`, and so speed up significantly the build. Finally, all `amd64` DNS plugins snaps are built within 6 minutes. For `arm64` and `armhf`, it is around 40 mins: this is quite fast in fact, considering that 14 DNS plugins snaps are built. However, this is still an extremely heavy task to make the full 3 architectures builds, even for Azure Pipelines and its 10 parallel jobs capability. That is why I make the `arm64` and `armhf` builds be skipped for the `full-test-suite`, and let them run only for `nightly` and `release`. This means however that these builds will not be done for the release branches. If this is a problem, I can put a more elaborate suspend condition to triggers the builds in this case. All snaps are stored in the pipeline artifacts storage, making them available for publication during a `release` pipeline. The PR is set as Draft for now, because I use temporarily `pr_test-suite` to validate the packaging jobs when commits are pushed. Once the PR is ready, I will revert it back to the normal configuration (run the standard tests). * Configure a script to build DNS snaps * Focus on packaging * Trigger all architectures * Add extra index * Prepare conditional suspend * Set final suspend logic * Set final suspend value * Loop for publication * Use python3 * Clean before build * Add a test * Add test job in Azure * Preserve env * Apply normal config for pipelines * Skip QEMU jobs only for test branches * Makes snap run tests depends also on the Certbot snap build * Update .azure-pipelines/templates/jobs/packaging-jobs.yml Co-authored-by: Brad Warren <bmw@users.noreply.github.com> * Update .azure-pipelines/templates/stages/deploy-stage.yml Co-authored-by: Brad Warren <bmw@users.noreply.github.com> * More accurate way to get the plugin snap name * Integrate DNS snap tests into certbot-ci * Fixes * Update certbot-ci/snap_integration_tests/conftest.py Co-authored-by: Brad Warren <bmw@users.noreply.github.com> * Update certbot-ci/snap_integration_tests/conftest.py Co-authored-by: Brad Warren <bmw@users.noreply.github.com> * Clean an _init_.py file Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
53 lines
1.6 KiB
Bash
53 lines
1.6 KiB
Bash
#!/bin/bash
|
|
# Common bash functions useful for cross-compiling Certbot snaps.
|
|
|
|
# Resolve the Snap architecture to Docker architecture (DOCKER_ARCH variable)
|
|
# and QEMU architecture (QEMU_ARCH variable).
|
|
# Usage: ResolveArch [amd64|arm64|armhf]
|
|
ResolveArch() {
|
|
local SNAP_ARCH=$1
|
|
|
|
case "${SNAP_ARCH}" in
|
|
"amd64")
|
|
DOCKER_ARCH="amd64"
|
|
QEMU_ARCH="x86_64"
|
|
;;
|
|
"arm64")
|
|
DOCKER_ARCH="arm64v8"
|
|
QEMU_ARCH="aarch64"
|
|
;;
|
|
"armhf")
|
|
DOCKER_ARCH="arm32v7"
|
|
QEMU_ARCH="arm"
|
|
;;
|
|
"*")
|
|
echo "Not supported build architecture '$1'." >&2
|
|
exit 1
|
|
esac
|
|
}
|
|
|
|
# Downloads QEMU static binary file for architecture
|
|
# Usage: DownloadQemuStatic [x86_64|aarch64|arm] DEST_DIR
|
|
DownloadQemuStatic() {
|
|
local QEMU_ARCH=$1
|
|
local DEST_DIR=$2
|
|
local QEMU_DOWNLOAD_URL
|
|
local QEMU_LATEST_TAG
|
|
|
|
if [ ! -f "${DIR}/qemu-${QEMU_ARCH}-static" ]; then
|
|
QEMU_DOWNLOAD_URL="https://github.com/multiarch/qemu-user-static/releases/download"
|
|
QEMU_LATEST_TAG=$(curl -s https://api.github.com/repos/multiarch/qemu-user-static/tags \
|
|
| grep 'name.*v[0-9]' \
|
|
| head -n 1 \
|
|
| cut -d '"' -f 4)
|
|
echo "${QEMU_DOWNLOAD_URL}/${QEMU_LATEST_TAG}/x86_64_qemu-${QEMU_ARCH}-static.tar.gz"
|
|
curl -SL "${QEMU_DOWNLOAD_URL}/${QEMU_LATEST_TAG}/x86_64_qemu-${QEMU_ARCH}-static.tar.gz" \
|
|
| tar xzv -C "${DEST_DIR}"
|
|
fi
|
|
}
|
|
|
|
# Executes the QEMU register script
|
|
# Usage: RegisterQemuHandlers
|
|
RegisterQemuHandlers() {
|
|
docker run --rm --privileged multiarch/qemu-user-static:register --reset
|
|
}
|