aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorn-peugnet <n.peugnet@free.fr>2019-11-07 20:37:48 +0100
committern-peugnet <n.peugnet@free.fr>2019-11-07 20:37:48 +0100
commitc0cf03fcb5aeaa4011c9b8eef4b9bc505b24485d (patch)
tree16c65fec90af49374eb8d8d121664e7440d1dc0a
parentd8032078c39edb42acb99a1de49283daba199d74 (diff)
downloadwcms-c0cf03fcb5aeaa4011c9b8eef4b9bc505b24485d.tar.gz
wcms-c0cf03fcb5aeaa4011c9b8eef4b9bc505b24485d.zip
perf(build): remember previous buid env
This allow build the bundles when there is a change in files or in env. This way we can stop calling buildclean before each build. This is a little tricky: it uses a temp file and recursive make commands to set the ENV to prod.
-rw-r--r--Makefile35
1 files changed, 24 insertions, 11 deletions
diff --git a/Makefile b/Makefile
index 4b75078..8503720 100644
--- a/Makefile
+++ b/Makefile
@@ -5,6 +5,8 @@ export
PATH := vendor/bin:node_modules/.bin:$(PATH)
override GIT_VERSION := $(shell git --no-pager describe --always --tags)
override CUR_VERSION := $(strip $(shell cat VERSION 2>/dev/null))
+PREV_ENV_FILE := /tmp/wcms_prev_env
+PREV_ENV=$(strip $(shell cat $(PREV_ENV_FILE) 2>/dev/null))
js_sources := $(wildcard src/*.js)
js_bundles := $(js_sources:src/%.js=assets/js/%.bundle.js)
@@ -13,7 +15,7 @@ zip_release := dist/w_cms_$(GIT_VERSION).zip
all: vendor build
-build: VERSION $(js_bundles)
+build: VERSION $(PREV_ENV_FILE) $(js_bundles)
watch: node_modules
webpack --env dev --watch
@@ -21,16 +23,20 @@ watch: node_modules
release: node_modules
release-it
-sentryrelease: ENV := prod
-sentryrelease: buildclean build
+sentryrelease:
+ $(MAKE) .sentryrelease ENV=prod
+
+.sentryrelease: build
sentry-cli releases new $(GIT_VERSION)
sentry-cli releases set-commits $(GIT_VERSION) --auto
sentry-cli releases files $(GIT_VERSION) upload-sourcemaps assets/js --url-prefix '~/assets/js' --rewrite
sentry-cli releases finalize $(GIT_VERSION)
-dist: distclean $(zip_release) $(js_srcmaps)
+dist:
+ $(MAKE) .dist ENV=prod
+
+.dist: distclean $(zip_release) $(js_srcmaps)
-dist/%: ENV := prod
dist/w_cms_%.zip: all
@echo "Building Zip release..."
mkdir -p $(dir $@)
@@ -56,7 +62,7 @@ dist/w_cms_%.zip: all
"package*" \
webpack.config.js
-assets/js/%.bundle.js assets/js/%.bundle.map: src/%.js node_modules
+assets/js/%.bundle.js assets/js/%.bundle.js.map: src/%.js node_modules
@echo "Building JS Bundles..."
mkdir -p $(dir $@)
webpack $< -o $@ $(if $(filter $(ENV),prod),--env prod -p,--env dev)
@@ -67,9 +73,16 @@ assets/js/%.bundle.js assets/js/%.bundle.map: src/%.js node_modules
# use a force (fake) target to always rebuild this file but have Make
# consider this updated if it was actually rewritten (a .PHONY target
# is always considered new)
-VERSION: FORCE
+VERSION: .FORCE
ifneq ($(CUR_VERSION),$(GIT_VERSION))
- @echo $(GIT_VERSION) > VERSION
+ @echo $(GIT_VERSION) > $@
+endif
+
+$(PREV_ENV_FILE): .FORCE
+ifneq ($(PREV_ENV),$(ENV))
+ @echo Build env has changed !
+ $(MAKE) buildclean
+ @echo $(ENV) > $@
endif
vendor: composer.json composer.lock
@@ -86,7 +99,7 @@ clean: buildclean
rm -rf node_modules
rm -rf VERSION
-distclean: buildclean
+distclean:
@echo "Cleaning dist artifacts..."
rm -rf dist
@@ -95,6 +108,6 @@ buildclean:
rm -rf $(js_bundles)
rm -rf $(js_srcmaps)
-FORCE: ;
+.FORCE: ;
-.PHONY: all build watch release sentryrelease dist clean distclean buildclean
+.PHONY: all build watch release sentryrelease .sentryrelease dist .dist clean distclean buildclean