110 lines
4.3 KiB
Markdown
110 lines
4.3 KiB
Markdown
# 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 compose` 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).
|
|
|
|
If you want to run make from within the `php` container, in the [Dockerfile](/Dockerfile),
|
|
add:
|
|
|
|
```diff
|
|
gettext \
|
|
git \
|
|
+make \
|
|
```
|
|
|
|
And rebuild the PHP image.
|
|
|
|
> [!NOTE]
|
|
> If you are using Windows, you have to install [chocolatey.org](https://chocolatey.org/) or [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) bin/console
|
|
|
|
# Misc
|
|
.DEFAULT_GOAL = help
|
|
.PHONY : help build up start down logs sh composer vendor sf cc test
|
|
|
|
## —— 🎵 🐳 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 start 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 FrankenPHP container
|
|
@$(PHP_CONT) sh
|
|
|
|
bash: ## Connect to the FrankenPHP container via bash so up and down arrows go to previous commands
|
|
@$(PHP_CONT) bash
|
|
|
|
test: ## Start tests with phpunit, pass the parameter "c=" to add options to phpunit, example: make test c="--group e2e --stop-on-failure"
|
|
@$(eval c ?=)
|
|
@$(DOCKER_COMP) exec -e APP_ENV=test php bin/phpunit $(c)
|
|
|
|
|
|
## —— 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
|
|
```
|
|
|
|
## Adding and modifying jobs
|
|
|
|
Make sure to add this configuration to the [.editorconfig](/.editorconfig) file, so that it forces your editor to use tabs instead of spaces (Makefiles are not compatible with spaces by default).
|
|
|
|
```.editorconfig
|
|
|
|
[Makefile]
|
|
indent_style = tab
|
|
|
|
```
|
|
|
|
If you still want to use space, you can configure the prefix in the Makefile itself. See [this answer on StackExchange](https://retrocomputing.stackexchange.com/a/20303). |