mirror of
https://github.com/certbot/certbot.git
synced 2026-06-07 15:52: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>
40 lines
1.6 KiB
Python
40 lines
1.6 KiB
Python
"""
|
|
General conftest for pytest execution of all integration tests lying
|
|
in the snap_installer_integration tests package.
|
|
As stated by pytest documentation, conftest module is used to set on
|
|
for a directory a specific configuration using built-in pytest hooks.
|
|
|
|
See https://docs.pytest.org/en/latest/reference.html#hook-reference
|
|
"""
|
|
import glob
|
|
import os
|
|
|
|
|
|
def pytest_addoption(parser):
|
|
"""
|
|
Standard pytest hook to add options to the pytest parser.
|
|
:param parser: current pytest parser that will be used on the CLI
|
|
"""
|
|
parser.addoption('--snap-folder', required=True,
|
|
help='set the folder path where snaps to test are located')
|
|
parser.addoption('--allow-persistent-changes', action='store_true',
|
|
help='needs to be set, and confirm that the test will make persistent changes on this machine')
|
|
|
|
|
|
def pytest_configure(config):
|
|
"""
|
|
Standard pytest hook used to add a configuration logic for each node of a pytest run.
|
|
:param config: the current pytest configuration
|
|
"""
|
|
if not config.option.allow_persistent_changes:
|
|
raise RuntimeError('This integration test would install the Certbot snap on your machine. '
|
|
'Please run it again with the `--allow-persistent-changes` flag set to acknowledge.')
|
|
|
|
|
|
def pytest_generate_tests(metafunc):
|
|
"""
|
|
Generate (multiple) parametrized calls to a test function.
|
|
"""
|
|
if "dns_snap_path" in metafunc.fixturenames:
|
|
snap_dns_path_list = glob.glob(os.path.join(metafunc.config.getoption('snap_folder'), 'certbot-dns-*_*.snap'))
|
|
metafunc.parametrize("dns_snap_path", snap_dns_path_list)
|