# the-custodian top-level Makefile ## Run e2e tests for a repo in a remote sandbox ## Usage: make e2e REPO=activity-core ## Requires: RAILIANCE01_HOST env var (or pass HOST=) ## ## Options: ## REPO= repository name under ~/ (required) ## HOST= override RAILIANCE01_HOST ## USER=root SSH user (default: root) ## KEY= path to SSH key (optional) ## KEEP= set to 1 to keep sandbox after run ## WORKSTREAM_ID= state-hub workstream ID for progress event REPO_PATH := $(HOME)/$(REPO) ifdef HOST E2E_HOST_FLAG := --host $(HOST) else E2E_HOST_FLAG := endif ifdef USER E2E_USER_FLAG := --user $(USER) else E2E_USER_FLAG := endif ifdef KEY E2E_KEY_FLAG := --key $(KEY) else E2E_KEY_FLAG := endif ifdef KEEP E2E_KEEP_FLAG := --keep else E2E_KEEP_FLAG := endif ifdef WORKSTREAM_ID E2E_WS_FLAG := --workstream-id $(WORKSTREAM_ID) else E2E_WS_FLAG := endif ## Install e2e cron job on railiance01 for a repo. ## Usage: make e2e-cron-install REPO=activity-core ## Requires: RAILIANCE01_HOST / RAILIANCE01_USER set, or pass HOST= SSHUSER= ## The cron runs e2e/run-on-host.sh weekly (Sunday 03:13) on railiance01. ## Idempotent: safe to re-run (replaces existing entry for the same repo). RAILIANCE_HOST := $(or $(HOST),$(RAILIANCE01_HOST),92.205.62.239) RAILIANCE_USER := $(or $(SSHUSER),$(RAILIANCE01_USER),tegwick) RAILIANCE_SSH := ssh -o StrictHostKeyChecking=no $(RAILIANCE_USER)@$(RAILIANCE_HOST) .PHONY: e2e-cron-install e2e-cron-install: @test -n "$(REPO)" || (echo "ERROR: REPO is required."; exit 1) $(eval REMOTE_REPO := /home/$(RAILIANCE_USER)/$(REPO)) $(eval CRON_CMD := $(REMOTE_REPO)/e2e/run-on-host.sh >> /var/log/$(REPO)-e2e.log 2>&1) $(eval CRON_LINE := 13 3 * * 0 $(CRON_CMD)) @echo "Installing cron on $(RAILIANCE_USER)@$(RAILIANCE_HOST) for $(REPO)..." @$(RAILIANCE_SSH) "chmod +x $(REMOTE_REPO)/e2e/run-on-host.sh && \ ( crontab -l 2>/dev/null | grep -v '$(REPO)-e2e' ; echo '$(CRON_LINE)' ) | crontab - && \ echo 'Cron installed:' && crontab -l | grep '$(REPO)-e2e'" ## Remove e2e cron job from railiance01 for a repo. ## Usage: make e2e-cron-remove REPO=activity-core .PHONY: e2e-cron-remove e2e-cron-remove: @test -n "$(REPO)" || (echo "ERROR: REPO is required."; exit 1) @$(RAILIANCE_SSH) "( crontab -l 2>/dev/null | grep -v '$(REPO)-e2e' ) | crontab - && echo 'Cron entry removed'" ## List e2e cron jobs on railiance01. .PHONY: e2e-cron-list e2e-cron-list: @$(RAILIANCE_SSH) "crontab -l 2>/dev/null | grep 'e2e' || echo '(no e2e cron entries)'" .PHONY: e2e e2e: @test -n "$(REPO)" || (echo "ERROR: REPO is required. Usage: make e2e REPO=activity-core"; exit 1) @test -d "$(REPO_PATH)" || (echo "ERROR: repo path does not exist: $(REPO_PATH)"; exit 1) @test -f "$(REPO_PATH)/e2e/e2e.yml" || (echo "ERROR: no e2e/e2e.yml in $(REPO_PATH)"; exit 1) cd "$(CURDIR)" && python3 -m e2e_framework \ $(REPO_PATH) \ $(E2E_HOST_FLAG) \ $(E2E_USER_FLAG) \ $(E2E_KEY_FLAG) \ $(E2E_KEEP_FLAG) \ $(E2E_WS_FLAG)