[tox] env_list = py313,py314,coverage,packaging,publish,module-python,module-apt,module-yum,module-apk,module-java,module-certificates,module-php,module-npm,module-rust isolated_build = true requires = tox>=4 tox-uv>=1 [testenv] package = wheel dependency_groups = test change_dir = {env_tmp_dir} set_env = COVERAGE_FILE = {env_dir}/coverage.db commands = python3 -m pytest {tox_root}/tests --cov-config={tox_root}/pyproject.toml --cov-fail-under=90 {posargs} [testenv:coverage] package = skip depends = py313,py314 change_dir = {tox_root} dependency_groups = test set_env = COVERAGE_FILE = {env_dir}/coverage.db commands = python3 -m coverage combine {toxworkdir}/py313/coverage.db {toxworkdir}/py314/coverage.db python3 -m coverage xml -o .tox/coverage.xml --ignore --fail-under=0 python3 -m coverage report -m --fail-under=94 --ignore --skip-covered [testenv:packaging] package = skip change_dir = {tox_root} allowlist_externals = docker dependency_groups = dev description = Generate the docker images for the different platform depends = update commands = python3 -m id_tools build docker --platform linux/amd64,linux/arm64/v8 [testenv:publish] package = skip change_dir = {tox_root} dependency_groups = dev description = Build and publish the image to Docker Hub. The version is taken from the pyproject.toml file. Make sure that you have the rights to upload the image to Docker Hub. commands = python3 -m uv sync --all-groups --active python3 -m id_tools build docker --platform linux/amd64,linux/arm64/v8 --push python3 -m id_tools publication sign-docker docker = passenv = COSIGN_PASSWORD COSIGN_PRIVATE_KEY DOCKER_HUB_LOGIN DOCKER_HUB_TOKEN [docker:pypi-repo] dockerfile = {tox_root}/tests/dockerfiles/repos/pypi-repo.Dockerfile expose = PYPI_REPO_PORT=8443/tcp healthcheck_cmd = wget --no-check-certificate -qO- https://127.0.0.1:8443/simple/idconfiguratortestpkg/ || exit 1 healthcheck_interval = 1 healthcheck_retries = 30 healthcheck_timeout = 2 healthcheck_start_period = 1 [testenv:module-python] package = skip change_dir = {tox_root} dependency_groups = dev docker = pypi-repo allowlist_externals = docker commands = python3 -m id_tools test render-config {tox_root}/tests/configs/Python.yaml.j2 {env_dir}/configs/Python.yaml docker buildx build --platform linux/amd64 --add-host=host.docker.internal:host-gateway --build-arg PYPI_REPO_PORT={env:PYPI_REPO_PORT} --build-context generated-config={env_dir}/configs -f {tox_root}/tests/dockerfiles/Python-alpine.Dockerfile -t id-configurator-python . docker rmi id-configurator-python docker buildx build --platform linux/amd64 --add-host=host.docker.internal:host-gateway --build-arg PYPI_REPO_PORT={env:PYPI_REPO_PORT} --build-context generated-config={env_dir}/configs -f {tox_root}/tests/dockerfiles/Python.Dockerfile -t id-configurator-python . docker rmi id-configurator-python [docker:apt-repo] dockerfile = {tox_root}/tests/dockerfiles/repos/apt-repo.Dockerfile expose = APT_REPO_PORT=8443/tcp healthcheck_cmd = wget --no-check-certificate -qO- https://127.0.0.1:8443/Packages || exit 1 healthcheck_interval = 1 healthcheck_retries = 30 healthcheck_timeout = 2 healthcheck_start_period = 1 [testenv:module-apt] package = skip change_dir = {tox_root} dependency_groups = dev docker = apt-repo allowlist_externals = docker commands = python3 -m id_tools test render-config {tox_root}/tests/configs/Apt.yaml.j2 {env_dir}/configs/Apt.yaml docker buildx build --platform linux/amd64 --add-host=host.docker.internal:host-gateway --build-context generated-config={env_dir}/configs -f {tox_root}/tests/dockerfiles/Apt.Dockerfile -t id-configurator-apt . docker rmi id-configurator-apt [docker:yum-repo] dockerfile = {tox_root}/tests/dockerfiles/repos/yum-repo.Dockerfile expose = YUM_REPO_PORT=8443/tcp healthcheck_cmd = wget --no-check-certificate -qO- https://127.0.0.1:8443/repodata/repomd.xml || exit 1 healthcheck_interval = 1 healthcheck_retries = 30 healthcheck_timeout = 2 healthcheck_start_period = 1 [testenv:module-yum] package = skip change_dir = {tox_root} dependency_groups = dev docker = yum-repo allowlist_externals = docker commands = python3 -m id_tools test render-config {tox_root}/tests/configs/Yum.yaml.j2 {env_dir}/configs/Yum.yaml docker buildx build --platform linux/amd64 --add-host=host.docker.internal:host-gateway --build-context generated-config={env_dir}/configs -f {tox_root}/tests/dockerfiles/Yum.Dockerfile -t id-configurator-yum . docker rmi id-configurator-yum [docker:apk-repo] dockerfile = {tox_root}/tests/dockerfiles/repos/apk-repo.Dockerfile expose = APK_REPO_PORT=8443/tcp healthcheck_cmd = wget --no-check-certificate -qO- https://127.0.0.1:8443/APKINDEX.tar.gz || exit 1 healthcheck_interval = 1 healthcheck_retries = 30 healthcheck_timeout = 2 healthcheck_start_period = 1 [testenv:module-apk] package = skip change_dir = {tox_root} dependency_groups = dev docker = apk-repo allowlist_externals = docker description = Unlike the other module-* envs, this one is not pinned to --platform linux/amd64: apk embeds the client's own architecture in the repository URL it fetches, and the apk-repo fixture (built by tox-docker, which cannot be pinned to a platform) always publishes its index under the Docker host's native architecture. Leaving both builds on the host's native platform keeps them in agreement everywhere (including under QEMU emulation on non-amd64 hosts); CI runners are amd64, so this still matches the other envs there. commands = python3 -m id_tools test render-config {tox_root}/tests/configs/Apk.yaml.j2 {env_dir}/configs/Apk.yaml docker buildx build --add-host=host.docker.internal:host-gateway --build-context generated-config={env_dir}/configs -f {tox_root}/tests/dockerfiles/Apk.Dockerfile -t id-configurator-apk . docker rmi id-configurator-apk [docker:java-repo] dockerfile = {tox_root}/tests/dockerfiles/repos/java-repo.Dockerfile expose = JAVA_REPO_PORT=8443/tcp healthcheck_cmd = wget --no-check-certificate -qO- https://127.0.0.1:8443/org/interdiode/idconfiguratortestpkg/0.0.1/idconfiguratortestpkg-0.0.1.pom || exit 1 healthcheck_interval = 1 healthcheck_retries = 30 healthcheck_timeout = 2 healthcheck_start_period = 1 [testenv:module-java] package = skip change_dir = {tox_root} dependency_groups = dev docker = java-repo allowlist_externals = docker commands = python3 -m id_tools test render-config {tox_root}/tests/configs/Java.yaml.j2 {env_dir}/configs/Java.yaml docker buildx build --platform linux/amd64 --add-host=host.docker.internal:host-gateway --build-context generated-config={env_dir}/configs -f {tox_root}/tests/dockerfiles/Java.Dockerfile -t id-configurator-java . docker rmi id-configurator-java [docker:certificate-repo] dockerfile = {tox_root}/tests/dockerfiles/repos/certificate-repo.Dockerfile expose = CERTIFICATE_REPO_PORT=8443/tcp healthcheck_cmd = wget --no-check-certificate -qO- https://127.0.0.1:8443/marker.txt || exit 1 healthcheck_interval = 1 healthcheck_retries = 30 healthcheck_timeout = 2 healthcheck_start_period = 1 [testenv:module-certificates] package = skip change_dir = {tox_root} dependency_groups = dev docker = certificate-repo allowlist_externals = docker description = Verifies that both wget and curl - two independently TLS-linked HTTP clients (GnuTLS and OpenSSL, respectively, on Debian) - trust an HTTPS server whose certificate chains to a root certificate installed by the `certificates` module alone, with no package-manager-specific config. commands = python3 -m id_tools test render-config {tox_root}/tests/configs/Certificate.yaml.j2 {env_dir}/configs/Certificate.yaml docker buildx build --platform linux/amd64 --add-host=host.docker.internal:host-gateway --build-arg CERTIFICATE_REPO_PORT={env:CERTIFICATE_REPO_PORT} --build-context generated-config={env_dir}/configs -f {tox_root}/tests/dockerfiles/Certificate.Dockerfile -t id-configurator-certificates . docker rmi id-configurator-certificates [docker:php-repo] dockerfile = {tox_root}/tests/dockerfiles/repos/php-repo.Dockerfile expose = PHP_REPO_PORT=8443/tcp healthcheck_cmd = wget --no-check-certificate -qO- https://127.0.0.1:8443/packages.json || exit 1 healthcheck_interval = 1 healthcheck_retries = 30 healthcheck_timeout = 2 healthcheck_start_period = 1 [testenv:module-php] package = skip change_dir = {tox_root} dependency_groups = dev docker = php-repo allowlist_externals = docker commands = python3 -m id_tools test render-config {tox_root}/tests/configs/Php.yaml.j2 {env_dir}/configs/Php.yaml docker buildx build --platform linux/amd64 --add-host=host.docker.internal:host-gateway --build-context generated-config={env_dir}/configs -f {tox_root}/tests/dockerfiles/Php.Dockerfile -t id-configurator-php . docker rmi id-configurator-php [docker:npm-repo] dockerfile = {tox_root}/tests/dockerfiles/repos/npm-repo.Dockerfile expose = NPM_REPO_PORT=8443/tcp healthcheck_cmd = wget --no-check-certificate -qO- https://127.0.0.1:8443/idconfiguratortestpkg || exit 1 healthcheck_interval = 1 healthcheck_retries = 30 healthcheck_timeout = 2 healthcheck_start_period = 1 [testenv:module-npm] package = skip change_dir = {tox_root} dependency_groups = dev docker = npm-repo allowlist_externals = docker commands = python3 -m id_tools test render-config {tox_root}/tests/configs/Npm.yaml.j2 {env_dir}/configs/Npm.yaml docker buildx build --platform linux/amd64 --add-host=host.docker.internal:host-gateway --build-context generated-config={env_dir}/configs -f {tox_root}/tests/dockerfiles/Npm.Dockerfile -t id-configurator-npm . docker rmi id-configurator-npm [docker:cargo-repo] dockerfile = {tox_root}/tests/dockerfiles/repos/cargo-repo.Dockerfile expose = CARGO_REPO_PORT=8443/tcp healthcheck_cmd = wget --no-check-certificate -qO- https://127.0.0.1:8443/config.json || exit 1 healthcheck_interval = 1 healthcheck_retries = 30 healthcheck_timeout = 2 healthcheck_start_period = 1 [testenv:module-rust] package = skip change_dir = {tox_root} dependency_groups = dev docker = cargo-repo allowlist_externals = docker commands = python3 -m id_tools test render-config {tox_root}/tests/configs/Rust.yaml.j2 {env_dir}/configs/Rust.yaml docker buildx build --platform linux/amd64 --add-host=host.docker.internal:host-gateway --build-context generated-config={env_dir}/configs -f {tox_root}/tests/dockerfiles/Rust.Dockerfile -t id-configurator-rust . docker rmi id-configurator-rust