---
description: Generate a GitHub Actions workflow to deploy the VitePress wiki site to GitHub Pages
---

# Deep Wiki: Deploy to GitHub Pages

Generate a `.github/workflows/deploy-wiki.yml` GitHub Actions workflow that builds and deploys the VitePress wiki to GitHub Pages.

## Step 1: Check Prerequisites

Before generating the workflow:

1. **Verify wiki exists**: Check that `wiki/` directory and `wiki/package.json` exist
   - If not, tell the user: _"Run `/deep-wiki:build` first to scaffold the VitePress site."_
2. **Check for existing deployment workflows**: Search for ANY existing GitHub Pages workflow:
   ```bash
   # Check for exact file
   ls .github/workflows/deploy-wiki.yml 2>/dev/null
   # Check for any pages-related workflow
   grep -rl "deploy-pages\|pages-artifact\|github-pages" .github/workflows/ 2>/dev/null
   ```
   - If `deploy-wiki.yml` exists → **STOP**. Tell the user: _"A deployment workflow already exists at `.github/workflows/deploy-wiki.yml`. No changes needed."_
   - If a DIFFERENT pages workflow exists → **ASK the user**: _"I found an existing GitHub Pages workflow at `{path}`. Should I skip creating a new one, or create `deploy-wiki.yml` alongside it?"_
   - If no pages workflow exists → proceed with generation

## Step 2: Generate Workflow File

Create `.github/workflows/deploy-wiki.yml`:

```yaml
name: Deploy Wiki to GitHub Pages

on:
  push:
    branches: [main]
    paths:
      - 'wiki/**'
  workflow_dispatch:

permissions:
  contents: read
  pages: write
  id-token: write

concurrency:
  group: pages
  cancel-in-progress: false

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: npm
          cache-dependency-path: wiki/package-lock.json

      - name: Setup Pages
        uses: actions/configure-pages@v5

      - name: Install dependencies
        run: npm ci
        working-directory: wiki

      - name: Build with VitePress
        run: npm run build
        working-directory: wiki

      - name: Upload artifact
        uses: actions/upload-pages-artifact@v3
        with:
          path: wiki/.vitepress/dist

  deploy:
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    needs: build
    runs-on: ubuntu-latest
    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4
```

### Workflow Details

| Setting | Value | Why |
|---------|-------|-----|
| **Trigger** | Push to `main` on `wiki/**` paths | Only rebuilds when wiki content changes |
| **Manual trigger** | `workflow_dispatch` | Allows manual re-deployment |
| **Node version** | 20 | LTS, required for VitePress 1.x |
| **Cache** | npm with `wiki/package-lock.json` | Speeds up subsequent builds |
| **Concurrency** | `pages` group, no cancel | Prevents parallel deploys |
| **Permissions** | `contents: read`, `pages: write`, `id-token: write` | Minimum required for Pages deployment |

## Step 3: Update VitePress Config for GitHub Pages

Check if `wiki/.vitepress/config.mts` needs a `base` path. GitHub Pages serves from:

- **User/org site** (`username.github.io`): `base: '/'` (default, no change needed)
- **Project site** (`username.github.io/repo-name`): `base: '/repo-name/'`

Detect which case applies:

```bash
# Get the repo name
REPO_NAME=$(basename $(git remote get-url origin) .git)
OWNER=$(git remote get-url origin | sed -E 's|.*[:/]([^/]+)/[^/]+\.git|\\1|')
```

If the repo is NOT named `{owner}.github.io`, add the base path to `config.mts`:

```typescript
export default defineConfig({
  base: '/{repo-name}/',
  // ... rest of config
})
```

## Step 4: Generate package-lock.json

If `wiki/package-lock.json` doesn't exist (required for `npm ci` in CI):

```bash
cd wiki && npm install
```

This generates the lock file. Remind the user to commit it.

## Step 5: Commit and Report

After generating the workflow, output:

```
## GitHub Pages Deployment Setup ✅

### Files Created
- `.github/workflows/deploy-wiki.yml` — GitHub Actions workflow

### Files Modified
- `wiki/.vitepress/config.mts` — Added `base: '/{repo-name}/'` (if project site)

### What You Need To Do

> ⚠️ IMPORTANT: GitHub Pages will NOT work until you complete step 2.

1. **Commit the workflow file:**
   ```bash
   git add .github/workflows/deploy-wiki.yml wiki/package-lock.json
   git commit -m "ci: add GitHub Pages deployment for wiki"
   git push
   ```

2. **Enable GitHub Pages (REQUIRED — deployments will fail without this):**
   - Go to your repo on GitHub → **Settings** → **Pages**
   - Under **Build and deployment**, change **Source** to **"GitHub Actions"**
   - Click **Save**
   - Without this step, the workflow runs but the site is NOT published

3. **Your wiki will be live at:**
   - `https://{owner}.github.io/{repo-name}/` (project site)
   - OR `https://{owner}.github.io/` (if repo is named `{owner}.github.io`)

### Triggering Deployments
- **Automatic**: Every push to `main` that changes `wiki/**` files
- **Manual**: Go to Actions → "Deploy Wiki to GitHub Pages" → "Run workflow"
```

## Troubleshooting Guidance

If the user reports issues, suggest checking:

| Issue | Solution |
|-------|----------|
| 404 on deployed site | Verify `base` path in `config.mts` matches repo name |
| Build fails on `npm ci` | Ensure `wiki/package-lock.json` is committed |
| Pages not enabled | Go to Settings → Pages → Source → select "GitHub Actions" |
| Workflow not triggering | Check that changes are in `wiki/**` and pushed to `main` |
| Mermaid diagrams missing | Ensure `mermaid` and `vitepress-plugin-mermaid` are in `package.json` |

$ARGUMENTS
