mirror of
https://github.com/zrepl/zrepl.git
synced 2024-11-22 00:13:52 +01:00
8b0637ddcc
The sphinxcontrib-versioning seems unmaintainted and I can't get the fork that we used before this PR working on Python 3.10. The situation wrt maintenance doesn't seem much better for sphinx-multiversion, but, at least I could get it to work with current sphinx versions. The main problem with sphinx-multiversion is that it doesn't render anything at `/`. I.e., `https://zrepl.github.io/configuration.html` will be 404. That's different from `sphinxcontrib-versioning`, and thus switching to sphinx-multiversion would break URLs. We host on GitHub pages and don't control the webserver, so, we can't use webserver-level redirects to keep the URLs working. We could create JS-level redirects, or `http-equiv`, but that's ugly as well. The simplest solution was to fork sphinx-multiversion and hard-code zrepl's specific needs into that fork. The fork is based off v0.2.4 and pinned via requirements.txt. Here are its unique commits: https://github.com/Holzhaus/sphinx-multiversion/compare/master...zrepl:sphinx-multiversion:zrepl We should revisit `sphinx-polyversion` in the future once its docs improve. See https://github.com/Holzhaus/sphinx-multiversion/issues/88#issuecomment-1606221194 This PR updates the various Python packages, as I couldn't get sphinx-multiversion to work with the (very old) versions that were pinned in `requirements.txt` prior to this PR. This PR's `requirements.txt` is from a clean Python 3.10 venv on Ubuntu 22.10 after running ``` pip install sphinx sphinx-rtd-theme pip install 'git+https://github.com/zrepl/sphinx-multiversion/@52c915d7ad898d9641ec48c8bbccb7d4f079db93#egg=sphinx_multiversion' ```
99 lines
2.0 KiB
Bash
Executable File
99 lines
2.0 KiB
Bash
Executable File
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
NON_INTERACTIVE=false
|
|
DO_CLONE=false
|
|
while getopts "ca" arg; do
|
|
case "$arg" in
|
|
"a")
|
|
NON_INTERACTIVE=true
|
|
;;
|
|
"c")
|
|
DO_CLONE=true
|
|
;;
|
|
*)
|
|
echo "invalid option '-$arg'"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
GHPAGESREPO="git@github.com:zrepl/zrepl.github.io.git"
|
|
SCRIPTDIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
|
|
PUBLICDIR="${SCRIPTDIR}/public_git"
|
|
|
|
checkout_repo_msg() {
|
|
echo "clone ${GHPAGESREPO} to ${PUBLICDIR}:"
|
|
}
|
|
|
|
if ! type sphinx-multiversion >/dev/null; then
|
|
echo "install sphinx-multiversion and come back"
|
|
exit 1
|
|
fi
|
|
|
|
cd "$SCRIPTDIR"
|
|
|
|
if [ ! -d "$PUBLICDIR" ]; then
|
|
checkout_repo_msg
|
|
if $DO_CLONE; then
|
|
git clone "${GHPAGESREPO}" "${PUBLICDIR}"
|
|
else
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if $NON_INTERACTIVE; then
|
|
echo "non-interactive mode"
|
|
else
|
|
echo -n "PRESS ENTER to confirm you commited and pushed docs changes and tags to the zrepl repo"
|
|
read -r
|
|
fi
|
|
|
|
pushd "$PUBLICDIR"
|
|
|
|
echo "verify we're in the GitHub pages repo..."
|
|
git remote get-url origin | grep -E "^${GHPAGESREPO}\$"
|
|
if [ "$?" -ne "0" ] ;then
|
|
checkout_repo_msg
|
|
echo "finished checkout, please run again"
|
|
exit 1
|
|
fi
|
|
|
|
echo "resetting GitHub pages repo to latest commit"
|
|
git fetch origin
|
|
git reset --hard origin/master
|
|
|
|
echo "cleaning GitHub pages repo"
|
|
git rm -rf .
|
|
cat > .gitignore <<EOF
|
|
**/.doctrees
|
|
EOF
|
|
|
|
popd
|
|
|
|
echo "building site"
|
|
|
|
python3 run-sphinx-multiversion.py . ./public_git
|
|
|
|
|
|
CURRENT_COMMIT=$(git rev-parse HEAD)
|
|
git status --porcelain
|
|
if [[ "$(git status --porcelain)" != "" ]]; then
|
|
CURRENT_COMMIT="${CURRENT_COMMIT}(dirty)"
|
|
fi
|
|
COMMIT_MSG="render from publish.sh - $(date -u) - ${CURRENT_COMMIT}"
|
|
|
|
pushd "$PUBLICDIR"
|
|
|
|
echo "adding and commiting all changes in GitHub pages repo"
|
|
git add .gitignore
|
|
git add -A
|
|
if [ "$(git status --porcelain)" != "" ]; then
|
|
git commit -m "$COMMIT_MSG"
|
|
else
|
|
echo "nothing to commit"
|
|
fi
|
|
echo "pushing to GitHub pages repo"
|
|
git push origin master
|
|
|