Upgrade makefile for both slides & docs

This commit is contained in:
Glenn Y. Rolland 2020-04-19 12:03:37 +02:00
parent 4ed74a594c
commit eccbe5db3c

145
Makefile Normal file → Executable file
View file

@ -1,72 +1,107 @@
#!/usr/bin/make -f #!/usr/bin/make -f
THEME=gyr ## Configure this part if you wish to
THEME_OPT=-t $(THEME) DEPLOY_REPO=
DEPLOY_OPTS=
BUILD_DIR=_build
REVEALJS_THEMES=node_modules/reveal.js/css/theme ## Find slides
REVEALJS_DIR=node_modules/reveal.js SLIDES_MD=$(shell find slides \( -name '*.md' ! -name '_*' \))
SLIDES_PDF=$(patsubst slides/%.md,$(BUILD_DIR)/slides/%.pdf,$(SLIDES_MD))
BUILD_DIR=build all: help
SLIDES_DIR=slides ##
SLIDES_MD=$(wildcard $(SLIDES_DIR)/**/*.md) ## Install prerequisites
SLIDES_PDF=$(patsubst $(SLIDES_DIR)/%,$(BUILD_DIR)/%,$(patsubst %.md,%.pdf,$(SLIDES_MD))) ##
SLIDES_HTML=$(patsubst $(SLIDES_DIR)/%,$(BUILD_DIR)/%,$(patsubst %.md,%.html,$(SLIDES_MD)))
NAME=$(shell basename "$$(pwd)") prepare: prepare-slides prepare-docs ## install prerequisites
REVEALMD=node_modules/.bin/reveal-md prepare-slides: ## install prerequisites for PDF slides only
all: live npm install
configure: configure-assets configure-reveal configure-style prepare-docs: ## install prerequisites for static docs site only
pipenv install
configure-assets: .PHONY: prepare prepare-slides prepare-docs
$(MAKE) -C assets build
configure-reveal:
npm install reveal-md # -v 0.0.19
npm install node-sass
configure-style:
cp -a themes/$(THEME).scss $(REVEALJS_THEMES)/source
cd $(REVEALJS_DIR) && ../.bin/node-sass \
css/theme/source/$(THEME).scss \
css/theme/$(THEME).css \
zip:
rm -f "../$(NAME)-latest.zip"
(git ls-files ; find assets) |grep -v '^ext' | zip -r "../$(NAME)-latest.zip" -@
live:
$(REVEALMD) --disable-auto-open --host 0.0.0.0 $(THEME_OPT) $(SLIDES_DIR)
.PHONY: build-pdf build-html
build-pdf: $(SLIDES_PDF)
build-html: $(SLIDES_HTML)
$(BUILD_DIR)/%.pdf: $(SLIDES_DIR)/%.md watch: ## run development server
mkdir -p "$$(dirname "$@")" pipenv run honcho start
docker run --rm --net=host -v "`pwd`:/slides" astefanutti/decktape http://localhost:1948/$(<:slides/%=%) --pause 500 /slides/$@
touch -a -r "$<" "$@"
$(BUILD_DIR)/%.html: $(SLIDES_DIR)/%.md watch-slides: ## run development server for PDF slides
mkdir -p "$$(dirname "$@")" npx marp --engine $$(pwd)/.marp/engine.js --html --theme $$(pwd)/.marp/theme.css -w slides -s
test -d "$$(dirname "$<")/images" \
&& rsync -a "$$(dirname "$<")/images/" "$$(dirname "$@")/images/" \
|| true
pandoc -f markdown+emoji -t html -o "$@" "$<"
touch -a -r "$<" "$@"
clean: clean-pdf clean-html watch-docs: ## run development server for static docs site
pipenv run mkdocs serve --dev-addr 0.0.0.0:5001
clean-pdf: serve: watch
rm -f $(BUILD_DIR)/**/*.pdf serve-slides: watch-slides
serve-docs: watch-docs
clean-html: .PHONY: watch watch-slides watch-docs serve serve-docs serve-slides
rm -f $(BUILD_DIR)/**/*.html
tasklist:
watch "find slides/ -type f -name '*.md' |egrep -v '(template-|\.DONE\.md)' |sort" tocupdate:
while inotifywait -q -e move -e modify -e create -e attrib -e delete -r docs ; do \
sleep 1 ; \
pipenv run ./scripts/update-toc ; \
done
$(BUILD_DIR)/slides/%.pdf: slides/%.md
mkdir -p $(BUILD_DIR)/slides
npx marp --allow-local-files \
--engine $$(pwd)/engine.js \
--html \
--theme theme.css \
$< \
-o $@
##
## Build final documents
##
## slides => PDF
## docs => static web site
##
build: build-docs build-slides ## build all documents
build-slides: $(SLIDES_PDF) $(SLIDES_MD) ## build PDF slides only
build-docs: ## build static docs site only
pipenv run mkdocs build --site-dir $(BUILD_DIR)/docs
.PHONY: build build-slides
deploy-docs: ## deploy static docs site to github
git push $(DEPLOY_REPO)
pipenv run mkdocs gh-deploy $(DEPLOY_OPTS)
help: ## print this help
@echo "Usage: make <target>"
@echo ""
@echo "With one of following targets:"
@echo ""
@awk 'BEGIN {FS = ":.*?## "} \
/^[a-zA-Z_-]+:.*?## / \
{ sub("\\\\n",sprintf("\n%22c"," "), $$2); \
printf("\033[36m%-20s\033[0m %s\n", $$1, $$2); \
}' $(MAKEFILE_LIST)
@echo ""
##
## Clean
##
clean: clean-slides clean-docs # remove generated documents
clean-slides:
rm -fr $(BUILD_DIR)/slides # remove generated PDF slides
clean-docs:
rm -fr $(BUILD_DIR)/docs # remove generated static docs site
.PHONY: clean clean-slides clean-docs