๐ Complete GitHub Pages ร MkDocs Automation Guide - One-Stop Build from CI/CD to Deployment¶
๐ฏ Goals of This Article¶
Search Intent: For users searching github pages mkdocs, this article provides implementation-level explanations on how to build a GitHub Pages site with MkDocs and fully automate it with GitHub Actions.
Recommended For
- Those who want to create documentation sites with MkDocs
- Those who want free hosting with GitHub Pages
- Those who want to achieve automatic deployment with GitHub Actions
- Those building technical blogs or portfolio sites
๐ Implementation Roadmap¶
Phase 1: Basic Environment Setup¶
- Repository Preparation - Create GitHub Pages compatible repository
- MkDocs Initial Configuration - Configuration files and directory structure
- Local Development Environment - Development flow with instant verification
Phase 2: GitHub Actions Automation¶
- CI/CD Workflow - Automatic build and deployment configuration
- Advanced Configuration - Custom theme and plugin integration
- Operational Optimization - Performance and SEO measures
๐ ๏ธ Phase 1: Basic Environment Setup¶
1.1 GitHub Repository Setup¶
# Create new repository (if already created on GitHub)
git clone https://github.com/your-username/your-docs-site.git
cd your-docs-site
# For existing projects
mkdir docs-site && cd docs-site
git init
Important: Repository Name Considerations
- Personal site:
username.github.ioโhttps://username.github.io/ - Project site:
project-nameโhttps://username.github.io/project-name/
1.2 MkDocs Environment Setup¶
# Create Python virtual environment
python -m venv mkdocs-env
source mkdocs-env/bin/activate # Windows: mkdocs-env\Scripts\activate
# Install MkDocs related packages
pip install mkdocs mkdocs-material mkdocs-git-revision-date-localized-plugin
# Create dependencies file
pip freeze > requirements.txt
1.3 Basic mkdocs.yml Configuration¶
site_name: Your Site Name
site_url: https://your-username.github.io/your-repo-name/
site_description: Technical documentation site built with MkDocs
# Theme configuration
theme:
name: material
palette:
# Light mode
- scheme: default
primary: indigo
accent: indigo
toggle:
icon: material/brightness-7
name: Switch to dark mode
# Dark mode
- scheme: slate
primary: indigo
accent: indigo
toggle:
icon: material/brightness-4
name: Switch to light mode
features:
- navigation.tabs
- navigation.top
- search.highlight
- search.share
- content.code.copy
# Plugins
plugins:
- search:
lang: en
- git-revision-date-localized:
type: datetime
timezone: Asia/Tokyo
# Markdown extensions
markdown_extensions:
- admonition
- pymdownx.details
- pymdownx.superfences
- pymdownx.highlight:
anchor_linenums: true
- pymdownx.inlinehilite
- pymdownx.snippets
- pymdownx.tabbed:
alternate_style: true
# Navigation
nav:
- Home: index.md
- Guides:
- Getting Started: guides/getting-started.md
- Configuration: guides/configuration.md
- API: api/
- Blog: blog/
# Additional settings
extra:
social:
- icon: fontawesome/brands/github
link: https://github.com/your-username
- icon: fontawesome/brands/twitter
link: https://twitter.com/your-username
1.4 Initial Content Creation¶
# Create directory structure
mkdir -p docs/{guides,api,blog}
# Create main page
cat > docs/index.md << 'EOF'
# Welcome to Your Documentation
## ๐ฏ About This Site
Technical documentation site built with MkDocs and GitHub Pages.
### ๐ Features
- **Automatic Deployment**: Fully automated with GitHub Actions
- **Responsive**: Mobile-ready Material Design
- **Fast Search**: Instant content discovery with built-in search
- **SEO Optimized**: Auto-generated structured data and sitemap
## ๐ Content
- [Guides](/ai-development/guides/getting-started/) - Basic usage
- [API](/ai-development/api/) - API reference
- [Blog](/ai-development/blog/) - Technical articles
EOF
# Create sample guide
cat > docs/guides/getting-started.md << 'EOF'
# ๐ Getting Started
## Installation
\`\`\`bash
pip install mkdocs mkdocs-material
\`\`\`
## Basic Commands
\`\`\`bash
# Start development server
mkdocs serve
# Build site
mkdocs build
\`\`\`
EOF
1.5 Local Development Flow¶
# Start development server
mkdocs serve
# Specify custom port
mkdocs serve --dev-addr 127.0.0.1:8001
# Verify live reload
# Open http://127.0.0.1:8000 in browser
Development Efficiency Tips
- Live Reload: Instant reflection on file save
- Search Testing: Search functionality works locally too
- Responsive Check: Verify mobile display with DevTools
โก Phase 2: GitHub Actions Automation¶
2.1 GitHub Pages Configuration¶
Repository Settings:
Settings โ Pages โ Source โ GitHub ActionsBranch Strategy:
mainbranch: Source codegh-pagesbranch: Auto-generated (don't touch)
2.2 GitHub Actions Workflow¶
.github/workflows/deploy.yml:
name: Deploy MkDocs to GitHub Pages
on:
push:
branches:
- main
pull_request:
branches:
- main
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 # For git-revision-date-localized-plugin
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
cache: 'pip'
- name: Install dependencies
run: |
pip install -r requirements.txt
- name: Build MkDocs
run: |
mkdocs build --verbose --clean
- name: Upload Pages artifact
uses: actions/upload-pages-artifact@v2
with:
path: ./site
deploy:
if: github.ref == 'refs/heads/main'
needs: build
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v2
2.3 Advanced Workflow Configuration¶
Pull Request Preview:
# .github/workflows/preview.yml
name: Build PR Preview
on:
pull_request:
branches: [ main ]
jobs:
build-preview:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
cache: 'pip'
- name: Install dependencies
run: pip install -r requirements.txt
- name: Build site
run: mkdocs build
- name: Comment PR
uses: actions/github-script@v6
with:
script: |
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: '๐ Preview build completed! Check the build artifacts.'
})
๐จ Phase 3: Advanced Customization¶
3.1 Custom Theme and Styling¶
Custom CSS (docs/stylesheets/extra.css):
/* Custom brand colors */
:root {
--md-primary-fg-color: #2563eb;
--md-accent-fg-color: #3b82f6;
}
/* Code block improvements */
.highlight {
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
/* Navigation enhancements */
.md-nav__item--active > .md-nav__link {
font-weight: 600;
color: var(--md-primary-fg-color);
}
/* Responsive images */
.md-content img {
max-width: 100%;
height: auto;
border-radius: 4px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
mkdocs.yml additional settings:
extra_css:
- stylesheets/extra.css
extra_javascript:
- javascripts/extra.js
3.2 Plugin Integration¶
Advanced Plugin Configuration:
plugins:
- search:
lang: en
- git-revision-date-localized:
type: datetime
timezone: Asia/Tokyo
locale: en
- minify:
minify_html: true
minify_css: true
minify_js: true
- social:
cards_layout_options:
background_color: "#2563eb"
- tags:
tags_file: tags.md
3.3 SEO Optimization and Performance¶
Structured Data Configuration:
# mkdocs.yml
extra:
analytics:
provider: google
property: G-XXXXXXXXXX
schema:
type: WebSite
name: Your Site Name
description: Your site description
url: https://your-username.github.io/
social:
- icon: fontawesome/brands/github
link: https://github.com/your-username
name: GitHub
Sitemap and robots.txt:
# mkdocs.yml
plugins:
- sitemap:
changefreq: daily
priority: 1.0
site_url: https://your-username.github.io/your-repo/
๐ง Operations and Troubleshooting¶
4.1 Common Issues and Solutions¶
Deployment Failure Remedies
Problem: GitHub Actions fails
# Local build test
mkdocs build --verbose
# Check dependencies
pip check
Solution: - Pin versions in requirements.txt - Verify plugin compatibility - Unify Python version
Performance Optimization
Image Optimization:
# Automated WebP conversion
find docs -name "*.png" -exec cwebp {} -o {}.webp \;
Build Acceleration:
plugins:
- optimize:
enabled: !ENV [CI, false]
4.2 Maintenance and Updates¶
Dependency Update Workflow:
# .github/workflows/update-deps.yml
name: Update Dependencies
on:
schedule:
- cron: '0 9 * * 1' # Every Monday at 9 AM
workflow_dispatch:
jobs:
update:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Update pip packages
run: |
pip install --upgrade pip
pip install -U mkdocs mkdocs-material
pip freeze > requirements.txt
- name: Create PR
uses: peter-evans/create-pull-request@v5
with:
title: "๐ฆ Update dependencies"
body: "Automated dependency update"
branch: update-deps
๐ฏ Success Metrics and KPIs¶
Implementation Completion Checklist¶
- Basic Functionality: MkDocs site works properly locally
- Auto Deployment: GitHub Actions deploys without errors
- Responsive: Displays correctly on mobile and desktop
- SEO Measures: Sitemap generation and metadata configuration
- Search Functionality: Site search works properly
- Performance: PageSpeed Insights score 90+ points
Continuous Improvement Points¶
- Content Quality: Provide complete answers to search queries
- Usability: Improve navigation ease-of-use
- SEO Optimization: Continuous keyword analysis and improvement
- Technical Debt: Regular library updates
๐ Related Articles¶
๐ฏ Search Intent Addressed: Users searching github pages mkdocs can progressively learn how to build a GitHub Pages site with MkDocs and fully automate it. This is a practical guide that provides one-stop completion from implementation to deployment.