Skip to content

ci: Stub out CI for new python package #4

ci: Stub out CI for new python package

ci: Stub out CI for new python package #4

Workflow file for this run

# 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 *