SHELL := /bin/bash .DEFAULT_GOAL := help # Copiar el archivo de configuración y avisar cuando hay que # actualizarlo. .env: .env.example @test -f $@ || cp -v $< $@ @test -f $@ && echo "Revisa $@ para actualizarlo con respecto a $<" @test -f $@ && diff -auN --color $@ $< include .env export # XXX: El espacio antes del comentario cuenta como espacio args ?=## Argumentos para Hain hain ?= $(HAINISH)## Ubicación de Hainish branch ?= $(shell git rev-parse --abbrev-ref HEAD)## Rama a deployear container ?= $(shell basename $(PWD)) help: always ## Ayuda @echo -e "Sutty\n" | sed -re "s/^.*/\x1B[38;5;197m&\x1B[0m/" @echo -e "Servidor: https://panel.$(SUTTY_WITH_PORT)/\n" @echo -e "Uso: make TAREA args=\"ARGUMENTOS\"\n" @echo -e "Tareas:\n" @grep -E "^[a-z\-]+:.*##" Makefile | sed -re "s/(.*):.*##(.*)/\1;\2/" | column -s ";" -t | sed -re "s/^([^ ]+) /\x1B[38;5;197m\1\x1B[0m/" @echo -e "\nArgumentos:\n" @grep -E "^[a-z\-]+ \?=.*##" Makefile | sed -re "s/(.*) \?=.*##(.*)/\1;\2/" | column -s ";" -t | sed -re "s/^([^ ]+) /\x1B[38;5;197m\1\x1B[0m/" assets: node_modules public/packs/manifest.json.br ## Compilar los assets test: always ## Ejecutar los tests $(MAKE) rake args="test RAILS_ENV=test $(args)" postgresql: /etc/hosts ## Iniciar la base de datos pgrep postgres >/dev/null || $(hain) postgresql serve-js: /etc/hosts node_modules ## Iniciar el servidor de desarrollo de Javascript $(hain) 'bundle exec ./bin/webpack-dev-server' serve: /etc/hosts postgresql Gemfile.lock ## Iniciar el servidor de desarrollo de Rails $(MAKE) rails args=server rails: ## Tareas de Rails $(MAKE) bundle args="exec rails $(args)" rake: ## Tareas de Rake $(MAKE) bundle args="exec rake $(args)" bundle: ## Tareas de bundler $(hain) 'bundle $(args)' rubocop: ## Yutea el código que está por ser commiteado git status --porcelain \ | grep -E "^(A|M)" \ | sed "s/^...//" \ | grep ".rb$$" \ | ../haini.sh/haini.sh "xargs -r ./bin/rubocop --auto-correct" audit: ## Encuentra dependencias con vulnerabilidades $(hain) 'gem install bundler-audit' $(hain) 'bundle audit --update' brakeman: ## Busca posibles vulnerabilidades en Sutty $(MAKE) bundle args='exec brakeman' yarn: ## Tareas de yarn $(hain) 'yarn $(args)' clean: ## Limpieza rm -rf _sites/test-* _deploy/test-* log/*.log tmp/cache tmp/letter_opener tmp/miniprofiler tmp/storage build: Gemfile.lock ## Generar la imagen Docker time docker build --build-arg="BRANCH=$(branch)" --build-arg="RAILS_MASTER_KEY=`cat config/master.key`" -t sutty/$(container) . docker tag sutty/$(container):latest sutty:keep @echo -e "\a" save: ## Subir la imagen Docker al nodo delegado time docker save sutty/$(container):latest | ssh root@$(delegate) docker load date +%F | xargs -I {} git tag -f $(container)-{} @echo -e "\a" # Todos los archivos de assets. Si alguno cambia, se van a recompilar # los assets que luego se suben al nodo delegado. assets := package.json yarn.lock $(shell find app/assets/ app/javascript/ -type f) public/packs/manifest.json.br: $(assets) $(hain) 'RAILS_GROUPS=assets RAILS_ENV=production NODE_ENV=production bundle exec rake assets:precompile assets:clean' # Correr un test en particular por ejemplo # `make test/models/usuarie_test.rb` tests := $(shell find test/ -name "*_test.rb") $(tests): always $(MAKE) test args="TEST=$@" # Agrega las direcciones locales al sistema /etc/hosts: always @echo "Chequeando si es necesario agregar el dominio local $(SUTTY)" @grep -q " postgresql.$(SUTTY)$$" $@ || echo -e "127.0.0.1 postgresql.$(SUTTY)\n::1 postgresql.$(SUTTY)" | sudo tee -a $@ # Instala las dependencias de Javascript node_modules: package.json $(MAKE) yarn # Instala las dependencias de Rails Gemfile.lock: Gemfile $(MAKE) bundle args=install .PHONY: always