Files
SpacetimeDB/docs/scripts/get-old-docs.sh
2026-02-20 13:06:34 -08:00

111 lines
3.2 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(git -C "$SCRIPT_DIR" rev-parse --show-toplevel 2>/dev/null || true)"
if [[ -z "$REPO_ROOT" ]]; then
echo "Could not determine git repository root from $SCRIPT_DIR." >&2
exit 1
fi
cd "$REPO_ROOT"
DEFAULT_COMMIT="e45cf891c20d87b11976e1d54c04c0e4639dbe81"
COMMIT="${1:-$DEFAULT_COMMIT}"
VERSION="${2:-1.12.0}"
if ! command -v git >/dev/null 2>&1; then
echo "git is required." >&2
exit 1
fi
if ! command -v node >/dev/null 2>&1; then
echo "node is required." >&2
exit 1
fi
if ! command -v pnpm >/dev/null 2>&1; then
echo "pnpm is required." >&2
exit 1
fi
NODE_MAJOR="$(node -p 'process.versions.node.split(".")[0]')"
if [[ "$NODE_MAJOR" -lt 20 ]]; then
echo "Node >= 20 is required. Current: $(node -v)" >&2
exit 1
fi
if [[ ! -d docs ]]; then
echo "Run this from the repo root (expected ./docs)." >&2
exit 1
fi
if ! git rev-parse --verify "${COMMIT}^{commit}" >/dev/null 2>&1; then
echo "Commit not found: $COMMIT" >&2
exit 1
fi
TMP_DIR="$(mktemp -d "${TMPDIR:-/tmp}/spacetimedb-docs-recut.XXXXXX")"
cleanup() {
if [[ -n "${TMP_DIR:-}" && -d "${TMP_DIR:-}" ]]; then
git -C "$REPO_ROOT" worktree remove --force "$TMP_DIR" >/dev/null 2>&1 || true
rm -rf "$TMP_DIR" >/dev/null 2>&1 || true
fi
}
trap cleanup EXIT
echo "Creating temp worktree at $TMP_DIR"
git worktree add --detach "$TMP_DIR" HEAD >/dev/null
echo "Restoring docs source from commit $COMMIT"
git -C "$TMP_DIR" restore --source "$COMMIT" --worktree -- docs/docs docs/sidebars.ts
TMP_CUT_VERSION="__recut_${VERSION}_$(date +%s)"
TMP_CUT_VERSIONED_DOCS="$TMP_DIR/docs/versioned_docs/version-$TMP_CUT_VERSION"
TMP_CUT_VERSIONED_SIDEBAR="$TMP_DIR/docs/versioned_sidebars/version-$TMP_CUT_VERSION-sidebars.json"
echo "Preparing temp cut version: $TMP_CUT_VERSION"
rm -rf "$TMP_CUT_VERSIONED_DOCS" "$TMP_CUT_VERSIONED_SIDEBAR"
echo "Recutting docs version: $VERSION"
echo "Installing docs dependencies in temp worktree"
pnpm --dir "$TMP_DIR/docs" install --frozen-lockfile
pnpm --dir "$TMP_DIR/docs" docusaurus docs:version "$TMP_CUT_VERSION"
DEST_VERSIONED_DOCS="$REPO_ROOT/docs/versioned_docs/version-$VERSION"
DEST_VERSIONED_SIDEBAR="$REPO_ROOT/docs/versioned_sidebars/version-$VERSION-sidebars.json"
DEST_VERSIONS_JSON="$REPO_ROOT/docs/versions.json"
echo "Copying regenerated artifacts into current branch working tree"
rm -rf "$DEST_VERSIONED_DOCS" "$DEST_VERSIONED_SIDEBAR"
cp -R "$TMP_CUT_VERSIONED_DOCS" "$REPO_ROOT/docs/versioned_docs/version-$VERSION"
cp "$TMP_CUT_VERSIONED_SIDEBAR" "$DEST_VERSIONED_SIDEBAR"
node -e '
const fs = require("fs");
const path = process.argv[1];
const version = process.argv[2];
let versions = [];
try {
versions = JSON.parse(fs.readFileSync(path, "utf8"));
if (!Array.isArray(versions)) versions = [];
} catch {
versions = [];
}
versions = versions.filter((v) => v !== version);
versions.unshift(version);
fs.writeFileSync(path, JSON.stringify(versions, null, 2) + "\n");
' "$DEST_VERSIONS_JSON" "$VERSION"
echo
echo "Done."
echo "Updated:"
echo " docs/versioned_docs/version-$VERSION"
echo " docs/versioned_sidebars/version-$VERSION-sidebars.json"
echo " docs/versions.json"
echo
echo "Run: git status"