feat(container): add pinned Playwright Docker image and compose stack for Matomo bootstrap
Some checks failed
CI / test (push) Has been cancelled
Some checks failed
CI / test (push) Has been cancelled
- Add Dockerfile based on pinned Playwright image (v1.46.0-jammy) for reproducible browser runtime - Introduce docker-compose stack (MariaDB + Matomo + one-shot bootstrap) - Extend Makefile with container image and stack management targets - Add env.sample for environment-driven bootstrap configuration - Relax Playwright dependency to >=1.46.0 to keep Nix builds compatible - Add E2E test ensuring docker-compose bootstrap exits with 0 and prints token
This commit is contained in:
131
Makefile
131
Makefile
@@ -1,4 +1,8 @@
|
||||
PYTHON ?= python3
|
||||
|
||||
# ----------------------------
|
||||
# E2E (existing)
|
||||
# ----------------------------
|
||||
COMPOSE_FILE := tests/e2e/docker-compose.yml
|
||||
COMPOSE := docker compose -f $(COMPOSE_FILE)
|
||||
|
||||
@@ -13,7 +17,25 @@ MATOMO_ADMIN_PASSWORD ?= AdminSecret123!
|
||||
MATOMO_ADMIN_EMAIL ?= administrator@example.org
|
||||
MATOMO_TOKEN_DESCRIPTION ?= e2e-make-token
|
||||
|
||||
.PHONY: help venv deps-e2e playwright-install e2e-up e2e-install e2e-test e2e-down e2e logs clean
|
||||
# ----------------------------
|
||||
# Container image (production-like)
|
||||
# ----------------------------
|
||||
IMAGE_NAME ?= ghcr.io/kevinveenbirkenbach/matomo-bootstrap
|
||||
IMAGE_VERSION ?= 1.0.1
|
||||
|
||||
# Optional .env file for container runs
|
||||
ENV_FILE ?= .env
|
||||
|
||||
# ----------------------------
|
||||
# docker-compose stack (Matomo + MariaDB + Bootstrap)
|
||||
# ----------------------------
|
||||
COMPOSE_STACK_FILE ?= docker-compose.yml
|
||||
COMPOSE_STACK := docker compose -f $(COMPOSE_STACK_FILE)
|
||||
|
||||
.PHONY: help \
|
||||
venv deps-e2e playwright-install e2e-up e2e-install e2e-test e2e-down e2e logs clean \
|
||||
image-build image-run image-shell image-push image-clean \
|
||||
stack-up stack-down stack-logs stack-ps stack-bootstrap stack-rebootstrap stack-clean stack-reset
|
||||
|
||||
help:
|
||||
@echo "Targets:"
|
||||
@@ -25,11 +47,33 @@ help:
|
||||
@echo " e2e-test Run E2E tests (unittest)"
|
||||
@echo " e2e-down Stop and remove E2E containers"
|
||||
@echo " e2e Full cycle: up → install → test → down"
|
||||
@echo " logs Show Matomo logs"
|
||||
@echo " clean Stop containers + remove venv"
|
||||
@echo " logs Show Matomo logs (E2E compose)"
|
||||
@echo " clean Stop E2E containers + remove venv"
|
||||
@echo ""
|
||||
@echo "Variables (override like: make e2e MATOMO_URL=http://127.0.0.1:8081):"
|
||||
@echo " MATOMO_URL, MATOMO_ADMIN_USER, MATOMO_ADMIN_PASSWORD, MATOMO_ADMIN_EMAIL, MATOMO_TOKEN_DESCRIPTION"
|
||||
@echo "Container image targets:"
|
||||
@echo " image-build Build matomo-bootstrap container image"
|
||||
@echo " image-run Run container bootstrap using $(ENV_FILE) (token-only stdout)"
|
||||
@echo " image-shell Start interactive shell in container"
|
||||
@echo " image-push Push image tags ($(IMAGE_VERSION) + latest)"
|
||||
@echo " image-clean Remove local image tags"
|
||||
@echo ""
|
||||
@echo "docker-compose stack targets (docker-compose.yml):"
|
||||
@echo " stack-up Start MariaDB + Matomo (no bootstrap)"
|
||||
@echo " stack-bootstrap Run one-shot bootstrap (prints token to stdout)"
|
||||
@echo " stack-reset Full reset: down -v → build → up → bootstrap"
|
||||
@echo " stack-down Stop stack"
|
||||
@echo " stack-clean Stop stack and REMOVE volumes (DANGER)"
|
||||
@echo " stack-logs Follow Matomo logs (stack)"
|
||||
@echo " stack-ps Show stack status"
|
||||
@echo ""
|
||||
@echo "Variables:"
|
||||
@echo " E2E: MATOMO_URL, MATOMO_ADMIN_USER, MATOMO_ADMIN_PASSWORD, MATOMO_ADMIN_EMAIL, MATOMO_TOKEN_DESCRIPTION"
|
||||
@echo " IMG: IMAGE_NAME, IMAGE_VERSION, ENV_FILE"
|
||||
@echo " STK: COMPOSE_STACK_FILE"
|
||||
|
||||
# ----------------------------
|
||||
# E2E targets
|
||||
# ----------------------------
|
||||
|
||||
venv:
|
||||
@test -x "$(VENV_PY)" || ($(PYTHON) -m venv $(VENV_DIR))
|
||||
@@ -72,6 +116,11 @@ e2e-test: deps-e2e
|
||||
e2e-down:
|
||||
$(COMPOSE) down -v
|
||||
|
||||
e2e-nix:
|
||||
docker compose -f tests/e2e/docker-compose.yml up -d
|
||||
python3 -m unittest -v tests/e2e/test_bootstrap_nix.py
|
||||
docker compose -f tests/e2e/docker-compose.yml down -v
|
||||
|
||||
e2e: e2e-up e2e-install e2e-test e2e-down
|
||||
|
||||
logs:
|
||||
@@ -79,3 +128,75 @@ logs:
|
||||
|
||||
clean: e2e-down
|
||||
rm -rf $(VENV_DIR)
|
||||
|
||||
# ----------------------------
|
||||
# Container image workflow
|
||||
# ----------------------------
|
||||
|
||||
image-build:
|
||||
docker build -t $(IMAGE_NAME):$(IMAGE_VERSION) -t $(IMAGE_NAME):latest .
|
||||
|
||||
image-run:
|
||||
@test -f "$(ENV_FILE)" || (echo "Missing $(ENV_FILE). Create it from env.sample."; exit 1)
|
||||
docker run --rm \
|
||||
--env-file "$(ENV_FILE)" \
|
||||
--network host \
|
||||
$(IMAGE_NAME):$(IMAGE_VERSION)
|
||||
|
||||
image-shell:
|
||||
@test -f "$(ENV_FILE)" || (echo "Missing $(ENV_FILE). Create it from env.sample."; exit 1)
|
||||
docker run --rm -it \
|
||||
--env-file "$(ENV_FILE)" \
|
||||
--network host \
|
||||
--entrypoint /bin/bash \
|
||||
$(IMAGE_NAME):$(IMAGE_VERSION)
|
||||
|
||||
image-push:
|
||||
docker push $(IMAGE_NAME):$(IMAGE_VERSION)
|
||||
docker push $(IMAGE_NAME):latest
|
||||
|
||||
image-clean:
|
||||
docker rmi $(IMAGE_NAME):$(IMAGE_VERSION) $(IMAGE_NAME):latest || true
|
||||
|
||||
# ----------------------------
|
||||
# docker-compose stack workflow
|
||||
# ----------------------------
|
||||
|
||||
## Start MariaDB + Matomo (without bootstrap)
|
||||
stack-up:
|
||||
$(COMPOSE_STACK) up -d db matomo
|
||||
@echo "Matomo is starting on http://127.0.0.1:8080"
|
||||
|
||||
## Run one-shot bootstrap (prints token to stdout)
|
||||
stack-bootstrap:
|
||||
$(COMPOSE_STACK) run --rm bootstrap
|
||||
|
||||
## Re-run bootstrap (forces a fresh one-shot run)
|
||||
stack-rebootstrap:
|
||||
$(COMPOSE_STACK) rm -f bootstrap || true
|
||||
$(COMPOSE_STACK) run --rm bootstrap
|
||||
|
||||
## Follow Matomo logs (stack)
|
||||
stack-logs:
|
||||
$(COMPOSE_STACK) logs -f matomo
|
||||
|
||||
## Show running services (stack)
|
||||
stack-ps:
|
||||
$(COMPOSE_STACK) ps
|
||||
|
||||
## Stop stack
|
||||
stack-down:
|
||||
$(COMPOSE_STACK) down
|
||||
|
||||
## Stop stack and REMOVE volumes (DANGER)
|
||||
stack-clean:
|
||||
$(COMPOSE_STACK) down -v
|
||||
|
||||
## Full reset: down -v → rebuild bootstrap → up → bootstrap
|
||||
stack-reset:
|
||||
$(COMPOSE_STACK) down -v
|
||||
$(COMPOSE_STACK) build --no-cache bootstrap
|
||||
$(COMPOSE_STACK) up -d db matomo
|
||||
@echo "Waiting for Matomo to become reachable..."
|
||||
@sleep 10
|
||||
$(COMPOSE_STACK) run --rm bootstrap
|
||||
|
||||
Reference in New Issue
Block a user