From f43d03393babc939756c9f5581343913b02c7298 Mon Sep 17 00:00:00 2001 From: n-peugnet Date: Thu, 7 Nov 2019 14:02:13 +0100 Subject: build: ENV prod enhancements - fix: prod mode not working with target-specific ENV variable - use another sourcemap mode in dev mode - generate souremap files in prod mode --- Makefile | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index 367ef81..0753357 100644 --- a/Makefile +++ b/Makefile @@ -7,6 +7,7 @@ GIT_VERSION := $(shell git --no-pager describe --always --tags) js_sources := $(wildcard src/*.js) js_bundles := $(js_sources:src/%.js=assets/js/%.bundle.js) +js_srcmaps := $(js_sources:src/%.js=assets/js/%.bundle.js.map) zip_release := dist/w_cms_$(GIT_VERSION).zip all: vendor build @@ -19,9 +20,9 @@ watch: node_modules release: release-it -dist: ENV := prod -dist: distclean $(zip_release) +dist: distclean $(zip_release) $(js_srcmaps) +dist/%: ENV := prod dist/w_cms_%.zip: all @echo "Building Zip release..." mkdir -p $(dir $@) @@ -42,25 +43,17 @@ dist/w_cms_%.zip: all -x "*test*" \ -x "*docs*" -assets/js/%.bundle.js: src/%.js node_modules +assets/js/%.bundle.js assets/js/%.bundle.map: src/%.js node_modules @echo "Building JS Bundles..." mkdir -p $(dir $@) -ifeq ($(ENV),prod) - webpack $< -o $@ --env prod -p -else - webpack $< -o $@ --env dev -endif + webpack $< -o $@ $(if $(filter $(ENV),prod),--env prod -p,--env dev) .env: cp .default.env .env vendor: composer.json composer.lock @echo "Installing PHP dependencies..." -ifeq ($(ENV),prod) - composer install --no-dev --prefer-dist -else - composer install -endif + composer install $(if $(filter $(ENV),prod),--no-dev --prefer-dist,) node_modules: package.json package-lock.json @echo "Installing JS dependencies..." @@ -78,5 +71,6 @@ distclean: buildclean buildclean: @echo "Cleaning build artifacts..." rm -rf $(js_bundles) + rm -rf $(js_srcmaps) .PHONY: all build watch release dist clean distclean buildclean -- cgit v1.2.3 From 14ff62ace7a8fdc21a8d2f84bd0cbd32edca24af Mon Sep 17 00:00:00 2001 From: n-peugnet Date: Thu, 7 Nov 2019 14:05:57 +0100 Subject: build: gen VERSION from make instead of release-it - remove @release-it/bumper module - gen VERSION from make - remove VERSION from git --- Makefile | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index 0753357..70722f4 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,8 @@ include .env export PATH := vendor/bin:node_modules/.bin:$(PATH) -GIT_VERSION := $(shell git --no-pager describe --always --tags) +override GIT_VERSION := $(shell git --no-pager describe --always --tags) +override CUR_VERSION := $(strip $(shell cat VERSION)) js_sources := $(wildcard src/*.js) js_bundles := $(js_sources:src/%.js=assets/js/%.bundle.js) @@ -12,7 +13,7 @@ zip_release := dist/w_cms_$(GIT_VERSION).zip all: vendor build -build: $(js_bundles) +build: VERSION $(js_bundles) watch: node_modules webpack --env dev --watch @@ -38,6 +39,7 @@ dist/w_cms_%.zip: all "package*" \ webpack.config.js zip -r $@ \ + VERSION \ assets/js \ vendor \ -x "*test*" \ @@ -51,6 +53,14 @@ assets/js/%.bundle.js assets/js/%.bundle.map: src/%.js node_modules .env: cp .default.env .env +# 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 +ifneq ($(CUR_VERSION),$(GIT_VERSION)) + @echo $(GIT_VERSION) > VERSION +endif + vendor: composer.json composer.lock @echo "Installing PHP dependencies..." composer install $(if $(filter $(ENV),prod),--no-dev --prefer-dist,) @@ -70,7 +80,10 @@ distclean: buildclean buildclean: @echo "Cleaning build artifacts..." + rm -rf VERSION rm -rf $(js_bundles) rm -rf $(js_srcmaps) +FORCE: ; + .PHONY: all build watch release dist clean distclean buildclean -- cgit v1.2.3 From 25119af7a9875275a00e32281685e17b6a9aabd1 Mon Sep 17 00:00:00 2001 From: n-peugnet Date: Thu, 7 Nov 2019 14:10:00 +0100 Subject: build: add @sentry/cli to release process --- Makefile | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index 70722f4..7ca1932 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ 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)) +override CUR_VERSION := $(strip $(shell cat VERSION 2>/dev/null)) js_sources := $(wildcard src/*.js) js_bundles := $(js_sources:src/%.js=assets/js/%.bundle.js) @@ -18,9 +18,16 @@ build: VERSION $(js_bundles) watch: node_modules webpack --env dev --watch -release: +release: node_modules release-it +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' + sentry-cli releases finalize $(GIT_VERSION) + dist: distclean $(zip_release) $(js_srcmaps) dist/%: ENV := prod @@ -86,4 +93,4 @@ buildclean: FORCE: ; -.PHONY: all build watch release dist clean distclean buildclean +.PHONY: all build watch release sentryrelease dist clean distclean buildclean -- cgit v1.2.3 From 386b144750d99f0c67c9d370c07b1d489e9b894e Mon Sep 17 00:00:00 2001 From: n-peugnet Date: Thu, 7 Nov 2019 17:14:17 +0100 Subject: fix(dist): correct dir permissions + VERSION always included --- Makefile | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index 7ca1932..f257a04 100644 --- a/Makefile +++ b/Makefile @@ -34,23 +34,27 @@ dist/%: ENV := prod dist/w_cms_%.zip: all @echo "Building Zip release..." mkdir -p $(dir $@) - git archive --format=zip HEAD -o $@ +# Include git tracked files (everything except ignored) + needed files + zip -r $@ \ + $(shell git ls-tree -r HEAD --name-only) \ + VERSION \ + assets/js \ + vendor \ + -x "*test*" \ + -x "*docs*" +# Include non-empty git tracked directories (to keep dir permissions) + zip $@ $(shell git ls-tree -r HEAD --name-only -d) +# Remove non-useful files zip -d $@ \ - "src*" \ + $(js_sources) \ + $(js_srcmaps) \ .default.env \ .gitignore \ .release-it.json \ - composer.json \ - composer.lock \ Makefile \ + "composer*" \ "package*" \ webpack.config.js - zip -r $@ \ - VERSION \ - assets/js \ - vendor \ - -x "*test*" \ - -x "*docs*" assets/js/%.bundle.js assets/js/%.bundle.map: src/%.js node_modules @echo "Building JS Bundles..." @@ -77,17 +81,17 @@ node_modules: package.json package-lock.json npm install --loglevel=error clean: buildclean - @echo "Cleaning PHP..." + @echo "Cleaning make artifacts..." rm -rf vendor - @echo "Cleaning JS..." rm -rf node_modules + rm -rf VERSION distclean: buildclean + @echo "Cleaning dist artifacts..." rm -rf dist buildclean: @echo "Cleaning build artifacts..." - rm -rf VERSION rm -rf $(js_bundles) rm -rf $(js_srcmaps) -- cgit v1.2.3 From 6eddd69843d78bf442324dd10c501b79bbaf89d1 Mon Sep 17 00:00:00 2001 From: n-peugnet Date: Thu, 7 Nov 2019 17:58:08 +0100 Subject: feat: include sentry in frontend --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index f257a04..4b75078 100644 --- a/Makefile +++ b/Makefile @@ -22,10 +22,10 @@ release: node_modules release-it sentryrelease: ENV := prod -sentryrelease: build +sentryrelease: buildclean 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' + 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) -- cgit v1.2.3 From c0cf03fcb5aeaa4011c9b8eef4b9bc505b24485d Mon Sep 17 00:00:00 2001 From: n-peugnet Date: Thu, 7 Nov 2019 20:37:48 +0100 Subject: 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. --- Makefile | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) (limited to 'Makefile') 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 -- cgit v1.2.3 From e4bc65433283e0725a2e7bf07ae0c84f7905af17 Mon Sep 17 00:00:00 2001 From: n-peugnet Date: Mon, 11 Nov 2019 18:50:56 +0100 Subject: feat: make Sentry optional - move sentry to PHP dev requirements. - try...catch Sentry integration in PHP. - update Makefile: - add comments as documentation. - remove recursive call from PREV_ENV_FILE target. - make dist and sentryrelease ENV variable. - add touch target for more efficient rebuilds. - add `dist` build ENV functionnality not to include dev-requirements in the zip release. --- Makefile | 116 ++++++++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 81 insertions(+), 35 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index 8503720..803b57e 100644 --- a/Makefile +++ b/Makefile @@ -2,45 +2,69 @@ include .default.env include .env export +build_dir := build + +# Misc variables. 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) -js_srcmaps := $(js_sources:src/%.js=assets/js/%.bundle.js.map) +override WEBPACK_FLAGS += $(if $(filter $(ENV),dist),-p) +override COMPOSER_FLAGS += $(if $(filter $(ENV),dist),--no-dev --prefer-dist) +PREV_ENV_FILE := $(build_dir)/prev_env +PREV_ENV := $(strip $(shell cat $(PREV_ENV_FILE) 2>/dev/null)) + +# Files variables. +js_src_dir := src +js_sources := $(wildcard $(js_src_dir)/*.js) +js_bundles := $(js_sources:$(js_src_dir)/%.js=assets/js/%.bundle.js) +js_srcmaps := $(js_sources:$(js_src_dir)/%.js=assets/js/%.bundle.js.map) zip_release := dist/w_cms_$(GIT_VERSION).zip -all: vendor build +# Default target. This executes everything targets needed to get a fully +# working development environment. +.PHONY: all +all: $(PREV_ENV_FILE) vendor build +# Build generated files. +.PHONY: build build: VERSION $(PREV_ENV_FILE) $(js_bundles) +# Run webpack in watch mode. +.PHONY: watch watch: node_modules webpack --env dev --watch +# Create a new release and upload it on GitHub. +.PHONY: release release: node_modules release-it +# Inform Sentry of a new release. +.PHONY: sentryrelease +sentryrelease: ENV := dist sentryrelease: - $(MAKE) .sentryrelease ENV=prod + $(MAKE) .sentryrelease ENV=$(ENV) -.sentryrelease: build +.PHONY: .sentryrelease +.sentryrelease: $(PREV_ENV_FILE) build $(js_srcmaps) 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) +# Generate the distribution files. +.PHONY: dist +dist: ENV := dist dist: - $(MAKE) .dist ENV=prod + $(MAKE) .dist ENV=$(ENV) +.PHONY: .dist .dist: distclean $(zip_release) $(js_srcmaps) dist/w_cms_%.zip: all - @echo "Building Zip release..." + @echo Building Zip release... mkdir -p $(dir $@) -# Include git tracked files (everything except ignored) + needed files +# Include git tracked files (everything except ignored) + needed files. zip -r $@ \ $(shell git ls-tree -r HEAD --name-only) \ VERSION \ @@ -48,11 +72,11 @@ dist/w_cms_%.zip: all vendor \ -x "*test*" \ -x "*docs*" -# Include non-empty git tracked directories (to keep dir permissions) +# Include non-empty git tracked directories (to keep dir permissions). zip $@ $(shell git ls-tree -r HEAD --name-only -d) -# Remove non-useful files +# Remove non-useful files. zip -d $@ \ - $(js_sources) \ + "$(js_src_dir)/*" \ $(js_srcmaps) \ .default.env \ .gitignore \ @@ -62,52 +86,74 @@ dist/w_cms_%.zip: all "package*" \ webpack.config.js -assets/js/%.bundle.js assets/js/%.bundle.js.map: src/%.js node_modules - @echo "Building JS Bundles..." +# Generate the js bundles (and sourcemaps). +assets/js/%.bundle.js assets/js/%.bundle.js.map: $(js_src_dir)/%.js node_modules + @echo Building JS Bundles... mkdir -p $(dir $@) - webpack $< -o $@ $(if $(filter $(ENV),prod),--env prod -p,--env dev) + webpack $< -o $@ --env $(ENV) $(WEBPACK_FLAGS) +# Generate a .env file if none is present. .env: - cp .default.env .env + cp .default.env $@ -# 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) +# Generate the VERSION file. VERSION: .FORCE ifneq ($(CUR_VERSION),$(GIT_VERSION)) - @echo $(GIT_VERSION) > $@ + echo $(GIT_VERSION) > $@ endif -$(PREV_ENV_FILE): .FORCE +# Trick to force rebuild if the build environment has changed. ifneq ($(PREV_ENV),$(ENV)) +$(PREV_ENV_FILE): touch +ifdef PREV_ENV @echo Build env has changed ! - $(MAKE) buildclean - @echo $(ENV) > $@ +else + @echo New build env. +endif + mkdir -p $(dir $@) + echo $(ENV) > $@ endif +# Install PHP dependencies. vendor: composer.json composer.lock - @echo "Installing PHP dependencies..." - composer install $(if $(filter $(ENV),prod),--no-dev --prefer-dist,) + @echo Installing PHP dependencies... + composer install $(COMPOSER_FLAGS) +# Install JS dependencies. node_modules: package.json package-lock.json - @echo "Installing JS dependencies..." + @echo Installing JS dependencies... npm install --loglevel=error +# Clean files generated by `make all`. +.PHONY: clean clean: buildclean - @echo "Cleaning make artifacts..." + @echo Cleaning make artifacts... rm -rf vendor rm -rf node_modules rm -rf VERSION +# Clean files generated by `make dist`. +.PHONY: distclean distclean: - @echo "Cleaning dist artifacts..." + @echo Cleaning dist artifacts... rm -rf dist +# Clean files generated by `make build`. +.PHONY: buildclean buildclean: - @echo "Cleaning build artifacts..." + @echo Cleaning build artifacts... rm -rf $(js_bundles) rm -rf $(js_srcmaps) - + rm -rf $(build_dir) + +# Touch files affected by the build environment to force the execution +# of the corresponding targets. +.PHONY: touch +touch: + touch $(js_sources) + touch composer.json + +# Special (fake) target to always run a target but have Make consider +# this updated if it was actually rewritten (a .PHONY target is always +# considered new). .FORCE: ; - -.PHONY: all build watch release sentryrelease .sentryrelease dist .dist clean distclean buildclean -- cgit v1.2.3 From c1843c0a2ef49de3d2030398f5c14549cc1791ab Mon Sep 17 00:00:00 2001 From: n-peugnet Date: Fri, 15 Nov 2019 15:57:46 +0100 Subject: feat: load Sentry browser as an external script - better way to check if we need to report errors in PHP - fix make file $(js_bundles) dependencies (add webpack conf) - update sentry-browser sdk and move it to dev requirements --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index 803b57e..f4e80b4 100644 --- a/Makefile +++ b/Makefile @@ -87,7 +87,7 @@ dist/w_cms_%.zip: all webpack.config.js # Generate the js bundles (and sourcemaps). -assets/js/%.bundle.js assets/js/%.bundle.js.map: $(js_src_dir)/%.js node_modules +assets/js/%.bundle.js assets/js/%.bundle.js.map: $(js_src_dir)/%.js node_modules webpack.config.js @echo Building JS Bundles... mkdir -p $(dir $@) webpack $< -o $@ --env $(ENV) $(WEBPACK_FLAGS) -- cgit v1.2.3 From 5c0035fe37cdec5f7927c3213365285a7fd4d51b Mon Sep 17 00:00:00 2001 From: n-peugnet Date: Fri, 15 Nov 2019 19:31:20 +0100 Subject: fix: `make watch` now changes prev_env + change default env values --- Makefile | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index f4e80b4..720127e 100644 --- a/Makefile +++ b/Makefile @@ -31,8 +31,13 @@ build: VERSION $(PREV_ENV_FILE) $(js_bundles) # Run webpack in watch mode. .PHONY: watch -watch: node_modules - webpack --env dev --watch +watch: ENV := dev +watch: + $(MAKE) .watch ENV=$(ENV) + +.PHONY: .watch +.watch: $(PREV_ENV_FILE) node_modules + webpack --env $(ENV) --watch # Create a new release and upload it on GitHub. .PHONY: release -- cgit v1.2.3