render compile
This commit is contained in:
@@ -0,0 +1,127 @@
|
||||
# Makefile for Quarto Project Automation
|
||||
|
||||
# Detect OS
|
||||
OS := $(shell uname | tr A-Z a-z)
|
||||
ifeq ($(OS), darwin)
|
||||
OS := OSX
|
||||
else ifeq ($(OS), linux)
|
||||
OS := linux
|
||||
else
|
||||
$(error Unknown operating system)
|
||||
endif
|
||||
|
||||
# Fetch Git branch and project details
|
||||
branchname := $(shell git branch --show-current)
|
||||
reponame := $(shell basename $(shell git rev-parse --show-toplevel))
|
||||
projtype := $(shell basename $(shell dirname $(shell git rev-parse --show-toplevel)))
|
||||
pubtype := $(if $(findstring PUB,$(branchname)),public,protected)
|
||||
remotedir := drwater@serev:/home/www/drwater/$(projtype)/$(pubtype)/$(reponame)/@$(branchname)
|
||||
outputdir := $(shell awk -F': *' '/^ *output-dir:/ {print $$2 "/" }' ./_quarto.yml)
|
||||
siteurl := https://drwater.rcees.ac.cn/$(projtype)/$(pubtype)/$(reponame)/@$(branchname)
|
||||
|
||||
|
||||
# Variables for colors and port
|
||||
bcolor := grey
|
||||
port := 4199
|
||||
|
||||
# Set background color based on branch name
|
||||
ifeq ($(findstring R1,$(branchname)),R1)
|
||||
bcolor := orange
|
||||
else ifeq ($(findstring R2,$(branchname)),R2)
|
||||
bcolor := lightblue
|
||||
else ifeq ($(findstring R3,$(branchname)),R3)
|
||||
bcolor := lightgreen
|
||||
else ifeq ($(findstring PUB,$(branchname)),PUB)
|
||||
bcolor := light
|
||||
endif
|
||||
|
||||
# Set port based on branch name
|
||||
branch_ports := main:4200 SM:4201 TX:4202 FJ:4203 YF:4204 ZY:4205 WW:4206 JB:4207 YY:4208
|
||||
port := $(shell echo $(branch_ports) | tr " " "\n" | grep -E "^$(branchname):" | sed -E 's/^$(branchname):([0-9]+)/\1/')
|
||||
port := $(if $(port),$(port),4199)
|
||||
|
||||
# Define the state file
|
||||
STATE_FILE := .source_state
|
||||
|
||||
# checkfile
|
||||
GREPSTR := " \|^submit\|^analysis\|_cache\|_freeze\|^site_libs\|^www"
|
||||
|
||||
# Default target
|
||||
.PHONY: all preview readme rsync local clean upload fix_links force
|
||||
|
||||
all: render upload clean
|
||||
|
||||
# Render target with hash checking
|
||||
render:
|
||||
@current_hash=$$(find $(shell git ls-files "*.qmd" "_*.yml" "*.pdf" "*.svg" "*.png" | grep -v $(GREPSTR)) -exec cat {} + | md5sum | awk '{print $$1}'); \
|
||||
if [ ! -f $(STATE_FILE) ] || [ "$$current_hash" != "$$(cat $(STATE_FILE))" ]; then \
|
||||
echo "Changes detected, rendering..."; \
|
||||
quarto render; \
|
||||
echo "$$current_hash" > $(STATE_FILE); \
|
||||
git add . && git commit -m "render compile"; \
|
||||
else \
|
||||
echo "No changes detected, skipping render."; \
|
||||
fi
|
||||
|
||||
# Force render target
|
||||
force:
|
||||
@echo "Forcing render..."
|
||||
@quarto render
|
||||
@current_hash=$$(find $(shell git ls-files "*.qmd" "_*.yml" "*.pdf" "*.svg" "*.png" | grep -v $(GREPSTR)) -exec cat {} + | md5sum | awk '{print $$1}'); \
|
||||
echo "$$current_hash" > $(STATE_FILE); \
|
||||
git add . && git commit -m "render compile"; \
|
||||
|
||||
# Preview the site on a specific port
|
||||
preview:
|
||||
@quarto preview --port $(port)
|
||||
|
||||
# Generate README.md
|
||||
readme:
|
||||
@quarto render index.qmd -t markdown -o README.md
|
||||
@sed -e '/^---/,/^---/d' "$(outputdir)/README.md" > README.md
|
||||
@rm "$(outputdir)/README.md"
|
||||
|
||||
# Sync files with remote server
|
||||
rsync: render
|
||||
@rsync -azvu --progress --delete -r "$(outputdir)" "$(remotedir)"
|
||||
|
||||
# Open local site
|
||||
local: render
|
||||
@if [ "$(OS)" = "OSX" ]; then open "$(outputdir)/index.html"; fi
|
||||
|
||||
# Clean unnecessary files
|
||||
clean:
|
||||
@rm -f ./*.spl ./*.aux ./*.bbl ./*.blg ./*.log ./*.tex ./*.bcf ./*.tex.sedbak ./*.fdb_latexmk
|
||||
|
||||
# Upload files to server and fix links
|
||||
upload: render
|
||||
@chmod -R 2775 "$(outputdir)"
|
||||
@$(MAKE) fix_links
|
||||
@if rsync -azvu --progress --delete -r "$(outputdir)" "$(remotedir)"; then \
|
||||
if [ "$(OS)" = "OSX" ]; then \
|
||||
open "$(siteurl)" 2>/dev/null; \
|
||||
fi; \
|
||||
else \
|
||||
echo "Rsync failed. Attempting alternative upload method..."; \
|
||||
mkdir -p "$(reponame)"; \
|
||||
rsync -azvu --progress --delete -r "$(reponame)" "$(dir $(remotedir))"; \
|
||||
rm -rf "$(reponame)"; \
|
||||
rsync -azvu --progress --delete -r "$(outputdir)" "$(remotedir)"; \
|
||||
if [ "$(OS)" = "OSX" ]; then \
|
||||
open "$(siteurl)" 2>/dev/null; \
|
||||
fi; \
|
||||
fi
|
||||
|
||||
|
||||
|
||||
|
||||
# Fix links in www directory
|
||||
fix_links:
|
||||
@find ./www -type f -name "*.html" -exec sed -i.bak \
|
||||
-e "s/{{< var branch >}}/$(branchname)/g" \
|
||||
-e "s/{{< var pubtype >}}/$(pubtype)/g" \
|
||||
-e "s/{{< var projtype >}}/$(projtype)/g" \
|
||||
-e "s/{{< var reponame >}}/$(reponame)/g" \
|
||||
-e "s/$(reponame)\/blob/$(reponame)\/raw\/branch/g" \
|
||||
-e "s/$(reponame)\/edit/$(reponame)\/_edit/g" {} +
|
||||
@find ./www -type f -name "*.bak" -exec rm {} +
|
||||
Reference in New Issue
Block a user