SHELL := /bin/bash GRADLE := $(shell command -v gradle) BLUBBER := $(shell command -v blubber) DOCKER := $(shell command -v docker) DOCKER_TAG := piplinelib-tests-$(shell date -u +%Y%m%d-%H%M%S) DOCKER_LABEL := wmf.gc=pipelinelib-tests DOCKER_BUILD := docker build --label $(DOCKER_LABEL) --tag $(DOCKER_TAG) DOCKER_RUN := docker run --rm --label $(DOCKER_LABEL) --name $(DOCKER_TAG) DOCKER_STOP := docker stop "$(DOCKER_TAG)" DOCKER_STOP_ALL = docker stop $(shell docker ps -qf label=$(DOCKER_LABEL)) DOCKER_RMI = docker rmi $(shell docker images -qf label=$(DOCKER_LABEL)) .PHONY: test clean: ifneq (,$(DOCKER)) $(DOCKER_STOP_ALL) 2> /dev/null || true $(DOCKER_RMI) 2> /dev/null || true else @echo "Not using Docker. Nothing to do." endif doc: docs docs: gradle groovydoc test: ifneq (,$(GRADLE)) gradle test @exit 0 else ifneq (,$(and $(BLUBBER), $(DOCKER))) blubber .pipeline/blubber.yaml test | docker build -t "$(DOCKER_TAG)" -f - . docker run --rm -it "$(DOCKER_TAG)" @exit 0 else @echo "Can't find Gradle or Blubber/Docker. Install one to run tests." @exit 1 endif systemtest: ifneq (,$(and $(DOCKER), $(DOCKER_HOST))) $(eval JENKINS_HOST := $(patsubst tcp://%,%,$(DOCKER_HOST))) $(eval JENKINS_HOST := $(word 1, $(subst :, ,$(JENKINS_HOST)))) $(eval JENKINS_URL := http://docker:docker@$(JENKINS_HOST):8080) $(eval JENKINS_BLUE_URL := $(JENKINS_URL)/blue/organizations/jenkins) $(eval BUILD_OUTPUT := $(shell mktemp)) $(DOCKER_BUILD) -f systemtests/jenkins/Dockerfile . $(DOCKER_RUN) -d \ -p 8080:8080 \ -v /var/run/docker.sock:/var/run/docker.sock \ $(DOCKER_TAG) @while ! curl -s http://$(JENKINS_HOST):8080/ > /dev/null; do \ echo "waiting for jenkins..."; \ sleep 1; \ done @while curl -s http://$(JENKINS_HOST):8080/ | grep -q "is getting ready to work"; do \ echo "waiting for jenkins..."; \ sleep 1; \ done curl -X POST $(JENKINS_URL)/job/repo1/build @echo "Build $(JENKINS_URL)/job/repo1/1 created" @while curl -sw %%{http_code} $(JENKINS_URL)/job/repo1/1/api/json | grep -q '404'; do \ echo "waiting for build to start..."; \ sleep 1; \ done @while curl -s $(JENKINS_URL)/job/repo1/1/api/json | grep -q '"building":true'; do \ sleep 1; \ curl -s $(JENKINS_URL)/job/repo1/1/consoleText | \ tail -n +$$(wc -l $(BUILD_OUTPUT) | awk '{ print $$1 }') | \ tee -a $(BUILD_OUTPUT); \ done ifeq (1,$(DEBUG)) @echo "DEBUG: Build $(JENKINS_URL)/job/repo1/1 completed" @echo -n "DEBUG: Press to continue: " @read endif $(DOCKER_STOP) else @echo "Can't find Docker and your DOCKER_HOST. Set up both to run system tests." @exit 1 endif