Skip to content
Snippets Groups Projects
Verified Commit 29a54dc7 authored by Volker Schukai's avatar Volker Schukai :alien:
Browse files

chore: commit save point

parent 39b83893
No related branches found
No related tags found
No related merge requests found
Showing
with 508 additions and 0 deletions
#############################################################################################
#############################################################################################
##
## COLORS
##
#############################################################################################
#############################################################################################
## License used in the project
LICENSE_TEXT ?= AGPL 3.0
## Copyright holder of the project
COPYRIGHT_TEXT ?= © schukai GmbH, Released under the $(LICENSE_TEXT) License.
\ No newline at end of file
#############################################################################################
#############################################################################################
##
## COMMANDS NODEJS
##
#############################################################################################
#############################################################################################
# path and binaries
NODEJS ?= node
NODE ?= node
NPM ?= pnpm
EXECUTABLES = $(EXECUTABLES:-) $(PNPM);
NODE_PACKAGES := $(shell find $(PROJECT_ROOT) -type f -name 'package.json' -not -path '*/node_modules/*')
NODE_MODULES := $(shell find $(PROJECT_ROOT) -type d -name 'node_modules' -prune)
NODE_MODULES_MODIFIED := $(shell find $(PROJECT_ROOT) -type d -name 'node_modules' -prune -exec echo {}/.modified \; )
$(NODE_MODULES_MODIFIED): $(NODE_PACKAGES)
$(ECHOMARKER) "Updating node modules..."
$(QUIET) for p in $(NODE_PACKAGES); do \
DIR=$$(dirname $$p); \
echo "Updating package: $${DIR}" ;\
$(NPM) install --prefix $${DIR} ;\
done ; \
touch $(NODE_MODULES_MODIFIED)
## Main Develpoment Node Repos
NODE_ROOT_DIR ?= $(DEVELOPMENT_PATH)
NODE_MODULES_DIR ?= $(NODE_ROOT_DIR)node_modules/
NODE_PACKAGE_PATH ?= $(NODE_ROOT_DIR)package.json
NODE_MODULES_BIN_DIR ?= $(NODE_MODULES_DIR).bin/
ESBUILD ?= $(NODE_MODULES_BIN_DIR)esbuild
WEBPACK ?= $(NODE_MODULES_BIN_DIR)webpack
BABEL ?= $(NODE_MODULES_BIN_DIR)babel
UGLIFYJS ?= $(NODE_MODULES_BIN_DIR)uglifyjs
C8 ?= $(NODE_MODULES_BIN_DIR)c8
MOCHA ?= $(NODE_MODULES_BIN_DIR)mocha
PACKAGE_JSON ?= $(NODE_ROOT_DIR)package.json
MJS_SOURCE_FILES := $(shell find $(SOURCE_PATH) -name '*.mjs')
MJS_RELATIVE_SOURCE_FILES := $(shell find $(SOURCE_PATH) -name '*.mjs' -exec realpath --relative-to $(PROJECT_ROOT) {} \; )
JS_SOURCE_FILES := $(shell find $(SOURCE_PATH) -name '*.js')
JS_RELATIVE_SOURCE_FILES := $(shell find $(SOURCE_PATH) -name '*.js' -exec realpath --relative-to $(PROJECT_ROOT) {} \; )
#############################################################################################
#############################################################################################
##
## COLORS
##
#############################################################################################
#############################################################################################
INFO := $(GREEN)
COMMENT := $(YELLOW)
#############################################################################################
#############################################################################################
##
## OUTPUT CONTROL AND STANDARD OUTPUTS
##
#############################################################################################
#############################################################################################
MARKER := $(BLUE)[+]$(RESET)
ERRORMARKER := $(RED)[-]$(RESET)
#############################################################################################
#############################################################################################
##
## DEACTIVATE THE QUIET MODE BY OVERWRITING THE VALUE WITH SPACE
##
#############################################################################################
#############################################################################################
ifndef DEBUG
QUIET = @
else
QUIET =
endif
ifndef DONTOPENBROWSER
OPENBROWSER = false
else
OPENBROWSER = true
endif
#############################################################################################
#############################################################################################
##
## COMMANDS
##
#############################################################################################
#############################################################################################
ECHO := @echo
ECHOMARKER := @echo "$(MARKER) $0"
ECHOERRORMARKER := @echo "$(ERRORMARKER) $0"
#############################################################################################
#############################################################################################
##
## PLACEHOLDER
##
#############################################################################################
#############################################################################################
COMPONENT_SLUG := $(shell echo "$(COMPONENT_NAME)" | tr '[:upper:]' '[:lower:]')
\ No newline at end of file
#############################################################################################
#############################################################################################
##
## AMAZON S3
##
#############################################################################################
#############################################################################################
# path and binaries
AWS ?= aws
EXECUTABLES = $(EXECUTABLES:-) $(AWS)
## Set AWS profile
AWS_PROFILE ?= schukai
#############################################################################################
#############################################################################################
##
## SERVER CADDY
##
#############################################################################################
#############################################################################################
CADDY_VENDOR_PATH ?= $(VENDOR_PATH)caddy/
CADDY_BIN ?= $(CADDY_VENDOR_PATH)caddy
CADDY_CONFIG ?= $(CADDY_VENDOR_PATH)caddy.conf
CADDY_PIDFILE ?= $(shell mktemp -d)/caddy.pid
$(CADDY_BIN):
$(QUIET) $(MKDIR) -p $(CADDY_VENDOR_PATH)
$(QUIET) $(WGET) -O $(CADDY_BIN) "https://caddyserver.com/api/download?os=linux&arch=amd64&idempotency=75143981108035"
$(QUIET) $(CHMOD) u+x $(CADDY_BIN)
.PHONY: run-caddy
## run caddy webserver
run-caddy: $(CADDY_BIN)
$(QUIET) $(CADDY_BIN) run -config $(CADDY_CONFIG) -pidfile $(CADDY_PIDFILE) -watch
#############################################################################################
#############################################################################################
##
## DEPLOY TOOLS
##
#############################################################################################
#############################################################################################
UPLOAD_TOOL_URL ?= s3://download.schukai.com/tools/$(COMPONENT_SLUG)/
.PHONY: deploy
## compile and deploy to S3
deploy: compile
$(QUIET) AWS_PROFILE=$(AWS_PROFILE) find $(BUILD_PATH) -iname $(COMPONENT_SLUG)-* -exec $(AWS) s3 cp {} $(UPLOAD_TOOL_URL) \;
.PHONY: overview-to-s3
## overview-to-s3
overview-to-s3:
$(QUIET) AWS_PROFILE=$(AWS_PROFILE) $(AWS) s3 cp $(WEB_PATH)/index.html $(UPLOAD_TOOL_URL)
\ No newline at end of file
#############################################################################################
#############################################################################################
##
## DOCMAN-TARGETS
##
#############################################################################################
#############################################################################################
$(PROJECT_ROOT)deployment/build/manual.html: ~/.local/bin/docman
docman document html --config $(PROJECT_ROOT)documentation/config.yaml
$(PROJECT_ROOT)deployment/build/manual.pdf: ~/.local/bin/docman
docman document pdf --config $(PROJECT_ROOT)documentation/config.yaml
.PHONY: build-doc-pdf
## creating the documentation in pdf format
build-doc-pdf: $(PROJECT_ROOT)deployment/build/manual.pdf
.PHONY: build-doc-html
## creating the documentation in html format
build-doc-html: $(PROJECT_ROOT)deployment/build/manual.html
.PHONY: build-doc
## creating the documentation in pdf and html format
build-doc: build-doc-pdf build-doc-html
~/.local/bin/docman:
wget -O ~/.local/bin/docman https://download.schukai.com/tools/docman/docman-linux-amd64
chmod u+x ~/.local/bin/docman
.PHONY: install-docman
install-docman: ~/.local/bin/docman
#############################################################################################
#############################################################################################
##
## GIT-TARGETS
##
#############################################################################################
#############################################################################################
EXECUTABLES = $(EXECUTABLES:-) uuidgen
## Current Branch-GIT_TAG
GIT_TAG := -
## Git Commit GIT_MESSAGE for git-push
GIT_MESSAGE := current status
.PHONY: git-branch
## create new branch (use GIT_TAG-Variable)
git-branch:
$(QUIET) export BRANCH="b$(GIT_TAG)/$(shell uuidgen --random)" ; \
$(QUIET) $(GIT) checkout -b $${BRANCH} && \
RESULT=$$($(GIT) push origin $$BRANCH 2>&1) && \
RESULT2=$$($(GIT) branch --set-upstream-to=origin/$$BRANCH $$BRANCH) && \
GITLABURL=$$(echo "$$RESULT" | tr '\n' '\#' | grep -o 'remote\:\s*https:\/\/gitlab\.schukai\.com[^ ]*' | cut -d " " -f2-9 | sed -e 's/^[ \t]*//') && \
if $(OPENBROWSER) ; then google-chrome --profile-directory="Default" $$GITLABURL ; fi
.PHONY: git-to-master
## git checkout master, fetch and merge
git-to-master:
$(QUIET) $(GIT) checkout master && $(GIT) fetch -pP && $(GIT) merge
.PHONY: git-push-to-server
## git push changes to server
git-push-to-server:
$(QUIET) $(GIT) add -A
$(QUIET) $(GIT) commit -m"$(GIT_MESSAGE)"
$(QUIET) $(GIT) push
.PHONY: git-push
## git create branch and push changes to server
git-push: git-branch git-push-to-server
.PHONY: git-tag
## git create version tag
git-tag:
$(QUIET) $(GIT) tag -a "$(COMPONENT_VERSION)" -m "release $(COMPONENT_VERSION)"
#############################################################################################
#############################################################################################
##
## BUILD GO
##
#############################################################################################
#############################################################################################
.PHONY: compile
## Compiling for every OS and Platform
compile: next-patch-version
$(ECHOMARKER) "Compiling for every OS and Platform"
$(ECHO) "Version: $(PROJECT_VERSION)"
$(ECHO) "Build: $(PROJECT_BUILD_DATE)"
$(QUIET) cd $(SOURCE_PATH) ; \
GO111MODULE=on GOOS=linux GOARCH=arm $(GO) build -ldflags "-X main.version=$(PROJECT_VERSION) -X main.build=$(PROJECT_BUILD_DATE)" -o $(BUILD_PATH)$(COMPONENT_SLUG)-linux-arm ; \
GOOS=linux GOARCH=amd64 $(GO) build -ldflags "-X main.version=$(PROJECT_VERSION) -X main.build=$(PROJECT_BUILD_DATE)" -o $(BUILD_PATH)$(COMPONENT_SLUG)-linux-amd64 ; \
GOOS=linux GOARCH=arm64 $(GO) build -ldflags "-X main.version=$(PROJECT_VERSION) -X main.build=$(PROJECT_BUILD_DATE)" -o $(BUILD_PATH)$(COMPONENT_SLUG)-linux-arm64 ; \
GOOS=linux GOARCH=386 $(GO) build -ldflags "-X main.version=$(PROJECT_VERSION) -X main.build=$(PROJECT_BUILD_DATE)" -o $(BUILD_PATH)$(COMPONENT_SLUG)-linux-386 ; \
GOOS=windows GOARCH=amd64 $(GO) build -ldflags "-X main.version=$(PROJECT_VERSION) -X main.build=$(PROJECT_BUILD_DATE)" -o $(BUILD_PATH)$(COMPONENT_SLUG)-windows ; \
cd $(PROJECT_ROOT);
#############################################################################################
#############################################################################################
##
## GET LICENSES
##
#############################################################################################
#############################################################################################
GO_MOD_FILE := $(SOURCE_PATH)go.mod
ifeq ($(shell test -e $(GO_MOD_FILE) && echo -n yes),yes)
GO_CURRENT_MODULE := $(shell cat $(GO_MOD_FILE) | head -n1 | cut -d" " -f2)
# go install github.com/google/go-licenses@latest
EXECUTABLES = $(EXECUTABLES:-) go-licenses;
endif
.PHONY: go-fetch-licenses
## Fetch licenses for all modules
go-fetch-licenses:
ifeq ($(GO_CURRENT_MODULE),)
$(QUIET) $(ECHOERRORMARKER) "no go.mod file found, skipping fetching licenses"
else
$(ECHOMARKER) "Fetch licenses"
$(QUIET) cd $(SOURCE_PATH); go-licenses save $(GO_CURRENT_MODULE) $(GO_LICENSES_IGNORE_PACKAGES) --force --save_path $(DOCUMENTATION_PATH)licenses/ ; cd -
endif
#############################################################################################
#############################################################################################
##
## HELP-TARGETS
##
#############################################################################################
#############################################################################################
# @see .PHONY https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html#Phony-Targets
.DEFAULT_GOAL := help
.PHONY: print
## Print Path
print:
$(ECHO) "THIS_MAKEFILE: $(THIS_MAKEFILE)"
$(ECHO) "THIS_MAKEFILE_PATH: $(THIS_MAKEFILE_PATH)"
$(ECHO) "PROJECT_ROOT: $(PROJECT_ROOT)"
# Add a comment to the public targets so that it appears
# in this help Use two # characters for a help comment
.PHONY: help
help:
@printf "${COMMENT}Usage:${RESET}\n"
@printf " make [target] [arg=\"val\"...]\n\n"
@printf "${COMMENT}Available targets:${RESET}\n"
@awk '/^[a-zA-Z\-\\_0-9\.@]+:/ { \
helpMessage = match(lastLine, /^## (.*)/); \
if (helpMessage) { \
helpCommand = substr($$1, 0, index($$1, ":")); \
helpMessage = substr(lastLine, RSTART + 3, RLENGTH); \
printf " ${INFO}%-22s${RESET} %s\n", helpCommand, helpMessage; \
} \
} \
{ lastLine = $$0 }' $(MAKEFILE_LIST)
@printf "\n${COMMENT}Available arguments:${RESET}\n\n"
@awk '/^(([a-zA-Z\-\\_0-9\.@]+)\s[?:]?=)/ { \
helpMessage = match(lastLine, /^## (.*)/); \
if (helpMessage) { \
helpMessage = substr(lastLine, RSTART + 3, RLENGTH); \
printf " ${INFO}%-22s${RESET} %s (Default: %s)\n", $$1, helpMessage, $$3; \
} \
} \
{ lastLine = $$0 }' $(MAKEFILE_LIST)
#############################################################################################
#############################################################################################
##
## INIT-TARGETS
##
#############################################################################################
#############################################################################################
# @see .PHONY https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html#Phony-Targets
.PHONY: init-standard
## init standard project
init-standard: .gitignore
# The default directories are defined in the
# directories-standard.mk file, but all other
# targets can define directories as well.
$(ECHOMARKER) "Run init-standard"
$(foreach path,$(PROJECT_DIRECTORIES),\
$(shell $(MKDIR) -p $(path)))
$(ECHO) "Done"
#############################################################################################
#############################################################################################
##
## JSDOC-TARGETS
##
#############################################################################################
#############################################################################################
FIXBROKENPLANTUML := $(NODE_MODULES_DIR)jsdoc-plantuml/fixBrokenNodeJS.js
.PHONY: jsdoc-build
## generate js api docs
jsdoc-build: $(DOCUMENTATION_CONFIG_PATH)jsdoc.json $(FIXBROKENPLANTUML).fixed
$(ECHOMARKER) "create api doc"
$(QUIET) $(NPM) --prefix $(NODE_ROOT_DIR) run build-doc
$(FIXBROKENPLANTUML).fixed:
$(ECHOMARKER) "fix broken plantuml"
$(QUIET) chmod u+x $(FIXBROKENPLANTUML)
$(QUIET) $(NODE) $(FIXBROKENPLANTUML)
$(QUIET) $(TOUCH) $(FIXBROKENPLANTUML).fixed
\ No newline at end of file
#############################################################################################
#############################################################################################
##
## BUILD NODE
##
#############################################################################################
#############################################################################################
SPONGE ?= sponge
EXECUTABLES = $(EXECUTABLES:-) $(SPONGE);
.PHONY: node-build
## Build Node Components
node-build: $(NODE_MODULES_MODIFIED) $(NODE_PACKAGES)
$(ECHOMARKER) "Building Node Components"
$(ECHO) "Version: $(PROJECT_VERSION)"
$(ECHO) "Source Path: $(SOURCE_PATH)"
$(QUIET) $(JQ) '.version = "$(PROJECT_VERSION)"' $(PACKAGE_JSON) | $(SPONGE) $(PACKAGE_JSON)
$(QUIET) for p in $(NODE_PACKAGES); do \
$(JQ) '.version = "$(PROJECT_VERSION)"' $${p} | $(SPONGE) $${p}; \
done ; \
$(QUIET) $(NPM) --prefix $(NODE_ROOT_DIR) run build
#############################################################################################
#############################################################################################
##
## BUILD NODE
##
#############################################################################################
#############################################################################################
.PHONY: node-test
## Test JS Components
node-test: $(NODE_MODULES_MODIFIED)
$(ECHOMARKER) "Test Node Components"
$(QUIET) $(NPM) --prefix $(NODE_ROOT_DIR) run test
.PHONY: node-web-test
## Test JS Components
node-web-test: $(NODE_MODULES_MODIFIED)
$(ECHOMARKER) "Test Node Components"
$(QUIET) $(NPM) --prefix $(NODE_ROOT_DIR) run web-test
#############################################################################################
#############################################################################################
##
## NPM
##
#############################################################################################
#############################################################################################
.PHONY: npm-publish-major
## release major version of package
npm-publish-major: node-test
$(ECHOMARKER) "release major version"
$(QUIET) $(MAKE) next-major-version
$(QUIET) $(MAKE) node-build
$(QUIET) $(NPM) --prefix $(NODE_ROOT_DIR) run publish
.PHONY: npm-publish-minor
## release minor version of package
npm-publish-minor: node-test
$(ECHOMARKER) "release minor version"
$(QUIET) $(MAKE) next-minor-version
$(QUIET) $(MAKE) node-build
$(QUIET) $(NPM) --prefix $(NODE_ROOT_DIR) run publish
.PHONY: npm-publish-patch
## release patch version of package
npm-publish-patch: node-test
$(ECHOMARKER) "release patch version"
$(QUIET) $(MAKE) next-patch-version
$(QUIET) $(MAKE) node-build
$(QUIET) $(NPM) --prefix $(NODE_ROOT_DIR) run publish
#############################################################################################
#############################################################################################
##
## INIT-TARGETS
##
#############################################################################################
#############################################################################################
# @see .PHONY https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html#Phony-Targets
.PHONY: update-makefiles
## update standard makefiles
update-makefiles:
$(QUIET) $(eval TEMPD := $(shell mktemp -d))
$(QUIET) $(GIT) clone --depth=1 https://gitlab.schukai.com/schukai/utilities/makefile.git/ "$(TEMPD)" > /dev/null
$(QUIET) $(CP) -rv $(TEMPD)/makefiles/* $(MAKEFILE_IMPORT_PATH)
$(QUIET) $(CP) -rv $(TEMPD)/Makefile $(PROJECT_ROOT)Makefile.example
$(QUIET) $(RM) -rf $(TEMPD)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment