-
Notifications
You must be signed in to change notification settings - Fork 38
/
Makefile
143 lines (112 loc) · 4.47 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
132
133
134
135
136
137
138
139
140
141
142
143
# Default tests run with make test and make quick-tests
# Default environment for make tox
ENV?=py37
# Extra arguments supplied to tox command
ARGS?=
# Location of virtualenv used for development.
VENV?=.venv
# Source virtualenv to execute command (flake8, sphinx, twine, etc...)
IN_VENV=if [ -f $(VENV)/bin/activate ]; then . $(VENV)/bin/activate; fi;
# TODO: add this upstream as a remote if it doesn't already exist.
UPSTREAM?=galaxyproject
SOURCE_DIR?=src/ephemeris
BUILD_SCRIPTS_DIR=scripts
VERSION?=$(shell python $(BUILD_SCRIPTS_DIR)/print_version_for_release.py $(SOURCE_DIR))
DOC_URL?=https://ephemeris.readthedocs.org
PROJECT_URL?=https://github.com/galaxyproject/ephemeris
PROJECT_NAME?=ephemeris
TEST_DIR?=tests
.PHONY: clean-pyc clean-build docs clean
help:
@echo "clean - remove all build, test, coverage and Python artifacts"
@echo "clean-build - remove build artifacts"
@echo "clean-pyc - remove Python file artifacts"
@echo "clean-test - remove test and coverage artifacts"
@echo "setup-venv - setup a development virutalenv in current directory."
@echo "lint - check style using tox and flake8 for Python 2 and Python 3"
@echo "lint-readme - check README formatting for PyPI"
@echo "flake8 - check style using flake8 for current Python (faster than lint)"
@echo "test - run tests with the default Python (faster than tox)"
@echo "quick-test - run quickest tests with the default Python"
@echo "coverage - check code coverage quickly with the default Python"
@echo "docs - generate Sphinx HTML documentation, including API docs"
@echo "open-docs - generate Sphinx HTML documentation and open in browser"
@echo "open-rtd - open docs on readthedocs.org"
@echo "open-project - open project on github"
@echo "release - package, review, and upload a release"
@echo "dist - package"
@echo "setup-git-hook-lint - setup precommit hook for linting project"
@echo "setup-git-hook-lint-and-test - setup precommit hook for linting and testing project"
@echo "update-extern - update external artifacts copied locally"
clean: clean-build clean-pyc clean-test
clean-build:
rm -fr build/
rm -fr dist/
rm -fr *.egg-info
clean-pyc:
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:
rm -fr .tox/
rm -f .coverage
rm -fr htmlcov/
setup-venv:
if [ ! -d $(VENV) ]; then virtualenv $(VENV); exit; fi;
$(IN_VENV) pip install -r requirements.txt && pip install -r dev-requirements.txt
setup-git-hook-lint:
cp $(BUILD_SCRIPTS_DIR)/pre-commit-lint .git/hooks/pre-commit
setup-git-hook-lint-and-test:
cp $(BUILD_SCRIPTS_DIR)/pre-commit-lint-and-test .git/hooks/pre-commit
format:
$(IN_VENV) isort $(SOURCE_DIR) $(TEST_DIR) && black $(SOURCE_DIR) $(TEST_DIR) && ruff --fix $(SOURCE_DIR) $(TEST_DIR)
lint:
$(IN_VENV) tox -e py38-lint
lint-readme:
$(IN_VENV) python setup.py check -r -s
test:
$(IN_VENV) pytest $(TEST_DIR)
tox:
$(IN_VENV) tox -e $(ENV) -- $(ARGS)
coverage:
coverage run --source $(SOURCE_DIR) setup.py $(TEST_DIR)
coverage report -m
coverage html
open htmlcov/index.html || xdg-open htmlcov/index.html
docs:
$(IN_VENV) sphinx-apidoc -f -o docs/ src/ephemeris
$(IN_VENV) $(MAKE) -C docs clean
$(IN_VENV) $(MAKE) -C docs html
_open-docs:
open docs/_build/html/index.html || xdg-open docs/_build/html/index.html
open-docs: docs _open-docs
open-rtd: docs
open $(DOC_URL) || xdg-open $(PROJECT_URL)
open-project:
open $(PROJECT_URL) || xdg-open $(PROJECT_URL)
dist: clean
$(IN_VENV) python setup.py sdist bdist_wheel
$(IN_VENV) twine check dist/*
ls -l dist
release-test-artifacts: dist
$(IN_VENV) twine upload -r test dist/*
open https://testpypi.python.org/pypi/$(PROJECT_NAME) || xdg-open https://testpypi.python.org/pypi/$(PROJECT_NAME)
release-aritfacts: release-test-artifacts
@while [ -z "$$CONTINUE" ]; do \
read -r -p "Have you executed release-test and reviewed results? [y/N]: " CONTINUE; \
done ; \
[ $$CONTINUE = "y" ] || [ $$CONTINUE = "Y" ] || (echo "Exiting."; exit 1;)
@echo "Releasing"
$(IN_VENV) twine upload dist/*
commit-version:
$(IN_VENV) python $(BUILD_SCRIPTS_DIR)/commit_version.py $(SOURCE_DIR) $(VERSION)
new-version:
$(IN_VENV) python $(BUILD_SCRIPTS_DIR)/new_version.py $(SOURCE_DIR) $(VERSION) 2
release-local: commit-version release-aritfacts new-version
push-release:
git push $(UPSTREAM) master
git push --tags $(UPSTREAM)
release: release-local push-release
add-history:
$(IN_VENV) python scripts/bootstrap_history.py $(ITEM)