some fixes #30
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build and deploy docs | |
| on: | |
| push: | |
| branches: ["master"] | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: "deploy" | |
| cancel-in-progress: false | |
| jobs: | |
| build-and-deploy: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: "22" | |
| - name: Build docs agent widget | |
| run: | | |
| cd widget | |
| npm ci | |
| npm run build | |
| - name: Install mdBook | |
| run: | | |
| MDBOOK_VERSION='v0.5.2' | |
| curl -sSL https://github.com/rust-lang/mdBook/releases/download/${MDBOOK_VERSION}/mdbook-${MDBOOK_VERSION}-x86_64-unknown-linux-gnu.tar.gz | tar -xz | |
| sudo mv mdbook /usr/local/bin/mdbook | |
| - name: Install mdbook-tabs | |
| run: | | |
| cargo install mdbook-tabs --version 0.3.4 | |
| echo "$HOME/.cargo/bin" >> $GITHUB_PATH | |
| - name: Build all books | |
| run: ./build.sh | |
| - name: Generate llms.txt | |
| run: | | |
| cd scripts | |
| npm ci | |
| npm run generate-llms-txt | |
| - name: Configure SSH | |
| run: | | |
| mkdir -p ~/.ssh | |
| echo "${{ secrets.DOCS_DEPLOY_KEY }}" > ~/.ssh/deploy_key | |
| chmod 600 ~/.ssh/deploy_key | |
| ssh-keyscan -H start9.com >> ~/.ssh/known_hosts | |
| cat >> ~/.ssh/config <<EOF | |
| Host docs-vps | |
| HostName start9.com | |
| User root | |
| IdentityFile ~/.ssh/deploy_key | |
| IdentitiesOnly yes | |
| EOF | |
| - name: Deploy to VPS | |
| run: | | |
| DEST="/var/www/html/docs.start9.com" | |
| # Sync each book's versioned directory + llms.txt | |
| while IFS='=' read -r book version; do | |
| [[ -z "$book" || "$book" =~ ^# ]] && continue | |
| ssh -n docs-vps "mkdir -p $DEST/$book/$version" | |
| rsync -az --delete "docs/$book/$version/" "docs-vps:$DEST/$book/$version/" | |
| rsync -az docs/$book/llms*.txt "docs-vps:$DEST/$book/$version/" 2>/dev/null || true | |
| done < versions.conf | |
| # Sync landing page and global llms.txt files | |
| rsync -az docs/index.html docs-vps:$DEST/index.html | |
| rsync -az docs/llms.txt docs/llms-full.txt docs-vps:$DEST/ | |
| - name: Generate and upload nginx book_versions.conf | |
| run: | | |
| cat > book_versions.conf <<'NGINX' | |
| # Auto-generated by deploy workflow — do not edit manually | |
| # Extract first path segment as potential book name | |
| map $uri $book_name { | |
| default ""; | |
| ~^/([^/]+)(/|$) $1; | |
| } | |
| # Extract path after book name | |
| map $uri $book_rest { | |
| default ""; | |
| ~^/[^/]+/(.+)$ $1; | |
| } | |
| # Latest version per book | |
| map $book_name $latest_book_version { | |
| default ""; | |
| NGINX | |
| while IFS='=' read -r book version; do | |
| [[ -z "$book" || "$book" =~ ^# ]] && continue | |
| echo " \"$book\" \"$version\";" >> book_versions.conf | |
| done < versions.conf | |
| cat >> book_versions.conf <<'NGINX' | |
| } | |
| # Version resolution: maps book + ?version= param to directory name | |
| NGINX | |
| echo 'map "$book_name:$arg_version" $resolved_book_version {' >> book_versions.conf | |
| echo ' default "";' >> book_versions.conf | |
| while IFS='=' read -r book version; do | |
| [[ -z "$book" || "$book" =~ ^# ]] && continue | |
| # e.g. "0.4.0.x" → prefix "0\.4\.0" | |
| prefix="${version%.x}" | |
| prefix_escaped="${prefix//./\\.}" | |
| echo " \"~^${book}:${prefix_escaped}(\\.|$)\" \"$version\";" >> book_versions.conf | |
| done < versions.conf | |
| echo "}" >> book_versions.conf | |
| cat >> book_versions.conf <<'NGINX' | |
| # Target version: use ?version= resolution if available, else latest | |
| map $resolved_book_version $target_version { | |
| "" $latest_book_version; | |
| default $resolved_book_version; | |
| } | |
| NGINX | |
| rsync -az book_versions.conf docs-vps:/etc/nginx/includes/book_versions.conf | |
| - name: Reload nginx | |
| run: ssh docs-vps 'nginx -t && nginx -s reload' |