diff --git a/make/apps/common.mk b/make/apps/common.mk index 547ff6b..7a1f966 100644 --- a/make/apps/common.mk +++ b/make/apps/common.mk @@ -95,7 +95,7 @@ stack-%: $(eval stack := $(subst -$(lastword $(subst -, ,$*)),,$*)) $(eval command := $(lastword $(subst -, ,$*))) $(if $(findstring -,$*), \ - $(if $(filter $(command),$(filter-out %-%,$(patsubst docker-compose-%,%,$(filter docker-compose-%,$(MAKETARGETS))))), \ + $(if $(filter $(command),$(filter-out %-%,$(patsubst docker-compose-%,%,$(filter docker-compose-%,$(MAKE_TARGETS))))), \ $(call make,docker-compose-$(command) STACK="$(stack)" $(if $(filter node,$(stack)),COMPOSE_PROJECT_NAME=$(COMPOSE_PROJECT_NAME_NODE)),,ARGS COMPOSE_IGNORE_ORPHANS SERVICE))) .PHONY: start @@ -121,4 +121,4 @@ update: app-update ## Update application # target %-rule-exists: Print a warning message if $* target does not exists %-rule-exists: - $(if $(filter $*,$(MAKECMDGOALS)),$(if $(filter-out $*,$(MAKETARGETS)),printf "${COLOR_BROWN}WARNING${COLOR_RESET}: ${COLOR_GREEN}target${COLOR_RESET} $* ${COLOR_GREEN}not available in app${COLOR_RESET} $(APP).\n" >&2)) + $(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)) diff --git a/make/apps/def.mk b/make/apps/def.mk index 4db0865..3fa4f7a 100644 --- a/make/apps/def.mk +++ b/make/apps/def.mk @@ -16,3 +16,4 @@ ENV_VARS += APP_DIR APP_DOMAIN APP_HOST APP_PATH APP_URL MOUNT_NFS ?= false NFS_CONFIG ?= addr=$(NFS_HOST),actimeo=3,intr,noacl,noatime,nocto,nodiratime,nolock,soft,rsize=32768,wsize=32768,tcp,rw,vers=3 NFS_HOST ?= host.docker.internal +PARAMETERS ?= ../parameters diff --git a/make/apps/subrepo/def.mk b/make/apps/subrepo/def.mk new file mode 100644 index 0000000..1c6654a --- /dev/null +++ b/make/apps/subrepo/def.mk @@ -0,0 +1,2 @@ +SUBREPO_DIR ?= $(CURDIR) +SUBREPO_COMMIT ?= $(shell git rev-parse subrepo/$(SUBREPO)/$(BRANCH) 2>/dev/null) diff --git a/make/def.mk b/make/def.mk index 29ba0f9..97cd86f 100644 --- a/make/def.mk +++ b/make/def.mk @@ -10,7 +10,7 @@ BRANCH ?= $(shell git rev-parse --abbrev-ref HEAD 2>/de CMDS ?= exec exec:% exec@% run run:% run@% COMMIT ?= $(shell git rev-parse $(BRANCH) 2>/dev/null) CONTEXT ?= $(if $(APP),APP BRANCH VERSION) $(shell awk 'BEGIN {FS="="}; $$1 !~ /^(\#|$$)/ {print $$1}' .env.dist 2>/dev/null) -CONTEXT_DEBUG ?= APPS GIT_AUTHOR_EMAIL GIT_AUTHOR_NAME MAKE_DIR MAKE_SUBDIRS MAKE_CMD_ARGS MAKE_ENV_ARGS MONOREPO_DIR UID USER env +CONTEXT_DEBUG ?= APPS GIT_AUTHOR_EMAIL GIT_AUTHOR_NAME MAKEFILE_LIST MAKE_DIR MAKE_SUBDIRS MAKE_CMD_ARGS MAKE_ENV_ARGS MONOREPO_DIR UID USER env DEBUG ?= false DOCKER ?= true DOMAIN ?= localhost @@ -26,7 +26,7 @@ ENV_VARS ?= APP BRANCH ENV HOSTNAME GID GIT_AUTHOR_EMAIL GID ?= $(shell id -g 2>/dev/null) GIT_AUTHOR_EMAIL ?= $(shell git config user.email 2>/dev/null) GIT_AUTHOR_NAME ?= $(shell git config user.name 2>/dev/null) -GIT_PARAMETERS_REPOSITORY ?= $(call pop,$(GIT_UPSTREAM_REPOSITORY))/$(PARAMETERS) +GIT_PARAMETERS_REPOSITORY ?= $(call pop,$(GIT_UPSTREAM_REPOSITORY))/$(notdir $(PARAMETERS)) GIT_REPOSITORY ?= $(if $(SUBREPO),$(shell awk -F ' = ' '$$1 ~ /^[[\s\t]]*remote$$/ {print $$2}' .gitrepo 2>/dev/null),$(shell git config --get remote.origin.url 2>/dev/null)) GIT_UPSTREAM_REPOSITORY ?= $(if $(findstring ://,$(GIT_REPOSITORY)),$(call pop,$(call pop,$(GIT_REPOSITORY)))/,$(call pop,$(GIT_REPOSITORY),:):)$(GIT_UPSTREAM_USER)/$(lastword $(subst /, ,$(GIT_REPOSITORY))) GIT_UPSTREAM_USER ?= $(or $(MONOREPO),$(USER)) @@ -44,13 +44,10 @@ MAKE_VARS ?= ENV 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)/..)))) MYOS ?= $(if $(filter $(MAKE_DIR),$(call pop,$(MAKE_DIR))),,$(call pop,$(MAKE_DIR))) -PARAMETERS ?= parameters RECURSIVE ?= true SHARED ?= shared SSH_DIR ?= ${HOME}/.ssh SUBREPO ?= $(if $(wildcard .gitrepo),$(notdir $(CURDIR))) -SUBREPO_DIR ?= $(if $(SUBREPO),$(CURDIR)) -SUBREPO_COMMIT ?= $(if $(SUBREPO),$(shell git rev-parse subrepo/$(SUBREPO)/$(BRANCH) 2>/dev/null)) TAG ?= $(shell git tag -l --points-at $(BRANCH) 2>/dev/null) UID ?= $(shell id -u 2>/dev/null) USER ?= $(shell id -nu 2>/dev/null) diff --git a/make/env.mk b/make/env.mk index 139bfd2..7e4724b 100644 --- a/make/env.mk +++ b/make/env.mk @@ -20,10 +20,10 @@ env.docker = $(env.docker.args) $(env.docker.dist) $(env.docker.file) env.args = $(foreach var,$(ENV_VARS),$(if $($(var)),$(var)='$($(var))')) env.dist = $(shell printenv |awk -F '=' 'NR == FNR { if($$1 !~ /^(\#|$$)/) { A[$$1]; next } } ($$1 in A)' .env.dist - 2>/dev/null) -env.file = $(shell cat $(ENV_FILE) 2>/dev/null |sed '/^[ \t]*$$/d;/^[ \t]*\#/d;') +env.file = $(shell cat $(wildcard $(ENV_FILE)) 2>/dev/null |sed '/^[ \t]*$$/d;/^[ \t]*\#/d;') env.docker.args = $(foreach var,$(ENV_VARS),$(if $($(var)),-e $(var)='$($(var))')) env.docker.dist = $(shell printenv |awk -F '=' 'NR == FNR { if($$1 !~ /^(\#|$$)/) { A[$$1]; next } } ($$1 in A) {print "-e "$$0}' .env.dist - 2>/dev/null) -env.docker.file = $(patsubst %,--env-file %,$(ENV_FILE)) +env.docker.file = $(patsubst %,--env-file %,$(wildcard $(ENV_FILE))) SHELL:=/bin/bash diff --git a/make/help.mk b/make/help.mk index 297975f..207c63e 100644 --- a/make/help.mk +++ b/make/help.mk @@ -29,7 +29,7 @@ target: ## Show current context context: printf "${COLOR_BROWN}Context:${COLOR_RESET}\n" - $(MAKE) $(foreach var,$(CONTEXT),$(if $($(var)),context-$(var))) + $(MAKE) $(foreach var,$(CONTEXT),$(if $($(var)),context-$(var))) FORCE .PHONY: context-% context-%: diff --git a/make/monorepo/def.mk b/make/monorepo/def.mk index 7f5a17f..d30a909 100644 --- a/make/monorepo/def.mk +++ b/make/monorepo/def.mk @@ -3,4 +3,5 @@ CONTEXT += APPS ENV RELEASE DIRS ?= $(MAKE_DIR) $(PARAMETERS) $(SHARED) RELEASE_UPGRADE ?= $(filter v%, $(shell git tag -l 2>/dev/null |sort -V |awk '/$(RELEASE)/,0')) RELEASE_VERSION ?= $(firstword $(subst -, ,$(VERSION))) +PARAMETERS ?= parameters SUBREPOS ?= $(filter subrepo/%, $(shell git remote 2>/dev/null)) diff --git a/make/myos.mk b/make/myos.mk index 89e3cb9..70d3a46 100644 --- a/make/myos.mk +++ b/make/myos.mk @@ -3,6 +3,6 @@ .PHONY: myos-% myos-%: ; -ifneq ($(wildcard $(MYOS)),) +ifeq ($(wildcard $(MYOS)),$(MYOS)) $(call make,$*,$(MYOS)) endif diff --git a/make/apps/update.mk b/make/update.mk similarity index 80% rename from make/apps/update.mk rename to make/update.mk index 3eee6c8..6d6dd52 100644 --- a/make/apps/update.mk +++ b/make/update.mk @@ -1,6 +1,12 @@ ## # UPDATE +.PHONY: update-parameters +update-app: $(APP) ## Update application source files + +$(APP): myos-base + $(call exec,[ -d ../$(APP) ] && cd ../$(APP) && git pull --quiet origin $(BRANCH) || git clone --quiet $(APP_REPOSITORY) ../$(APP)) + ## Update /etc/hosts .PHONY: update-hosts update-hosts: @@ -8,23 +14,22 @@ ifneq (,$(filter $(ENV),local)) cat */.env 2>/dev/null |grep -Eo 'urlprefix-[^/]+' |sed 's/urlprefix-//' |while read host; do grep $$host /etc/hosts >/dev/null 2>&1 || { echo "Adding $$host to /etc/hosts"; echo 127.0.0.1 $$host |$(ECHO) sudo tee -a /etc/hosts >/dev/null; }; done endif -.PHONY: update-$(PARAMETERS) -update-$(PARAMETERS): $(PARAMETERS) +.PHONY: update-parameters +update-parameters: $(PARAMETERS) $(PARAMETERS): SSH_PUBLIC_HOST_KEYS := $(PARAMETERS_REMOTE_HOST) $(SSH_BASTION_HOSTNAME) $(SSH_REMOTE_HOSTS) $(PARAMETERS): MAKE_VARS += SSH_BASTION_HOSTNAME SSH_BASTION_USERNAME SSH_PRIVATE_IP_RANGE SSH_PUBLIC_HOST_KEYS $(PARAMETERS): myos-base $(call exec,[ -d $(PARAMETERS) ] && cd $(PARAMETERS) && git pull --quiet || git clone --quiet $(APP_PARAMETERS_REPOSITORY)) -## Update remotes -.PHONY: update-remotes -update-remotes: myos-base - $(call exec,git fetch --all --prune --tags) - .PHONY: update-remote-% update-remote-%: myos-base $(call exec,git fetch --prune --tags $*) +.PHONY: update-remotes +update-remotes: myos-base + $(call exec,git fetch --all --prune --tags) + .PHONY: update-upstream update-upstream: myos-base .git/refs/remotes/upstream/master $(call exec,git fetch --prune --tags upstream)