-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMakefile
131 lines (96 loc) · 4.95 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#
# Makefile, ver 1.6, PROJECT: buildpy
#
# --- declarations --------------------------------------------------------------------------------
PROJECT := branchdiff
CUR_DIR = $(shell pwd)
VENV_DIR := $(CUR_DIR)/p3_venv
LIB_DIR = $(CUR_DIR)/core
SCRIPT_DIR := $(CUR_DIR)/scripts
PYTHON_VERSION := python3
PYTHON3_PATH := $(shell which $(PYTHON_VERSION))
BUILDDEB_ROOT = $(CUR_DIR)/packaging/deb
BUILDRPM_ROOT = $(CUR_DIR)/packaging/rpm
GIT := $(shell which git)
DOCKER := $(shell which docker)
PIP_CALL := $(VENV_DIR)/bin/pip
ACTIVATE = $(shell . $(VENV_DIR)/bin/activate)
MAKE = $(shell which make)
MODULE_PATH := $(LIB_DIR)
DOC_PATH := $(CUR_DIR)/docs
REQUIREMENT = $(CUR_DIR)/requirements.txt
VERSION_FILE = $(LIB_DIR)/version.py
# --- rollup targets ------------------------------------------------------------------------------
.PHONY: zero-builddeb zero-buildrpm zero-installdeb zero-installrpm
build-all: clean builddeb buildrpm ## Clean and Build Debian & RPM pkgs
zero-builddeb: clean builddeb ## Clean and Build Debian (.deb) pkg
zero-buildrpm: clean buildrpm ## Clean and Build Redhat (.rpm) pkg
zero-deploydeb: clean builddeb deploydeb ## Clean, Build & Install Debian (.deb) pkg
zero-deployrpm: clean buildrpm deployrpm ## Clean, Build & Install Redhat (.rpm) pkg
# --- targets -------------------------------------------------------------------------------------
.PHONY: pre-build
pre-build: ## Remove residual build artifacts
rm -rf $(CUR_DIR)/dist
mkdir $(CUR_DIR)/dist
setup-venv: pre-build ## Create and activiate python venv
$(PYTHON3_PATH) -m venv $(VENV_DIR)
source $(VENV_DIR)/bin/activate && $(PIP_CALL) install -U setuptools pip && \
$(PIP_CALL) install -r $(REQUIREMENT);
.PHONY: test
test: ## Run pytest unittests
@echo "Executing Tests..."; \
if [ $(PDB) ]; then PDB = "true"; \
bash $(CUR_DIR)/scripts/make-test.sh $(CUR_DIR) $(VENV_DIR) $(MODULE_PATH) $(PDB); \
elif [ $(MODULE) ]; then PDB = "false"; \
bash $(CUR_DIR)/scripts/make-test.sh $(CUR_DIR) $(VENV_DIR) $(MODULE_PATH) $(PDB) $(MODULE); \
elif [ $(COMPLEXITY) ]; then COMPLEXITY = "run"; \
bash $(CUR_DIR)/scripts/make-test.sh $(CUR_DIR) $(VENV_DIR) $(MODULE_PATH) $(COMPLEXITY) $(MODULE); \
else bash $(CUR_DIR)/scripts/make-test.sh $(CUR_DIR) $(VENV_DIR) $(MODULE_PATH); fi
.PHONY: builddeb
builddeb: ## Build Debian distribution (.deb) os package
@echo "Building Debian package format of $(PROJECT)"; \
if [ ! -e $(VENV_DIR) ]; then $(MAKE) setup-venv; fi; \
if [ $(VERSION) ]; then . $(VENV_DIR)/bin/activate && \
$(PYTHON3_PATH) $(SCRIPT_DIR)/builddeb.py --build --set-version $(VERSION); \
else cd $(CUR_DIR) && . $(VENV_DIR)/bin/activate && $(PYTHON3_PATH) $(SCRIPT_DIR)/builddeb.py --build; fi
.PHONY: buildrpm
buildrpm: ## Build Redhat distribution (.rpm) os package
@echo "Building RPM package format of $(PROJECT)"; \
if [ ! -e $(VENV_DIR) ]; then $(MAKE) setup-venv; fi; \
if [ $(VERSION) ]; then . $(VENV_DIR)/bin/activate && \
$(PYTHON3_PATH) $(SCRIPT_DIR)/buildrpm.py --build -p .rpm.json --set-version $(VERSION); \
else cd $(CUR_DIR) && . $(VENV_DIR)/bin/activate && \
$(PYTHON3_PATH) $(SCRIPT_DIR)/buildrpm.py --build -p .rpm.json; fi
.PHONY: installdeb
deploydeb: builddeb ## Install (source: pypi). Build artifacts exist
if [ ! -e $(VENV_DIR) ]; then $(MAKE) setup-venv; fi; \
cd $(CUR_DIR) && . $(VENV_DIR)/bin/activate && bash $(SCRIPT_DIR)/installdeb.sh
.PHONY: installrpm
deployrpm: buildrpm ## Install (source: pypi). Build artifacts exist
if [ ! -e $(VENV_DIR) ]; then $(MAKE) setup-venv; fi; \
cd $(CUR_DIR) && . $(VENV_DIR)/bin/activate && bash $(SCRIPT_DIR)/installrpm.sh
.PHONY: upload-images
upload-images: ## Upload README images to Amazon S3
bash $(CUR_DIR)/scripts/s3upload.sh
.PHONY: help
help: ## Print help index
@printf "\n\033[0m %-15s\033[0m %-13s\u001b[37;1m%-15s\u001b[0m\n\n" " " "make targets: " $(PROJECT)
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {sub("\\\\n",sprintf("\n%22c"," "), $$2);printf "\033[0m%-2s\033[36m%-20s\033[33m %-8s\033[0m%-5s\n\n"," ", $$1, "-->", $$2}' $(MAKEFILE_LIST)
@printf "\u001b[37;0m%-2s\u001b[37;0m%-2s\n\n" " " "______________________________________________________________________"
@printf "\u001b[37;1m%-3s\u001b[37;1m%-3s\033[0m %-6s\u001b[44;1m%-9s\u001b[37;0m%-15s\n\n" " " " make" "zero-build[deb|rpm] " "VERSION=X" " to build specific version id"
.PHONY: clean-docs
clean-docs: ## Remove build artifacts for documentation only
@echo "Clean docs build"
if [ -e $(VENV_DIR) ]; then . $(VENV_DIR)/bin/activate && \
cd $(DOC_PATH) && $(MAKE) clean || true; fi
.PHONY: clean
clean: ## Remove all build artifacts generated by make
@echo "Clean build artifacts"
rm -rf $(VENV_DIR) || true
rm -rf $(CUR_DIR)/dist || true
rm -rf $(CUR_DIR)/*.egg-info || true
rm -rf $(SCRIPT_DIR)/__pycache__ || true
rm -rf $(LIB_DIR)/__pycache__ || true
rm -rf $(CUR_DIR)/tests/__pycache__ || true
rm -rf $(CUR_DIR)/core/__pycache__ || true
rm -rf $(CUR_DIR)/.pytest_cache || true