[docs] add push_with_docs script

This commit is contained in:
Jan Petykiewicz 2026-04-18 22:58:38 -07:00
commit bedb338ac9
5 changed files with 180 additions and 1 deletions

25
scripts/configure_docs_url.sh Executable file
View file

@ -0,0 +1,25 @@
#!/bin/bash
set -Eeuo pipefail
ROOT="$(git rev-parse --show-toplevel)"
cd "$ROOT"
if [[ $# -gt 1 ]]; then
echo "usage: $0 [docs-site-url]" >&2
exit 2
fi
if [[ $# -eq 1 ]]; then
git config meanas.docsSiteUrl "$1"
echo "Configured meanas.docsSiteUrl=$1"
exit 0
fi
CURRENT_URL="$(git config --get meanas.docsSiteUrl || true)"
if [[ -n "$CURRENT_URL" ]]; then
echo "$CURRENT_URL"
else
echo "meanas.docsSiteUrl is not configured" >&2
exit 1
fi

52
scripts/publish_docs_branch.sh Executable file
View file

@ -0,0 +1,52 @@
#!/bin/bash
set -Eeuo pipefail
if [[ $# -ne 2 ]]; then
echo "usage: $0 <site-dir> <branch>" >&2
exit 2
fi
SITE_DIR="$1"
BRANCH="$2"
if [[ ! -d "$SITE_DIR" ]]; then
echo "site directory not found: $SITE_DIR" >&2
exit 1
fi
if ! git rev-parse --git-dir >/dev/null 2>&1; then
echo "must be run inside a git repository" >&2
exit 1
fi
TMP_DIR="$(mktemp -d)"
cleanup() {
git worktree remove --force "$TMP_DIR" >/dev/null 2>&1 || true
}
trap cleanup EXIT
git fetch origin "$BRANCH" || true
if git show-ref --verify --quiet "refs/remotes/origin/$BRANCH"; then
git worktree add --detach "$TMP_DIR" "origin/$BRANCH"
else
git worktree add --detach "$TMP_DIR"
git -C "$TMP_DIR" checkout --orphan "$BRANCH"
fi
find "$TMP_DIR" -mindepth 1 -maxdepth 1 ! -name '.git' -exec rm -rf {} +
cp -R "$SITE_DIR"/. "$TMP_DIR"/
touch "$TMP_DIR/.nojekyll"
git -C "$TMP_DIR" config user.name "${GIT_AUTHOR_NAME:-Forgejo Actions}"
git -C "$TMP_DIR" config user.email "${GIT_AUTHOR_EMAIL:-forgejo-actions@localhost}"
git -C "$TMP_DIR" add -A
if git -C "$TMP_DIR" diff --cached --quiet; then
echo "no docs changes to publish"
exit 0
fi
git -C "$TMP_DIR" commit -m "Publish docs for ${GITHUB_SHA:-local build}"
git -C "$TMP_DIR" push --force origin "HEAD:${BRANCH}"

68
scripts/push_with_docs.sh Executable file
View file

@ -0,0 +1,68 @@
#!/bin/bash
set -Eeuo pipefail
ROOT="$(git rev-parse --show-toplevel)"
cd "$ROOT"
CURRENT_BRANCH="$(git branch --show-current)"
resolve_remote_name() {
local branch="$1"
shift || true
for arg in "$@"; do
case "$arg" in
--)
break
;;
-*)
continue
;;
*)
if git remote get-url "$arg" >/dev/null 2>&1; then
echo "$arg"
return 0
fi
;;
esac
done
git config --get "branch.${branch}.pushRemote" \
|| git config --get remote.pushDefault \
|| git config --get "branch.${branch}.remote" \
|| echo origin
}
REMOTE_NAME="$(resolve_remote_name "$CURRENT_BRANCH" "$@")"
git push "$@"
if [[ "$CURRENT_BRANCH" != "master" ]]; then
echo "[meanas docs push] current branch is '${CURRENT_BRANCH:-<detached>}' not 'master'; skipping docs publish" >&2
exit 0
fi
if [[ "$REMOTE_NAME" != "origin" ]]; then
echo "[meanas docs push] push remote is '${REMOTE_NAME}' not 'origin'; skipping docs publish" >&2
exit 0
fi
if ! command -v mkdocs >/dev/null 2>&1; then
echo "[meanas docs push] mkdocs not found; skipping docs publish" >&2
exit 0
fi
DOCS_SITE_URL="${DOCS_SITE_URL:-$(git config --get meanas.docsSiteUrl || true)}"
export DOCS_SITE_URL
if [[ -n "$DOCS_SITE_URL" ]]; then
echo "[meanas docs push] publishing docs for ${DOCS_SITE_URL}" >&2
else
echo "[meanas docs push] DOCS_SITE_URL is unset; building docs with relative site_url" >&2
fi
echo "[meanas docs push] building docs" >&2
./make_docs.sh
echo "[meanas docs push] publishing docs-site branch" >&2
./scripts/publish_docs_branch.sh site docs-site