Merge pull request #411 from CrossStream/sandbox/rzr/review/master

build: Add caching feature for offline use
This commit is contained in:
Yujie Wen 2020-03-04 12:26:07 +08:00 committed by GitHub
commit 11999b753e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 70 additions and 0 deletions

View File

@ -18,6 +18,8 @@ reveal_zip_url?=https://github.com/hakimel/reveal.js/archive/master.zip
reveal_dir?=./reveal.js
sudo?=sudo
deploy_branch?=gh-pages
cache_dir?=./cache/url
make?=make -f ${CURDIR}/Makefile
help:
@ -27,6 +29,7 @@ help:
@echo "# make all # Build html"
@echo "# make start # View HTML in Web browser"
@echo "# make download # Download deps"
@echo "# make offline # Cache inlined resources and generate cached pages"
@echo "# make upload # to build and publish"
@echo "# make setup/debian setup download start # ..."
@echo "# Config:"
@ -131,3 +134,70 @@ upload:
echo "# About to push to origin in 5 secs ?"
sleep 5 ; git push -f origin HEAD:gh-pages
git checkout master
%.lst: %.org Makefile
echo "" > "$@"
-grep -o -e 'https\?://[^]"]*' -- "$<" \
| grep -E ".**\.(gif|png|svg|jpg|jpeg|webm|mp4)"\
| sort -u >> "$@.tmp"
mv "$@.tmp" "$@"
%/curl:
@mkdir -p http https
@ln -fs http http:
@ln -fs https https:
ls "${@D}" > /dev/null 2>&1 \
|| curl --create-dirs -o "./${@D}" -- "${@D}"
find . -iname "*#*" | while read file; do \
basename=$$(basename -- "$${file}"); \
dirname=$$(dirname -- "$${file}"); \
dstname=$$(echo "$${basename}" | sed -e 's|#.|%23.|g'); \
ln -fs "$${basename}" "$${dirname}/$${dstname}"; \
dstname=$$(echo "$${basename}" | sed -e 's|#.||g'); \
ln -fs "$${basename}" "$${dirname}/$${dstname}"; \
done
.PHONY: cache
cache: ${target}.lst Makefile
@mkdir -p "${<D}/${cache_dir}"
cd "${<D}/${cache_dir}" && \
cat "${CURDIR}/$<" | while read url ; do \
${make} $${url}/curl || exit $$? ; \
done
${target}._cache.org: ${target}.lst ${target}.org cache reveal.js
sed -e 's|^#+REVEAL_ROOT:.*|#+REVEAL_ROOT: ${CURDIR}/reveal.js|g' \
< ${target}.org > $@.tmp
sort -u $< | while read url; do \
sed -e "s|$${url}|${cache_dir}/$${url}|g" \
-e "s|${cache_dir}/http://|${cache_dir}/http/|g" \
-e "s|${cache_dir}/https://|${cache_dir}/https/|g" \
-i "${@}.tmp" ; \
done
mv "${@}.tmp" "$@"
html-cache: ${target}.org ${target}._cache.org
make html target="${target}._cache"
sed -e "s|#./|/./|g" -i "${target}._cache.html"
offline: all/cache all/html-cache
sync
offline/start: offline
${MAKE} ${@F} target="${target}._cache"
commit/offline:
-git branch -D ${@F}/master
git checkout -b ${@F}/master
${MAKE} download
-git add -f .
-git commit -am 'deploy: Cache downloaded files'
${MAKE} cache
-git add -f .
-git commit -am 'deploy: Cache downloaded files, see lst file for sources'
${MAKE} ${@F}
-git add -f .
-git commit -am 'deploy: Render cached files'