-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathMakefile
129 lines (104 loc) · 3.96 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
.PHONY: help install start stop reset test test-watch docs lint cov clean release root-url dist check-deps clean-build clean-pyc clean-test
.DEFAULT_GOAL := help
#############################
# Open a URL in the browser #
#############################
define BROWSER_PYSCRIPT
import os, webbrowser, sys
try:
from urllib import pathname2url
except:
from urllib.request import pathname2url
webbrowser.open("file://" + pathname2url(os.path.abspath(sys.argv[1])))
endef
export BROWSER_PYSCRIPT
##################################
# Display help for this makefile #
##################################
define PRINT_HELP_PYSCRIPT
import re, sys
print("Planetmint Driver 0.5 developer toolbox")
print("---------------------------------------")
print("Usage: make COMMAND")
print("")
print("Commands:")
for line in sys.stdin:
match = re.match(r'^([a-zA-Z_-]+):.*?## (.*)$$', line)
if match:
target, help = match.groups()
print(" %-16s %s" % (target, help))
endef
export PRINT_HELP_PYSCRIPT
##################
# Basic commands #
##################
DOCKER := docker
DC := docker-compose
BROWSER := python -c "$$BROWSER_PYSCRIPT"
HELP := python -c "$$PRINT_HELP_PYSCRIPT"
ECHO := /usr/bin/env echo
IS_DOCKER_COMPOSE_INSTALLED := $(shell command -v docker-compose 2> /dev/null)
# User-friendly check for sphinx-build
help:
@$(HELP) < $(MAKEFILE_LIST)
install: clean ## Install the package to the active Python's site-packages
poetry install
start: check-deps ## Run Planetmint driver from source and daemonize it (stop with `make stop`)
@$(DC) up -d planetmint
stop: check-deps ## Stop Planetmint driver
@$(DC) stop
reset: check-deps ## Stop and REMOVE all containers. WARNING: you will LOSE all data stored in Planetmint server.
@$(DC) down
test: check-deps ## Run all tests once or specify a file/test with TEST=tests/file.py::Class::test
@$(DC) up -d bdb
@$(DC) up -d planetmint
@$(DC) run --rm planetmint-driver poetry run pytest ${TEST} -v
test-watch: check-deps ## Run all, or only one with TEST=tests/file.py::Class::test, tests and wait. Every time you change code, test/s will be run again.
@$(DC) run --rm planetmint-driver pytest ${TEST} -f -v
docs: ## Generate Sphinx HTML documentation, including API docs
@$(DC) run --rm --no-deps bdocs poetry run make -C docs html
$(BROWSER) docs/_build/html/index.html
lint: check-deps ## Check style with flake8
@$(DC) run --rm planetmint-driver black --check -l 119 planetmint_driver tests
format: check-deps ## Check style with flake8
@$(DC) run --rm planetmint-driver black -l 119 planetmint_driver tests
cov: check-deps ## Check code coverage and open the result in the browser
@$(DC) run --rm planetmint-driver pytest -v --cov=planetmint_driver --cov-report html
$(BROWSER) htmlcov/index.html
clean: clean-build clean-pyc clean-test ## Remove all build, test, coverage and Python artifacts
@$(ECHO) "Cleaning was successful."
release: dist ## package and upload a release
twine check dist/*
twine upload dist/*
root-url:
@$(DC) port planetmint 9984
###############
# Sub targets #
###############
dist: clean ## builds source (and not for now, wheel package)
poetry build
ls -l dist
check-deps:
ifndef IS_DOCKER_COMPOSE_INSTALLED
@$(ECHO) "Error: docker-compose is not installed"
@$(ECHO)
@$(ECHO) "You need docker-compose to run this command. Check out the official docs on how to install it in your system:"
@$(ECHO) "- https://docs.docker.com/compose/install/"
@$(ECHO)
@$(DC) # docker-compose is not installed, so we call it to generate an error and exit
endif
clean-build: ## Remove build artifacts
@rm -fr build/
@rm -fr dist/
@rm -fr .eggs/
@find . -name '*.egg-info' -exec rm -fr {} +
@find . -name '*.egg' -exec rm -f {} +
clean-pyc: ## Remove Python file artifacts
@find . -name '*.pyc' -exec rm -f {} +
@find . -name '*.pyo' -exec rm -f {} +
@find . -name '*~' -exec rm -f {} +
@find . -name '__pycache__' -exec rm -fr {} +
clean-test: ## Remove test and coverage artifacts
@rm -fr .tox/
@rm -f .coverage
@rm -fr htmlcov/