ci: Stub out CI for new python package #31
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 -o ../.github/workflows/ci_python.yml | |
# | |
# TODO: | |
# - `safety` | |
# - `typeguard` | |
# - `xdoctest` | |
name: CI | |
# Only one job per-ref | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
on: | |
push: | |
branches: | |
- main | |
tags: | |
- '*' | |
pull_request: | |
branches: | |
- main | |
merge_group: | |
branches: | |
- main | |
defaults: | |
run: | |
shell: bash | |
working-directory: python | |
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 | |
- name: Install poetry | |
run: | | |
pipx install poetry | |
poetry config virtualenvs.create true --local | |
poetry config virtualenvs.in-project true --local | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: 3.11 | |
cache: poetry | |
- name: install deps | |
run: | | |
poetry install --only=main --only=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-macos: | |
runs-on: macos-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Install poetry | |
run: | | |
pipx install poetry | |
poetry config virtualenvs.create true --local | |
poetry config virtualenvs.in-project true --local | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: | | |
3.8 | |
3.9 | |
3.10 | |
3.11 | |
architecture: x64 | |
cache: poetry | |
- name: Install Protoc | |
uses: arduino/setup-protoc@v1 | |
with: | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Build wheel (Mac x86_64) | |
uses: messense/maturin-action@v1 | |
with: | |
target: x86_64 | |
args: --release --out dist --sdist | |
working-directory: python | |
- name: pytest and mypy (Mac x86_64) | |
run: | | |
for V in "3.8 3.9 3.10 3.11" | xargs); do | |
echo "::group::Install for Python $V" | |
poetry env use $V | |
poetry install --only=main --only=test --only=typecheck | |
pip install dist/kaskada-*.whl --force-reinstall | |
echo "::endgroup::" | |
echo "::group::Test Python $V" | |
poetry run pytest | |
echo "::endgroup::" | |
echo "::group::MyPy Python $V" | |
poetry run mypy -- --install-types --non-interacitve pysrc pytests docs/source/ | |
echo "::endgroup::" | |
done | |
- name: Build wheel (Mac universal2) | |
uses: messense/maturin-action@v1 | |
with: | |
target: universal2 | |
args: --release --out dist --sdist | |
working-directory: python | |
- name: pytest and mypy (Mac universal2) | |
run: | | |
echo "::group::Install for Python 3.11") | |
poetry env use 3.11 | |
poetry install --only=main --only=test --only=typecheck | |
pip install dist/kaskada-*universal2.whl --force-reinstall | |
echo "::endgroup::" | |
echo "::group::Test Python 3.11" | |
poetry run pytest | |
echo "::endgroup::" | |
echo "::group::MyPy Python 3.11" | |
poetry run mypy -- --install-types --non-interacitve pysrc pytests docs/source/ | |
echo "::endgroup:: | |
- name: Upload wheels | |
uses: actions/upload-artifact@v2 | |
with: | |
name: wheels | |
path: dist | |
build-wheel-windows: | |
runs-on: windows-latest | |
strategy: | |
matrix: | |
target: [x64, x86] | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: 3.11 | |
architecture: ${{ matrix.target }} | |
# - name: Install Rust toolchain | |
# uses: actions-rs/toolchain@v1 | |
# with: | |
# toolchain: stable | |
# profile: minimal | |
# default: true | |
- name: Build wheels | |
uses: messense/maturin-action@v1 | |
with: | |
target: ${{ matrix.target }} | |
args: --release --out dist | |
working-direcotry: python | |
- name: pytest and mypy (Windows ${{ matrix.target }}) | |
shell: bash | |
run: | | |
echo "::group::Install for Python 3.11" | |
poetry install --only=main --only=test --only=typecheck | |
pip install dist/kaskada-*.whl --force-reinstall | |
echo "::endgroup::" | |
echo "::group::Test Python 3.11" | |
poetry run pytest | |
echo "::endgroup::" | |
echo "::group::MyPy Python 3.11" | |
poetry run mypy -- --install-types --non-interacitve pysrc pytests docs/source/ | |
echo "::endgroup::" | |
- name: Upload wheels | |
uses: actions/upload-artifact@v2 | |
with: | |
name: wheels | |
path: dist | |
build-wheel-linux: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
target: [x86_64, i686] | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: | | |
3.8 | |
3.9 | |
3.10 | |
3.11 | |
- name: Build wheels | |
uses: messense/maturin-action@v1 | |
with: | |
target: ${{ matrix.target }} | |
manylinux: auto | |
args: --release --out dist | |
- name: pytest and mypy (Linux x86_64) | |
if: matrix.target == 'x86_64' | |
run: | | |
for V in "3.8 3.9 3.10 3.11" | xargs); do | |
echo "::group::Install for Python $V" | |
poetry env use $V | |
poetry install --only=main --only=test --only=typecheck | |
pip install dist/kaskada-*.whl --force-reinstall | |
echo "::endgroup::" | |
echo "::group::Test Python $V" | |
poetry run pytest | |
echo "::endgroup::" | |
echo "::group::MyPy Python $V" | |
poetry run mypy -- --install-types --non-interacitve pysrc pytests docs/source/ | |
echo "::endgroup::" | |
done | |
- name: Upload wheels | |
uses: actions/upload-artifact@v2 | |
with: | |
name: wheels | |
path: dist | |
# 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: 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-linux] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Install poetry | |
run: | | |
pipx install poetry | |
poetry config virtualenvs.create true --local | |
poetry config virtualenvs.in-project true --local | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: 3.11 | |
cache: poetry | |
- uses: actions/download-artifact@v3 | |
with: | |
name: wheels | |
- name: Install dependencies | |
run: | | |
poetry install --only=main --only=docs --only=typecheck | |
pip install kaskada>=0.6.0-a.0 --find-links dist --force-reinstall | |
- name: Build docs | |
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 * | |
# working-directory: python |