summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorEgor Tensin <egor@tensin.name>2026-10-14 18:20:35 +0500
committerEgor Tensin <egor@tensin.name>2026-10-14 18:23:27 +0500
commite871d2c6805e8e7e1bdb6f83d29fc0307d4395d7 (patch)
treebf639e1ccd6548d5e8953c6f2ef8d559dadf13c4
parenttest: migrate to test-harness (diff)
downloadvk-scripts-e871d2c6805e8e7e1bdb6f83d29fc0307d4395d7.tar.gz
vk-scripts-e871d2c6805e8e7e1bdb6f83d29fc0307d4395d7.zip
allow running Docker tests locally
-rw-r--r--.github/workflows/ci.yml18
-rw-r--r--Makefile19
-rw-r--r--prelude.mk29
-rw-r--r--test/docker/Dockerfile12
-rw-r--r--test/docker/docker-compose.yml7
5 files changed, 72 insertions, 13 deletions
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}"