|
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 <enter> 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
|