Some checks failed
Documentation Lint & Validation / Markdown Linting (push) Has been cancelled
Documentation Lint & Validation / Validate mdBook Configuration (push) Has been cancelled
Documentation Lint & Validation / Content & Structure Validation (push) Has been cancelled
mdBook Build & Deploy / Build mdBook (push) Has been cancelled
Rust CI / Security Audit (push) Has been cancelled
Rust CI / Check + Test + Lint (nightly) (push) Has been cancelled
Rust CI / Check + Test + Lint (stable) (push) Has been cancelled
Documentation Lint & Validation / Lint & Validation Summary (push) Has been cancelled
mdBook Build & Deploy / Documentation Quality Check (push) Has been cancelled
mdBook Build & Deploy / Deploy to GitHub Pages (push) Has been cancelled
mdBook Build & Deploy / Notification (push) Has been cancelled
484 lines
11 KiB
Markdown
484 lines
11 KiB
Markdown
# GitHub Actions Setup for mdBook Documentation
|
|
|
|
## Overview
|
|
|
|
Three automated workflows have been configured to manage mdBook documentation:
|
|
|
|
1. **mdBook Build & Deploy** — Builds documentation and validates quality
|
|
2. **mdBook Publish & Sync** — Handles downstream deployment notifications
|
|
3. **Documentation Lint & Validation** — Validates markdown and configuration
|
|
|
|
## 📋 Workflows
|
|
|
|
### 1. mdBook Build & Deploy
|
|
|
|
**File**: `.github/workflows/mdbook-build-deploy.yml`
|
|
|
|
**Triggers**:
|
|
- Push to `main` branch when `docs/**` or workflow file changes
|
|
- Pull requests to `main` when `docs/**` changes
|
|
|
|
**Jobs**:
|
|
|
|
#### Build Job
|
|
- ✅ Installs mdBook (`cargo install mdbook`)
|
|
- ✅ Builds documentation (`mdbook build`)
|
|
- ✅ Validates HTML output (checks for essential files)
|
|
- ✅ Counts generated pages
|
|
- ✅ Uploads artifact (retained 30 days)
|
|
- ✅ Provides build summary
|
|
|
|
**Outputs**:
|
|
```
|
|
docs/book/
|
|
├── index.html
|
|
├── print.html
|
|
├── css/
|
|
├── js/
|
|
├── fonts/
|
|
└── ... (all mdBook assets)
|
|
```
|
|
|
|
**Artifact**: `mdbook-site-{commit-sha}`
|
|
|
|
#### Quality Check Job
|
|
- ✅ Verifies content (VAPORA in index.html)
|
|
- ✅ Checks for empty files
|
|
- ✅ Validates CSS files
|
|
- ✅ Generates file statistics
|
|
- ✅ Reports total size and file counts
|
|
|
|
#### GitHub Pages Deployment Job
|
|
- ✅ Runs on push to `main` only (skips PRs)
|
|
- ✅ Sets up GitHub Pages environment
|
|
- ✅ Uploads artifact to Pages
|
|
- ✅ Deploys to GitHub Pages (if configured)
|
|
- ✅ Continues on error (handles non-GitHub deployments)
|
|
|
|
**Key Features**:
|
|
- Concurrent runs on same ref are cancelled
|
|
- Artifact retained for 30 days
|
|
- Supports GitHub Pages or custom deployments
|
|
- Detailed step summaries in workflow run
|
|
|
|
### 2. mdBook Publish & Sync
|
|
|
|
**File**: `.github/workflows/mdbook-publish.yml`
|
|
|
|
**Triggers**:
|
|
- Runs after `mdBook Build & Deploy` workflow completes successfully
|
|
- Only on `main` branch
|
|
|
|
**Jobs**:
|
|
|
|
#### Download & Publish Job
|
|
- ✅ Finds mdBook build artifact
|
|
- ✅ Creates deployment record
|
|
- ✅ Provides deployment summary
|
|
|
|
**Use Cases**:
|
|
- Trigger custom deployment scripts
|
|
- Send notifications to deployment services
|
|
- Update documentation registry
|
|
- Sync to content CDN
|
|
|
|
### 3. Documentation Lint & Validation
|
|
|
|
**File**: `.github/workflows/docs-lint.yml`
|
|
|
|
**Triggers**:
|
|
- Push to `main` when `docs/**` changes
|
|
- All pull requests when `docs/**` changes
|
|
|
|
**Jobs**:
|
|
|
|
#### Markdown Lint Job
|
|
- ✅ Installs markdownlint-cli
|
|
- ✅ Validates markdown formatting
|
|
- ✅ Reports formatting issues
|
|
- ✅ Non-blocking (doesn't fail build)
|
|
|
|
**Checked Rules**:
|
|
- MD031: Blank lines around code blocks
|
|
- MD040: Code block language specification
|
|
- MD032: Blank lines around lists
|
|
- MD022: Blank lines around headings
|
|
- MD001: Heading hierarchy
|
|
- MD026: No trailing punctuation
|
|
- MD024: No duplicate headings
|
|
|
|
#### mdBook Config Validation Job
|
|
- ✅ Verifies `book.toml` exists
|
|
- ✅ Verifies `src/SUMMARY.md` exists
|
|
- ✅ Validates TOML syntax
|
|
- ✅ Checks directory structure
|
|
- ✅ Tests build syntax
|
|
|
|
#### Content Validation Job
|
|
- ✅ Validates directory structure
|
|
- ✅ Checks for README.md in subdirectories
|
|
- ✅ Detects absolute links (should be relative)
|
|
- ✅ Validates SUMMARY.md links
|
|
- ✅ Reports broken references
|
|
|
|
**Status Checks**:
|
|
- ✅ README.md present in each subdirectory
|
|
- ✅ All links are relative paths
|
|
- ✅ SUMMARY.md references valid files
|
|
|
|
---
|
|
|
|
## 🔧 Configuration
|
|
|
|
### Enable GitHub Pages Deployment
|
|
|
|
**For GitHub.com repositories**:
|
|
|
|
1. Go to repository **Settings** → **Pages**
|
|
2. Select:
|
|
- **Source**: GitHub Actions
|
|
- **Branch**: main
|
|
3. Optional: Add custom domain
|
|
|
|
**Workflow will then**:
|
|
- Auto-deploy to GitHub Pages on every push to `main`
|
|
- Available at: `https://username.github.io/repo-name`
|
|
- Or custom domain if configured
|
|
|
|
### Custom Deployment (Non-GitHub)
|
|
|
|
For repositories on custom servers:
|
|
|
|
1. GitHub Pages deployment will be skipped (non-blocking)
|
|
2. Artifact will be uploaded and retained 30 days
|
|
3. Download from workflow run → Artifacts section
|
|
4. Use `mdbook-publish.yml` to trigger custom deployment
|
|
|
|
**To add custom deployment script**:
|
|
|
|
Add to `.github/workflows/mdbook-publish.yml`:
|
|
|
|
```yaml
|
|
- name: Deploy to custom server
|
|
run: |
|
|
# Add your deployment script here
|
|
curl -X POST https://your-docs-server/deploy \
|
|
-H "Authorization: Bearer ${{ secrets.DEPLOY_TOKEN }}" \
|
|
-F "artifact=@docs/book.zip"
|
|
```
|
|
|
|
### Access Control
|
|
|
|
**Permissions configured**:
|
|
```yaml
|
|
permissions:
|
|
contents: read # Read repository contents
|
|
pages: write # Write to GitHub Pages
|
|
id-token: write # For OIDC token
|
|
deployments: write # Write deployment records
|
|
```
|
|
|
|
---
|
|
|
|
## 📊 Workflow Status & Artifacts
|
|
|
|
### View Workflow Runs
|
|
|
|
```bash
|
|
# In GitHub web UI:
|
|
# Repository → Actions → mdBook Build & Deploy
|
|
```
|
|
|
|
Shows:
|
|
- Build status (✅ Success / ❌ Failed)
|
|
- Execution time
|
|
- Step details
|
|
- Artifact upload status
|
|
- Job summaries
|
|
|
|
### Download Artifacts
|
|
|
|
1. Open workflow run
|
|
2. Scroll to bottom → **Artifacts** section
|
|
3. Click `mdbook-site-{commit-sha}` → Download
|
|
4. Extract and use
|
|
|
|
**Artifact Contents**:
|
|
```
|
|
mdbook-site-{sha}/
|
|
├── index.html # Main documentation page
|
|
├── print.html # Printable version
|
|
├── css/
|
|
│ ├── general.css
|
|
│ ├── variables.css
|
|
│ └── highlight.css
|
|
├── js/
|
|
│ ├── book.js
|
|
│ ├── clipboard.min.js
|
|
│ └── elasticlunr.min.js
|
|
├── fonts/
|
|
└── FontAwesome/
|
|
```
|
|
|
|
---
|
|
|
|
## 🚨 Troubleshooting
|
|
|
|
### Build Fails: "mdBook not found"
|
|
|
|
**Fix**: mdBook is installed via `cargo install`
|
|
- Requires Rust toolchain
|
|
- First run takes ~60 seconds
|
|
- Subsequent runs cached
|
|
|
|
### Build Fails: "SUMMARY.md not found"
|
|
|
|
**Fix**: Ensure `docs/src/SUMMARY.md` exists
|
|
|
|
```bash
|
|
ls -la docs/src/SUMMARY.md
|
|
```
|
|
|
|
### Build Fails: "Broken link in SUMMARY.md"
|
|
|
|
**Error message**: `Cannot find file '../section/file.md'`
|
|
|
|
**Fix**:
|
|
1. Verify file exists
|
|
2. Check relative path spelling
|
|
3. Use `../` for parent directory
|
|
|
|
### GitHub Pages shows 404
|
|
|
|
**Issue**: Site deployed but pages not accessible
|
|
|
|
**Fix**:
|
|
1. Go to **Settings** → **Pages**
|
|
2. Verify **Source** is set to **GitHub Actions**
|
|
3. Wait 1-2 minutes for deployment
|
|
4. Hard refresh browser (Ctrl+Shift+R)
|
|
|
|
### Artifact Not Uploaded
|
|
|
|
**Issue**: Workflow completed but no artifact
|
|
|
|
**Fix**:
|
|
1. Check build job output for errors
|
|
2. Verify `docs/book/` directory exists
|
|
3. Check artifact upload step logs
|
|
|
|
---
|
|
|
|
## 📈 Performance
|
|
|
|
### Build Times
|
|
|
|
| Component | Time |
|
|
|-----------|------|
|
|
| Checkout | ~5s |
|
|
| Install mdBook | ~30s |
|
|
| Build documentation | ~2-3s |
|
|
| Quality checks | ~5s |
|
|
| Upload artifact | ~10s |
|
|
| **Total** | **~1 minute** |
|
|
|
|
### Artifact Size
|
|
|
|
| Metric | Value |
|
|
|--------|-------|
|
|
| Uncompressed | 7.4 MB |
|
|
| Total files | 100+ |
|
|
| HTML pages | 4+ |
|
|
| Retention | 30 days |
|
|
|
|
---
|
|
|
|
## 🔐 Security
|
|
|
|
### Permissions Model
|
|
|
|
- ✅ Read-only repository access
|
|
- ✅ Write-only GitHub Pages
|
|
- ✅ Deployment record creation
|
|
- ✅ No secrets required (unless custom deployment)
|
|
|
|
### Adding Secrets for Deployment
|
|
|
|
If using custom deployment:
|
|
|
|
1. Go to **Settings** → **Secrets and variables** → **Actions**
|
|
2. Add secret: `DEPLOY_TOKEN` or `DEPLOY_URL`
|
|
3. Reference in workflow: `${{ secrets.DEPLOY_TOKEN }}`
|
|
|
|
### Artifact Security
|
|
|
|
- ✅ Uploaded to GitHub infrastructure
|
|
- ✅ Retained for 30 days then deleted
|
|
- ✅ Only accessible via authenticated session
|
|
- ✅ No sensitive data included
|
|
|
|
---
|
|
|
|
## 📝 Customization
|
|
|
|
### Modify Build Output Directory
|
|
|
|
Edit `docs/book.toml`:
|
|
|
|
```toml
|
|
[build]
|
|
build-dir = "book" # Change to "dist" or other
|
|
```
|
|
|
|
Then update workflows to match.
|
|
|
|
### Add Pre-Build Steps
|
|
|
|
Edit `.github/workflows/mdbook-build-deploy.yml`:
|
|
|
|
```yaml
|
|
- name: Build mdBook
|
|
working-directory: docs
|
|
run: |
|
|
# Add custom pre-build commands
|
|
# Example: Generate API docs first
|
|
|
|
mdbook build
|
|
```
|
|
|
|
### Modify Validation Rules
|
|
|
|
Edit `.github/workflows/docs-lint.yml`:
|
|
|
|
```yaml
|
|
- name: Lint markdown files
|
|
run: |
|
|
# Customize markdownlint config
|
|
markdownlint --config .markdownlint.json 'docs/**/*.md'
|
|
```
|
|
|
|
### Add Custom Deployment
|
|
|
|
Edit `.github/workflows/mdbook-publish.yml`:
|
|
|
|
```yaml
|
|
- name: Deploy to S3
|
|
run: |
|
|
aws s3 sync docs/book s3://my-bucket/docs \
|
|
--delete --region us-east-1
|
|
env:
|
|
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
|
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
```
|
|
|
|
---
|
|
|
|
## 📚 Integration with Documentation Workflow
|
|
|
|
### Local Development
|
|
|
|
```bash
|
|
# Build locally before pushing
|
|
cd docs
|
|
mdbook serve
|
|
|
|
# Verify at http://localhost:3000
|
|
|
|
# Make changes, auto-rebuild
|
|
# Then push to trigger CI/CD
|
|
```
|
|
|
|
### PR Review Process
|
|
|
|
1. Create branch and edit `docs/**`
|
|
2. Push to PR
|
|
3. Workflows automatically run:
|
|
- ✅ Markdown linting
|
|
- ✅ mdBook build
|
|
- ✅ Content validation
|
|
4. All checks must pass
|
|
5. Merge PR
|
|
6. Main branch workflows trigger:
|
|
- ✅ Full build + quality checks
|
|
- ✅ Deploy to GitHub Pages
|
|
|
|
### Release Documentation
|
|
|
|
When releasing new version:
|
|
|
|
1. Update version references in docs
|
|
2. Commit to `main`
|
|
3. Workflows automatically:
|
|
- ✅ Build documentation
|
|
- ✅ Deploy to GitHub Pages
|
|
- ✅ Create deployment record
|
|
4. New docs version immediately live
|
|
|
|
---
|
|
|
|
## 🔍 Monitoring
|
|
|
|
### GitHub Actions Dashboard
|
|
|
|
View all workflows:
|
|
```
|
|
Repository → Actions
|
|
```
|
|
|
|
### Workflow Run Details
|
|
|
|
Click any run to see:
|
|
- All job logs
|
|
- Step-by-step execution
|
|
- Artifact uploads
|
|
- Deployment status
|
|
- Step summaries
|
|
|
|
### Email Notifications
|
|
|
|
Receive updates for:
|
|
- ✅ Workflow failures
|
|
- ✅ Required checks failed
|
|
- ✅ Deployment status changes
|
|
|
|
Enable in **Settings** → **Notifications**
|
|
|
|
---
|
|
|
|
## 📖 Quick Reference
|
|
|
|
| Task | Command / Location |
|
|
|------|-------------------|
|
|
| Build locally | `cd docs && mdbook serve` |
|
|
| View workflows | GitHub → Actions |
|
|
| Download artifact | Click workflow run → Artifacts |
|
|
| Check build status | GitHub commit/PR checks |
|
|
| Configure Pages | Settings → Pages → GitHub Actions |
|
|
| Add deployment secret | Settings → Secrets → Actions |
|
|
| Modify workflow | `.github/workflows/mdbook-*.yml` |
|
|
|
|
---
|
|
|
|
## ✅ Verification Checklist
|
|
|
|
After setup, verify:
|
|
|
|
- [ ] `.github/workflows/mdbook-build-deploy.yml` exists
|
|
- [ ] `.github/workflows/mdbook-publish.yml` exists
|
|
- [ ] `.github/workflows/docs-lint.yml` exists
|
|
- [ ] `docs/book.toml` exists
|
|
- [ ] `docs/src/SUMMARY.md` exists
|
|
- [ ] First push to `main` triggers workflows
|
|
- [ ] Build job completes successfully
|
|
- [ ] Artifact uploaded (30-day retention)
|
|
- [ ] All validation checks pass
|
|
- [ ] GitHub Pages deployment (if configured)
|
|
|
|
---
|
|
|
|
**Setup Date**: 2026-01-12
|
|
**Workflows Created**: 3
|
|
**Status**: ✅ Ready for Production
|
|
|
|
For workflow logs, see: Repository → Actions → mdBook workflows
|