name: Deploy Docs
on:
push:
branches: [master, main]
paths:
- 'docs/**'
- 'mkdocs.yml'
- 'requirements.txt'
- '.github/workflows/deploy-docs.yml'
workflow_dispatch:
permissions:
contents: read
pages: write
id-token: write
concurrency:
group: "pages"
cancel-in-progress: false
jobs:
deploy:
name: Deploy to GitHub Pages + OSS
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: Install MkDocs
run: pip install mkdocs-material mkdocs-static-i18n
- name: Build
run: mkdocs build
- name: Add CNAME for GitHub Pages
run: echo 'docs.phiagent.dev' > site/CNAME
- name: Setup Pages
uses: actions/configure-pages@v4
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: 'site'
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
- name: Upload to OSS
env:
OSS_ACCESS_KEY_ID: ${{ secrets.OSS_ACCESS_KEY_ID }}
OSS_ACCESS_KEY_SECRET: ${{ secrets.OSS_ACCESS_KEY_SECRET }}
OSS_ENDPOINT: ${{ secrets.OSS_ENDPOINT }}
OSS_BUCKET: ${{ secrets.OSS_BUCKET }}
run: |
pip install oss2
python -c "
import os, oss2
auth = oss2.Auth(os.environ['OSS_ACCESS_KEY_ID'], os.environ['OSS_ACCESS_KEY_SECRET'])
bucket = oss2.Bucket(auth, os.environ['OSS_ENDPOINT'], os.environ['OSS_BUCKET'])
# Upload all local files
local_keys = set()
for root, dirs, files in os.walk('site'):
for f in files:
local = os.path.join(root, f)
key = os.path.relpath(local, 'site')
local_keys.add(key)
print(f'Uploading {key}')
bucket.put_object_from_file(key, local)
# Delete stale files no longer in site/
for obj in oss2.ObjectIteratorV2(bucket):
if obj.key not in local_keys:
print(f'Deleting {obj.key}')
bucket.delete_object(obj.key)
print('Done!')
"