VENV = venv PYTEST = $(PWD)/$(VENV)/bin/py.test # These targets are not files .PHONY: build_sandbox clean compile_translations coverage css docs extract_translations help install install-python \ install-test install-js lint release retest sandbox_clean sandbox_image sandbox test todo venv package help: ## Display this help message @echo "Please use \`make \` where is one of" @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; \ {printf "\033[36m%-40s\033[0m %s\n", $$1, $$2}' ################## # Install commands ################## install: install-python install-test assets ## Install requirements for local development and production install-python: ## Install python requirements pip install -r requirements.txt --upgrade --upgrade-strategy=eager install-test: ## Install test requirements pip install -e .[test] --upgrade --upgrade-strategy=eager install-migrations-testing-requirements: ## Install migrations testing requirements pip install -r requirements_migrations.txt assets: ## Install static assets npm install npm run build venv: ## Create a virtual env and install test and production requirements $(shell which python3) -m venv $(VENV) $(VENV)/bin/pip install -e .[test] $(VENV)/bin/pip install -r docs/requirements.txt ############################# # Sandbox management commands ############################# sandbox: install build_sandbox ## Install requirements and create a sandbox build_sandbox: sandbox_clean sandbox_load_user sandbox_load_data ## Creates a sandbox from scratch sandbox_clean: ## Clean sandbox images,cache,static and database # Remove media -rm -rf sandbox/public/media/images -rm -rf sandbox/public/media/cache -rm -rf sandbox/public/static -rm -f sandbox/db.sqlite # Create database sandbox/manage.py migrate sandbox_load_user: ## Load user data into sandbox sandbox/manage.py loaddata sandbox/fixtures/auth.json sandbox_load_data: ## Import fixtures and collect static # Import some fixtures. Order is important as JSON fixtures include primary keys sandbox/manage.py loaddata sandbox/fixtures/child_products.json sandbox/manage.py oscar_import_catalogue sandbox/fixtures/*.csv sandbox/manage.py oscar_import_catalogue_images sandbox/fixtures/images.tar.gz sandbox/manage.py oscar_populate_countries --initial-only sandbox/manage.py loaddata sandbox/fixtures/pages.json sandbox/fixtures/ranges.json sandbox/fixtures/offers.json sandbox/manage.py loaddata sandbox/fixtures/orders.json sandbox/manage.py clear_index --noinput sandbox/manage.py update_index catalogue sandbox/manage.py thumbnail cleanup sandbox/manage.py collectstatic --noinput sandbox_image: ## Build latest docker image of django-oscar-sandbox docker build -t django-oscar-sandbox:latest . ################## # Tests and checks ################## test: venv ## Run tests $(PYTEST) retest: venv ## Run failed tests only $(PYTEST) --lf coverage: venv ## Generate coverage report $(PYTEST) --cov=oscar --cov-report=term-missing lint: @black --check --exclude "migrations/*" src/oscar/ @black --check --exclude "migrations/*" tests/ @pylint setup.py src/oscar/ @pylint setup.py tests/ black: @black --exclude "migrations/*" src/oscar/ @black --exclude "migrations/*" tests/ test_migrations: install-migrations-testing-requirements ## Tests migrations cd sandbox && ./test_migrations.sh ####################### # Translations Handling ####################### extract_translations: ## Extract strings and create source .po files cd src/oscar; django-admin.py makemessages -a compile_translations: ## Compile translation files and create .mo files cd src/oscar; django-admin compilemessages ###################### # Project Management ###################### clean: ## Remove files not in source control find . -type f -name "*.pyc" -delete rm -rf nosetests.xml coverage.xml htmlcov *.egg-info *.pdf dist violations.txt docs: venv ## Compile docs make -C docs html SPHINXBUILD=$(PWD)/$(VENV)/bin/sphinx-build todo: ## Look for areas of the code that need updating when some event has taken place (like Oscar dropping support for a Django version) -grep -rnH TODO *.txt -grep -rnH TODO src/oscar/apps/ -grep -rnH "django.VERSION" src/oscar/apps package: clean pip install --upgrade pip twine wheel npm ci rm -rf src/oscar/static/ rm -rf dist/ rm -rf build/ npm run build python setup.py clean --all python setup.py sdist bdist_wheel release: package ## Creates release twine upload -s dist/*