diff --git a/.gitea/workflows/sphinx.yml b/.gitea/workflows/sphinx.yml deleted file mode 100644 index a8851e4..0000000 --- a/.gitea/workflows/sphinx.yml +++ /dev/null @@ -1,125 +0,0 @@ -name: Build and Deploy Sphinx Docs - -on: - pull_request: - types: [opened, synchronize, reopened] - branches: [master] - -jobs: - build-docs: - name: Build Documentation - if: github.event.pull_request.merged == true - runs-on: linux - - steps: - # 第一步:设置主工作目录和稳定的虚拟环境 - - name: Set up main worktree with stable environment - run: | - echo "=== Setting up main worktree ===" - - # 创建主工作目录并克隆仓库 - if [ ! -d /home/ly0kos/work/test_env ]; then - echo "Cloning repository to main worktree..." - git clone http://localhost:3000/yuysh/Manlink_Doc.git /home/ly0kos/work/test_env - cd /home/ly0kos/work/test_env - echo "Creating virtual environment..." - python -m venv .venv - source .venv/bin/activate - echo "Installing dependencies..." - pip install --upgrade pip - pip install -r requirements.txt - echo "✓ Main worktree and virtual environment created" - else - echo "Updating existing main worktree..." - cd /home/ly0kos/work/test_env - git pull origin main - source .venv/bin/activate - echo "Updating dependencies if needed..." - pip install -r requirements.txt - echo "✓ Main worktree updated" - fi - - # 验证环境 - echo "Environment verification:" - source .venv/bin/activate - echo "Python: $(python --version)" - echo "Sphinx-build: $(sphinx-build --version 2>/dev/null || echo 'Not found')" - - # 第二步:创建临时构建工作树 - - name: Create temporary build worktree - run: | - echo "=== Creating build worktree ===" - cd /home/ly0kos/work/test_env - - # 清理可能存在的旧构建目录 - if [ -d /home/ly0kos/work/test_env/build ]; then - echo "Removing old build worktree..." - git worktree remove /home/ly0kos/work/test_env/build --force 2>/dev/null || true - rm -rf /home/ly0kos/work/test_env/build 2>/dev/null || true - fi - - # 创建新的构建工作树 - echo "Creating new build worktree..." - git worktree add /home/ly0kos/work/test_env/build - echo "✓ Build worktree created at /home/ly0kos/work/test_env/build" - - # 第三步:使用主目录的虚拟环境构建文档 - - name: Build documentation - run: | - echo "=== Building documentation ===" - cd /home/ly0kos/work/test_env - source .venv/bin/activate - - echo "Building from: /home/ly0kos/work/test_env/source" - echo "Output to: /home/ly0kos/work/test_env/build/build" - - # 使用主目录的虚拟环境来构建构建目录中的代码 - sphinx-build -b html /home/ly0kos/work/test_env/source /home/ly0kos/work/test_env/build/ -v -j 4 - echo "✓ Build completed successfully" - - # 验证构建结果 - echo "Build output contents:" - ls -la /home/ly0kos/work/test_env/build/ - -name: Deploy on Merge - -on: - pull_request: - types: [closed] - branches: [main] - -jobs: - deploy: - # 关键:只在PR被成功merge时运行 - if: github.event.pull_request.merged == true - runs-on: linux - steps: - # 第一步:部署到Web服务器 - - name: Deploy to web server - run: | - echo "=== Deploying to web server ===" - echo "[INFO] Removing Old file..." - rm -rf /var/www/docs_dev/* - echo "[INFO] Copying new file..." - cp -r /home/ly0kos/work/test_env/build/* /var/www/docs_dev/ - echo "✓ Documentation deployed to /var/www/docs_dev/" - - # 验证部署 - echo "Web server contents:" - ls -la /var/www/docs_dev/ | head -10 - - # 第二步:清理临时工作树 - - name: Cleanup temporary worktree - run: | - echo "=== Cleaning up ===" - cd /home/ly0kos/work/test_env - - # 移除工作树 - if [ -d /home/ly0kos/work/test_env/build ]; then - git worktree remove /home/ly0kos/work/test_env/build --force - echo "✓ Temporary worktree removed" - else - echo "Build worktree already removed" - fi - - echo "=== Process completed successfully ===" \ No newline at end of file diff --git a/.gitea/workflows/sphinx_deploy.yml b/.gitea/workflows/sphinx_deploy.yml new file mode 100644 index 0000000..c18c70c --- /dev/null +++ b/.gitea/workflows/sphinx_deploy.yml @@ -0,0 +1,128 @@ +name: Deploy Sphinx Documentation + +on: + pull_request: + types: [closed] + branches: [master] + +jobs: + deploy: + # 只在PR被成功merge到master时运行 + if: github.event.pull_request.merged == true && github.base_ref == 'master' + runs-on: linux + + steps: + # 第一步:获取master分支最新代码 + - name: Fetch latest master branch code + run: | + echo "=== Fetching latest master branch code ===" + + # 确保目录存在 + if [ ! -d "/home/ly0kos/work/test_env" ]; then + echo "Cloning repository..." + git clone http://localhost:3000/yuysh/Manlink_Doc.git /home/ly0kos/work/test_env + fi + + cd /home/ly0kos/work/test_env + + # 清理任何未提交的更改 + git reset --hard + git clean -fd + + # 获取所有远程更新 + git fetch --all --prune + + # 切换到master分支并获取最新代码 + git checkout master + git pull origin master --force + + echo "✓ Latest master code fetched" + echo "Current commit: $(git log --oneline -1)" + + # 第二步:复用生产虚拟环境 + - name: Reuse or update production Python environment + run: | + echo "Setting up production Python environment" + cd /home/ly0kos/work/test_env + + # 检查虚拟环境是否存在 + if [ ! -d ".venv-prod" ]; then + echo "Creating new production virtual environment..." + python -m venv .venv-prod + source .venv-prod/bin/activate + pip install --upgrade pip + # 安装基础依赖 + pip install sphinx sphinx-rtd-theme + else + echo "Reusing existing production virtual environment..." + source .venv-prod/bin/activate + fi + + # 检查并更新依赖 + if [ -f "requirements.txt" ]; then + echo "Checking for dependency updates in production..." + REQ_MOD_TIME=$(stat -c %Y requirements.txt 2>/dev/null || echo 0) + VENV_MOD_TIME=$(cat .venv-prod/last_update.txt 2>/dev/null || echo 0) + + if [ $REQ_MOD_TIME -gt $VENV_MOD_TIME ]; then + echo "Production requirements updated, installing new dependencies..." + pip install -r requirements.txt + echo $REQ_MOD_TIME > .venv-prod/last_update.txt + else + echo "No changes in production requirements, skipping installation" + fi + fi + + # 显示环境信息 + echo "Production environment ready:" + pip list | grep sphinx + + # 第三步:从master分支构建文档 + - name: Build documentation from master + run: | + echo "=== Building production documentation from master ===" + cd /home/ly0kos/work/test_env + source .venv-prod/bin/activate + + # 清理旧构建 + rm -rf build/ + + # 构建文档 + sphinx-build -b html source build -v -j 4 + echo "✓ Production build completed" + + # 第四步:部署到Web服务器 + - name: Deploy to web server + run: | + echo "=== Deploying to production web server ===" + cd /home/ly0kos/work/test_env + + echo "[INFO] Removing old files..." + sudo rm -rf /var/www/docs_dev/* + echo "[INFO] Copying new files..." + sudo cp -r build/* /var/www/docs_dev/ + + # 设置正确的文件权限 + sudo chown -R www-data:www-data /var/www/docs_dev/ + sudo chmod -R 755 /var/www/docs_dev/ + + echo "✓ Documentation deployed to /var/www/docs_dev/" + + # 第五步:清理PR预览文件 + - name: Cleanup PR previews + run: | + echo "Cleaning up PR preview files for branch: ${{ github.head_ref }}" + + # 清理预览文件(保留虚拟环境) + preview_dir="/home/ly0kos/work/test_env/pr-builds/${{ github.head_ref }}" + if [ -d "$preview_dir" ]; then + rm -rf "$preview_dir" + echo "Removed preview for PR branch: ${{ github.head_ref }}" + fi + + # 第六步:验证部署 + - name: Verify deployment + run: | + echo "Production deployment completed successfully!" + echo "Web server contents:" + ls -la /var/www/docs_dev/ | head -10 \ No newline at end of file diff --git a/.gitea/workflows/sphinx_test.yml b/.gitea/workflows/sphinx_test.yml new file mode 100644 index 0000000..b4b9447 --- /dev/null +++ b/.gitea/workflows/sphinx_test.yml @@ -0,0 +1,118 @@ +name: Build Sphinx Documentation + +on: + pull_request: + types: [opened, synchronize, reopened, edited] + branches: [master] + +jobs: + build-docs: + name: Build Documentation from PR Branch + runs-on: linux + + steps: + # 第一步:获取PR分支最新代码 + - name: Fetch latest PR branch code + run: | + echo "=== Fetching latest code for PR branch: ${{ github.head_ref }} ===" + + # 如果目录不存在,克隆仓库 + if [ ! -d "/home/ly0kos/work/test_env" ]; then + echo "Cloning repository..." + git clone http://localhost:3000/yuysh/Manlink_Doc.git /home/ly0kos/work/test_env + fi + + # 进入目录并获取最新代码 + cd /home/ly0kos/work/test_env + + # 清理任何未提交的更改 + git reset --hard + git clean -fd + + # 获取所有远程分支和更新 + git fetch --all --prune + + # 切换到PR分支并获取最新代码 + git checkout ${{ github.head_ref }} + git pull origin ${{ github.head_ref }} --force + + echo "✓ Latest code fetched for branch: ${{ github.head_ref }}" + echo "Current commit: $(git log --oneline -1)" + + # 第二步:复用或创建Python虚拟环境 + - name: Reuse or update Python virtual environment + run: | + echo "Setting up Python environment for PR branch: ${{ github.head_ref }}" + cd /home/ly0kos/work/test_env + + # 检查虚拟环境是否存在 + if [ ! -d ".venv-pr" ]; then + echo "Creating new virtual environment..." + python -m venv .venv-pr + source .venv-pr/bin/activate + pip install --upgrade pip + # 安装基础依赖 + pip install sphinx sphinx-rtd-theme + else + echo "Reusing existing virtual environment..." + source .venv-pr/bin/activate + fi + + # 检查requirements.txt是否更新 + if [ -f "requirements.txt" ]; then + echo "Checking for dependency updates..." + # 获取requirements.txt的修改时间 + REQ_MOD_TIME=$(stat -c %Y requirements.txt 2>/dev/null || echo 0) + # 获取虚拟环境中记录的最后更新时间 + VENV_MOD_TIME=$(cat .venv-pr/last_update.txt 2>/dev/null || echo 0) + + if [ $REQ_MOD_TIME -gt $VENV_MOD_TIME ]; then + echo "Requirements updated, installing new dependencies..." + pip install -r requirements.txt + # 记录更新时间 + echo $REQ_MOD_TIME > .venv-pr/last_update.txt + else + echo "No changes in requirements, skipping dependency installation" + fi + else + echo "No requirements.txt found, using existing packages" + fi + + # 显示当前环境信息 + echo "Python: $(python --version)" + echo "Pip: $(pip --version)" + echo "Installed packages:" + pip list | grep sphinx + + # 第三步:构建文档(从PR分支) + - name: Build documentation from PR branch + run: | + echo "=== Building documentation from PR branch: ${{ github.head_ref }} ===" + cd /home/ly0kos/work/test_env + source .venv-pr/bin/activate + + # 确保源目录存在 + if [ ! -d "source" ]; then + echo "Error: source directory not found!" + exit 1 + fi + + # 清理旧构建 + rm -rf build/ + + # 构建文档 + sphinx-build -b html source build -v -j 4 + + # 将构建结果复制到预览位置 + mkdir -p /home/ly0kos/work/test_env/pr-builds/ + rm -rf /home/ly0kos/work/test_env/pr-builds/${{ github.head_ref }} + cp -r build /home/ly0kos/work/test_env/pr-builds/${{ github.head_ref }} + + echo "✓ Build completed for PR branch: ${{ github.head_ref }}" + + # 第四步:验证构建结果 + - name: Verify build + run: | + echo "Build output for PR ${{ github.head_ref }}:" + ls -la /home/ly0kos/work/test_env/pr-builds/${{ github.head_ref }}/ | head -10 + echo "Preview available at: /home/ly0kos/work/test_env/pr-builds/${{ github.head_ref }}/index.html" \ No newline at end of file diff --git a/requirements.in b/requirements.in index bb3639e..61336f6 100644 --- a/requirements.in +++ b/requirements.in @@ -8,3 +8,4 @@ sphinxcontrib.images sphinxcontrib.video sphinxcontrib.htmlhelp sphinxcontrib.wavedrom +sphinxcontrib.mermaid \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 708abe6..539cb83 100644 --- a/requirements.txt +++ b/requirements.txt @@ -76,6 +76,7 @@ pygments==2.19.2 pyyaml==6.0.2 # via # myst-parser + # sphinxcontrib-mermaid # wavedrom requests==2.32.5 # via @@ -100,6 +101,7 @@ sphinx==8.2.3 # sphinx-rtd-theme # sphinxcontrib-images # sphinxcontrib-jquery + # sphinxcontrib-mermaid # sphinxcontrib-video # sphinxcontrib-wavedrom sphinx-book-theme==1.1.4 @@ -124,6 +126,8 @@ sphinxcontrib-jquery==4.1 # via sphinx-rtd-theme sphinxcontrib-jsmath==1.0.1 # via sphinx +sphinxcontrib-mermaid==1.0.0 + # via -r requirements.in sphinxcontrib-qthelp==2.0.0 # via sphinx sphinxcontrib-serializinghtml==2.0.0