From 2e31a39382e75306e3ec02d7c24ff3136978aed9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Vernet?= Date: Thu, 7 Oct 2021 13:48:05 +0200 Subject: [PATCH] Added a Makefile (#180) --- README.md | 4 ++- docs/makefile.md | 79 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 docs/makefile.md diff --git a/README.md b/README.md index 4657f21..1e652da 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ A [Docker](https://www.docker.com/)-based installer and runtime for the [Symfony 2. Run `docker-compose build --pull --no-cache` to build fresh images 3. Run `docker-compose up` (the logs will be displayed in the current shell) 4. Open `https://localhost` in your favorite web browser and [accept the auto-generated TLS certificate](https://stackoverflow.com/a/15076602/1352334) +5. Run `docker-compose down --remove-orphans` to stop the Docker containers. ## Features @@ -30,7 +31,8 @@ A [Docker](https://www.docker.com/)-based installer and runtime for the [Symfony 3. [Support for extra services](docs/extra-services.md) 4. [Deploying in production](docs/production.md) 5. [Installing Xdebug](docs/xdebug.md) -6. [Troubleshooting](docs/troubleshooting.md) +6. [Using a Makefile](docs/makefile.md) +7. [Troubleshooting](docs/troubleshooting.md) ## Credits diff --git a/docs/makefile.md b/docs/makefile.md new file mode 100644 index 0000000..2c20e23 --- /dev/null +++ b/docs/makefile.md @@ -0,0 +1,79 @@ +# Makefile + +Here is a Makefile template. It provides some shortcuts for the most common tasks. +To use it, create a new `Makefile` file at the root of your project. Copy/paste +the content in the template section. To view all the available commands, run `make`. + +For example, in the [getting started section](/README.md#getting-started), the +`docker-composer` commands could be replaced by: + +1. Run `make build` to build fresh images +2. Run `make up` (detached mode without logs) +3. Run `make down` to stop the Docker containers + +Of course, this template is basic for now. But, as your application is growing, +you will probably want to add some targets like running your tests as described +in [the Symfony book](https://symfony.com/doc/current/the-fast-track/en/17-tests.html#automating-your-workflow-with-a-makefile). +You can also find a more complete example in this [snippet](https://www.strangebuzz.com/en/snippets/the-perfect-makefile-for-symfony). + +**PS**: If using Windows, you have to install [chocolatey.org](https://chocolatey.org/) +or use [Cygwin](http://cygwin.com) to use the `make` command. Check out this +[StackOverflow question](https://stackoverflow.com/q/2532234/633864) for more explanations. + +## The template + +```Makefile +# Executables (local) +DOCKER_COMP = docker-compose + +# Docker containers +PHP_CONT = $(DOCKER_COMP) exec php + +# Executables +PHP = $(PHP_CONT) php +COMPOSER = $(PHP_CONT) composer +SYMFONY = $(PHP_CONT) bin/console + +# Misc +.DEFAULT_GOAL = help +.PHONY = help build up start down logs sh composer vendor sf cc + +## —— 🎵 🐳 The Symfony-docker Makefile 🐳 🎵 —————————————————————————————————— +help: ## Outputs this help screen + @grep -E '(^[a-zA-Z0-9_-]+:.*?##.*$$)|(^##)' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}{printf "\033[32m%-30s\033[0m %s\n", $$1, $$2}' | sed -e 's/\[32m##/[33m/' + +## —— Docker 🐳 ———————————————————————————————————————————————————————————————— +build: ## Builds the Docker images + @$(DOCKER_COMP) build --pull --no-cache + +up: ## Start the docker hub in detached mode (no logs) + @$(DOCKER_COMP) up --detach + +start: build up ## Build and starts the containers + +down: ## Stop the docker hub + @$(DOCKER_COMP) down --remove-orphans + +logs: ## Show live logs + @$(DOCKER_COMP) logs --tail=0 --follow + +sh: ## Connect to the PHP FPM container + @$(PHP_CONT) sh + +## —— Composer 🧙 —————————————————————————————————————————————————————————————— +composer: ## Run composer, pass the parameter "c=" to run a given command, example: make composer c='req symfony/orm-pack' + @$(eval c ?=) + @$(COMPOSER) $(c) + +vendor: ## Install vendors according to the current composer.lock file +vendor: c=install --prefer-dist --no-dev --no-progress --no-scripts --no-interaction +vendor: composer + +## —— Symfony 🎵 ——————————————————————————————————————————————————————————————— +sf: ## List all Symfony commands or pass the parameter "c=" to run a given command, example: make sf c=about + @$(eval c ?=) + @$(SYMFONY) $(c) + +cc: c=c:c ## Clear the cache +cc: sf +```