name: 'docs' on: push: branches: - 'main' pull_request: types: - 'ready_for_review' - 'opened' - 'synchronize' workflow_dispatch: inputs: deploy_target: description: 'Deploy target (custom = invoke.ai, ghpages = invoke-ai.github.io/InvokeAI)' type: choice options: - custom - ghpages default: custom permissions: contents: read pull-requests: read concurrency: group: ${{ github.workflow }}-${{ github.ref || github.run_id }} cancel-in-progress: true jobs: changes: runs-on: ubuntu-latest outputs: docs: ${{ steps.manual.outputs.docs || steps.filter.outputs.docs }} steps: - name: checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: mark manual run if: github.event_name == 'workflow_dispatch' id: manual run: echo "docs=true" >> "$GITHUB_OUTPUT" - name: detect docs-related changes if: github.event_name != 'workflow_dispatch' id: filter uses: dorny/paths-filter@v3 with: filters: | docs: - '.github/workflows/deploy-docs.yml' - 'docs/**' - 'scripts/generate_docs_json.py' - 'invokeai/app/**' - 'invokeai/backend/**' - 'pyproject.toml' - 'uv.lock' check-and-build: needs: changes if: | github.event_name == 'workflow_dispatch' || (github.event_name == 'pull_request' && github.event.pull_request.draft == false && needs.changes.outputs.docs == 'true') || (github.event_name == 'push' && needs.changes.outputs.docs == 'true') runs-on: ubuntu-22.04 timeout-minutes: 20 steps: - name: checkout uses: actions/checkout@v4 # Python (needed for generate-docs-data) - name: setup uv uses: astral-sh/setup-uv@v5 with: version: '0.6.10' enable-cache: true python-version: '3.11' - name: setup python uses: actions/setup-python@v5 with: python-version: '3.11' # generate_docs_json.py only needs the invokeai package importable # (pydantic + invokeai.app/backend). Skip the [test] extra to keep CI fast. - name: install python dependencies run: uv pip install --editable . # Node (needed for docs build) - name: setup node uses: actions/setup-node@v4 with: node-version: '22.12.0' - name: setup pnpm uses: pnpm/action-setup@v4 with: version: 10 run_install: false - name: install docs dependencies run: pnpm install --prefer-frozen-lockfile working-directory: docs # Checks - name: verify generated docs data run: pnpm run check-docs-data working-directory: docs - name: build docs run: pnpm build working-directory: docs env: DEPLOY_TARGET: ${{ github.event_name == 'workflow_dispatch' && inputs.deploy_target || github.ref == 'refs/heads/main' && 'ghpages' || 'custom' }} # Upload artifact for deploy (main branch only) - name: upload pages artifact if: github.ref == 'refs/heads/main' uses: actions/upload-pages-artifact@v3 with: path: docs/dist deploy: if: github.ref == 'refs/heads/main' needs: check-and-build runs-on: ubuntu-latest permissions: contents: read pages: write id-token: write environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} steps: - name: deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v4