1PYTHON ?= python3 2 3CONTAINER_ENGINE ?= docker 4 5NAME = ansible-runner 6IMAGE_NAME ?= quay.io/ansible/ansible-runner 7IMAGE_NAME_STRIPPED := $(word 1,$(subst :, ,$(IMAGE_NAME))) 8GIT_BRANCH ?= $(shell git rev-parse --abbrev-ref HEAD) 9ANSIBLE_BRANCH ?= 10ANSIBLE_VERSIONS ?= stable-2.9 stable-2.10 stable-2.11 11PIP_NAME = ansible_runner 12VERSION := $(shell python setup.py --version) 13ifeq ($(OFFICIAL),yes) 14 RELEASE ?= 1 15else 16 ifeq ($(origin RELEASE), undefined) 17 RELEASE := 0.git$(shell date -u +%Y%m%d%H).$(shell git rev-parse --short HEAD) 18 endif 19endif 20 21# RPM build variables 22MOCK_BIN ?= mock 23MOCK_CONFIG ?= epel-7-x86_64 24 25RPM_NVR = $(NAME)-$(VERSION)-$(RELEASE)$(RPM_DIST) 26RPM_DIST ?= $(shell rpm --eval '%{?dist}' 2>/dev/null) 27RPM_ARCH ?= $(shell rpm --eval '%{_arch}' 2>/dev/null) 28 29# Provide a fallback value for RPM_ARCH 30ifeq ($(RPM_ARCH),) 31 RPM_ARCH = $(shell uname -m) 32endif 33 34# Debian Packaging 35DEBUILD_BIN ?= debuild 36DEBUILD_OPTS ?= 37DPUT_BIN ?= dput 38DPUT_OPTS ?= 39 40GPG_KEY_ID ?= 41 42ifeq ($(origin GPG_SIGNING_KEY), undefined) 43 GPG_SIGNING_KEY = /dev/null 44endif 45 46ifeq ($(OFFICIAL),yes) 47 # Sign official builds 48 DEBUILD_OPTS += -k$(GPG_KEY_ID) 49else 50 # Do not sign unofficial builds 51 DEBUILD_OPTS += -uc -us 52endif 53 54DEBUILD = $(DEBUILD_BIN) $(DEBUILD_OPTS) 55DEB_PPA ?= mini_dinstall 56DEB_ARCH ?= amd64 57DEB_NVR = $(NAME)_$(VERSION)-$(RELEASE)~$(DEB_DIST) 58DEB_NVRA = $(DEB_NVR)_$(DEB_ARCH) 59DEB_NVRS = $(DEB_NVR)_source 60DEB_TAR_NAME=$(NAME)-$(VERSION) 61DEB_TAR_FILE=$(NAME)_$(VERSION).orig.tar.gz 62DEB_DATE := $(shell LC_TIME=C date +"%a, %d %b %Y %T %z") 63 64.PHONY: test clean dist sdist dev shell image devimage rpm srpm docs deb debian deb-src 65 66clean: 67 rm -rf dist 68 rm -rf build 69 rm -rf ansible-runner.egg-info 70 rm -rf rpm-build 71 rm -rf deb-build 72 find . -type f -regex ".*\py[co]$$" -delete 73 rm -rf $(shell find test/ -type d -name "artifacts") 74 75dist: sdist wheel 76 77WHEEL_NAME = $(subst -,_,$(NAME)) 78wheel: dist/$(WHEEL_NAME)-$(VERSION)-py3-none-any.whl 79 80dist/$(WHEEL_NAME)-$(VERSION)-py3-none-any.whl: 81 $(PYTHON) setup.py bdist_wheel 82 83sdist: dist/$(NAME)-$(VERSION).tar.gz 84 85dist/$(NAME)-$(VERSION).tar.gz: 86 $(PYTHON) setup.py sdist 87 88test: 89 tox 90 91docs: 92 cd docs && make html 93 94image: sdist 95 $(CONTAINER_ENGINE) build --rm=true \ 96 --build-arg ANSIBLE_BRANCH=$(ANSIBLE_BRANCH) \ 97 -t $(IMAGE_NAME) -f Dockerfile . 98 $(CONTAINER_ENGINE) tag $(IMAGE_NAME) $(IMAGE_NAME_STRIPPED):$(GIT_BRANCH) 99 100image_matrix: image 101 for version in $(ANSIBLE_VERSIONS) ; do \ 102 ANSIBLE_BRANCH=$$version GIT_BRANCH=$$version-$(GIT_BRANCH) make image ; \ 103 done 104 $(CONTAINER_ENGINE) tag $(IMAGE_NAME) $(IMAGE_NAME_STRIPPED):$(GIT_BRANCH) 105 106image_matrix_publish: 107 for version in $(ANSIBLE_VERSIONS) ; do \ 108 $(CONTAINER_ENGINE) push $(IMAGE_NAME_STRIPPED):$$version.$(GIT_BRANCH) ; \ 109 done 110 $(CONTAINER_ENGINE) push $(IMAGE_NAME_STRIPPED):$(GIT_BRANCH) 111 112rpm: 113 MOCK_CONFIG=$(MOCK_CONFIG) docker-compose -f packaging/rpm/docker-compose.yml build 114 MOCK_CONFIG=$(MOCK_CONFIG) docker-compose -f packaging/rpm/docker-compose.yml \ 115 run --rm -e RELEASE=$(RELEASE) rpm-builder "make mock-rpm" 116 117srpm: 118 MOCK_CONFIG=$(MOCK_CONFIG) docker-compose -f packaging/rpm/docker-compose.yml build 119 MOCK_CONFIG=$(MOCK_CONFIG) docker-compose -f packaging/rpm/docker-compose.yml \ 120 run --rm -e RELEASE=$(RELEASE) rpm-builder "make mock-srpm" 121 122mock-rpm: rpm-build/$(RPM_NVR).$(RPM_ARCH).rpm 123 124rpm-build/$(RPM_NVR).$(RPM_ARCH).rpm: rpm-build/$(RPM_NVR).src.rpm 125 $(MOCK_BIN) -r $(MOCK_CONFIG) --arch=noarch \ 126 --resultdir=rpm-build \ 127 --rebuild rpm-build/$(RPM_NVR).src.rpm 128 129mock-srpm: rpm-build/$(RPM_NVR).src.rpm 130 131rpm-build/$(RPM_NVR).src.rpm: dist/$(NAME)-$(VERSION).tar.gz rpm-build rpm-build/$(NAME).spec 132 $(MOCK_BIN) -r $(MOCK_CONFIG) --arch=noarch \ 133 --resultdir=rpm-build \ 134 --spec=rpm-build/$(NAME).spec \ 135 --sources=rpm-build \ 136 --buildsrpm 137 138rpm-build/$(NAME).spec: 139 ansible -c local -i localhost, all \ 140 -m template \ 141 -a "src=packaging/rpm/$(NAME).spec.j2 dest=rpm-build/$(NAME).spec" \ 142 -e version=$(VERSION) \ 143 -e release=$(RELEASE) 144 145rpm-build: sdist 146 mkdir -p $@ 147 cp dist/$(NAME)-$(VERSION).tar.gz rpm-build/$(NAME)-$(VERSION)-$(RELEASE).tar.gz 148 149deb: 150 docker-compose -f packaging/debian/docker/docker-compose.yml \ 151 run --rm \ 152 -e OFFICIAL=$(OFFICIAL) -e RELEASE=$(RELEASE) \ 153 -e GPG_KEY_ID=$(GPG_KEY_ID) -e GPG_SIGNING_KEY=$(GPG_SIGNING_KEY) \ 154 deb-builder "make debian" 155 156ifeq ($(OFFICIAL),yes) 157debian: gpg-import deb-build/$(DEB_NVRA).deb 158gpg-import: 159 gpg --import /signing_key.asc 160else 161debian: deb-build/$(DEB_NVRA).deb 162endif 163 164deb-src: deb-build/$(DEB_NVR).dsc 165 166deb-build/$(DEB_NVRA).deb: deb-build/$(DEB_NVR).dsc 167 cd deb-build/$(NAME)-$(VERSION) && $(DEBUILD) -b 168 169deb-build/$(DEB_NVR).dsc: deb-build/$(NAME)-$(VERSION) 170 cd deb-build/$(NAME)-$(VERSION) && $(DEBUILD) -S 171 172deb-build/$(NAME)-$(VERSION): dist/$(NAME)-$(VERSION).tar.gz 173 mkdir -p $(dir $@) 174 @if [ "$(OFFICIAL)" != "yes" ] ; then \ 175 tar -C deb-build/ -xvf dist/$(NAME)-$(VERSION).tar.gz ; \ 176 cd deb-build && tar czf $(DEB_TAR_FILE) $(NAME)-$(VERSION) ; \ 177 else \ 178 cp -a dist/$(NAME)-$(VERSION).tar.gz deb-build/$(DEB_TAR_FILE) ; \ 179 fi 180 cd deb-build && tar -xf $(DEB_TAR_FILE) 181 cp -a packaging/debian deb-build/$(NAME)-$(VERSION)/ 182 sed -ie "s|%VERSION%|$(VERSION)|g;s|%RELEASE%|$(RELEASE)|g;s|%DATE%|$(DEB_DATE)|g" $@/debian/changelog 183 184print-%: 185 @echo $($*) 186