name: Build & Deploy Docs on: push: branches: [main] paths: - 'mnemosyne/**' - 'docs/**' - 'pyproject.toml' - '.gitea/workflows/docs.yml' jobs: build-and-deploy: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.12' - name: Install package + docs deps run: | pip install --upgrade pip pip install -e ".[docs]" - name: Read version from pyproject.toml id: version run: | VERSION=$(python -c "import tomllib; print(tomllib.load(open('pyproject.toml','rb'))['project']['version'])") echo "version=$VERSION" >> "$GITHUB_OUTPUT" # ─── Failure-debug trio (REQUIRED) ───────────────────────────────── - name: Build HTML id: build_html run: | cd docs ./regenerate_docs.sh continue-on-error: true - name: Print Sphinx error log on failure if: steps.build_html.outcome == 'failure' run: | echo "=== Sphinx error log ===" cat /tmp/sphinx-err-*.log 2>/dev/null || echo "(no sphinx error log found)" - name: Fail if build failed if: steps.build_html.outcome == 'failure' run: exit 1 # ─────────────────────────────────────────────────────────────────── - name: Install rsync + openssh run: | apt-get update apt-get install -y --no-install-recommends rsync openssh-client - name: Configure SSH run: | mkdir -p ~/.ssh printf '%s\n' "${{ secrets.CLIO_DOCS_KEY }}" > ~/.ssh/id_ed25519 chmod 600 ~/.ssh/id_ed25519 ssh-keyscan -p ${{ vars.CLIO_PORT }} ${{ vars.CLIO_HOST }} >> ~/.ssh/known_hosts - name: Test SSH connectivity run: | ssh -o BatchMode=yes -o ConnectTimeout=10 \ -p ${{ vars.CLIO_PORT }} -i ~/.ssh/id_ed25519 \ git@${{ vars.CLIO_HOST }} "id && echo 'SSH OK'" - name: Rsync to versioned path run: | rsync -av --delete \ -e "ssh -p ${{ vars.CLIO_PORT }} -i ~/.ssh/id_ed25519" \ docs/_build/html/ \ git@${{ vars.CLIO_HOST }}:/var/www/docs/mnemosyne/${{ steps.version.outputs.version }}/ - name: Rsync to latest run: | rsync -av --delete \ -e "ssh -p ${{ vars.CLIO_PORT }} -i ~/.ssh/id_ed25519" \ docs/_build/html/ \ git@${{ vars.CLIO_HOST }}:/var/www/docs/mnemosyne/latest/ - name: Regenerate versions index run: | ssh -p ${{ vars.CLIO_PORT }} -i ~/.ssh/id_ed25519 git@${{ vars.CLIO_HOST }} \ 'python3 - <Mnemosyne Docs", "

Mnemosyne Documentation

") (root / "index.html").write_text("\n".join(html)) PY'