feat: refactor Dockerfiles to use 'target' stage and add Certificate module configuration

Signed-off-by: d9pouces <github@19pouces.net>
This commit is contained in:
d9pouces
2026-09-05 22:31:12 +02:00
parent a5a36fc7cd
commit f38a3d1ace
8 changed files with 74 additions and 16 deletions
+20
View File
@@ -0,0 +1,20 @@
uuid: 200f3290-3a3f-47ac-8149-dbe26c82ee34
organisation: InterDiode
description: Certificate test configuration
configurations:
certificates:
- name: Test CA
content: |
{{ 'certs/test-ca.crt.pem' | file | indent(6, first=true) }}
apt:
sources: []
keys: []
apk:
repositories: []
yum:
repositories: []
keys: []
python:
repositories: []
java:
repositories: []
+3 -3
View File
@@ -1,9 +1,9 @@
FROM alpine:3.20 AS detection FROM alpine:3.20 AS target
FROM interdiode/id-configurator:latest AS configuration FROM interdiode/id-configurator:latest AS configuration
COPY --from=detection / /src/ COPY --from=target / /src/
COPY --from=generated-config Apk.yaml /config.yaml COPY --from=generated-config Apk.yaml /config.yaml
RUN id-configurator apply --config /config.yaml --src /src --dst /dst RUN id-configurator apply --config /config.yaml --src /src --dst /dst
FROM alpine:3.20 AS runtime FROM target AS runtime
COPY --from=configuration /dst/ / COPY --from=configuration /dst/ /
RUN apk update \ RUN apk update \
&& apk add idconfiguratortestpkg \ && apk add idconfiguratortestpkg \
+3 -3
View File
@@ -1,9 +1,9 @@
FROM debian:trixie-slim AS detection FROM debian:trixie-slim AS target
FROM interdiode/id-configurator:latest AS configuration FROM interdiode/id-configurator:latest AS configuration
COPY --from=detection / /src/ COPY --from=target / /src/
COPY --from=generated-config Apt.yaml /config.yaml COPY --from=generated-config Apt.yaml /config.yaml
RUN id-configurator apply --config /config.yaml --src /src --dst /dst RUN id-configurator apply --config /config.yaml --src /src --dst /dst
FROM debian:trixie-slim AS runtime FROM target AS runtime
COPY --from=configuration /dst/ / COPY --from=configuration /dst/ /
RUN apt-get update \ RUN apt-get update \
&& apt-get install -y --no-install-recommends idconfiguratortestpkg \ && apt-get install -y --no-install-recommends idconfiguratortestpkg \
+11
View File
@@ -0,0 +1,11 @@
FROM debian:trixie-slim AS target
FROM interdiode/id-configurator:latest AS configuration
COPY --from=target / /src/
COPY --from=generated-config Certificate.yaml /config.yaml
RUN id-configurator apply --config /config.yaml --src /src --dst /dst
FROM target AS runtime
ARG CERTIFICATE_REPO_PORT
RUN apt-get update && apt-get install -y --no-install-recommends wget curl
COPY --from=configuration /dst/ /
RUN wget -qO- "https://host.docker.internal:${CERTIFICATE_REPO_PORT}/marker.txt" | grep -qx trusted-via-root-ca
RUN curl -fsS "https://host.docker.internal:${CERTIFICATE_REPO_PORT}/marker.txt" | grep -qx trusted-via-root-ca
+3 -3
View File
@@ -1,9 +1,9 @@
FROM maven:3.9-eclipse-temurin-21 AS detection FROM maven:3.9-eclipse-temurin-21 AS target
FROM interdiode/id-configurator:latest AS configuration FROM interdiode/id-configurator:latest AS configuration
COPY --from=detection / /src/ COPY --from=target / /src/
COPY --from=generated-config Java.yaml /config.yaml COPY --from=generated-config Java.yaml /config.yaml
RUN id-configurator apply --config /config.yaml --src /src --dst /dst RUN id-configurator apply --config /config.yaml --src /src --dst /dst
FROM maven:3.9-eclipse-temurin-21 AS runtime FROM target AS runtime
# Warm up the local repository with the maven-dependency-plugin itself (from # Warm up the local repository with the maven-dependency-plugin itself (from
# the real, network-reachable Maven Central) while the default mirror is # the real, network-reachable Maven Central) while the default mirror is
# still in place, so the actual test below never needs anything but the # still in place, so the actual test below never needs anything but the
+3 -3
View File
@@ -1,9 +1,9 @@
FROM python:3.13-slim AS detection FROM python:3.13-slim AS target
FROM interdiode/id-configurator:latest AS configuration FROM interdiode/id-configurator:latest AS configuration
COPY --from=detection / /src/ COPY --from=target / /src/
COPY --from=generated-config Python.yaml /config.yaml COPY --from=generated-config Python.yaml /config.yaml
RUN id-configurator apply --config /config.yaml --src /src --dst /dst RUN id-configurator apply --config /config.yaml --src /src --dst /dst
FROM python:3.13-slim AS runtime FROM target AS runtime
COPY --from=configuration /dst/ / COPY --from=configuration /dst/ /
RUN pip install --no-cache-dir idconfiguratortestpkg \ RUN pip install --no-cache-dir idconfiguratortestpkg \
&& python3 -c "import idconfiguratortestpkg" && python3 -c "import idconfiguratortestpkg"
+3 -3
View File
@@ -1,9 +1,9 @@
FROM rockylinux:9 AS detection FROM rockylinux:9 AS target
FROM interdiode/id-configurator:latest AS configuration FROM interdiode/id-configurator:latest AS configuration
COPY --from=detection / /src/ COPY --from=target / /src/
COPY --from=generated-config Yum.yaml /config.yaml COPY --from=generated-config Yum.yaml /config.yaml
RUN id-configurator apply --config /config.yaml --src /src --dst /dst RUN id-configurator apply --config /config.yaml --src /src --dst /dst
FROM rockylinux:9 AS runtime FROM target AS runtime
COPY --from=configuration /dst/ / COPY --from=configuration /dst/ /
RUN dnf install -y idconfiguratortestpkg \ RUN dnf install -y idconfiguratortestpkg \
&& rpm -q idconfiguratortestpkg && rpm -q idconfiguratortestpkg
+28 -1
View File
@@ -1,5 +1,5 @@
[tox] [tox]
env_list = py313,py314,coverage,packaging,publish,module-python,module-apt,module-yum,module-apk,module-java env_list = py313,py314,coverage,packaging,publish,module-python,module-apt,module-yum,module-apk,module-java,module-certificates
isolated_build = true isolated_build = true
requires = requires =
tox>=4 tox>=4
@@ -176,3 +176,30 @@ allowlist_externals =
commands = commands =
python3 -m id_tools test render-config {tox_root}/tests/configs/Java.yaml.j2 {env_dir}/configs/Java.yaml 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 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: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 .