diff --git a/.env.dist b/.env.dist index e8229ac..32974b1 100644 --- a/.env.dist +++ b/.env.dist @@ -1,2 +1,3 @@ APP=myos +DOCKER_SERVICE=cli ENV=dist diff --git a/make/apps/def.docker.mk b/make/apps/def.docker.mk index 21f738f..e089d9c 100644 --- a/make/apps/def.docker.mk +++ b/make/apps/def.docker.mk @@ -14,9 +14,11 @@ COMPOSE_FILE_TMPFS ?= false else COMPOSE_FILE_TMPFS ?= true endif +COMPOSE_IGNORE_ORPHANS ?= false COMPOSE_PROJECT_NAME ?= $(USER)_$(ENV)_$(APP) COMPOSE_SERVICE_NAME ?= $(subst _,-,$(COMPOSE_PROJECT_NAME)) -CONTEXT += COMPOSE_FILE COMPOSE_PROJECT_NAME DOCKER_IMAGE_TAG DOCKER_REPOSITORY DOCKER_SERVICE +CONTEXT += COMPOSE_FILE DOCKER_IMAGE_TAG DOCKER_REPOSITORY DOCKER_SERVICE +CONTEXT_DEBUG += DOCKER_REGISTRY_REPOSITORY DOCKER_BUILD_ARGS ?= $(if $(filter $(DOCKER_BUILD_NO_CACHE),true),--pull --no-cache) $(foreach var,$(DOCKER_BUILD_VARS),$(if $($(var)),--build-arg $(var)='$($(var))')) DOCKER_BUILD_CACHE ?= true DOCKER_BUILD_NO_CACHE ?= false @@ -41,6 +43,7 @@ DOCKER_REGISTRY ?= registry DOCKER_REGISTRY_USERNAME ?= $(USER) DOCKER_REGISTRY_REPOSITORY ?= $(addsuffix /,$(DOCKER_REGISTRY))$(subst $(USER),$(DOCKER_REGISTRY_USERNAME),$(DOCKER_REPOSITORY)) DOCKER_REPOSITORY ?= $(subst _,/,$(COMPOSE_PROJECT_NAME)) +DOCKER_SERVICE ?= $(shell $(call docker-compose,--log-level critical config --services) |tail -1) DOCKER_SHELL ?= $(SHELL) ENV_VARS += COMPOSE_PROJECT_NAME COMPOSE_SERVICE_NAME DOCKER_BUILD_TARGET DOCKER_GID DOCKER_IMAGE_TAG DOCKER_REGISTRY DOCKER_REPOSITORY DOCKER_SHELL diff --git a/make/apps/def.mk b/make/apps/def.mk index 71f6e08..4db0865 100644 --- a/make/apps/def.mk +++ b/make/apps/def.mk @@ -1,12 +1,18 @@ +APP_DIR ?= $(CURDIR) +APP_DOMAIN ?= $(ENV)$(addprefix .,$(DOMAIN)) +APP_HOST ?= $(APP)$(addprefix .,$(APP_DOMAIN)) +APP_NAME ?= $(APP) +APP_PARAMETERS_REPOSITORY ?= $(GIT_PARAMETERS_REPOSITORY) +APP_PATH ?= /$(APP_PATH_PREFIX) +APP_REPOSITORY ?= $(GIT_REPOSITORY) +APP_SCHEME ?= https +APP_UPSTREAM_REPOSITORY ?= $(or $(shell git config --get remote.upstream.url 2>/dev/null),$(GIT_UPSTREAM_REPOSITORY)) +APP_URI ?= $(APP_HOST)$(APP_PATH) +APP_URL ?= $(APP_SCHEME)://$(APP_URI) BUILD_ENV_VARS ?= APP BRANCH COMMIT DEPLOY_HOOK_URL ENV VERSION -COMPOSE_IGNORE_ORPHANS ?= false -ENV_VARS += CONSUL_HTTP_TOKEN GIT_AUTHOR_EMAIL GIT_AUTHOR_NAME NFS_CONFIG -GIT_AUTHOR_EMAIL ?= $(shell git config user.email 2>/dev/null) -GIT_AUTHOR_NAME ?= $(shell git config user.name 2>/dev/null) +CONTEXT_DEBUG += APP_DIR APP_DOMAIN APP_HOST APP_PATH APP_URL APP_REPOSITORY APP_UPSTREAM_REPOSITORY APP_PARAMETERS_REPOSITORY CONSUL_HTTP_TOKEN +ENV_DEPLOY ?= $(shell ls .git/refs/heads/) +ENV_VARS += APP_DIR APP_DOMAIN APP_HOST APP_PATH APP_URL CONSUL_HTTP_TOKEN $(if $(filter true,$(MOUNT_NFS)),NFS_CONFIG) 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 -SETUP_NFSD ?= false -SETUP_NFSD_OSX_CONFIG ?= nfs.server.bonjour=0 nfs.server.mount.regular_files=1 nfs.server.mount.require_resv_port=0 nfs.server.nfsd_threads=16 nfs.server.async=1 -SETUP_SYSCTL ?= false -SETUP_SYSCTL_CONFIG ?= vm.max_map_count=262144 vm.overcommit_memory=1 fs.file-max=8388608 net.core.somaxconn=1024 diff --git a/make/apps/def.setup.mk b/make/apps/def.setup.mk new file mode 100644 index 0000000..c141821 --- /dev/null +++ b/make/apps/def.setup.mk @@ -0,0 +1,4 @@ +SETUP_NFSD ?= false +SETUP_NFSD_OSX_CONFIG ?= nfs.server.bonjour=0 nfs.server.mount.regular_files=1 nfs.server.mount.require_resv_port=0 nfs.server.nfsd_threads=16 nfs.server.async=1 +SETUP_SYSCTL ?= false +SETUP_SYSCTL_CONFIG ?= vm.max_map_count=262144 vm.overcommit_memory=1 fs.file-max=8388608 net.core.somaxconn=1024 diff --git a/make/apps/myos/def.mk b/make/apps/myos/def.mk index 398ad77..5a7453b 100644 --- a/make/apps/myos/def.mk +++ b/make/apps/myos/def.mk @@ -1,7 +1,5 @@ CMDS += ssh-run COMPOSE_IGNORE_ORPHANS := true -CONTEXT += GIT_AUTHOR_EMAIL GIT_AUTHOR_NAME -DOCKER_SERVICE ?= cli ENV_VARS += COMPOSE_IGNORE_ORPHANS DOCKER_IMAGE_CLI DOCKER_IMAGE_SSH DOCKER_NAME_CLI DOCKER_NAME_SSH HOME ?= /home/$(USER) NFS_DISK ?= $(NFS_HOST):/$(SHARED) diff --git a/make/apps/php/def.mk b/make/apps/php/def.mk index 9d0afa7..ee81efc 100644 --- a/make/apps/php/def.mk +++ b/make/apps/php/def.mk @@ -1,5 +1,4 @@ BUILD_ENV_VARS += SYMFONY_ENV -DOCKER_SERVICE ?= php ifneq (,$(filter $(ENV),$(ENV_DEPLOY))) SYMFONY_ENV ?= prod diff --git a/make/apps/subrepo/subrepo.mk b/make/apps/subrepo/subrepo.mk index 5dcc276..acb43a8 100644 --- a/make/apps/subrepo/subrepo.mk +++ b/make/apps/subrepo/subrepo.mk @@ -1,15 +1,17 @@ -## Update subrepos -.PHONY: update-subrepo update-subrepos -update-subrepo update-subrepos: bootstrap-git git-stash subrepos-push git-unstash +## +# SUBREPO -.PHONY: subrepos-branch-delete -subrepos-branch-delete: +.PHONY: subrepo-branch-delete subrepos-branch-delete +subrepo-branch-delete subrepos-branch-delete: $(call make,subrepo-branch-delete,..,SUBREPO BRANCH) -.PHONY: subrepos-tag-create-% -subrepos-tag-create-%: +.PHONY: subrepo-push subrepos-push +subrepo-push subrepos-push: + $(call make,subrepo-push,..,SUBREPO BRANCH) + +.PHONY: subrepo-tag-create-% subrepos-tag-create-% +subrepo-tag-create-% subrepos-tag-create-%: $(call make,subrepo-tag-create-$*,..,SUBREPO TAG) -.PHONY: subrepos-push -subrepos-push: - $(call make,subrepo-push,..,SUBREPO BRANCH) +.PHONY: subrepo-update subrepos-update +subrepo-update subrepos-update: bootstrap-git git-stash subrepo-push git-unstash diff --git a/make/monorepo/update.mk b/make/apps/update.mk similarity index 57% rename from make/monorepo/update.mk rename to make/apps/update.mk index 1acc09d..3eee6c8 100644 --- a/make/monorepo/update.mk +++ b/make/apps/update.mk @@ -12,36 +12,22 @@ endif update-$(PARAMETERS): $(PARAMETERS) $(PARAMETERS): SSH_PUBLIC_HOST_KEYS := $(PARAMETERS_REMOTE_HOST) $(SSH_BASTION_HOSTNAME) $(SSH_REMOTE_HOSTS) -$(PARAMETERS): MAKE_ENV_VARS += SSH_BASTION_HOSTNAME SSH_BASTION_USERNAME SSH_PRIVATE_IP_RANGE SSH_PUBLIC_HOST_KEYS +$(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 release version number in .env -.PHONY: update-release -update-release: - $(ECHO) awk -v s=RELEASE_INSTALL=$(RELEASE_VERSION) '/^RELEASE_INSTALL=/{$$0=s;f=1} {a[++n]=$$0} END{if(!f)a[++n]=s;for(i=1;i<=n;i++)print a[i]>ARGV[1]}' .env - ## Update remotes .PHONY: update-remotes update-remotes: myos-base - $(call exec,git fetch --all --prune --tags -u) + $(call exec,git fetch --all --prune --tags) .PHONY: update-remote-% update-remote-%: myos-base - $(call exec,git fetch --prune --tags -u $*) - -## Update subrepos -.PHONY: update-subrepos -update-subrepos: myos-base git-stash $(APPS) git-unstash ## Update subrepos - $(call exec,git push upstream $(BRANCH)) - -.PHONY: update-subrepo-% -update-subrepo-%: - $(if $(wildcard $*/Makefile),$(call make,update-subrepo,$*)) + $(call exec,git fetch --prune --tags $*) .PHONY: update-upstream update-upstream: myos-base .git/refs/remotes/upstream/master - $(call exec,git fetch --tags upstream) + $(call exec,git fetch --prune --tags upstream) .git/refs/remotes/upstream/master: myos-base $(call exec,git remote add upstream $(APP_UPSTREAM_REPOSITORY) 2>/dev/null ||:) diff --git a/make/def.mk b/make/def.mk index 9bcd31f..29ba0f9 100644 --- a/make/def.mk +++ b/make/def.mk @@ -3,24 +3,14 @@ dollar ?= $ dquote ?= " quote ?= ' APP ?= $(if $(wildcard .git),$(notdir $(CURDIR))) -APP_DIR ?= $(if $(APP),$(CURDIR)) -APP_DOMAIN ?= $(if $(APP),$(ENV)$(addprefix .,$(DOMAIN))) -APP_HOST ?= $(if $(APP),$(APP)$(addprefix .,$(APP_DOMAIN))) -APP_NAME ?= $(APP) -APP_PARAMETERS_REPOSITORY ?= $(GIT_PARAMETERS_REPOSITORY) -APP_PATH ?= /$(APP_PATH_PREFIX) -APP_SCHEME ?= https APP_TYPE ?= $(if $(SUBREPO),subrepo) $(if $(MYOS),,myos) -APP_UPSTREAM_REPOSITORY ?= $(GIT_UPSTREAM_REPOSITORY) -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) 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) UID USER -CONTEXT_DEBUG ?= APP_DIR MAKE_DIR MAKE_SUBDIRS MAKEFILE_LIST MONOREPO_DIR env +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 DEBUG ?= false DOCKER ?= true DOMAIN ?= localhost @@ -29,25 +19,28 @@ DRYRUN ?= false DRYRUN_IGNORE ?= false DRYRUN_RECURSIVE ?= false ENV ?= dist -ENV_DEPLOY ?= $(if $(APP),$(shell ls .git/refs/heads/)) ENV_FILE ?= $(wildcard ../$(PARAMETERS)/$(ENV)/$(APP)/.env) .env ENV_LIST ?= debug local tests release master #TODO: staging develop ENV_RESET ?= false -ENV_VARS ?= APP APP_DIR APP_DOMAIN BRANCH ENV HOSTNAME GID MONOREPO MONOREPO_DIR TAG UID USER VERSION +ENV_VARS ?= APP BRANCH ENV HOSTNAME GID GIT_AUTHOR_EMAIL GIT_AUTHOR_NAME MONOREPO MONOREPO_DIR TAG UID USER VERSION 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_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)) HOSTNAME ?= $(shell hostname 2>/dev/null |sed 's/\..*//') -MAKE_ENV_ARGS ?= $(foreach var,$(MAKE_ENV_VARS),$(if $($(var)),$(var)='$($(var))')) -MAKE_ENV_VARS ?= ENV +MAKE_ARGS ?= $(foreach var,$(MAKE_VARS),$(if $($(var)),$(var)='$($(var))')) MAKE_SUBDIRS ?= $(if $(filter myos,$(MYOS)),monorepo,$(if $(APP),apps $(foreach type,$(APP_TYPE),$(if $(wildcard $(MAKE_DIR)/apps/$(type)),apps/$(type))))) -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)) +MAKE_CMD_ARGS ?= $(foreach var,$(MAKE_CMD_VARS),$(var)='$($(var))') +MAKE_CMD_VARS ?= $(strip $(foreach var, $(filter-out .VARIABLES,$(.VARIABLES)), $(if $(filter command\ line,$(origin $(var))),$(var)))) +MAKE_ENV_ARGS ?= $(foreach var,$(filter $(ENV_VARS),$(MAKE_ENV_VARS)),$(var)='$($(var))') +MAKE_ENV_VARS ?= $(strip $(foreach var, $(filter-out .VARIABLES,$(.VARIABLES)), $(if $(filter environment,$(origin $(var))),$(var)))) +MAKE_FILE_ARGS ?= $(foreach var,$(filter $(ENV_VARS),$(MAKE_FILE_VARS)),$(var)='$($(var))') +MAKE_FILE_VARS ?= $(strip $(foreach var, $(filter-out .VARIABLES,$(.VARIABLES)), $(if $(filter file,$(origin $(var))),$(var)))) +MAKE_TARGETS ?= $(filter-out $(.VARIABLES),$(shell $(MAKE) -qp 2>/dev/null |awk -F':' '/^[a-zA-Z0-9][^$$\#\/\t=]*:([^=]|$$)/ {print $$1}' |sort -u)) +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))) @@ -70,12 +63,12 @@ else ENV_ARGS = $(env.args) $(env.dist) endif -ifneq ($(DEBUG), true) +ifneq ($(DEBUG),true) .SILENT: else CONTEXT += $(CONTEXT_DEBUG) endif -ifeq ($(DRYRUN), true) +ifeq ($(DRYRUN),true) ECHO = $(if $(filter $(DRYRUN_IGNORE),true),,printf '${COLOR_BROWN}$(APP)${COLOR_RESET}[${COLOR_GREEN}$(MAKELEVEL)${COLOR_RESET}] ${COLOR_BLUE}$@${COLOR_RESET}:${COLOR_RESET} '; echo) ifeq ($(RECURSIVE), true) DRYRUN_RECURSIVE := true @@ -143,8 +136,8 @@ gid = $(shell grep '^$(1):' /etc/group 2>/dev/null |awk -F: '{print $$3}') # 2nd arg: directory to call make from # 3rd arg: list of variables to pass to make (ENV by default) # 4th arg: path to .env file with additional arguments to call make with (file must exist when calling make) - # add list of VARIABLE=VALUE from vars to MAKE_ENV_ARGS - # add list of arguments from file to MAKE_ENV_ARGS + # add list of VARIABLE=VALUE from vars to MAKE_ARGS + # add list of arguments from file to MAKE_ARGS # eval MAKE_DIR option to -C $(2) if $(2) given # add current target to MAKE_OLDFILE (list of already fired targets) # print command that will be run if VERBOSE mode @@ -155,13 +148,13 @@ define make $(eval dir := $(2)) $(eval vars := $(3)) $(eval file := $(4)) - $(if $(vars),$(eval MAKE_ENV_ARGS += $(foreach var,$(vars),$(if $($(var)),$(var)='$($(var))')))) - $(if $(wildcard $(file)),$(eval MAKE_ENV_ARGS += $(shell cat $(file) |sed '/^$$/d; /^#/d; /=/!d; s/^[[\s\t]]*//; s/[[\s\t]]*=[[\s\t]]*/=/;' |awk -F '=' '{print $$1"='\''"$$2"'\''"}'))) + $(if $(vars),$(eval MAKE_ARGS += $(foreach var,$(vars),$(if $($(var)),$(var)='$($(var))')))) + $(if $(wildcard $(file)),$(eval MAKE_ARGS += $(shell cat $(file) |sed '/^$$/d; /^#/d; /=/!d; s/^[[\s\t]]*//; s/[[\s\t]]*=[[\s\t]]*/=/;' |awk -F '=' '{print $$1"='\''"$$2"'\''"}'))) $(eval MAKE_DIR := $(if $(dir),-C $(dir))) $(eval MAKE_OLDFILE += $(filter-out $(MAKE_OLDFILE), $^)) - $(if $(filter $(VERBOSE),true),printf '${COLOR_GREEN}Running${COLOR_RESET} "'"make $(MAKE_ENV_ARGS) $(cmd)"'" $(if $(dir),${COLOR_BLUE}in folder${COLOR_RESET} $(dir) )\n') - $(ECHO) $(MAKE) $(MAKE_DIR) $(patsubst %,-o %,$(MAKE_OLDFILE)) MAKE_OLDFILE="$(MAKE_OLDFILE)" $(MAKE_ENV_ARGS) $(cmd) - $(if $(filter $(DRYRUN_RECURSIVE),true),$(MAKE) $(MAKE_DIR) $(patsubst %,-o %,$(MAKE_OLDFILE)) MAKE_OLDFILE="$(MAKE_OLDFILE)" DRYRUN=$(DRYRUN) RECURSIVE=$(RECURSIVE) $(MAKE_ENV_ARGS) $(cmd)) + $(if $(filter $(VERBOSE),true),printf '${COLOR_GREEN}Running${COLOR_RESET} "'"make $(MAKE_ARGS) $(cmd)"'" $(if $(dir),${COLOR_BLUE}in folder${COLOR_RESET} $(dir) )\n') + $(ECHO) $(MAKE) $(MAKE_DIR) $(patsubst %,-o %,$(MAKE_OLDFILE)) MAKE_OLDFILE="$(MAKE_OLDFILE)" $(MAKE_ARGS) $(cmd) + $(if $(filter $(DRYRUN_RECURSIVE),true),$(MAKE) $(MAKE_DIR) $(patsubst %,-o %,$(MAKE_OLDFILE)) MAKE_OLDFILE="$(MAKE_OLDFILE)" DRYRUN=$(DRYRUN) RECURSIVE=$(RECURSIVE) $(MAKE_ARGS) $(cmd)) endef pop = $(patsubst %$(or $(2),/)$(lastword $(subst $(or $(2),/), ,$(1))),%,$(1)) diff --git a/make/help.mk b/make/help.mk index b38fcf3..297975f 100644 --- a/make/help.mk +++ b/make/help.mk @@ -29,9 +29,9 @@ target: ## Show current context context: printf "${COLOR_BROWN}Context:${COLOR_RESET}\n" - $(MAKE) $(foreach var,$(CONTEXT),context-$(var)) + $(MAKE) $(foreach var,$(CONTEXT),$(if $($(var)),context-$(var))) -.PHONY: context--% +.PHONY: context-% context-%: printf "${COLOR_BLUE}%-31s${COLOR_RESET}" $* printf "${COLOR_GREEN}" diff --git a/make/monorepo/def.mk b/make/monorepo/def.mk index 116bf17..7f5a17f 100644 --- a/make/monorepo/def.mk +++ b/make/monorepo/def.mk @@ -1,6 +1,6 @@ -CMDS += copy master-tag release release-check release-create release-finish subrepo-push update-subrepo -CONTEXT += APPS ENV RELEASE_INSTALL +CMDS += copy master-tag release release-check release-create release-finish subrepo-push subrepo-update +CONTEXT += APPS ENV RELEASE DIRS ?= $(MAKE_DIR) $(PARAMETERS) $(SHARED) -RELEASE_UPGRADE ?= $(filter v%, $(shell git tag -l 2>/dev/null |sort -V |awk '/$(RELEASE_INSTALL)/,0')) +RELEASE_UPGRADE ?= $(filter v%, $(shell git tag -l 2>/dev/null |sort -V |awk '/$(RELEASE)/,0')) RELEASE_VERSION ?= $(firstword $(subst -, ,$(VERSION))) SUBREPOS ?= $(filter subrepo/%, $(shell git remote 2>/dev/null)) diff --git a/make/monorepo/release.mk b/make/monorepo/release.mk index fa9e209..e7cdf2a 100644 --- a/make/monorepo/release.mk +++ b/make/monorepo/release.mk @@ -26,10 +26,24 @@ release-create: release-check git-stash ## Create release [version] .PHONY: release-finish release-finish: release-check git-stash ## Finish release [version] $(call make,git-branch-merge-upstream-master BRANCH=$(RELEASE_BRANCH)) - $(call make,update-subrepos) + $(call make,subrepos-update) $(call make,git-tag-create-upstream-master TAG=$(RELEASE_VERSION)) $(call make,subrepos-tag-create-master TAG=$(RELEASE_VERSION)) $(call make,git-tag-merge-upstream-develop TAG=$(RELEASE_VERSION)) $(call make,git-branch-delete BRANCH=$(RELEASE_BRANCH)) $(call make,subrepos-branch-delete BRANCH=$(RELEASE_BRANCH)) $(call make,git-unstash,,STATUS) + +## Update release version number in .env +.PHONY: release-update +release-update: + $(ECHO) awk -v s=RELEASE=$(RELEASE_VERSION) '/^RELEASE=/{$$0=s;f=1} {a[++n]=$$0} END{if(!f)a[++n]=s;for(i=1;i<=n;i++)print a[i]>ARGV[1]}' .env + +## Run migration targets to upgrade specific releases +.PHONY: release-upgrade +release-upgrade: $(patsubst %,release-upgrade-from-%,$(RELEASE_UPGRADE)) release-update ## Update monorepo version + +## Sample of release migration target +.PHONY: release-upgrade-from-% +release-upgrade-from-%: + echo "Upgrading from release: $*" diff --git a/make/monorepo/subrepo.mk b/make/monorepo/subrepo.mk index 8ca8d5b..29acbf5 100644 --- a/make/monorepo/subrepo.mk +++ b/make/monorepo/subrepo.mk @@ -57,3 +57,11 @@ subrepos-branch-delete: $(APPS) ; .PHONY: subrepos-tag-create-% subrepos-tag-create-%: $(APPS) ; + +.PHONY: subrepos-update +subrepos-update: myos-base git-stash $(APPS) git-unstash ## Update subrepos + $(call exec,git push upstream $(BRANCH)) + +.PHONY: subrepo-update-% +subrepo-update-%: + $(if $(wildcard $*/Makefile),$(call make,subrepo-update,$*)) diff --git a/make/monorepo/upgrade.mk b/make/monorepo/upgrade.mk deleted file mode 100644 index b4e7c5a..0000000 --- a/make/monorepo/upgrade.mk +++ /dev/null @@ -1,9 +0,0 @@ -## -# UPGRADE - -.PHONY: upgrade -upgrade: $(patsubst %,upgrade-from-release-%,$(RELEASE_UPGRADE)) update-release ## Update monorepo version - -.PHONY: upgrade-from-release-% -upgrade-from-release-%: - # echo "Upgrading from release: $*"