From 73f2a7abbdbccb81bdfe6c5950d2ed62b19f36d5 Mon Sep 17 00:00:00 2001
From: Johan Gronqvist <johan.gronqvist@control.lth.se>
Date: Thu, 13 Mar 2025 19:11:59 +0100
Subject: [PATCH] Add makefile rule to run tests on docker

---
 examples/Makefile | 42 +++++++++++++++++++++++++++++++++++++++---
 1 file changed, 39 insertions(+), 3 deletions(-)

diff --git a/examples/Makefile b/examples/Makefile
index 84bfadf..8912788 100644
--- a/examples/Makefile
+++ b/examples/Makefile
@@ -12,8 +12,8 @@ SANITIZED_TESTS = $(shell echo $(TESTS) | sed 's/[ .]/_/g')
 # Define container name
 CONTAINER_NAME = $(CONTAINER_NAME_PREFIX)$(COMMIT)_$(SANITIZED_TESTS)
 
-.PHONY: run_tests
-run_tests:
+.PHONY: run_tests_podman
+run_tests_podman:
 	@if [ -z "$(TESTS)" ]; then \
 		echo "Error: TESTS must be specified."; \
 		exit 1; \
@@ -54,10 +54,46 @@ run_tests:
 	podman stop $(CONTAINER_NAME); \
 	podman rm $(CONTAINER_NAME)
 
+.PHONY: run_tests_docker
+run_tests_docker:
+	@if [ -z "$(TESTS)" ]; then \
+		echo "Error: TESTS must be specified."; \
+		exit 1; \
+	fi
+	@if [ -z "$(COMMIT)" ]; then \
+		echo "Error: COMMIT must be specified."; \
+		exit 1; \
+	fi
+	@echo "Starting a new container for commit $(COMMIT)..."
+	docker run --user johan -d --name $(CONTAINER_NAME) \
+		$(IMAGE) /bin/sh -c "sleep infinity"
+	docker cp $(HOME)/.ssh/known_hosts $(CONTAINER_NAME):/home/johan/.ssh/known_hosts
+	docker exec --user johan $(CONTAINER_NAME) git clone $(REPO_URL) /home/johan/tmp/repo
+	docker exec --user johan $(CONTAINER_NAME) bash -c "cd /home/johan/tmp/repo/ && git checkout $(COMMIT)"
+	for test in $(TESTS); do \
+		echo "Running test $$test..."; \
+		docker exec --user johan $(CONTAINER_NAME) bash -c "cd /home/johan/tmp/repo/examples && nice -19 ionice -c 3 $(JULIA_BIN) $$test"; \
+		if [ $$? -ne 0 ]; then \
+			echo "Test $$test failed."; \
+			echo "Set git tag with commands"; \
+			echo "git tag -f test_failed_$$test $(COMMIT)"; \
+			docker stop $(CONTAINER_NAME); \
+			docker rm $(CONTAINER_NAME); \
+			exit 1; \
+		fi; \
+	done;
+	echo "All tests $(TESTS) passed for commit $(COMMIT)."; \
+	echo "Set git tags with commands"; \
+	for test in $(TESTS); do \
+		echo "git tag -f test_passed_$$test $(COMMIT)"; \
+	done; \
+	docker stop $(CONTAINER_NAME); \
+	docker rm $(CONTAINER_NAME)
 
 # Clean target to remove old test containers if needed
 .PHONY: clean
 clean:
-	@podman ps -a --filter "name=$(CONTAINER_NAME_PREFIX)*" -q | xargs podman rm -f
+	@podman ps -a --filter "name=$(CONTAINER_NAME_PREFIX)*" -q | xargs -r podman rm -f
+	@docker ps -a --filter "name=$(CONTAINER_NAME_PREFIX)*" -q | xargs -r docker rm -f
 	@echo "Cleaned up old test containers."
 
-- 
GitLab