ci: Stub out CI for new python package #4
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# This file was initially generated by maturin v1.2.0, using: | |
# | |
# maturin generate-ci github --pytest --zig -o ../.github/workflows/ci_python.yml | |
# | |
# TODO: | |
# - `safety` | |
# - `typeguard` | |
# - `xdoctest` | |
name: CI | |
on: | |
push: | |
branches: | |
- main | |
tags: | |
- '*' | |
pull_request: | |
branches: | |
- main | |
merge_group: | |
branches: | |
- main | |
permissions: | |
contents: read | |
jobs: | |
# Run lint separately from the build -- it doesn't need the built Rust code. | |
# | |
# Also, only do it on one machine. | |
lint: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v2 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: 3.11 | |
- name: Install poetry | |
uses: abatilo/actions-poetry@v2 | |
- name: Setup a local virtual environment (if no poetry.toml file) | |
run: | | |
poetry config virtualenvs.create true --local | |
poetry config virtualenvs.in-project true --local | |
- uses: actions/cache@v3 | |
name: Define a cache for the virtual environment based on the dependencies lock file | |
with: | |
path: ./.venv | |
key: venv-${{ hashFiles('poetry.lock') }} | |
- name: install deps | |
run: | | |
poetry install --no-dev --with=lint | |
- name: black | |
run: | | |
poetry run black --diff pysrc pytests docs/source | |
- name: flake8 | |
run: | | |
poetry run flake8 pysrc pytests docs/source | |
- name: isort | |
run: | | |
poetry run isort --filter-files --diff pysrc pytests docs/source | |
- name: darglint | |
run: | | |
poetry run darglint pysrc | |
- name: pydocstyle | |
run: | | |
poetry run pydocstyle pysrc | |
build-wheel: | |
strategy: | |
matrix: | |
include: | |
- host: ubuntu-latest | |
target: x86_64 | |
- host: ubuntu-latest | |
target: x86 | |
- host: ubuntu-latest | |
target: aarch64 | |
- host: ubuntu-latest | |
target: armv7 | |
- host: ubuntu-latest | |
target: s390x | |
- host: ubuntu-latest | |
target: ppc64le | |
- host: windows-latest | |
target: x64 | |
- host: windows-latest | |
target: x86 | |
- host: macos-latest | |
target: x86_64 | |
- host: macos-latest | |
target: aarch64 | |
runs-on: ${{ matrix.host }} | |
steps: | |
- uses: actions/checkout@v2 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: 3.11 | |
- name: Install poetry | |
uses: abatilo/actions-poetry@v2 | |
- name: Setup a local virtual environment (if no poetry.toml file) | |
run: | | |
poetry config virtualenvs.create true --local | |
poetry config virtualenvs.in-project true --local | |
- uses: actions/cache@v3 | |
name: Define a cache for the virtual environment based on the dependencies lock file | |
with: | |
path: ./.venv | |
key: venv-${{ hashFiles('poetry.lock') }} | |
- name: Build wheels | |
uses: PyO3/maturin-action@v1 | |
with: | |
target: ${{ matrix.target }} | |
args: --release --out dist --zig | |
sccache: 'true' | |
manylinux: auto | |
working-directory: ${{ github.workspace }}/python | |
- name: Upload wheels | |
uses: actions/upload-artifact@v3 | |
with: | |
name: wheels | |
path: ${{ github.workspace }}/python/dist | |
# Tests that we can run on the host. | |
test: | |
needs: [build-wheel] | |
strategy: | |
matrix: | |
include: | |
- host: ubuntu-latest | |
target: x86_64 | |
- host: ubuntu-latest | |
target: x86_64 | |
python: 3.10 | |
- host: ubuntu-latest | |
target: x86_64 | |
python: 3.9 | |
- host: ubuntu-latest | |
target: x86_64 | |
python: 3.8 | |
- host: ubuntu-latest | |
target: x86 | |
# - host: ubuntu-latest | |
# target: aarch64 | |
# - host: ubuntu-latest | |
# target: armv7 | |
# - host: ubuntu-latest | |
# target: s390x | |
# - host: ubuntu-latest | |
# target: ppc64le | |
- host: windows-latest | |
target: x64 | |
- host: macos-latest | |
target: x86_64 | |
# - host: macos-latest | |
# target: aarch64 | |
runs-on: ${{ matrix.host }} | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python || '3.11' }} | |
- name: Install poetry | |
uses: abatilo/actions-poetry@v2 | |
- name: Setup a local virtual environment (if no poetry.toml file) | |
run: | | |
poetry config virtualenvs.create true --local | |
poetry config virtualenvs.in-project true --local | |
- uses: actions/cache@v3 | |
name: Define a cache for the virtual environment based on the dependencies lock file | |
with: | |
path: ./.venv | |
key: venv-${{ hashFiles('poetry.lock') }} | |
- uses: actions/download-artifact@v3 | |
with: | |
name: wheels | |
- name: install deps | |
shell: bash | |
working-directory: ${{ github.workspace }}/python | |
run: | | |
set -e | |
poetry install --no-dev --with=test --with=typecheck | |
pip install kaskada --find-links dist --force-reinstall | |
- name: pytest | |
shell: bash | |
working-directory: ${{ github.workspace }}/python | |
run: pytest | |
- name: mypy | |
shell: bash | |
working-directory: ${{ github.workspace }}/python | |
run: mypy --install-types --non-interacitve pysrc pytests docs/source/ | |
# Tests that require `run_on_arch`. | |
run_on_arch_test: | |
needs: [build-wheel] | |
strategy: | |
matrix: | |
include: | |
- host: ubuntu-latest | |
target: aarch64 | |
- host: ubuntu-latest | |
target: armv7 | |
- host: ubuntu-latest | |
target: s390x | |
- host: ubuntu-latest | |
target: ppc64le | |
runs-on: ${{ matrix.host }} | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/download-artifact@v3 | |
with: | |
name: wheels | |
- uses: uraimo/run-on-arch-action@v2.5.0 | |
with: | |
arch: ${{ matrix.target }} | |
distro: ubuntu22.04 | |
githubToken: ${{ github.token }} | |
install: | | |
apt-get update | |
apt-get install -y --no-install-recommends python3 python3-pip | |
pip3 install -U pip poetry | |
cd ${{ github.workspace }}/python | |
# We shouldn't need regular dependencies, since they come from | |
# the `pip install` of kaskada later. | |
poetry install --with=test --with=typecheck | |
run: | | |
set -e | |
pip3 install kaskada --find-links dist --force-reinstall | |
pytest | |
mypy --install-types --non-interactive pysrc pytests docs/source/ | |
# Make the source distribution | |
sdist: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Build sdist | |
uses: PyO3/maturin-action@v1 | |
with: | |
command: sdist | |
args: --out dist | |
working-directory: ${{ github.workspace }}/python | |
- name: Upload sdist | |
uses: actions/upload-artifact@v3 | |
with: | |
name: wheels | |
path: ${{ github.workspace }}/python/dist | |
# Make the documentation site | |
docs-build: | |
needs: [build-wheel] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: 3.11 | |
- name: Install poetry | |
uses: abatilo/actions-poetry@v2 | |
- name: Setup a local virtual environment (if no poetry.toml file) | |
run: | | |
poetry config virtualenvs.create true --local | |
poetry config virtualenvs.in-project true --local | |
- uses: actions/cache@v3 | |
name: Define a cache for the virtual environment based on the dependencies lock file | |
with: | |
path: ./.venv | |
key: venv-${{ hashFiles('poetry.lock') }} | |
- uses: actions/download-artifact@v3 | |
with: | |
name: wheels | |
- name: Install dependencies | |
working-directory: ${{ github.workspace }}/python | |
run: | | |
poetry install --no-dev --with=docs --with-typecheck | |
pip install kaskada --find-links dist --force-reinstall | |
- name: Build docs | |
working-directory: ${{ github.workspace }}/python | |
run: | | |
sphinx-build docs/source docs/_build -j auto | |
- name: Upload artifact | |
# Automatically uploads an artifact from the './_site' directory by default | |
uses: actions/upload-pages-artifact@v2 | |
with: | |
path: ${{ github.workspace }}/python/docs/_build | |
docs-deploy: | |
# Deployment job | |
environment: | |
name: github-pages | |
url: ${{ steps.deployment.outputs.page_url }} | |
# Grant GITHUB_TOKEN the permissions required to make a Pages deployment | |
permissions: | |
pages: write # to deploy to Pages | |
id-token: write # to verify the deployment originates from an appropriate source | |
if: github.ref == 'refs/heads/main' | |
runs-on: ubuntu-latest | |
needs: [docs-build] | |
steps: | |
- name: Deploy to GitHub Pages | |
id: deployment | |
uses: actions/deploy-pages@v2 | |
# release: | |
# name: Release | |
# runs-on: ubuntu-latest | |
# if: "startsWith(github.ref, 'refs/tags/')" | |
# needs: [linux, windows, macos, sdist] | |
# steps: | |
# - uses: actions/download-artifact@v3 | |
# with: | |
# name: wheels | |
# - name: Publish to PyPI | |
# uses: PyO3/maturin-action@v1 | |
# env: | |
# MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }} | |
# with: | |
# command: upload | |
# args: --skip-existing * |