#!/bin/sh

# This script is used by the Cloudflare Pages to build the documentation.
# It detects if it's running in the Cloudflare Pages build environment and will install the required dependencies.
# It can also be used locally to build the documentation, given that the required dependencies are installed.

set -eux

# Install the dependencies if we're in the Cloudflare Pages build environment
# In this environment, the CF_PAGES environment variable is set to 1
if [ "${CF_PAGES:-""}" = "1" ]; then
  MDBOOK_VERSION=0.4.32

  # Install rustup
  curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --default-toolchain none -y

  # Source the environment variables to add cargo to the path
  . "$HOME/.cargo/env"

  # Install the minimal toolchain, which includes rustc, rustdoc, and cargo
  rustup toolchain install stable --profile minimal

  # Install mdbook
  MDBOOK_URL="https://github.com/rust-lang/mdBook/releases/download/v${MDBOOK_VERSION}/mdbook-v${MDBOOK_VERSION}-$(uname -m)-unknown-linux-gnu.tar.gz"
  curl --proto '=https' --tlsv1.2 -sSfL "${MDBOOK_URL}" | tar -C "$HOME/.cargo/bin" -xzv
fi

# Sanity check
rustdoc --version
rustc --version
cargo --version
mdbook --version
npx --version

# Build the docs
mdbook build

# Build the rustdoc
# This is required to be able to use the unstable `-Zrustdoc-map` flag
env RUSTC_BOOTSTRAP=1 \
  cargo doc -Zrustdoc-map --workspace --lib --no-deps
# Delete the rustdoc lockfile
rm target/doc/.lock

# Move the Rust documentation within the mdBook
rm -rf target/book/rustdoc
mv target/doc target/book/rustdoc

# Build the frontend storybook
cd frontend
npm ci
npx storybook build -o ../target/book/storybook
cd ..