myos/make/apps/common.mk

231 lines
7.1 KiB
Makefile
Raw Normal View History

2021-02-09 17:05:00 +01:00
##
# COMMON
2021-06-02 00:54:33 +02:00
# target bootstrap: Update application files and start dockers
# on local host
2021-02-09 17:05:00 +01:00
.PHONY: bootstrap
2021-06-02 00:54:33 +02:00
bootstrap: bootstrap-git bootstrap-docker app-bootstrap ## Update application files and start dockers
2021-02-09 17:05:00 +01:00
2021-06-02 00:54:33 +02:00
# target bootstrap-docker: Build and start application dockers
# on local host
2021-02-09 17:05:00 +01:00
.PHONY: boostrap-docker
bootstrap-docker: docker-network-create
$(call make,docker-compose-up)
2021-06-02 00:54:33 +02:00
# target bootstrap-git: Fire update-app
2021-02-09 17:05:00 +01:00
.PHONY: bootstrap-git
2021-06-02 00:54:33 +02:00
bootstrap-git: update-app
2021-05-17 03:40:02 +02:00
2021-06-02 00:54:33 +02:00
# target bootstrap-git-%: Clone GIT_REPOSITORY in folder %
# on local host
2021-05-17 03:40:02 +02:00
.PHONY: bootstrap-git-%
bootstrap-git-%:
if ! git config remote.origin.url > /dev/null ; \
2021-06-02 00:54:33 +02:00
then git clone $(QUIET) $(GIT_REPOSITORY) $*; \
2021-02-09 17:05:00 +01:00
fi
2021-06-02 00:54:33 +02:00
# target build: Build application docker images to run
# on local host
.PHONY: build
build: docker-compose-build ## Build application docker images
# target build@%: Build application docker images to deploy of % ENV
# on local host
.PHONY: build@% app-build
build@%: myos-base
$(eval docker_images += $(foreach service,$(SERVICES),$(if $(shell docker images -q $(DOCKER_REPOSITORY)/$(service):$(DOCKER_IMAGE_TAG) 2>/dev/null),$(service))))
$(eval build_app := $(or $(filter $(DOCKER_BUILD_CACHE),false),$(filter-out $(docker_images),$(SERVICES))))
$(if $(build_app), \
$(call make,build-init app-build), \
$(if $(filter $(VERBOSE),true), \
$(foreach service,$(SERVICES), \
echo "docker image $(DOCKER_REPOSITORY)/$(service):$(DOCKER_IMAGE_TAG) has id $(shell docker images -q $(DOCKER_REPOSITORY)/$(service):$(DOCKER_IMAGE_TAG) 2>/dev/null)" && \
) true \
) \
)
# target clean: Clean application and docker images
# on local host
.PHONY: clean app-clean
clean: app-clean docker-compose-down .env-clean ## Clean application and docker images
# target clean@%: Clean deployed application and docker images of % ENV
# on local host
.PHONY: clean@%
clean@%:
$(call make,docker-compose-down DOCKER_COMPOSE_DOWN_OPTIONS='--rmi all -v')
# target config: View application docker compose file
# on local host
2021-02-09 17:05:00 +01:00
.PHONY: config
2021-06-02 00:54:33 +02:00
config: docker-compose-config ## View application docker compose file
2021-02-09 17:05:00 +01:00
2021-06-02 00:54:33 +02:00
# target connect: Connect to docker SERVICE
# on local host
2021-02-09 17:05:00 +01:00
.PHONY: connect
2021-06-02 00:54:33 +02:00
connect: docker-compose-connect ## Connect to docker SERVICE
2021-02-09 17:05:00 +01:00
2021-06-02 00:54:33 +02:00
# target connect@%: Connect to docker SERVICE of % ENV
# on first remote host
2021-02-09 17:05:00 +01:00
.PHONY: connect@%
connect@%: SERVICE ?= $(DOCKER_SERVICE)
2021-06-02 00:54:33 +02:00
connect@%:
2021-05-17 03:40:02 +02:00
$(call make,ssh-connect,$(MYOS),APP SERVICE)
2021-02-09 17:05:00 +01:00
2021-06-06 16:29:54 +02:00
# target deploy: Fire deploy@% for ENV
2021-06-02 00:54:33 +02:00
.PHONY: deploy
deploy: deploy@$(ENV) ## Deploy application dockers
# target down: Remove application dockers
# on local host
2021-02-09 17:05:00 +01:00
.PHONY: down
down: docker-compose-down ## Remove application dockers
2021-06-06 16:29:54 +02:00
# target exec: Exec ARGS in docker SERVICE
2021-06-02 00:54:33 +02:00
# on local host
2021-02-09 17:05:00 +01:00
.PHONY: exec
2021-06-02 00:54:33 +02:00
exec: ## Exec command in docker SERVICE
2021-02-09 17:05:00 +01:00
ifneq (,$(filter $(ENV),$(ENV_DEPLOY)))
$(call exec,$(ARGS))
else
$(call make,docker-compose-exec,,ARGS)
endif
2021-06-06 16:29:54 +02:00
# target exec@%: Exec ARGS in docker SERVICE of % ENV
2021-06-02 00:54:33 +02:00
# on all remote hosts
2021-02-09 17:05:00 +01:00
.PHONY: exec@%
exec@%: SERVICE ?= $(DOCKER_SERVICE)
2021-06-02 00:54:33 +02:00
exec@%:
2021-05-17 03:40:02 +02:00
$(call make,ssh-exec,$(MYOS),APP ARGS SERVICE)
2021-02-09 17:05:00 +01:00
2021-06-02 00:54:33 +02:00
# target install app-install: Install application
# on local host
.PHONY: install app-install
2021-06-06 16:29:54 +02:00
install: update-app app-install ## Install application
2021-06-02 00:54:33 +02:00
# target logs: Display application dockers logs
# on local host
2021-02-09 17:05:00 +01:00
.PHONY: logs
logs: docker-compose-logs ## Display application dockers logs
2021-06-02 00:54:33 +02:00
# target ps: List application dockers
# on local host
2021-02-09 17:05:00 +01:00
.PHONY: ps
ps: docker-compose-ps ## List application dockers
2021-06-02 00:54:33 +02:00
# target rebuild: Rebuild application docker images
# on local host
.PHONY: rebuild
rebuild: docker-compose-rebuild ## Rebuild application dockers images
# target rebuild@%: Rebuild application docker images
# on local host
.PHONY: rebuild@%
rebuild@%:
$(call make,build@$* DOCKER_BUILD_CACHE=false)
# target recreate: Recreate application dockers
# on local host
2021-02-09 17:05:00 +01:00
.PHONY: recreate
2021-05-31 03:45:39 +02:00
recreate: docker-compose-recreate app-start ## Recreate application dockers
2021-02-09 17:05:00 +01:00
2021-06-06 16:29:54 +02:00
# target reinstall: Fire clean, Call .env target, Call install target
2021-06-02 00:54:33 +02:00
# on local host
2021-02-09 17:05:00 +01:00
.PHONY: reinstall
reinstall: clean ## Reinstall application
$(call make,.env)
$(call make,install)
2021-06-02 00:54:33 +02:00
# target release: Fire release-create
.PHONY: release
release: release-create ## Create release VERSION
# target restart: Restart application dockers
# on local host
2021-02-09 17:05:00 +01:00
.PHONY: restart
2021-05-31 03:45:39 +02:00
restart: docker-compose-restart app-start ## Restart application
2021-02-09 17:05:00 +01:00
2021-06-06 16:29:54 +02:00
# target run: Run command ARGS in a new docker SERVICE
2021-06-02 00:54:33 +02:00
# on local host
2021-02-09 17:05:00 +01:00
.PHONY: run
run: ## Run a command in a new docker
ifneq (,$(filter $(ENV),$(ENV_DEPLOY)))
$(call run,$(ARGS))
else
$(call make,docker-compose-run,,ARGS)
endif
2021-06-06 16:29:54 +02:00
# target run@%: Run command ARGS in a new docker SERVICE of % ENV
2021-06-02 00:54:33 +02:00
# on all remote hosts
2021-02-09 17:05:00 +01:00
.PHONY: run@%
run@%: SERVICE ?= $(DOCKER_SERVICE)
2021-06-02 00:54:33 +02:00
run@%:
2021-05-17 03:40:02 +02:00
$(call make,ssh-run,$(MYOS),APP ARGS)
2021-02-09 17:05:00 +01:00
2021-06-02 00:54:33 +02:00
# target scale: Scale SERVICE application to NUM dockers
# on local host
2021-02-09 17:05:00 +01:00
.PHONY: scale
2021-06-02 00:54:33 +02:00
scale: docker-compose-scale ## Scale SERVICE application to NUM dockers
2021-02-09 17:05:00 +01:00
2021-06-02 00:54:33 +02:00
# target ssh@%: Connect to % ENV
# on first remote host
2021-02-09 17:05:00 +01:00
.PHONY: ssh@%
2021-06-02 00:54:33 +02:00
ssh@%:
2021-05-17 03:40:02 +02:00
$(call make,ssh,$(MYOS),APP)
2021-02-09 17:05:00 +01:00
2021-06-02 00:54:33 +02:00
# target stack: Call docker-stack for each STACK
## it updates COMPOSE_FILE with all .yml files of the current stack
2021-02-09 17:05:00 +01:00
.PHONY: stack
stack:
$(foreach stackz,$(STACK),$(call docker-stack,$(stackz)))
2021-06-06 16:29:54 +02:00
# target stack-%: Call docker-compose-% target on STACK
2021-06-02 00:54:33 +02:00
## it splits % on dashes and extracts stack from the beginning and command from
## the last part of %
## ex: stack-base-up will fire the docker-compose-up target in the base stack
2021-02-09 17:05:00 +01:00
.PHONY: stack-%
stack-%:
$(eval stack := $(subst -$(lastword $(subst -, ,$*)),,$*))
$(eval command := $(lastword $(subst -, ,$*)))
$(if $(findstring -,$*), \
2021-05-31 22:29:12 +02:00
$(if $(filter $(command),$(filter-out %-%,$(patsubst docker-compose-%,%,$(filter docker-compose-%,$(MAKE_TARGETS))))), \
2021-05-17 03:40:02 +02:00
$(call make,docker-compose-$(command) STACK="$(stack)" $(if $(filter node,$(stack)),COMPOSE_PROJECT_NAME=$(COMPOSE_PROJECT_NAME_NODE)),,ARGS COMPOSE_IGNORE_ORPHANS SERVICE)))
2021-02-09 17:05:00 +01:00
2021-06-06 16:29:54 +02:00
# target start app-start: Start application dockers
2021-06-02 00:54:33 +02:00
# on local host
2021-06-06 16:29:54 +02:00
.PHONY: start app-start
2021-02-09 17:05:00 +01:00
start: docker-compose-start ## Start application dockers
2021-06-02 00:54:33 +02:00
# target stop: Stop application dockers
# on local host
2021-02-09 17:05:00 +01:00
.PHONY: stop
stop: docker-compose-stop ## Stop application dockers
2021-06-02 00:54:33 +02:00
# target tests app-tests: Test application
# on local host
2021-02-09 17:05:00 +01:00
.PHONY: tests app-tests
tests: app-tests ## Test application
2021-06-02 00:54:33 +02:00
# target up: Create and start application dockers
# on local host
2021-02-09 17:05:00 +01:00
.PHONY: up
2021-05-31 03:45:39 +02:00
up: docker-compose-up app-start ## Create application dockers
2021-02-09 17:05:00 +01:00
2021-06-02 00:54:33 +02:00
# target update app-update: Update application files
# on local host
2021-02-09 17:05:00 +01:00
.PHONY: update app-update
2021-06-02 00:54:33 +02:00
update: update-app app-update ## Update application files
# target upgrade app-upgrade: Upgrade application
# on local host
.PHONY: upgrade app-upgrade
upgrade: update app-upgrade release-upgrade ## Upgrade application
2021-02-09 17:05:00 +01:00
# target %: Always fired target
2021-06-02 00:54:33 +02:00
## it fires the stack and %-rule-exists targets everytime
2021-02-09 17:05:00 +01:00
%: FORCE stack %-rule-exists ;
2021-06-02 00:54:33 +02:00
# target %-rule-exists: Print a warning message if % target does not exists
2021-02-09 17:05:00 +01:00
%-rule-exists:
2021-05-31 22:29:12 +02:00
$(if $(filter $*,$(MAKECMDGOALS)),$(if $(filter-out $*,$(MAKE_TARGETS)),printf "${COLOR_BROWN}WARNING${COLOR_RESET}: ${COLOR_GREEN}target${COLOR_RESET} $* ${COLOR_GREEN}not available in app${COLOR_RESET} $(APP).\n" >&2))