From f5aaff9ab1b80e098ab6fa45e846ff2f94de5f23 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 8 May 2019 22:59:59 -0400 Subject: [PATCH] Add automated help and organize makefile targets Signed-off-by: Roberto Rosario --- Makefile | 142 ++++++++++++++++++---------------------------- docker/Dockerfile | 2 +- docker/Makefile | 20 ++----- 3 files changed, 61 insertions(+), 103 deletions(-) diff --git a/Makefile b/Makefile index 01d32f1793..9d61bbd021 100644 --- a/Makefile +++ b/Makefile @@ -1,64 +1,20 @@ .PHONY: clean-pyc clean-build -help: docker-help - @echo - @echo "**** Main makefile ****" - @echo "clean-build - Remove build artifacts." - @echo "clean-pyc - Remove Python artifacts." - @echo "clean - Remove Python and build artifacts." - @echo "generate-setup - Create and updated setup.py" - @echo "check-readme - Checks validity of the README.rst file for PyPI publication." - @echo "check-missing_migrations - Make sure all models have proper migrations." - - @echo "test-all - Run all tests." - @echo "test MODULE= - Run tests for a single app, module or test class." - @echo "test-with-postgres-all - Run all tests against a Postgres database container." - @echo "test-postgres MODULE= - Run tests for a single app, module or test class against a Postgres database container." - @echo "test-with-mysql-all - Run all tests against a MySQL database container." - @echo "test-mysql MODULE= - Run tests for a single app, module or test class against a MySQL database container." - @echo "test-with-oracle-all - Run all tests against a Oracle database container." - @echo "test-oracle MODULE= - Run tests for a single app, module or test class against a Oracle database container." - - @echo "docs-serve - Run the livehtml documentation generator." - - @echo "translations-make - Refresh all translation files." - @echo "translations-compile - Compile all translation files." - @echo "translations-push - Upload all translation files to Transifex." - @echo "translations-pull - Download all translation files from Transifex." - - @echo "sdist - Build the source distribution package." - @echo "wheel - Build the wheel distribution package." - @echo "release - Package (sdist and wheel) and upload a release." - @echo "test-release - Package (sdist and wheel) and upload to the PyPI test server." - @echo "release-test-via-docker-ubuntu - Package (sdist and wheel) and upload to the PyPI test server using an Ubuntu Docker builder." - @echo "release-via-docker-ubuntu - Package (sdist and wheel) and upload to PyPI using an Ubuntu Docker builder." - @echo "test-sdist-via-docker-ubuntu - Make an sdist packange and test it using an Ubuntu Docker container." - @echo "test-wheel-via-docker-ubuntu - Make a wheel package and test it using an Ubuntu Docker container." - @echo "runserver - Run the development server." - @echo "runserver_plus - Run the Django extension's development server." - @echo "shell_plus - Run the shell_plus command." - - @echo "test-with-docker-services-on - Launch and initialize production-like services using Docker (Postgres and Redis)." - @echo "test-with-docker-services-off - Stop and delete the Docker production-like services." - @echo "test-with-docker-frontend - Launch a front end instance that uses the production-like services." - @echo "test-with-docker-worker - Launch a worker instance that uses the production-like services." - @echo "docker-mysql-on - Launch and initialize a MySQL Docker container." - @echo "docker-mysql-off - Stop and delete the MySQL Docker container." - @echo "docker-postgres-on - Launch and initialize a PostgreSQL Docker container." - @echo "docker-postgres-off - Stop and delete the PostgreSQL Docker container." - - @echo "safety-check - Run a package safety check." +help: + @awk 'BEGIN {FS = ":.*##"; printf "Usage: make \n"} /^[a-zA-Z_-]+:.*?## / { printf " * %-40s -%s\n", $$1, $$2 }' $(MAKEFILE_LIST)|sort # Cleaning +clean: ## Remove Python and build artifacts. clean: clean-build clean-pyc -clean-build: +clean-build: ## Remove build artifacts. rm -fr build/ rm -fr dist/ rm -fr *.egg-info -clean-pyc: +clean-pyc: ## Remove Python artifacts. + find . -name '*.pyc' -exec rm -f {} + find . -name '*.pyo' -exec rm -f {} + find . -name '*~' -exec rm -f {} + @@ -66,10 +22,10 @@ clean-pyc: # Testing -test: +test: ## MODULE= - Run tests for a single app, module or test class. ./manage.py test $(MODULE) --settings=mayan.settings.testing.development --nomigrations $(ARGUMENTS) -test-all: +test-all: ## Run all tests. ./manage.py test --mayan-apps --settings=mayan.settings.testing.development --nomigrations $(ARGUMENTS) test-launch-postgres: @@ -80,11 +36,13 @@ test-launch-postgres: pip install psycopg2 while ! docker inspect --format='{{json .State.Health}}' test-postgres|grep 'Status":"healthy"'; do sleep 1; done +test-with-postgres: ## MODULE= - Run tests for a single app, module or test class against a Postgres database container. test-with-postgres: test-launch-postgres ./manage.py test $(MODULE) --settings=mayan.settings.testing.docker.db_postgres --nomigrations @docker rm -f test-postgres || true @docker volume rm test-postgres || true +test-with-postgres-all: ## Run all tests against a Postgres database container. test-with-postgres-all: test-launch-postgres ./manage.py test --mayan-apps --settings=mayan.settings.testing.docker.db_postgres --nomigrations @docker rm -f test-postgres || true @@ -99,11 +57,14 @@ test-launch-mysql: while ! docker inspect --format='{{json .State.Health}}' test-mysql|grep 'Status":"healthy"'; do sleep 1; done mysql -h 127.0.0.1 -P 3306 -uroot -e "set global character_set_server=utf8mb4;" +test-with-mysql: ## MODULE= - Run tests for a single app, module or test class against a MySQL database container. test-with-mysql: test-launch-mysql ./manage.py test $(MODULE) --settings=mayan.settings.testing.docker.db_mysql --nomigrations @docker rm -f test-mysql || true @docker volume rm test-mysql || true + +test-with-mysql-all: ## Run all tests against a MySQL database container. test-with-mysql-all: test-launch-mysql ./manage.py test --mayan-apps --settings=mayan.settings.testing.docker.db_mysql --nomigrations @docker rm -f test-mysql || true @@ -118,11 +79,13 @@ test-launch-oracle: while ! nc -z 127.0.0.1 49161; do sleep 1; done sleep 10 +test-with-oracle: ## MODULE= - Run tests for a single app, module or test class against a Oracle database container. test-with-oracle: test-launch-oracle ./manage.py test $(MODULE) --settings=mayan.settings.testing.docker.db_oracle --nomigrations @docker rm -f test-oracle || true @docker volume rm test-oracle || true +test-with-oracle-all: ## Run all tests against a Oracle database container. test-with-oracle-all: test-launch-oracle ./manage.py test --mayan-apps --settings=mayan.settings.testing.docker.db_oracle --nomigrations @docker rm -f test-oracle || true @@ -130,35 +93,34 @@ test-with-oracle-all: test-launch-oracle # Documentation -docs-serve: +docs-serve: ## Run the livehtml documentation generator. cd docs;make livehtml -docs-spellcheck: - +docs-spellcheck: ## Spellcheck the documentation. sphinx-build -b spelling -d docs/_build/ docs docs/_build/spelling # Translations -translations-make: +translations-make: ## Refresh all translation files. contrib/scripts/process_messages.py -m -translations-compile: +translations-compile: ## Compile all translation files. contrib/scripts/process_messages.py -c -translations-push: +translations-push: ## Upload all translation files to Transifex. tx push -s -translations-pull: +translations-pull: ## Download all translation files from Transifex. tx pull -f -generate-setup: +generate-setup: ## Create and update the setup.py file. @./generate_setup.py @echo "Complete." # Releases -increase-version: +increase-version: ## Increase the version number of the entire project's files. @VERSION=`grep "__version__ =" mayan/__init__.py| cut -d\' -f 2|./increase_version.py - $(PART)`; \ BUILD=`echo $$VERSION|awk '{split($$VERSION,a,"."); printf("0x%02d%02d%02d\n", a[1],a[2], a[3])}'`; \ sed -i -e "s/__build__ = 0x[0-9]*/__build__ = $${BUILD}/g" mayan/__init__.py; \ @@ -166,22 +128,26 @@ increase-version: echo $$VERSION > docker/version make generate-setup -test-release: clean wheel +python-test-release: ## Package (sdist and wheel) and upload to the PyPI test server. +python-test-release: clean wheel twine upload dist/* -r testpypi @echo "Test with: pip install -i https://testpypi.python.org/pypi mayan-edms" -release: clean wheel +python-release: ## Package (sdist and wheel) and upload a release. +python-release: clean python-wheel twine upload dist/* -r pypi -sdist: clean +python-sdist: ## Build the source distribution package. +python-sdist: clean python setup.py sdist ls -l dist -wheel: clean sdist +python-wheel: ## Build the wheel distribution package. +python-wheel: clean python-sdist pip wheel --no-index --no-deps --wheel-dir dist dist/*.tar.gz ls -l dist -release-test-via-docker-ubuntu: +python-release-test-via-docker-ubuntu: ## Package (sdist and wheel) and upload to the PyPI test server using an Ubuntu Docker builder. docker run --rm --name mayan_release -v $(HOME):/host_home:ro -v `pwd`:/host_source -w /source ubuntu:16.04 /bin/bash -c "\ echo "LC_ALL=\"en_US.UTF-8\"" >> /etc/default/locale && \ locale-gen en_US.UTF-8 && \ @@ -194,7 +160,7 @@ release-test-via-docker-ubuntu: cp -r /host_home/.pypirc ~/.pypirc && \ make test-release" -release-via-docker-ubuntu: +python-release-via-docker-ubuntu: ## Package (sdist and wheel) and upload to PyPI using an Ubuntu Docker builder. docker run --rm --name mayan_release -v $(HOME):/host_home:ro -v `pwd`:/host_source -w /source ubuntu:16.04 /bin/bash -c "\ apt-get update && \ apt-get -y install locales && \ @@ -208,7 +174,7 @@ release-via-docker-ubuntu: cp -r /host_home/.pypirc ~/.pypirc && \ make release" -test-sdist-via-docker-ubuntu: +test-sdist-via-docker-ubuntu: ## Make an sdist package and test it using an Ubuntu Docker container. docker run --rm --name mayan_sdist_test -v $(HOME):/host_home:ro -v `pwd`:/host_source -w /source ubuntu:16.04 /bin/bash -c "\ cp -r /host_source/* . && \ echo "LC_ALL=\"en_US.UTF-8\"" >> /etc/default/locale && \ @@ -221,7 +187,7 @@ test-sdist-via-docker-ubuntu: make sdist-test-suit \ " -test-wheel-via-docker-ubuntu: +test-wheel-via-docker-ubuntu: ## Make a wheel package and test it using an Ubuntu Docker container. docker run --rm --name mayan_wheel_test -v $(HOME):/host_home:ro -v `pwd`:/host_source -w /source ubuntu:16.04 /bin/bash -c "\ cp -r /host_source/* . && \ echo "LC_ALL=\"en_US.UTF-8\"" >> /etc/default/locale && \ @@ -234,7 +200,7 @@ test-wheel-via-docker-ubuntu: make wheel-test-suit \ " -sdist-test-suit: sdist +python-sdist-test-suit: sdist rm -f -R _virtualenv virtualenv _virtualenv sh -c '\ @@ -245,7 +211,7 @@ sdist-test-suit: sdist _virtualenv/bin/mayan-edms.py test --mayan-apps \ ' -wheel-test-suit: wheel +python-wheel-test-suit: wheel rm -f -R _virtualenv virtualenv _virtualenv sh -c '\ @@ -258,16 +224,16 @@ wheel-test-suit: wheel # Dev server -runserver: +runserver: ## Run the development server. ./manage.py runserver --settings=mayan.settings.development $(ADDRPORT) -runserver_plus: +runserver_plus: ## Run the Django extension's development server. ./manage.py runserver_plus --settings=mayan.settings.development $(ADDRPORT) -shell_plus: +shell_plus: ## Run the shell_plus command. ./manage.py shell_plus --settings=mayan.settings.development -test-with-docker-services-on: +test-with-docker-services-on: ## Launch and initialize production-like services using Docker (Postgres and Redis). docker run -d --name redis -p 6379:6379 redis docker run -d --name postgres -p 5432:5432 postgres while ! nc -z 127.0.0.1 6379; do sleep 1; done @@ -275,45 +241,45 @@ test-with-docker-services-on: sleep 4 ./manage.py initialsetup --settings=mayan.settings.staging.docker -test-with-docker-services-off: +test-with-docker-services-off: ## Stop and delete the Docker production-like services. docker stop postgres redis docker rm postgres redis -test-with-docker-frontend: +test-with-docker-frontend: ## Launch a front end instance that uses the production-like services. ./manage.py runserver --settings=mayan.settings.staging.docker -test-with-docker-worker: +test-with-docker-worker: ## Launch a worker instance that uses the production-like services. ./manage.py celery worker --settings=mayan.settings.staging.docker -B -l INFO -O fair -docker-mysql-on: +docker-mysql-on: ## Launch and initialize a MySQL Docker container. docker run -d --name mysql -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=True -e MYSQL_DATABASE=mayan_edms mysql while ! nc -z 127.0.0.1 3306; do sleep 1; done -docker-mysql-off: +docker-mysql-off: ## Stop and delete the MySQL Docker container. docker stop mysql docker rm mysql -docker-postgres-on: +docker-postgres-on: ## Launch and initialize a PostgreSQL Docker container. docker run -d --name postgres -p 5432:5432 postgres while ! nc -z 127.0.0.1 5432; do sleep 1; done -docker-postgres-off: +docker-postgres-off: ## Stop and delete the PostgreSQL Docker container. docker stop postgres docker rm postgres # Security -safety-check: +safety-check: ## Run a package safety check. safety check # Other -find-gitignores: +find-gitignores: ## Find stray .gitignore files. @export FIND_GITIGNORES=`find -name '.gitignore'| wc -l`; \ if [ $${FIND_GITIGNORES} -gt 1 ] ;then echo "More than one .gitignore found."; fi -build: +python-build: docker rm -f mayan-edms-build || true && \ docker run --rm --name mayan-edms-build -v $(HOME):/host_home:ro -v `pwd`:/host_source -w /source python:2-slim sh -c "\ rm /host_source/dist -R || true && \ @@ -326,11 +292,11 @@ build: make wheel && \ cp dist/* /host_source/dist/" -check-readme: +check-readme: ## Checks validity of the README.rst file for PyPI publication. python setup.py check -r -s -check-missing-migrations: +check-missing-migrations: ## Make sure all models have proper migrations. ./manage.py makemigrations --dry-run --noinput --check -include docker/Makefile +-include docker/Makefile diff --git a/docker/Dockerfile b/docker/Dockerfile index 0559a1bc1f..85c1399716 100755 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -103,7 +103,7 @@ ENV LC_ALL C.UTF-8 RUN touch docker/Makefile -RUN make wheel +RUN make python-wheel RUN chmod 777 dist -R diff --git a/docker/Makefile b/docker/Makefile index 203448c4f2..9b89a955dc 100755 --- a/docker/Makefile +++ b/docker/Makefile @@ -3,31 +3,23 @@ IMAGE_VERSION ?= `cat docker/version` CONSOLE_COLUMNS ?= `echo $$(tput cols)` CONSOLE_LINES ?= `echo $$(tput lines)` -docker-help: - @echo - @echo "**** Docker makefile ****" - @echo "docker-build - Build a new image locally." - @echo "docker-build-with-proxy - Build a new image locally using an APT proxy." - @echo "docker-test-container - Build and run a test container." - @echo "docker-test-cleanup - Delete the test container and the test volume." - @echo "docker-test-all - Build and executed the test suite in a test container." - @echo "docker-shell - Launch a bash instance inside a running container. Pass the container name via DOCKER_CONTAINER." - -docker-build: +docker-build: ## Build a new image locally. docker build -t mayanedms/mayanedms:$(IMAGE_VERSION) -f docker/Dockerfile . -docker-build-with-proxy: +docker-build-with-proxy: ## Build a new image locally using an APT proxy. docker build -t mayanedms/mayanedms:$(IMAGE_VERSION) -f docker/Dockerfile --build-arg APT_PROXY=$(APT_PROXY) . -docker-shell: +docker-shell: ## Launch a bash instance inside a running container. Pass the container name via DOCKER_CONTAINER. docker exec -e TERM=$(TERM) -e "COLUMNS=$(CONSOLE_COLUMNS)" -e "LINES=$(CONSOLE_LINES)" -it $(DOCKER_CONTAINER) /bin/bash +docker-test-container: ## Build and run a test container. docker-test-container: docker-build-with-proxy docker-test-cleanup docker run -d --name test-mayan-edms -p 80:8000 -v test-mayan_data:/var/lib/mayan mayanedms/mayanedms:$(DOCKER_VERSION) -docker-test-cleanup: +docker-test-cleanup: ## Delete the test container and the test volume. @docker rm -f test-mayan-edms || true @docker volume rm test-mayan_data || true +docker-test-all: ## Build and executed the test suite in a test container. docker-test-all: docker-build-with-proxy docker run --rm run-tests