Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
131 changes: 81 additions & 50 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
run-name: build ${{ github.event.inputs.repository }}:${{ github.event.inputs.reference }}
run-name: build ${{ inputs.repository }}:${{ inputs.reference }}
on:
workflow_dispatch:
inputs:
Expand All @@ -18,6 +18,32 @@ on:
description: 'Publish to GitHub Pages'
required: false
default: false
python_version:
description: 'Python version used to generate docs'
required: false
default: '3'
workflow_call:
inputs:
reference:
description: 'Commit reference from CPython repository'
default: '3.14'
type: string
dist_version:
description: 'Dist version (compatible with patchlevel.py output)'
default: '3.14'
type: string
repository:
description: 'Repository to checkout'
default: 'python/cpython'
type: string
publish:
description: 'Publish to GitHub Pages'
default: 'false'
type: string
python_version:
description: 'Python version used to generate docs'
default: '3'
type: string
permissions:
contents: write
jobs:
Expand All @@ -26,63 +52,63 @@ jobs:
steps:
- uses: actions/setup-python@master
with:
python-version: 3
python-version: ${{ inputs.python_version }}
- uses: actions/checkout@master
with:
repository: ${{ github.event.inputs.repository }}
ref: ${{ github.event.inputs.reference }}
repository: ${{ inputs.repository }}
ref: ${{ inputs.reference }}
- run: make venv
working-directory: ./Doc
- run: make dist-html
working-directory: ./Doc
- uses: actions/upload-artifact@master
if: always()
with:
name: docs-html.zip
path: ./Doc/dist/python-${{ github.event.inputs.dist_version }}-docs-html.zip
name: python-${{ inputs.dist_version }}-docs-html.zip
path: ./Doc/dist/python-${{ inputs.dist_version }}*-docs-html.zip
if-no-files-found: ignore
- uses: actions/upload-artifact@master
if: always()
with:
name: docs-html.tar.bz2
path: ./Doc/dist/python-${{ github.event.inputs.dist_version }}-docs-html.tar.bz2
name: python-${{ inputs.dist_version }}-docs-html.tar.bz2
path: ./Doc/dist/python-${{ inputs.dist_version }}*-docs-html.tar.bz2
if-no-files-found: ignore
build-text:
runs-on: ubuntu-latest
steps:
- uses: actions/setup-python@master
with:
python-version: 3
python-version: ${{ inputs.python_version }}
- uses: actions/checkout@master
with:
repository: ${{ github.event.inputs.repository }}
ref: ${{ github.event.inputs.reference }}
repository: ${{ inputs.repository }}
ref: ${{ inputs.reference }}
- run: make venv
working-directory: ./Doc
- run: make dist-text
working-directory: ./Doc
- uses: actions/upload-artifact@master
if: always()
with:
name: docs-text.zip
path: ./Doc/dist/python-${{ github.event.inputs.dist_version }}-docs-text.zip
name: python-${{ inputs.dist_version }}-docs-text.zip
path: ./Doc/dist/python-${{ inputs.dist_version }}*-docs-text.zip
if-no-files-found: ignore
- uses: actions/upload-artifact@master
if: always()
with:
name: docs-text.tar.bz2
path: ./Doc/dist/python-${{ github.event.inputs.dist_version }}-docs-text.tar.bz2
name: python-${{ inputs.dist_version }}-docs-text.tar.bz2
path: ./Doc/dist/python-${{ inputs.dist_version }}*-docs-text.tar.bz2
if-no-files-found: ignore
build-texinfo:
runs-on: ubuntu-latest
steps:
- uses: actions/setup-python@master
with:
python-version: 3
python-version: ${{ inputs.python_version }}
- uses: actions/checkout@master
with:
repository: ${{ github.event.inputs.repository }}
ref: ${{ github.event.inputs.reference }}
repository: ${{ inputs.repository }}
ref: ${{ inputs.reference }}
- run: make venv
working-directory: ./Doc
- run: sudo apt-get update && sudo apt-get install -y texinfo
Expand All @@ -91,45 +117,45 @@ jobs:
- uses: actions/upload-artifact@master
if: always()
with:
name: docs-texinfo.zip
path: ./Doc/dist/python-${{ github.event.inputs.dist_version }}-docs-texinfo.zip
name: python-${{ inputs.dist_version }}-docs-texinfo.zip
path: ./Doc/dist/python-${{ inputs.dist_version }}*-docs-texinfo.zip
if-no-files-found: ignore
- uses: actions/upload-artifact@master
if: always()
with:
name: docs-texinfo.tar.bz2
path: ./Doc/dist/python-${{ github.event.inputs.dist_version }}-docs-texinfo.tar.bz2
name: python-${{ inputs.dist_version }}-docs-texinfo.tar.bz2
path: ./Doc/dist/python-${{ inputs.dist_version }}*-docs-texinfo.tar.bz2
if-no-files-found: ignore
build-epub:
runs-on: ubuntu-latest
steps:
- uses: actions/setup-python@master
with:
python-version: 3
python-version: ${{ inputs.python_version }}
- uses: actions/checkout@master
with:
repository: ${{ github.event.inputs.repository }}
ref: ${{ github.event.inputs.reference }}
repository: ${{ inputs.repository }}
ref: ${{ inputs.reference }}
- run: make venv
working-directory: ./Doc
- run: make dist-epub
working-directory: ./Doc
- uses: actions/upload-artifact@master
if: always()
with:
name: docs.epub
path: ./Doc/dist/python-${{ github.event.inputs.dist_version }}-docs.epub
name: python-${{ inputs.dist_version }}-docs.epub
path: ./Doc/dist/python-${{ inputs.dist_version }}*-docs.epub
if-no-files-found: ignore
build-pdf:
runs-on: ubuntu-latest
steps:
- uses: actions/setup-python@master
with:
python-version: 3
python-version: ${{ inputs.python_version }}
- uses: actions/checkout@master
with:
repository: ${{ github.event.inputs.repository }}
ref: ${{ github.event.inputs.reference }}
repository: ${{ inputs.repository }}
ref: ${{ inputs.reference }}
- run: make venv
working-directory: ./Doc
- run: sudo apt-get update && sudo apt-get install -y latexmk texlive-xetex fonts-freefont-otf xindy librsvg2-bin
Expand All @@ -138,32 +164,37 @@ jobs:
- uses: actions/upload-artifact@master
if: always()
with:
name: pdf-logs.zip
name: python-${{ inputs.dist_version }}-pdf-logs.zip
path: |
./Doc/build/latex/*.log
./Doc/build/latex/*.tex
- uses: actions/upload-artifact@master
if: always()
with:
name: docs-pdf-a4.zip
path: ./Doc/dist/python-${{ github.event.inputs.dist_version }}-docs-pdf-a4.zip
name: python-${{ inputs.dist_version }}-docs-pdf-a4.zip
path: ./Doc/dist/python-${{ inputs.dist_version }}*-docs-pdf-a4.zip
if-no-files-found: ignore
- uses: actions/upload-artifact@master
if: always()
with:
name: docs-pdf-a4.tar.bz2
path: ./Doc/dist/python-${{ github.event.inputs.dist_version }}-docs-pdf-a4.tar.bz2
name: python-${{ inputs.dist_version }}-docs-pdf-a4.tar.bz2
path: ./Doc/dist/python-${{ inputs.dist_version }}*-docs-pdf-a4.tar.bz2
if-no-files-found: ignore
publish:
needs: [build-html, build-text, build-texinfo, build-epub, build-pdf]
if: ${{ !cancelled() && github.event.inputs.publish == 'true' }}
if: ${{ !cancelled() && inputs.publish == 'true' }}
runs-on: ubuntu-latest
concurrency:
group: gh-pages-publish
cancel-in-progress: false
steps:
- name: Checkout gh-pages branch
uses: actions/checkout@v4
uses: actions/checkout@v5
with:
ref: gh-pages
path: gh-pages
- name: Pull latest gh-pages
run: git -C gh-pages pull --rebase origin gh-pages
- name: Download all artifacts
uses: actions/download-artifact@master
with:
Expand All @@ -172,32 +203,32 @@ jobs:
run: |
mkdir -p gh-pages/3
# PDF
cp artifacts/docs-pdf-a4.zip/python-${{ github.event.inputs.dist_version }}-docs-pdf-a4.zip gh-pages/3/ 2>/dev/null || true
cp artifacts/docs-pdf-a4.tar.bz2/python-${{ github.event.inputs.dist_version }}-docs-pdf-a4.tar.bz2 gh-pages/3/ 2>/dev/null || true
cp artifacts/python-${{ inputs.dist_version }}-docs-pdf-a4.zip/* gh-pages/3/ 2>/dev/null || true
cp artifacts/python-${{ inputs.dist_version }}-docs-pdf-a4.tar.bz2/* gh-pages/3/ 2>/dev/null || true
# HTML
cp artifacts/docs-html.zip/python-${{ github.event.inputs.dist_version }}-docs-html.zip gh-pages/3/ 2>/dev/null || true
cp artifacts/docs-html.tar.bz2/python-${{ github.event.inputs.dist_version }}-docs-html.tar.bz2 gh-pages/3/ 2>/dev/null || true
cp artifacts/python-${{ inputs.dist_version }}-docs-html.zip/* gh-pages/3/ 2>/dev/null || true
cp artifacts/python-${{ inputs.dist_version }}-docs-html.tar.bz2/* gh-pages/3/ 2>/dev/null || true
# Text
cp artifacts/docs-text.zip/python-${{ github.event.inputs.dist_version }}-docs-text.zip gh-pages/3/ 2>/dev/null || true
cp artifacts/docs-text.tar.bz2/python-${{ github.event.inputs.dist_version }}-docs-text.tar.bz2 gh-pages/3/ 2>/dev/null || true
cp artifacts/python-${{ inputs.dist_version }}-docs-text.zip/* gh-pages/3/ 2>/dev/null || true
cp artifacts/python-${{ inputs.dist_version }}-docs-text.tar.bz2/* gh-pages/3/ 2>/dev/null || true
# Texinfo
cp artifacts/docs-texinfo.zip/python-${{ github.event.inputs.dist_version }}-docs-texinfo.zip gh-pages/3/ 2>/dev/null || true
cp artifacts/docs-texinfo.tar.bz2/python-${{ github.event.inputs.dist_version }}-docs-texinfo.tar.bz2 gh-pages/3/ 2>/dev/null || true
cp artifacts/python-${{ inputs.dist_version }}-docs-texinfo.zip/* gh-pages/3/ 2>/dev/null || true
cp artifacts/python-${{ inputs.dist_version }}-docs-texinfo.tar.bz2/* gh-pages/3/ 2>/dev/null || true
# EPUB
cp artifacts/docs.epub/python-${{ github.event.inputs.dist_version }}-docs.epub gh-pages/3/ 2>/dev/null || true
cp artifacts/python-${{ inputs.dist_version }}-docs.epub/* gh-pages/3/ 2>/dev/null || true
- name: Commit generated archives
id: commit
run: |
cd gh-pages
git config user.name github-actions
git config user.email github-actions@github.com
git add 3/python-${{ github.event.inputs.dist_version }}-docs-* || true
git add 3/
if git diff --cached --quiet; then
echo "No documentation archives to commit"
echo "has_changes=false" >> $GITHUB_OUTPUT
echo "has_changes=false" >> "$GITHUB_OUTPUT"
else
git commit -m "Update documentation archives for ${{ github.event.inputs.dist_version }}"
echo "has_changes=true" >> $GITHUB_OUTPUT
git commit -m "Update documentation archives for ${{ inputs.dist_version }}"
echo "has_changes=true" >> "$GITHUB_OUTPUT"
fi
- name: Push commit
if: steps.commit.outputs.has_changes == 'true'
Expand Down
32 changes: 32 additions & 0 deletions .github/workflows/schedule.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: scheduled docs generation
on:
schedule:
- cron: '0 5 * * *'
workflow_dispatch:
push:
permissions:
contents: write
jobs:
get-versions:
runs-on: ubuntu-latest
outputs:
versions: ${{ steps.get-versions.outputs.versions }}
steps:
- name: Get supported Python versions
id: get-versions
run: |
versions=$(curl -sf https://peps.python.org/api/release-cycle.json | \
jq -c '[to_entries[] | select(.value.status != "end-of-life" and .value.status != "planned") | {version: .key, branch: (.value.branch // .key), python_version: (if .key == "3.10" then "3.12" else "3" end)}]')
echo "versions=$versions" >> "$GITHUB_OUTPUT"
build:
needs: get-versions
strategy:
fail-fast: false
matrix:
include: ${{ fromJson(needs.get-versions.outputs.versions) }}
uses: ./.github/workflows/build.yaml
with:
reference: ${{ matrix.branch }}
dist_version: ${{ matrix.version }}
python_version: ${{ matrix.python_version }}
publish: ${{ 'true' }}
Loading