[hawkmoth] Re: [PATCH 03/11] build: add simple Dockerfile for testing

  • From: "Bruno Santos" <dmarc-noreply@xxxxxxxxxxxxx> (Redacted sender "brunomanuelsantos" for DMARC)
  • To: Jani Nikula <jani@xxxxxxxxxx>
  • Date: Fri, 18 Dec 2020 15:20:21 +0000

On 21:00:00 2020-12-15, Jani Nikula wrote:

Make it easier to have a common environment for running the tests. Start
off with Debian bullseye, which neatly provides Clang 11 with Python 3
bindings.

This could be expanded to test other Clang versions and (with different
requirements.txt files) Sphinx versions, but start simple.

Looks pretty good to me. I wonder if this could integrate nicely in
GitHub's CI, but I have no experience there, and I think that can be
something to think about later.

---
 Dockerfile     | 21 +++++++++++++++++++++
 Makefile.local | 15 ++++++++++++++-
 2 files changed, 35 insertions(+), 1 deletion(-)
 create mode 100644 Dockerfile

diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 000000000000..fbd362deacc6
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,21 @@
+FROM debian:bullseye
+
+RUN apt-get update
+RUN apt-get install -y \
+     python3-clang \
+     python3-pip
+RUN apt-get clean
+
+ARG UID=1000
+ARG GID=1000
+
+WORKDIR /src
+
+ENV PYTHONDONTWRITEBYTECODE 1
+ENV PYTHONUNBUFFERED 1
+
+COPY requirements.txt .
+
+RUN pip3 install --no-cache-dir -r requirements.txt
+
+USER ${UID}:${GID}
diff --git a/Makefile.local b/Makefile.local
index 02cf2d7e8a7b..2cc8826283ee 100644
--- a/Makefile.local
+++ b/Makefile.local
@@ -27,6 +27,19 @@ test-upload:
 upload:
      python3 -m twine upload dist/*
 
-.PHONY: dist-tools dist test-upload upload
+DOCKER_SRC_MOUNT = --mount type=bind,src=$(PWD),dst=/src,readonly=true
+DOCKER_OUT_MOUNT = --mount type=bind,src=$(PWD)/doc/_build,dst=/out
+
+docker-build:
+     docker build --build-arg UID=$(shell id -u) --build-arg GID=$(shell id 
-g) --tag hawkmoth .
+
+docker-test: docker-build
+     docker run $(DOCKER_SRC_MOUNT) hawkmoth make test
+
+docker-html: docker-build
+     mkdir -p doc/_build
+     docker run $(DOCKER_SRC_MOUNT) $(DOCKER_OUT_MOUNT) hawkmoth make 
BUILDDIR=/out html
+
+.PHONY: dist-tools dist test-upload upload docker-build docker-test 
docker-html
 
 CLEAN := $(CLEAN) build dist hawkmoth.egg-info

Other related posts: