Usar o docker compose é uma maravilha, a menos que você tenha diversos projetos pra gerenciar e
eles não estejam rodando nas mesmas portas, com comandos enormes e diferentes. A minha primeira ideia
seria criar um Makefile
mas o projeto já tem um Makefile
. 🤡
Como faz então para: ter atalhos locais rodando em comandos sucintos?
O primeiro passo: criar meu próprio Makefile
e chamá-lo de MyMakefile
.
.PHONY: test
# pega todos os argumentos da linha de comando após o alvo
ARGS = $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
test:
docker-compose exec app pytest project/ --no-migrations $(ARGS)
Para que ele não seja commitado no projeto, adicionei-o no meu .gitignore
global.
# ~/.gitconfig
[core]
excludesfile = ~/.gitignore
# ~/.gitignore
MyMakefile
E agora, como faço para rodar os comandos do MyMakefile
? Basta rodar o comando make -f MyMakefile
.
Mas esse comando é feio demais. Vamos criar um atalho para ele também. No meu .zshrc
(pode ser o seu .bashrc
)
adicionei o seguinte alias:
alias mm='f() { make -f MyMakefile $@ }; f'
Agora sim, está cheiroso. Para rodar os testes agora eu faço:
mm test
E para passar argumentos para o comando, basta passá-los após o comando com --
- esse é o jump of the cat.
Exemplo:
mm test -- --lf
Assim, ele vai rodar os testes e passar a flag --lf
para o pytest
(para rodar apenas os testes que falharam
da última vez).
Espero que esse post tenha sido útil! A ideia foi inspirada pelo Victor Salles. Valeu, Vito!