From c9821467de5e0688cba51f4062a4bf2d278d201c Mon Sep 17 00:00:00 2001 From: "aynic.os" Date: Sun, 30 May 2021 23:45:30 +0200 Subject: [PATCH] wip --- .env.dist | 3 ++- Makefile | 4 +--- make/apps/build.mk | 10 +++++----- make/apps/clean.mk | 6 +----- make/apps/install.mk | 4 ++++ make/apps/php/cache.mk | 8 +------- make/apps/php/clean.mk | 5 ++--- make/apps/php/install.mk | 1 - make/apps/php/test.mk | 8 -------- make/def.mk | 16 +++++++++------- make/env.mk | 11 ++++++++--- make/help.mk | 5 ++++- 12 files changed, 37 insertions(+), 44 deletions(-) diff --git a/.env.dist b/.env.dist index 1854c3d..e8229ac 100644 --- a/.env.dist +++ b/.env.dist @@ -1 +1,2 @@ -APP_DOMAIN=myos.dist.localhost +APP=myos +ENV=dist diff --git a/Makefile b/Makefile index 42d3566..9be7b17 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,9 @@ -APP_TYPE := infra include make/include.mk ## # APP -app-build: build-rm myos-base - $(call install-parameters,,*,build) +app-build: myos-base install-build-parameters $(call make,docker-compose-build up) $(call make,docker-compose-exec ARGS='rm -Rf /root/.npm /log-buffer/*' SERVICE=logagent) $(call make,docker-commit) diff --git a/make/apps/build.mk b/make/apps/build.mk index a680e43..4ef9396 100644 --- a/make/apps/build.mk +++ b/make/apps/build.mk @@ -13,7 +13,7 @@ build@%: myos-base $(eval DRYRUN_IGNORE := false) $(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,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)) + $(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 build-env: Build .env file in docker $(SERVICE) to deploy .PHONY: build-env @@ -21,10 +21,10 @@ build-env: SERVICE ?= $(DOCKER_SERVICE) build-env: bootstrap $(call docker-compose-exec,$(SERVICE),rm -f .env && make .env ENV=$(ENV) && echo BUILD=true >> .env && echo BUILD_DATE='"\'"'$(shell date "+%d/%m/%Y %H:%M:%S %z" 2>/dev/null)'"\'"' >> .env && echo BUILD_STATUS='"\'"'$(shell git status -uno --porcelain 2>/dev/null)'"\'"' >> .env && echo DOCKER=false >> .env && $(foreach var,$(BUILD_APP_VARS),$(if $($(var)),sed -i '/^$(var)=/d' .env && echo $(var)='$($(var))' >> .env &&)) true) -# target build-rm: Empty build directory -.PHONY: build-rm -build-rm: - $(call exec,rm -rf build && mkdir -p build) +# target build-init: Empty build directory +.PHONY: build-init +build-init: + $(ECHO) rm -rf build && $(ECHO) mkdir -p build # target build-$(SHARED): Create shared folder in docker $(SERVICE) to deploy .PHONY: build-$(SHARED) diff --git a/make/apps/clean.mk b/make/apps/clean.mk index bb4c2af..3d4ec3c 100644 --- a/make/apps/clean.mk +++ b/make/apps/clean.mk @@ -2,13 +2,9 @@ # CLEAN .PHONY: clean app-clean -clean: app-clean docker-compose-down clean-env ## Clean application and docker images +clean: app-clean docker-compose-down .env-clean ## Clean application and docker images # target clean@%: Clean deployed application and docker images .PHONY: clean@% clean@%: $(call make,docker-compose-down DOCKER_COMPOSE_DOWN_OPTIONS='--rmi all -v') - -.PHONY: clean-env -clean-env: - rm -i .env || true diff --git a/make/apps/install.mk b/make/apps/install.mk index 4135221..d69f9c8 100644 --- a/make/apps/install.mk +++ b/make/apps/install.mk @@ -17,6 +17,10 @@ install-pgsql-database-%: myos-base $(call exec,[ $$(PGPASSWORD=$* psql -h postgres -U $* -d $* -c "\d" 2>/dev/null |wc -l) -eq 0 ] && [ -f "${APP_DIR}/$*.pgsql.gz" ] && gzip -cd "${APP_DIR}/$*.pgsql.gz" |PGPASSWORD="postgres" psql -h postgres -U postgres -d $* || true) $(call exec,[ $$(PGPASSWORD=$* psql -h postgres -U $* -d $* -c "\d" 2>/dev/null |wc -l) -eq 0 ] && [ -f "${APP_DIR}/$*.pgsql" ] && PGPASSWORD="postgres" psql -h postgres -U postgres -c "ALTER ROLE $* WITH SUPERUSER" && PGPASSWORD="postgres" pg_restore -h postgres --no-owner --role=$* -U postgres -d $* ${APP_DIR}/$*.pgsql && PGPASSWORD="postgres" psql -h postgres -U postgres -c "ALTER ROLE $* WITH NOSUPERUSER" || true) +.PHONY: install-build-parameters +install-build-parameters: + $(call install-parameters,,*,build) + .PHONY: install-parameters install-parameters: $(call install-parameters) diff --git a/make/apps/php/cache.mk b/make/apps/php/cache.mk index 962b639..3ae3be8 100644 --- a/make/apps/php/cache.mk +++ b/make/apps/php/cache.mk @@ -3,20 +3,14 @@ ## Clear symfony cache .PHONY: cache-clear -cache-clear: cache-clear-dev cache-clear-prod +cache-clear: cache-clear-$(SYMFONY_ENV) .PHONY: cache-clear-% cache-clear-%: bootstrap ## Clear symfony cache $(call docker-compose-exec,$(DOCKER_SERVICE),app/console cache:clear --env=$*) -.PHONY: cache-rm -cache-rm: bootstrap - $(call docker-compose-exec,$(DOCKER_SERVICE),rm -Rf app/cache/* app/logs/*) - $(if $(filter $(ENV),$(ENV_DEPLOY)),$(call docker-compose-exec,$(DOCKER_SERVICE),chown www-data app/cache/ app/logs/)) - .PHONY: cache-warmup cache-warmup: cache-warmup-$(SYMFONY_ENV) - $(if $(filter $(ENV),$(ENV_DEPLOY)),$(call docker-compose-exec,$(DOCKER_SERVICE),chown -R www-data app/cache/ app/logs/)) .PHONY: cache-warmup-% cache-warmup-%: bootstrap diff --git a/make/apps/php/clean.mk b/make/apps/php/clean.mk index b65831c..dc54188 100644 --- a/make/apps/php/clean.mk +++ b/make/apps/php/clean.mk @@ -1,12 +1,11 @@ ## # CLEAN -.PHONY: clean-php-app -clean-php-app: bootstrap +.PHONY: app-symfony-clean +app-symfony-clean: bootstrap $(call docker-compose-exec,$(DOCKER_SERVICE),rm -rf app/bootstrap.php.cache) $(call docker-compose-exec,$(DOCKER_SERVICE),rm -rf app/cache/* app/cach~) $(call docker-compose-exec,$(DOCKER_SERVICE),rm -rf app/logs/*) $(call docker-compose-exec,$(DOCKER_SERVICE),rm -rf var/cache/* var/cach~) $(call docker-compose-exec,$(DOCKER_SERVICE),rm -rf var/logs/*) $(call docker-compose-exec,$(DOCKER_SERVICE),rm -rf vendor/*) - $(call docker-compose-exec,$(DOCKER_SERVICE),rm -rf node_modules/*) diff --git a/make/apps/php/install.mk b/make/apps/php/install.mk index d22ffc9..7fffa3b 100644 --- a/make/apps/php/install.mk +++ b/make/apps/php/install.mk @@ -8,7 +8,6 @@ install-assets: install-assets-$(SYMFONY_ENV) install-assets-%: bootstrap $(call docker-compose-exec,$(DOCKER_SERVICE),app/console assetic:dump --env=$*) $(call docker-compose-exec,$(DOCKER_SERVICE),app/console assets:install --env=$*) - $(if $(filter $(ENV),$(ENV_DEPLOY)),$(call docker-compose-exec,$(DOCKER_SERVICE),chown -R www-data web/bundles/ web/css/ web/js/)) .PHONY: install-codecept install-codecept: bootstrap install-phpunit vendor/codeception/codeception/codecept diff --git a/make/apps/php/test.mk b/make/apps/php/test.mk index 8a8f0a2..b55bcb2 100644 --- a/make/apps/php/test.mk +++ b/make/apps/php/test.mk @@ -25,14 +25,6 @@ test-coverage-codeception-%: bootstrap install-codecept ## Run codeception tests test-func: bootstrap install-phpunit ## Run functional tests $(call docker-compose-exec,$(DOCKER_SERVICE),bin/phpunit --testsuite functional) -## Loop unit tests -.PHONY: test-loop -test-loop: bootstrap install-phpunit ## Loop unit tests - while true; \ - do $(MAKE) test; \ - read continue; \ - done; - ## Run search tests .PHONY: test-search test-search: bootstrap install-phpunit ## Run search tests diff --git a/make/def.mk b/make/def.mk index aa51ee7..7ff20e8 100644 --- a/make/def.mk +++ b/make/def.mk @@ -4,13 +4,13 @@ dquote ?= " quote ?= ' APP ?= $(if $(wildcard .git),$(notdir $(CURDIR))) APP_DIR ?= $(if $(APP),$(CURDIR)) -APP_DOMAIN ?= $(if ${DOMAIN},${ENV}.${DOMAIN},${ENV}) -APP_HOST ?= $(if ${APP_DOMAIN},${APP}.${APP_DOMAIN},${APP}) -APP_NAME ?= ${APP} -APP_PATH ?= /${APP_PATH_PREFIX} +APP_DOMAIN ?= $(if $(APP),$(ENV)$(addprefix .,$(DOMAIN))) +APP_HOST ?= $(if $(APP),$(APP)$(addprefix .,$(APP_DOMAIN))) +APP_NAME ?= $(APP) +APP_PATH ?= /$(APP_PATH_PREFIX) APP_SCHEME ?= https -APP_URI ?= ${APP_HOST}${APP_PATH} -APP_URL ?= ${APP_SCHEME}://${APP_URI} +APP_URI ?= $(if $(APP),$(APP_HOST)$(APP_PATH)) +APP_URL ?= $(if $(APP),$(APP_SCHEME)://$(APP_URI)) APPS ?= $(if $(MONOREPO),$(sort $(patsubst $(MONOREPO_DIR)/%/.git,%,$(wildcard $(MONOREPO_DIR)/*/.git)))) APPS_NAME ?= $(foreach app,$(APPS),$(or $(shell awk -F '=' '$$1 == "APP" {print $$2}' $(or $(wildcard $(MONOREPO_DIR)/$(app)/.env),$(wildcard $(MONOREPO_DIR)/$(app)/.env.$(ENV)),$(MONOREPO_DIR)/$(app)/.env.dist) 2>/dev/null),$(app))) BRANCH ?= $(shell git rev-parse --abbrev-ref HEAD 2>/dev/null) @@ -40,8 +40,10 @@ HOSTNAME ?= $(shell hostname 2>/dev/null |sed 's/\..*//') MAKE_ARGS ?= $(foreach var,$(MAKE_VARS),$(if $($(var)),$(var)='$($(var))')) MAKE_VARS ?= ENV MAKE_SUBDIRS ?= $(if $(filter myos,$(MYOS)),monorepo,$(if $(SUBREPO),subrepo )$(if $(APP),apps $(foreach type,$(APP_TYPE),$(if $(wildcard $(MAKE_DIR)/apps/$(type)),apps/$(type))))) -MAKECMDVARS ?= $(strip $(foreach var, $(filter-out .VARIABLES,$(.VARIABLES)), $(if $(filter command\ line,$(origin $(var))),$(var)))) MAKECMDARGS ?= $(foreach var,$(MAKECMDVARS),$(var)='$($(var))') +MAKECMDVARS ?= $(strip $(foreach var, $(filter-out .VARIABLES,$(.VARIABLES)), $(if $(filter command\ line,$(origin $(var))),$(var)))) +MAKEENVVARS ?= $(strip $(foreach var, $(filter-out .VARIABLES,$(.VARIABLES)), $(if $(filter environment,$(origin $(var))),$(var)))) +MAKEFILEVARS ?= $(strip $(foreach var, $(filter-out .VARIABLES,$(.VARIABLES)), $(if $(filter file,$(origin $(var))),$(var)))) MAKETARGETS ?= $(filter-out $(.VARIABLES),$(shell $(MAKE) -qp 2>/dev/null |awk -F':' '/^[a-zA-Z0-9][^$$\#\/\t=]*:([^=]|$$)/ {print $$1}' |sort -u)) MONOREPO ?= $(if $(filter myos,$(MYOS)),$(notdir $(CURDIR)),$(if $(APP),$(notdir $(realpath $(CURDIR)/..)))) MONOREPO_DIR ?= $(if $(MONOREPO),$(if $(filter myos,$(MYOS)),$(realpath $(CURDIR)),$(if $(APP),$(realpath $(CURDIR)/..)))) diff --git a/make/env.mk b/make/env.mk index a06b52e..139bfd2 100644 --- a/make/env.mk +++ b/make/env.mk @@ -4,6 +4,10 @@ .env: .env.dist $(call .env,,,$(wildcard ../$(PARAMETERS)/$(ENV)/$(APP)/.env .env.$(ENV))) +.PHONY: .env-clean +.env-clean: + rm -f .env || true + # include .env file -include .env @@ -55,13 +59,14 @@ endef # keep variables that exists in .env.dist # keep variables that does not exist in .env # read variables definition in a subshell with multiline support - # create a new environment (empty if $(ENV_RESET) is true) + # create a new environment (empty if $(ENV_RESET) is true) with + # $(env.args) # read environment variables and keep only those existing in .env.dist # add .env overrides variables definition # add .env.dist variables definition # remove empty lines or comments # remove duplicate variables - # replace variabless in stdin with their value from the new environment + # replace variables in stdin with their value from the new environment # remove residual empty lines or comments # sort alphabetically # add variables definition to the .env file @@ -75,7 +80,7 @@ define .env_update |awk -F '=' 'ARGV[1] == FILENAME { A[$$1]; next } ($$1 in A)' $(env_dist) - 2>/dev/null \ |awk -F '=' 'ARGV[1] == FILENAME { A[$$1]; next } !($$1 in A)' $(env_file) - 2>/dev/null \ |(IFS=$$'\n'; \ - env $(env_reset) \ + env $(env_reset) $(env.args) \ $$(env |awk -F '=' 'NR == FNR { if($$1 !~ /^(#|$$)/) { A[$$1]; next } } ($$1 in A)' $(env_dist) - \ |cat - $(env_over) \ |cat - $(env_dist) \ diff --git a/make/help.mk b/make/help.mk index 96b24eb..b38fcf3 100644 --- a/make/help.mk +++ b/make/help.mk @@ -33,4 +33,7 @@ context: .PHONY: context--% context-%: - printf "${COLOR_BLUE}%-31s${COLOR_RESET} ${COLOR_GREEN}%s${COLOR_RESET}\n" $* "$($*)" + printf "${COLOR_BLUE}%-31s${COLOR_RESET}" $* + printf "${COLOR_GREEN}" + $(call PRINTF,$($*)) + printf "${COLOR_RESET}"