add the initial implementation for the deploy target

This commit is contained in:
Mamadou Babaei
2024-07-29 15:05:37 +02:00
parent df0aff8ca3
commit cadd997971
+99 -10
View File
@@ -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 "<html><head><style>" > $(SG_HANDBOOK_DEPLOY_GENERATED_INDEX_FILE)
@echo "body { font-family: Arial, sans-serif; background-color: #003070; color: #fff; margin: 0; padding: 0; }" >> $(SG_HANDBOOK_DEPLOY_GENERATED_INDEX_FILE)
@echo ".container { display: table; width: 300px; margin: 0 auto; padding: 20px; }" >> $(SG_HANDBOOK_DEPLOY_GENERATED_INDEX_FILE)
@echo ".row { display: table-row; }" >> $(SG_HANDBOOK_DEPLOY_GENERATED_INDEX_FILE)
@echo ".cell { display: table-cell; background-color: #004890; border-radius: 5px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); margin: 10px 100px; padding: 20px; text-align: center; transition: transform 0.2s; }" >> $(SG_HANDBOOK_DEPLOY_GENERATED_INDEX_FILE)
@echo ".cell:hover { transform: scale(1.05); }" >> $(SG_HANDBOOK_DEPLOY_GENERATED_INDEX_FILE)
@echo ".cell a { text-decoration: none; color: #fff; font-weight: bold; }" >> $(SG_HANDBOOK_DEPLOY_GENERATED_INDEX_FILE)
@echo "</style></head><body><div style='padding: 2.0em; text-align:center;'><h1>Welcome to the SenseGlove Unreal Engine Handbook</h1><h3>Please choose a revision to continue!</h3><h5>* Please note that the next revision is the documentation for the unstable next release of the plugin and subject to change!</h5></div><div class='container'>" >> $(SG_HANDBOOK_DEPLOY_GENERATED_INDEX_FILE)
@while read dir; \
do \
echo "<div class='row'><div class='cell'><a href=\"$$dir\">$$dir</a></div></div>"; \
done < $(SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE) >> $(SG_HANDBOOK_DEPLOY_GENERATED_INDEX_FILE)
@echo "</div></body></html>" >> $(SG_HANDBOOK_DEPLOY_GENERATED_INDEX_FILE)
@echo "Uploading '$(SG_HANDBOOK_DEPLOY_GENERATED_INDEX_FILE)' to '$(SG_HANDBOOK_SSH_USER)@$(SG_HANDBOOK_SSH_HOST):$(SG_HANDBOOK_SSH_REMOTE_DIR)'"
@scp \
-P $(SG_HANDBOOK_SSH_PORT) \
$(SG_HANDBOOK_DEPLOY_GENERATED_INDEX_FILE) \
$(SG_HANDBOOK_SSH_USER)@$(SG_HANDBOOK_SSH_HOST):$(SG_HANDBOOK_SSH_REMOTE_DIR)