diff --git a/Handbook/GNUmakefile b/Handbook/GNUmakefile index 761ff0b8..4052688d 100644 --- a/Handbook/GNUmakefile +++ b/Handbook/GNUmakefile @@ -30,13 +30,21 @@ SG_PROJECT_NAME := The SenseGlove Unreal Engine Handbook -SG_HANDBOOK_DIR := $(CURDIR) -SG_HANDBOOK_SRC_DIR := $(SG_HANDBOOK_DIR)/src -SG_HANDBOOK_CONFIG_FILE := $(realpath $(SG_HANDBOOK_DIR)/book.toml) +SG_HANDBOOK_DIR := $(CURDIR) +SG_HANDBOOK_SRC_DIR := $(SG_HANDBOOK_DIR)/src +SG_HANDBOOK_TOML_FILE := $(realpath $(SG_HANDBOOK_DIR)/book.toml) +SG_HANDBOOK_CONFIG_HOME_DIR := SenseGlove/ue-handbook +SG_HANDBOOK_DEPLOY_CONFIG_FILENAME := deploy.conf +SG_HANDBOOK_DEPLOY_TEMP_DIR_NAME := unreal-docs-senseglove-com-deploy-XXXXXXXXXX + SG_PLUGIN_DIR := $(realpath $(SG_HANDBOOK_DIR)/..) SG_PLUGIN_RESOURCES_DIR := $(SG_PLUGIN_DIR)/Resources SG_PLUGIN_FILE := $(SG_PLUGIN_DIR)/SenseGlove.uplugin -SG_DOCUMENTATION_DIR := $(SG_PLUGIN_DIR)/Documentation + +SG_DOCUMENTATION_DIR := $(SG_PLUGIN_DIR)/Documentation +SG_DOCUMENTATION_EPUB_DIR := $(SG_DOCUMENTATION_DIR)/epub +SG_DOCUMENTATION_HTML_DIR := $(SG_DOCUMENTATION_DIR)/html +SG_DOCUMENTATION_PDF_DIR := $(SG_DOCUMENTATION_DIR)/pdf-outline SG_BROWSER_BINARY_PATH_LINUX := $(shell which brave-bin 2>/dev/null) SG_BROWSER_BINARY_PATH_WINDOWS := C:\Program Files\BraveSoftware\Brave-Browser\Application\brave.exe @@ -101,7 +109,7 @@ SG_GIT_COMMIT_NUMS_SINCE_TAG := $(shell git rev-list --count HEAD ^`git describe SG_GIT_TREE_STATE := $(shell test -n "`git status --porcelain 2>/dev/null`" && echo "dirty" || echo "clean") SG_PLUGIN_VERSION := $(shell grep -o '"VersionName": "[^"]*"' ${SG_PLUGIN_FILE} | awk -F'"' '{print "v" $$4}') -SG_HANDBOOK_SITE_URL := $(shell grep '^site-url' $(SG_HANDBOOK_CONFIG_FILE) | sed -n 's|^site-url = "/\(.*\)/"|\1|p') +SG_HANDBOOK_SITE_URL := $(shell grep '^site-url' $(SG_HANDBOOK_TOML_FILE) | sed -n 's|^site-url = "/\(.*\)/"|\1|p') ifeq ($(strip $(SG_GIT_COMMIT_NUMS_SINCE_TAG)),) SG_GIT_COMMIT_NUMS_SINCE_TAG := 0 @@ -171,7 +179,7 @@ SG_HANDBOOK_REVISION := mismatched endif # ($(strip $(SG_HANDBOOK_REVISION)),) ################################################################################ -# mdbook-pdf configuration +# mdbook-pdf Configuration ################################################################################ ifeq ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX)) @@ -195,8 +203,44 @@ SG_WINPYTHON_BIN_DIR := $(SG_WINPYTHON_DIR)//python-3.12.4.amd64 SG_WINPYTHON_BIN_SCRIPTS_DIR := $(SG_WINPYTHON_BIN_DIR)/Scripts SG_WINPYTHON_SCRIPTS_DIR := $(SG_WINPYTHON_DIR)/scripts export PATH := $(SG_WINPYTHON_BIN_DIR);$(SG_WINPYTHON_BIN_SCRIPTS_DIR);$(SG_WINPYTHON_SCRIPTS_DIR);$(PATH) +else # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX)) +$(error The target operating system is not supported!) endif # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX)) +################################################################################ +# Deployment Configuration +################################################################################ + +ifeq ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX)) +SG_HANDBOOK_DEPLOY_CONFIG_FILE := $(shell echo ~/.config/$(SG_HANDBOOK_CONFIG_HOME_DIR)/$(SG_HANDBOOK_DEPLOY_CONFIG_FILENAME)) +else ifeq ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_WINDOWS)) +SG_HANDBOOK_DEPLOY_CONFIG_FILE := $(shell cygpath -u $(LOCALAPPDATA)/$(SG_HANDBOOK_CONFIG_HOME_DIR)/$(SG_HANDBOOK_DEPLOY_CONFIG_FILENAME)) +else # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX)) +$(error The target operating system is not supported!) +endif # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX)) + +################################################################################ +# Deployment Temporary Directory Setup +################################################################################ + +$(info Setting up a deployment temporary directory '$(SG_HANDBOOK_DEPLOY_TEMP_DIR_NAME)') +SG_HANDBOOK_DEPLOY_TEMP_DIR := $(shell mktemp -d -t $(SG_HANDBOOK_DEPLOY_TEMP_DIR_NAME)) +$(info Temporary directory has been set up at '$(SG_HANDBOOK_DEPLOY_TEMP_DIR)') + +SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE := $(SG_HANDBOOK_DEPLOY_TEMP_DIR)/revisions.txt +SG_HANDBOOK_DEPLOY_GENERATED_INDEX_FILE := $(SG_HANDBOOK_DEPLOY_TEMP_DIR)/index.html + +################################################################################ +# Env Configuration Functions +################################################################################ + +define load_env + $(eval ENV_FILE := $(1)) + @echo "Loading configuration file '$(ENV_FILE)'..." + $(eval include $(ENV_FILE)) + $(eval export) +endef + ################################################################################ # Make Targets - All ################################################################################ @@ -259,9 +303,9 @@ install-build-deps: @cargo install mdbook-pdf --locked ifeq ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX)) @echo "Installing mdbook-pdf-outline..." - @python -m venv $(VIRTUAL_ENV) && \ - source $(SG_LINUX_PYTHON_VENV_BIN_DIR)/activate && \ - pip install mdbook-pdf-outline 2>/dev/null + @python -m venv $(VIRTUAL_ENV) \ + && . $(SG_LINUX_PYTHON_VENV_BIN_DIR)/activate \ + && pip install mdbook-pdf-outline 2>/dev/null endif # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX)) ################################################################################ @@ -327,7 +371,7 @@ deploy: clean deploy: prepare deploy: verify-handbook-revision deploy: _mdbook_build -deploy: +deploy: _deploy .PHONY: _mdbook_serve _mdbook_serve: @@ -379,3 +423,48 @@ _mdbook_build: MDBOOK_output__pdf__browser_binary_path='$(SG_MDBOOK_PDF_BROWSER_BINARY_PATH)' \ mdbook build \ --dest-dir $(SG_MDBOOK_DEST_DIR) + +.PHONY: _deploy +_deploy: + @echo "Deploying '$(SG_HANDBOOK_DIR)'..." + @echo "Loading the Handbook deployment configuration file..." + @$(call load_env, $(SG_HANDBOOK_DEPLOY_CONFIG_FILE)) + @echo "Deploying '$(SG_HANDBOOK_DIR)' to '$(SG_HANDBOOK_SSH_USER)@$(SG_HANDBOOK_SSH_HOST):$(SG_HANDBOOK_SSH_REMOTE_DIR)/$(SG_HANDBOOK_REVISION)'..." + @rsync -avze "ssh -p $(SG_HANDBOOK_SSH_PORT)" --perms --chmod=u+rwx,g+rx,o+rx,g-w,o-wx\ + --delete $(SG_DOCUMENTATION_HTML_DIR)/ $(SG_HANDBOOK_SSH_USER)@$(SG_HANDBOOK_SSH_HOST):$(SG_HANDBOOK_SSH_REMOTE_DIR)/$(SG_HANDBOOK_REVISION) + @echo "Retrieving the list of deployed handbook revisions from '$(SG_HANDBOOK_SSH_USER)@$(SG_HANDBOOK_SSH_HOST):$(SG_HANDBOOK_SSH_PORT)/$(SG_HANDBOOK_SSH_REMOTE_DIR)'..." + @ssh \ + -p $(SG_HANDBOOK_SSH_PORT) $(SG_HANDBOOK_SSH_USER)@$(SG_HANDBOOK_SSH_HOST) \ + "mkdir -p $(SG_HANDBOOK_SSH_REMOTE_DIR)" + @ssh \ + -p $(SG_HANDBOOK_SSH_PORT) $(SG_HANDBOOK_SSH_USER)@$(SG_HANDBOOK_SSH_HOST) \ + "find $(SG_HANDBOOK_SSH_REMOTE_DIR) -maxdepth 1 -type d ! -path $(SG_HANDBOOK_SSH_REMOTE_DIR) -exec basename {} \; | sort -r" \ + > $(SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE) + @{ \ + grep -i 'next' $(SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE); \ + grep -vi 'next' $(SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE) \ + | sort -r; \ + } > $(SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE).tmp + @mv $(SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE).tmp $(SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE) + @echo "Revisions list saved to '$(SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE)'!" + @echo "Current revisions:" + @sed 's/^/ - /' $(SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE) + @echo "Generating '$(SG_HANDBOOK_DEPLOY_GENERATED_INDEX_FILE)'..." + @echo "