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
MyMakefileE 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 testE para passar argumentos para o comando, basta passá-los após o comando com -- - esse é o jump of the cat.
Exemplo:
mm test -- --lfAssim, 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!