Skip to content

python/ Improve docs. #830

python/ Improve docs.

python/ Improve docs. #830

Workflow file for this run

name: Python
on:
push:
branches: [main]
tags-ignore: ["**"]
paths:
- ".github/workflows/python.yml"
- "python/**"
- "!python/README.md"
- 'c/Make*'
- 'c/*.mk'
- 'c/**/*.[ch]p?p?'
pull_request:
branches-ignore: [gh-pages]
paths:
- ".github/workflows/python.yml"
- "python/**"
- "!python/README.md"
- 'c/Make*'
- 'c/*.mk'
- 'c/**/*.[ch]p?p?'
# Manual run
workflow_dispatch:
release:
types:
- published
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
run-tests:
timeout-minutes: 15
if: "! contains(github.event.head_commit.message, '[skip ci]')"
name: Test ${{ matrix.os }} (${{ matrix.python-version }})
runs-on: ${{ matrix.os }}
strategy:
# When set to true, GitHub cancels all in-progress jobs if any matrix job fails.
fail-fast: false
matrix:
os: [ ubuntu-latest ]
# Do not test macos-14 (Apple Silicon), windows-latest or
# ubuntu-latest+3.10 because it is already done when building the
# wheels.
python-version: ['3.11', '3.12']
include:
- os: macos-15-intel
python-version: '3.10'
steps:
- uses: actions/checkout@v5
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
- name: Install dependencies
run: |
python3 -m pip install --upgrade pip
python3 -m pip install tox tox-gh-actions
- name: Run tox
run: tox
working-directory: python
build_sdist:
timeout-minutes: 10
needs: run-tests
if: "! contains(github.event.head_commit.message, '[skip ci]')"
runs-on: ${{ matrix.os }}
strategy:
matrix:
python-version: ['3.10']
os: [ubuntu-latest]
steps:
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
- name: Install dependencies
run: |
python3 -m pip install --upgrade pip
python3 -m pip install --upgrade build
- name: Build the packages
run: python3 -m build
working-directory: python
# This is needed for publishing to PyPI
- name: Publish artifacts
uses: actions/upload-artifact@v4
with:
name: moocore-wheels-sdist-${{ matrix.os }}-${{ matrix.python-version }}
path: python/dist/*.tar.gz
build-doc:
name: Build documentation
needs: build_sdist
if: "! contains(github.event.head_commit.message, '[skip ci]')"
permissions:
contents: write
concurrency: # Recommended if you intend to make multiple deployments in quick succession.
group: web-${{ github.workflow }}-${{ github.ref }}
timeout-minutes: 10
runs-on: ubuntu-latest
steps:
- name: Checkout sources 🛎
uses: actions/checkout@v5
- name: Setup Python 3.10
uses: actions/setup-python@v6
with:
python-version: '3.10'
cache: 'pip'
- name: Ensure Pip and Build
run: |
python3 -m pip install --upgrade pip
python3 -m pip install --upgrade build
- name: Build the package
run: python3 -m build
working-directory: python
- name: Install the package and the doc build requirements
run: python3 -m pip install .[docs]
working-directory: python
- name: Cache intersphinx inventories
uses: actions/cache@v4
with:
path: python/doc/_build/doctrees/
key: intersphinx-${{ hashFiles('python/doc/source/conf.py') }}
restore-keys: intersphinx-
- name: Build the docs 🔧
run: |
make -C doc html
working-directory: python
- name: Deploy 🚀
if: success() && runner.os == 'Linux' && github.event_name == 'push' && github.ref == 'refs/heads/main'
uses: JamesIves/github-pages-deploy-action@v4
with:
folder: python/doc/_build/html/ # The folder the action should deploy.
target-folder: python
single-commit: true
clean: true
coverage:
timeout-minutes: 15
needs: build-doc
if: "! contains(github.event.head_commit.message, '[skip ci]')"
name: Coverage ${{ matrix.os }} (${{ matrix.python-version }})
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest]
python-version: ['3.10']
steps:
- uses: actions/checkout@v5
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python3 -m pip install --upgrade pip
python3 -m pip install tox tox-gh-actions
working-directory: python
- name: Run coverage using tox
run: tox -e cov
working-directory: python
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v5
with:
fail_ci_if_error: true
verbose: true
flags: python
token: ${{secrets.CODECOV_TOKEN}}
directory: python
wheels:
name: 🎡 Build wheels on ${{ matrix.os }} (${{ matrix.python-version }})
needs: coverage
runs-on: ${{ matrix.os }}
if: "! contains(github.event.head_commit.message, '[skip ci]')"
strategy:
fail-fast: false
matrix:
# FIXME: add windows-11-arm and ubuntu-24.04-arm
# https://github.com/scipy/scipy/blob/6b79a4dec1f9ca2db4e49c328d04d293880991c6/.github/workflows/wheels.yml#L78
# https://github.com/numpy/numpy-release/blob/main/.github/workflows/wheels.yml
# macos-14 is Apple Silicon (arm64), but we build an universal2 wheel.
# The configuration of cibuildwheel can be found in pyproject.toml
os: [ubuntu-22.04, ubuntu-22.04-arm, windows-2025, macos-14]
python-version: ['3.10']
include:
# 3.11 is the earliest version on windows-arm
- os: windows-11-arm
python-version: "3.11"
steps:
- uses: actions/checkout@v5
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
- name: Setup LLVM for Windows ARM64 (NOT WORKING/FIXME)
if: ${{ matrix.os == 'windows-11-arm' }}
uses: ./.github/windows_arm64_steps
- name: Build wheels
uses: pypa/cibuildwheel@v3.2.1
with:
package-dir: python
output-dir: wheelhouse
- name: List wheels
run: ls wheelhouse/*.whl
- uses: actions/upload-artifact@v4
with:
name: moocore-wheels-${{ matrix.os }}-${{ matrix.python-version }}-${{ strategy.job-index }}
path: wheelhouse/*.whl
upload_pypi:
name: Publish Python 🐍 distribution 📦 to PyPI
needs: [wheels, build_sdist]
runs-on: ubuntu-latest
environment:
name: pypi
url: https://pypi.org/p/moocore
permissions:
id-token: write
if: github.event_name == 'release' && github.event.action == 'published' && startsWith(github.ref, 'refs/tags/v')
# or, alternatively, upload to PyPI on every tag starting with 'v' (remove on: release above to use this)
# if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
steps:
- uses: actions/download-artifact@v4
with:
# unpacks all moocore artifacts into dist/
pattern: moocore-wheels-*
path: dist
merge-multiple: true
- name: Display structure of downloaded files
run: ls -R dist
- uses: pypa/gh-action-pypi-publish@release/v1
with:
verbose: true
# To test: repository-url: https://test.pypi.org/legacy/
upload:
name: Store wheels
needs: wheels
if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v')
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v5
- uses: actions/download-artifact@v4
with:
path: wheelhouse
pattern: moocore-wheels-*
merge-multiple: true
- name: List wheels
run: ls -l wheelhouse/*.whl
- name: Upload wheels
if: success() && runner.os == 'Linux' && github.event_name == 'push'
run: |
git config --local user.email "actions@github.com"
git config --local user.name "GitHub Actions"
git checkout --orphan new-wheels
git rm -rf .
mv wheelhouse/*.whl .
git add *.whl
git commit --allow-empty -m "Store Python wheels from @ $GITHUB_SHA"
git branch -D wheels
git branch -m wheels
git push --force origin wheels
shell: bash {0}