mirror of
https://github.com/certbot/certbot.git
synced 2026-06-06 23:32:06 -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>
42 lines
1.6 KiB
Bash
Executable file
42 lines
1.6 KiB
Bash
Executable file
#!/bin/bash
|
|
# Cross-compile cryptography and cffi native wheels for arm64 and armhf architectures,
|
|
# on the versions required by the current pinning of Certbot dependencies.
|
|
# Wheels are stored in snap/local/packages folder to speed up cross-compilation of Certbot snap.
|
|
set -ex
|
|
|
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
|
TARGET_ARCHS="arm64 armhf"
|
|
|
|
rm -rf "${DIR}/packages/"*
|
|
|
|
# shellcheck source=common.sh
|
|
source "${DIR}/common.sh"
|
|
|
|
RegisterQemuHandlers
|
|
|
|
tools/strip_hashes.py letsencrypt-auto-source/pieces/dependency-requirements.txt \
|
|
| grep -v python-augeas > "${DIR}/snap-constraints.txt"
|
|
for SNAP_ARCH in ${TARGET_ARCHS}; do
|
|
ResolveArch "${SNAP_ARCH}"
|
|
DownloadQemuStatic "${QEMU_ARCH}" "${DIR}"
|
|
|
|
docker run \
|
|
--rm \
|
|
-v "${DIR}/qemu-${QEMU_ARCH}-static:/usr/bin/qemu-${QEMU_ARCH}-static" \
|
|
-v "${DIR}:/workspace" \
|
|
-w "/workspace" \
|
|
"${DOCKER_ARCH}/ubuntu:20.04" \
|
|
sh -c "\
|
|
apt-get update \
|
|
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends python3 python3-venv python3-dev libffi-dev libssl-dev gcc \
|
|
&& mkdir -p /build \
|
|
&& python3 -m venv /build/venv \
|
|
&& /build/venv/bin/pip install wheel \
|
|
&& /build/venv/bin/pip wheel cryptography cffi -c snap-constraints.txt -w /build \
|
|
&& mkdir -p /workspace/packages/cffi /workspace/packages/cryptography \
|
|
&& mv /build/cryptography-* /workspace/packages/cryptography \
|
|
&& mv /build/cffi-* /workspace/packages/cffi \
|
|
&& chmod 777 /workspace/packages /workspace/packages/cffi /workspace/packages/cryptography \
|
|
&& chmod 666 /workspace/packages/cffi/* /workspace/packages/cryptography/*
|
|
"
|
|
done
|