From e871d2c6805e8e7e1bdb6f83d29fc0307d4395d7 Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Wed, 14 Oct 2026 18:20:35 +0500 Subject: allow running Docker tests locally --- .github/workflows/ci.yml | 18 +++++------------- Makefile | 19 +++++++++++++++++++ prelude.mk | 29 +++++++++++++++++++++++++++++ test/docker/Dockerfile | 12 ++++++++++++ test/docker/docker-compose.yml | 7 +++++++ 5 files changed, 72 insertions(+), 13 deletions(-) create mode 100644 Makefile create mode 100644 prelude.mk create mode 100644 test/docker/Dockerfile create mode 100644 test/docker/docker-compose.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d935638..fab1488 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -58,32 +58,24 @@ jobs: vk-status --version vk-sessions --version - name: Run tests - run: ./test/runner/main.sh + run: make test test_ubuntu: strategy: matrix: - codename: + distro: + # Keep in sync with those in Makefile: - noble - resolute runs-on: ubuntu-latest - container: - image: 'ubuntu:${{ matrix.codename }}' - name: 'Ubuntu: ${{ matrix.codename }}' + name: 'Ubuntu: ${{ matrix.distro }}' steps: - - name: Install dependencies - run: | - apt update - DEBIAN_FRONTEND=noninteractive apt install -y --no-install-recommends \ - ca-certificates \ - python3 \ - python3-matplotlib - name: Checkout uses: actions/checkout@v7 with: submodules: recursive - name: Run tests - run: ./test/runner/main.sh + run: make 'test/docker/${{ matrix.distro }}' publish_pypi: needs: diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..876228e --- /dev/null +++ b/Makefile @@ -0,0 +1,19 @@ +include prelude.mk + +.PHONY: all +all: + +.PHONY: test +test: + ./test/runner/main.sh + +test/docker/%: DO + cd test/docker && \ + DISTRO='$*' docker compose build --force-rm -q && \ + docker compose run --rm test && \ + docker compose down -v + +# Keep the list distros synced with the GitHub actions workflow. +.PHONY: test/docker +test/docker: test/docker/noble +test/docker: test/docker/resolute diff --git a/prelude.mk b/prelude.mk new file mode 100644 index 0000000..e0862a5 --- /dev/null +++ b/prelude.mk @@ -0,0 +1,29 @@ +# Please see https://tensin.name/blog/notes/makefile.html + +MAKEFLAGS += --no-builtin-rules --no-builtin-variables --warn-undefined-variables +unexport MAKEFLAGS +.DEFAULT_GOAL := all +.DELETE_ON_ERROR: +.SUFFIXES: +SHELL := bash +.SHELLFLAGS := -eu -o pipefail -c + +escape = $(subst ','\'',$(1)) + +define noexpand +ifeq ($$(origin $(1)),environment) + $(1) := $$(value $(1)) +endif +ifeq ($$(origin $(1)),environment override) + $(1) := $$(value $(1)) +endif +ifeq ($$(origin $(1)),command line) + override $(1) := $$(value $(1)) +endif +endef + +# A helper target to force execution of pattern rules (works like .PHONY for +# them): https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html +# +.PHONY: DO +DO: diff --git a/test/docker/Dockerfile b/test/docker/Dockerfile new file mode 100644 index 0000000..56bebd1 --- /dev/null +++ b/test/docker/Dockerfile @@ -0,0 +1,12 @@ +ARG DISTRO=noble + +FROM ubuntu:$DISTRO + +RUN apt update && \ + DEBIAN_FRONTEND=noninteractive apt install -y --no-install-recommends \ + make \ + python3 + +COPY [".", "/src"] +WORKDIR /src +CMD ["make", "test"] diff --git a/test/docker/docker-compose.yml b/test/docker/docker-compose.yml new file mode 100644 index 0000000..736a5f7 --- /dev/null +++ b/test/docker/docker-compose.yml @@ -0,0 +1,7 @@ +services: + test: + build: + context: ../.. + dockerfile: test/docker/Dockerfile + args: + DISTRO: "${DISTRO:-noble}" -- cgit v1.3