PYTHON ?= /usr/bin/python3 DESTDIR ?= / PREFIX ?= /usr mandir ?= $(PREFIX)/share/man DOCKER ?= podman PODMAN ?= $(DOCKER) DOCS_VERSION ?= next RUN_TESTS ?= ci PKGNAME = lorax VERSION = $(shell awk '/Version:/ { print $$2 }' $(PKGNAME).spec) RELEASE = $(shell awk '/Release:/ { print $$2 }' $(PKGNAME).spec | sed -e 's|%.*$$||g') TAG = lorax-$(VERSION)-$(RELEASE) IMAGE_RELEASE = $(shell awk -F: '/FROM/ { print $$2}' Dockerfile.test) ifeq ($(TEST_OS),) OS_ID = $(shell awk -F= '/^ID/ {print $$2}' /etc/os-release) OS_VERSION = $(shell awk -F= '/^VERSION_ID/ {print $$2}' /etc/os-release) TEST_OS = $(OS_ID)-$(OS_VERSION) endif export TEST_OS VM_IMAGE=$(CURDIR)/test/images/$(TEST_OS) ifeq ($(REPOS_DIR),) REPOS_DIR = /etc/yum.repos.d endif default: all src/pylorax/version.py: lorax.spec echo "num = '$(VERSION)-$(RELEASE)'" > src/pylorax/version.py all: src/pylorax/version.py $(PYTHON) setup.py build install: all $(PYTHON) setup.py install --root=$(DESTDIR) --prefix=$(PREFIX) mkdir -p $(DESTDIR)/$(mandir)/man1 install -m 644 docs/man/*.1 $(DESTDIR)/$(mandir)/man1 mkdir -p $(DESTDIR)/etc/bash_completion.d check: @echo "*** Running pylint ***" PYTHONPATH=$(PYTHONPATH):./src/ ./tests/pylint/runpylint.py test: @echo "*** Running tests ***" PYTHONPATH=$(PYTHONPATH):./src/ $(PYTHON) -X dev -m pytest -v --cov-branch \ --cov=pylorax ./tests/pylorax/ ./tests/image-minimizer/ coverage3 report -m [ -f "/usr/bin/coveralls" ] && [ -n "$(COVERALLS_REPO_TOKEN)" ] && coveralls || echo test_cli: sudo -E ./tests/test_cli.sh test_mkksiso: sudo -E ./tests/mkksiso/test_mkksiso.sh clean_cloud_envs: # clean beakerlib logs from previous executions sudo rm -rf /var/tmp/beakerlib-*/ sudo -E ./tests/cleanup/remove_old_objects_aws.sh sudo -E ./tests/cleanup/remove_old_objects_openstack.sh sudo -E ./tests/cleanup/remove_old_objects_azure.sh sudo -E ./tests/cleanup/remove_old_objects_vmware.sh # make sure all cleanup scripts finished successfully sudo sh -c 'grep RESULT_STRING /var/tmp/beakerlib-*/TestResults | grep -v PASS && exit 1 || exit 0' clean: -rm -rf build src/pylorax/version.py tag: git tag -f $(TAG) docs: $(MAKE) -C docs apidoc html man # This is needed to reset the ownership of the new docs files after they are created in a container set-docs-owner: sudo chown -R $(LOCAL_UID):$(LOCAL_GID) docs/ archive: @git archive --format=tar --prefix=$(PKGNAME)-$(VERSION)/ $(TAG) > $(PKGNAME)-$(VERSION).tar @gzip -f $(PKGNAME)-$(VERSION).tar @echo "The archive is in $(PKGNAME)-$(VERSION).tar.gz" dist: tag archive scp $(PKGNAME)-$(VERSION).tar.gz fedorahosted.org:lorax srpm: archive $(PKGNAME).spec rpmbuild -bs \ --define "_sourcedir $(CURDIR)" \ --define "_srcrpmdir $(CURDIR)" \ lorax.spec local: @rm -rf $(PKGNAME)-$(VERSION).tar.gz @rm -rf /var/tmp/$(PKGNAME)-$(VERSION) @dir=$$PWD; cp -a $$dir /var/tmp/$(PKGNAME)-$(VERSION) @rm -rf /var/tmp/$(PKGNAME)-$(VERSION)/.git @dir=$$PWD; cd /var/tmp; tar --gzip -cSpf $$dir/$(PKGNAME)-$(VERSION).tar.gz $(PKGNAME)-$(VERSION) @rm -rf /var/tmp/$(PKGNAME)-$(VERSION) @echo "The archive is in $(PKGNAME)-$(VERSION).tar.gz" local-srpm: local $(PKGNAME).spec rpmbuild -bs \ --define "_sourcedir $(CURDIR)" \ --define "_srcrpmdir $(CURDIR)" \ lorax.spec test-in-copy: rsync -a --exclude=.git /lorax-ro/ /lorax/ make -C /lorax/ $(RUN_TESTS) cp /lorax/.coverage /test-results/ test-in-docker: test-in-podman test-in-podman: $(DOCKER) build -t welder/lorax-tests:$(IMAGE_RELEASE) -f Dockerfile.test . @mkdir -p `pwd`/.test-results $(DOCKER) run --rm -it -v `pwd`/.test-results/:/test-results \ -v `pwd`:/lorax-ro:ro --security-opt label=disable \ --env RUN_TESTS="$(RUN_TESTS)" \ welder/lorax-tests:$(IMAGE_RELEASE) make test-in-copy # rootless podman leaves them owned by the container UID $(MAKE) set-docs-owner docs-in-docker: docs-in-podman docs-in-podman: $(DOCKER) build -t welder/lorax-tests:$(IMAGE_RELEASE) -f Dockerfile.test . $(DOCKER) run -it --rm -v `pwd`:/lorax-ro:ro \ -v `pwd`/docs/:/lorax-ro/docs/ \ --env LORAX_VERSION=$(DOCS_VERSION) \ --env LOCAL_UID=`id -u` --env LOCAL_GID=`id -g` \ --security-opt label=disable welder/lorax-tests:$(IMAGE_RELEASE) make docs ci: check test $(VM_IMAGE): TAG=HEAD $(VM_IMAGE): srpm bots rm -f $(VM_IMAGE) $(VM_IMAGE).qcow2 srpm=$(shell rpm --qf '%{Name}-%{Version}-%{Release}.src.rpm\n' -q --specfile lorax.spec | head -n1) ; \ bots/image-customize -v \ --resize 20G \ --upload $$srpm:/var/tmp \ --upload $(CURDIR)/test/vm.install:/var/tmp/vm.install \ --upload $(realpath tests):/ \ --run-command "chmod +x /var/tmp/vm.install" \ --run-command "cd /var/tmp; /var/tmp/vm.install $$srpm" \ $(TEST_OS) [ -f ~/.config/lorax-test-env ] && bots/image-customize \ --upload ~/.config/lorax-test-env:/var/tmp/lorax-test-env \ $(TEST_OS) || echo # convenience target for the above vm: $(VM_IMAGE) echo $(VM_IMAGE) # grab all repositories from the host system, overwriting what's inside the VM # and update the image. Mostly used when testing downstream snapshots to make # sure VM_IMAGE is as close as possible to the host! vm-local-repos: vm vm-reset: rm -f $(VM_IMAGE) $(VM_IMAGE).qcow2 # checkout Cockpit's bots for standard test VM images and API to launch them # must be from master, as only that has current and existing images; but testvm.py API is stable # support CI testing against a bots change bots: git clone --quiet --reference-if-able $${XDG_CACHE_HOME:-$$HOME/.cache}/cockpit-project/bots https://github.com/cockpit-project/bots.git if [ -n "$$COCKPIT_BOTS_REF" ]; then git -C bots fetch --quiet --depth=1 origin "$$COCKPIT_BOTS_REF"; git -C bots checkout --quiet FETCH_HEAD; fi @echo "checked out bots/ ref $$(git -C bots rev-parse HEAD)" .PHONY: ci_after_success ci_after_success: # nothing to do here, but Jenkins expects this to be present, otherwise fails .PHONY: docs check test srpm vm vm-reset docs-in-docker docs-in-podman test-in-docker test-in-podman