diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml deleted file mode 100644 index fba7e540e..000000000 --- a/.github/workflows/deploy.yml +++ /dev/null @@ -1,158 +0,0 @@ -name: Deploy Docs Preview - -on: - # 推送到 fork 的任意分支时触发(自动检测改动的子项目) - push: - # 允许手动触发,并可指定要预览的子项目 - workflow_dispatch: - inputs: - projects: - description: "要构建预览的子项目(空格分隔,如:flaggems_en flagcx_en)" - required: false - default: "flaggems_en" - -# 设置 GITHUB_TOKEN 的权限,允许写入 GitHub Pages -permissions: - contents: read - pages: write - id-token: write - -# 确保同一时间只有一个部署任务在运行 -concurrency: - group: "pages" - cancel-in-progress: false - -jobs: - deploy: - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - # 需要前一次提交以便 git diff 检测改动的子项目 - fetch-depth: 2 - - - name: Set up Python - uses: actions/setup-python@v5 - with: - python-version: '3.x' - - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install -r requirements.txt - - - name: Determine which subprojects to build - id: select - run: | - set -euo pipefail - - # conf.py 中定义的全部子项目(作为白名单,避免构建无效目录) - mapfile -t ALL < <(python - <<'PY' - import ast, pathlib - src = pathlib.Path("docs/conf.py").read_text(encoding="utf-8") - tree = ast.parse(src) - for node in ast.walk(tree): - if isinstance(node, ast.Assign): - for t in node.targets: - if isinstance(t, ast.Name) and t.id == "multiproject_projects": - for k in node.value.keys: - print(k.value) - PY - ) - - declare -A VALID=() - for p in "${ALL[@]}"; do VALID["$p"]=1; done - - SELECTED="" - if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then - # 手动指定 - for p in ${{ github.event.inputs.projects }}; do - if [ -n "${VALID[$p]:-}" ]; then SELECTED="$SELECTED $p"; fi - done - else - # push:从 git diff 中提取改动的顶层子项目目录 - BEFORE="${{ github.event.before }}" - if [ -z "$BEFORE" ] || ! git cat-file -e "$BEFORE^{commit}" 2>/dev/null; then - BEFORE="HEAD~1" - fi - CHANGED=$(git diff --name-only "$BEFORE" "${{ github.sha }}" -- 'docs/*' || true) - declare -A SEEN=() - while IFS= read -r f; do - # docs//... - proj=$(echo "$f" | sed -n 's#^docs/\([^/]*\)/.*#\1#p') - if [ -n "$proj" ] && [ -n "${VALID[$proj]:-}" ] && [ -z "${SEEN[$proj]:-}" ]; then - SEEN[$proj]=1 - SELECTED="$SELECTED $proj" - fi - done <<< "$CHANGED" - fi - - # 回退:未检测到改动的子项目时构建首页 - SELECTED=$(echo "$SELECTED" | xargs || true) - if [ -z "$SELECTED" ]; then SELECTED="flagos_homepage"; fi - - echo "Selected subprojects: $SELECTED" - echo "projects=$SELECTED" >> "$GITHUB_OUTPUT" - - - name: Build selected subprojects - run: | - set -uo pipefail - OUT="docs/_build/html" - rm -rf "$OUT" - mkdir -p "$OUT" - - OK="" - FAIL="" - for p in ${{ steps.select.outputs.projects }}; do - echo "::group::Building $p" - if PROJECT="$p" sphinx-build -b html docs "$OUT/$p"; then - OK="$OK $p" - else - FAIL="$FAIL $p" - echo "::warning::Build failed for subproject: $p" - fi - echo "::endgroup::" - done - - # 生成预览着陆页 - { - echo '' - echo 'Docs Preview' - echo '' - echo '

FlagOS Docs Preview

' - echo '

本页仅包含本次改动构建的子项目预览。

' - if [ -n "$FAIL" ]; then - echo "

构建失败

" - fi - echo '' - } > "$OUT/index.html" - - echo "Built:$OK" - echo "Failed:$FAIL" - # 全部失败才让任务失败 - if [ -z "$OK" ]; then - echo "::error::No subproject built successfully." - exit 1 - fi - - - name: Setup Pages - uses: actions/configure-pages@v4 - - - name: Upload artifact - uses: actions/upload-pages-artifact@v3 - with: - path: './docs/_build/html' - - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 diff --git a/requirements.txt b/requirements.txt index 143a8aaa2..4e4bccd03 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,21 +1 @@ -# GitHub Pages 预览构建用依赖,与 docs/requirements.txt 对齐(RTD 用后者)。 -# 额外加 matplotlib 以生成 opengraph social cards(消除构建警告)。 -sphinx==8.2.3 -myst-parser -sphinx-multiproject==1.0.0 -pydata-sphinx-theme -sphinx-rtd-theme -sphinx-book-theme~=1.1 -sunpy-sphinx-theme -sphinx-autodoc2~=0.5.0 -sphinx-design -sphinx-copybutton -sphinxext.rediraffe~=0.3.0 -sphinxcontrib.mermaid~=0.7.1 -sphinxext.opengraph~=0.13.0 -sphinx-pyscript -sphinx-tippy>=0.4.3 -sphinx-togglebutton -sphinx-tabs==3.4.7 -sphinx-prompt==1.10.2 -matplotlib +modelscope>=1.11.0 \ No newline at end of file