#!/usr/bin/env bash # ============================================================================= # Static Site Build Script # # This script performs the following tasks: # 1. Checks that NodeJS (>=18.0) is installed; if not, it prints instructions # for installing via nvm. # 2. Changes directory into the docs folder so that all commands run from there. # (Note: This ensures that the DOCS_BASE_URL value is interpreted relative # to the docs folder. For example, if running from the project root, the # effective path will be: /docs/docs/latest.) # 3. Installs dependencies via npm. # 4. (Optional) Builds the API docs: # - If --build-api-docs is provided, then the API docs are built. # - If --with-r-docs is also provided, the build includes R docs; # otherwise, R docs are skipped. # 5. Converts notebooks to MDX. # 6. Exports the DOCS_BASE_URL environment variable (default: /docs/latest) so # that Docusaurus uses the proper base URL. # 7. Builds the static site. # # Once complete, the script instructs the user to navigate into the docs folder # and run: # # npm run serve -- --port # # Options: # --build-api-docs Opt in to build the API docs (default: do not build) # --with-r-docs When building API docs, include R documentation # (default: skip R docs) # --docs-base-url URL Override the default DOCS_BASE_URL (default: /docs/latest) # -h, --help Display this help message and exit # # Example: # ./dev/build-docs.sh --build-api-docs --with-r-docs --docs-base-url /docs/latest # ============================================================================= # Exit immediately if a command exits with a non-zero status, # treat unset variables as an error, and fail on pipeline errors. set -euo pipefail # ----------------------------------------------------------------------------- # Define color and style variables for styled output. # ----------------------------------------------------------------------------- BOLD='\033[1m' RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[0;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # ----------------------------------------------------------------------------- # Logging functions for consistent output styling. # ----------------------------------------------------------------------------- log_info() { echo -e "${BOLD}${BLUE}[INFO]${NC} $1"; } log_success() { echo -e "${BOLD}${GREEN}[SUCCESS]${NC} $1"; } log_warning() { echo -e "${BOLD}${YELLOW}[WARNING]${NC} $1"; } log_error() { echo -e "${BOLD}${RED}[ERROR]${NC} $1"; } # ----------------------------------------------------------------------------- # Default configuration values. # ----------------------------------------------------------------------------- BUILD_API_DOCS=false WITH_R_DOCS=false # Default DOCS_BASE_URL is set as expected when running from within the docs folder. # Note: When running from the project root, since we change into docs/, # the effective reference becomes: /docs/docs/latest. DOCS_BASE_URL="/docs/latest" # ----------------------------------------------------------------------------- # Display usage information. # ----------------------------------------------------------------------------- usage() { cat <= 18.0). # ----------------------------------------------------------------------------- if ! command -v node >/dev/null 2>&1; then log_error "NodeJS is not installed. Please install NodeJS (>= 18.0) from https://nodejs.org/ or via nvm." exit 1 fi NODE_VERSION=$(node --version | sed 's/v//') REQUIRED_VERSION="18.0.0" if ! version_ge "$NODE_VERSION" "$REQUIRED_VERSION"; then log_error "Detected NodeJS version $NODE_VERSION. Please install NodeJS >= $REQUIRED_VERSION." log_info "If you have nvm installed, you can run:" echo -e "${BOLD}nvm install node && nvm use node${NC}" exit 1 fi log_success "NodeJS version $NODE_VERSION is valid." # ----------------------------------------------------------------------------- # Check that npm is installed. # ----------------------------------------------------------------------------- if ! command -v npm >/dev/null 2>&1; then log_error "npm is not installed. Please install npm from https://nodejs.org/." exit 1 fi # ----------------------------------------------------------------------------- # Change directory into the docs folder so that all commands run from there. # This ensures that DOCS_BASE_URL is interpreted correctly. # ----------------------------------------------------------------------------- if [ ! -d "docs" ]; then log_error "The docs directory was not found. Make sure you're running this script from the project root." exit 1 fi log_info "Changing directory to docs/ ..." cd docs # ----------------------------------------------------------------------------- # Install dependencies via npm. # ----------------------------------------------------------------------------- log_info "Installing dependencies with npm..." npm install log_success "Dependencies installed." # ----------------------------------------------------------------------------- # Optionally build the API documentation. # This step is opt-in via the --build-api-docs flag. # If building API docs, the --with-r-docs flag controls whether R docs are included. # ----------------------------------------------------------------------------- if [ "$BUILD_API_DOCS" = true ]; then if [ "$WITH_R_DOCS" = true ]; then log_info "Building API docs including R documentation..." npm run build-api-docs else log_info "Building API docs without R documentation..." npm run build-api-docs:no-r fi log_success "API docs built successfully." else log_info "Skipping API docs build phase." fi # ----------------------------------------------------------------------------- # Update the API module references for link functionality # ----------------------------------------------------------------------------- log_info "Updating API module links..." npm run update-api-modules log_success "Updated API module links." # ----------------------------------------------------------------------------- # Convert notebooks to MDX format. # ----------------------------------------------------------------------------- log_info "Converting notebooks to MDX..." npm run convert-notebooks log_success "Notebooks converted to MDX." # ----------------------------------------------------------------------------- # Export DOCS_BASE_URL and build the static site. # # Since we're in the docs folder, exporting DOCS_BASE_URL as "/docs/latest" # means that when served from the project root, the built site will be available # at /docs/docs/latest. # ----------------------------------------------------------------------------- export DOCS_BASE_URL log_info "DOCS_BASE_URL set to '${DOCS_BASE_URL}'." log_info "Building static site files with npm..." npm run build log_success "Static site built successfully." # ----------------------------------------------------------------------------- # Final instructions for the user. # ----------------------------------------------------------------------------- log_info "To run the site locally, please navigate to the 'docs' folder and execute:" echo -e "${BOLD}npm run serve -- --port ${NC}" log_info "For example: ${BOLD}npm run serve -- --port 3000${NC}" log_success "Static site build process completed."