de2c88883a
rootless podman leaves the files owned by the container UID, this requires sudo to chown them back to the user.
185 lines
5.9 KiB
Makefile
185 lines
5.9 KiB
Makefile
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/
|
|
|
|
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
|