add the initial implementation for the deploy target
This commit is contained in:
+99
-10
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user