-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathMakefile
158 lines (136 loc) · 5.92 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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
.PHONY: clean black create_environment install image docs clean unit_test unit_test_data unit_test_data_download unit_test_data_build unit_test_wip unit_test_entrypoints
#################################################################################
# GLOBALS #
#################################################################################
PROJECT_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
PROJECT_NAME = autometa
PYTHON_INTERPRETER = python3
# This was retrieved from https://drive.google.com/file/d/1bSlPldaq3C6Cf9Y5Rm7iwtUDcjxAaeEk/view?usp=sharing
TEST_DATA_FILEID = 1bSlPldaq3C6Cf9Y5Rm7iwtUDcjxAaeEk
ifeq (,$(shell which mamba))
HAS_MAMBA=False
else
HAS_MAMBA=True
endif
#################################################################################
# COMMANDS #
#################################################################################
## Delete all compiled Python files
clean:
find . -type f -name "*.py[co]" -exec rm -r {} +
find . -type d -name "__pycache__" -exec rm -r {} +
find . -type d -name "htmlcov" -exec rm -r {} +
find . -type d -name "Autometa.egg-info" -exec rm -r {} +
find . -type d -name "dist" -exec rm -r {} +
find . -type d -name "build" -exec rm -r {} +
## Apply black formatting
black:
black --exclude autometa/validation autometa bin tests autometa/validation/benchmark.py autometa/validation/datasets.py
## Set up python interpreter environment
create_environment: autometa-env.yml
ifeq (True,$(HAS_MAMBA))
@echo ">>> Detected mamba, creating mamba environment."
ifeq (3,$(findstring 3,$(PYTHON_INTERPRETER)))
mamba env create --file=autometa-env.yml
else
@echo "It looks like you are not using python 3. Autometa is only compatible with python 3. Please upgrade."
endif
@echo ">>> New mamba env created. Activate with:\nsource activate $(PROJECT_NAME)"
else
@echo "Mamba not detected. Please install before proceeding..."
@echo "Mamba docs: https://mamba.readthedocs.io/en/latest/"
exit
endif
#################################################################################
# PROJECT RULES #
#################################################################################
## Install autometa from source
install: setup.py
python3 -m pip install . --ignore-installed --no-deps -vv
## Install dependencies for test environment
test_environment: tests/environment.yml
mamba env update -n $(PROJECT_NAME) --file=$<
## Build docker image from Dockerfile (auto-taggged as jasonkwan/autometa:<current-branch>)
image: Dockerfile
docker build . -t jasonkwan/autometa:`git branch --show-current`
## Build necessary docker images for nextflow modules from Dockerfiles in docker/modules
modules-images: docker/modules/get_genomes_for_mock.Dockerfile docker/modules/mock_data_reporter.Dockerfile
docker build docker/modules/ -t jasonkwan/autometa-nf-modules-get_genomes_for_mock -f docker/modules/get_genomes_for_mock.Dockerfile
docker build docker/modules/ -t jasonkwan/autometa-nf-modules-mock_data_reporter -f docker/modules/mock_data_reporter.Dockerfile
## Build documentation for autometa.readthedocs.io
docs:
make clean html -C docs
@echo "docs built. Open docs/build/html/index.html to view"
## Download test_data.json for unit testing
unit_test_data_download:
gdown --id $(TEST_DATA_FILEID) -O tests/data/test_data.json
## Build test_data.json file for unit testing (requires all files from https://drive.google.com/open?id=189C6do0Xw-X813gspsafR9r8m-YfbhTS be downloaded into tests/data/)
unit_test_data_build: tests/data/records.fna
python3 make_test_data.py
## Run all unit tests
unit_test: tests/data/test_data.json test_environment
python3 -m pytest --durations=0 --cov=autometa --emoji --cov-report=html tests
## Run unit tests marked with WIP
unit_test_wip: tests/data/test_data.json test_environment
python3 -m pytest -m "wip" --durations=0 --cov=autometa --emoji --cov-report=html tests
## Run unit tests marked with entrypoint
unit_test_entrypoints: tests/data/test_data.json test_environment
python3 -m pytest -m "entrypoint" --durations=0 --cov=autometa --emoji --cov-report=html tests
#################################################################################
# Self Documenting Commands #
#################################################################################
.DEFAULT_GOAL := help
# Inspired by <http://marmelab.com/blog/2016/02/29/auto-documented-makefile.html>
# sed script explained:
# /^##/:
# * save line in hold space
# * purge line
# * Loop:
# * append newline + line to hold space
# * go to next line
# * if line starts with doc comment, strip comment character off and loop
# * remove target prerequisites
# * append hold space (+ newline) to line
# * replace newline plus comments by `---`
# * print line
# Separate expressions are necessary because labels cannot be delimited by
# semicolon; see <http://stackoverflow.com/a/11799865/1968>
.PHONY: help
help:
@echo "$$(tput bold)Available rules:$$(tput sgr0)"
@echo
@sed -n -e "/^## / { \
h; \
s/.*//; \
:doc" \
-e "H; \
n; \
s/^## //; \
t doc" \
-e "s/:.*//; \
G; \
s/\\n## /---/; \
s/\\n/ /g; \
p; \
}" ${MAKEFILE_LIST} \
| LC_ALL='C' sort --ignore-case \
| awk -F '---' \
-v ncol=$$(tput cols) \
-v indent=19 \
-v col_on="$$(tput setaf 6)" \
-v col_off="$$(tput sgr0)" \
'{ \
printf "%s%*s%s ", col_on, -indent, $$1, col_off; \
n = split($$2, words, " "); \
line_length = ncol - indent; \
for (i = 1; i <= n; i++) { \
line_length -= length(words[i]) + 1; \
if (line_length <= 0) { \
line_length = ncol - indent - length(words[i]) - 1; \
printf "\n%*s ", -indent, " "; \
} \
printf "%s ", words[i]; \
} \
printf "\n"; \
}' \
| more $(shell test $(shell uname) = Darwin && echo '--no-init --raw-control-chars')