phi-agent 0.2.6

phi-agent — General-purpose AI Agent framework (builder factory, renderer, config, session management)
Documentation
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!')
          "