-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathMakefile
More file actions
183 lines (148 loc) · 5.36 KB
/
Makefile
File metadata and controls
183 lines (148 loc) · 5.36 KB
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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
#!/usr/bin/env make -f
# -*- makefile -*-
SHELL = bash -e
all_ps_hashes = $(shell docker ps -q)
img_hash = $(shell docker images -q luisalejandro/agoras:latest)
exec_on_docker = docker compose \
-p agoras -f docker-compose.yml exec \
--user agoras app
# Release configuration
VERSION_TYPE ?= patch
APP_NAME ?= Agoras
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
BROWSER := python3 -c "$$BROWSER_PYSCRIPT"
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 "lint - check style with flake8"
@echo "format - format Python code with autopep8"
@echo "lint-and-format - lint and format all Python files"
@echo "test - run tests quickly with the default Python"
@echo "test-all - run tests on every Python version with tox"
@echo "coverage - check code coverage quickly with the default Python"
@echo "docs - generate Sphinx HTML documentation, including API docs"
@echo "pypi-upload - package and upload a release"
@echo "dist - package"
@echo "install - install the package to the active Python's site-packages"
clean: clean-build clean-pyc clean-test clean-docs
clean-build:
rm -rf build/
rm -rf dist/
rm -rf .eggs/
find . -name '*.egg-info' -exec rm -rf {} +
find . -name '*.egg' -exec rm -rf {} +
clean-pyc:
find . -name '*.pyc' -exec rm -rf {} +
find . -name '*.pyo' -exec rm -rf {} +
find . -name '*~' -exec rm -rf {} +
find . -name '__pycache__' -exec rm -rf {} +
clean-test:
rm -rf .tox/
rm -rf .coverage
rm -rf htmlcov/
clean-docs:
rm -rf docs/_build
lint: start
@$(exec_on_docker) tox -e lint
format: start
@$(exec_on_docker) autoflake --in-place --recursive --remove-all-unused-imports --remove-unused-variables --ignore-init-module-imports packages/*/src/agoras
@$(exec_on_docker) autopep8 --in-place --recursive --aggressive --aggressive packages/*/src/agoras
lint-and-format: start
@$(exec_on_docker) autoflake --in-place --recursive --remove-all-unused-imports --remove-unused-variables --ignore-init-module-imports packages/*/src/agoras
@$(exec_on_docker) autopep8 --in-place --recursive --aggressive --aggressive packages/*/src/agoras
@$(exec_on_docker) tox -e lint
test: start
@$(exec_on_docker) tox -e all
functional-test: start
# @$(exec_on_docker) bash test.sh twitter
# @$(exec_on_docker) bash test.sh facebook
# @$(exec_on_docker) bash test.sh linkedin
# @$(exec_on_docker) bash test.sh instagram
@$(exec_on_docker) bash test.sh discord
coverage: start
@$(exec_on_docker) tox -e coverage
@$(BROWSER) htmlcov/index.html
docs:
@$(exec_on_docker) make -C docs clean
@$(exec_on_docker) make -C docs html
@$(BROWSER) docs/_build/html/index.html
servedocs: docs start
@$(exec_on_docker) watchmedo shell-command -p '*.rst' -c 'make -C docs html' -R -D .
pypi-upload: clean start dist
@twine upload dist/*
dist: clean start
@$(exec_on_docker) python3 -m build
@ls -l dist
install: clean start
@$(exec_on_docker) pip3 install .
image:
@docker compose -p agoras -f docker-compose.yml build \
--build-arg UID=$(shell id -u) \
--build-arg GID=$(shell id -g)
start:
@if [ -z "$(img_hash)" ]; then\
make image;\
fi
@docker compose -p agoras -f docker-compose.yml up \
--remove-orphans --no-build --detach
console: start
@$(exec_on_docker) bash
virtualenv: start
@python3 -m venv --clear --copies ./virtualenv
@./virtualenv/bin/python3 -m pip install --upgrade pip
@./virtualenv/bin/python3 -m pip install --upgrade setuptools
@./virtualenv/bin/python3 -m pip install --upgrade wheel
@./virtualenv/bin/python3 -m pip install -r requirements-dev.txt
@./virtualenv/bin/python3 -m pip install -e packages/common
@./virtualenv/bin/python3 -m pip install -e packages/media
@./virtualenv/bin/python3 -m pip install -e packages/core
@./virtualenv/bin/python3 -m pip install -e packages/platforms
@./virtualenv/bin/python3 -m pip install -e packages/cli
stop:
@docker compose -p agoras -f docker-compose.yml stop app
down:
@docker compose -p agoras -f docker-compose.yml down \
--remove-orphans
destroy:
@echo
@echo "WARNING!!!"
@echo "This will stop and delete all containers, images and volumes related to this project."
@echo
@read -p "Press ctrl+c to abort or enter to continue." -n 1 -r
@docker compose -p agoras -f docker-compose.yml down \
--rmi all --remove-orphans --volumes
cataplum:
@echo
@echo "WARNING!!!"
@echo "This will stop and delete all containers, images and volumes present in your system."
@echo
@read -p "Press ctrl+c to abort or enter to continue." -n 1 -r
@if [ -n "$(all_ps_hashes)" ]; then\
docker kill $(shell docker ps -q);\
fi
@docker compose -p agoras -f docker-compose.yml down \
--rmi all --remove-orphans --volumes
@docker system prune -a -f --volumes
# Release management
release:
@./scripts/release.sh $(VERSION_TYPE)
release-patch:
@./scripts/release.sh patch $(APP_NAME)
release-minor:
@./scripts/release.sh minor $(APP_NAME)
release-major:
@./scripts/release.sh major $(APP_NAME)
# Hotfix management
hotfix:
@./scripts/hotfix.sh $(APP_NAME)
.PHONY: clean-pyc clean-build docs clean release release-patch release-minor release-major hotfix