Skip to content

Set up a Rust-first repo structure #6

Set up a Rust-first repo structure

Set up a Rust-first repo structure #6

Workflow file for this run

name: CI & Tests
on:
pull_request:
branches: [main]
push:
branches: [main]
permissions:
contents: read
jobs:
style:
name: Check the code style
runs-on: ubuntu-latest
defaults:
run:
working-directory: bindings/python
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: "3.10"
- uses: pre-commit/[email protected]
tests:
name: Run the tests
runs-on: ubuntu-latest
defaults:
run:
working-directory: bindings/python
strategy:
matrix:
python-version: ["3.10"]
steps:
- uses: actions/checkout@v3
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Set up test environment
run: |
python3 -m venv .venv
source .venv/bin/activate
pip install outlines-core --find-links dist --force-reinstall
pip install pytest
- name: Run tests
run: |
source .venv/bin/activate
pytest --cov=src/outlines_core
- name: Upload coverage data
uses: actions/upload-artifact@v3
with:
name: coverage-data
path: .coverage*
if-no-files-found: ignore
coverage:
name: Combine & check coverage.
needs: tests
runs-on: ubuntu-latest
defaults:
run:
working-directory: bindings/python
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: actions/setup-python@v4
with:
cache: pip
python-version: "3.11"
- name: Set up environment
run: |
pip install --upgrade "coverage[toml]>=5.1" diff-cover
- uses: actions/download-artifact@v3
with:
name: coverage-data
- name: Fetch master for coverage diff
run: |
git fetch --no-tags --prune origin main
- name: Combine coverage & fail if it's <100%.
run: |
# Combine coverage files (not needed now, but maybe later)
# python -m coverage combine
# Produce an html report with absolute coverage information
python -m coverage html --skip-covered --skip-empty
# Report relative coverage and write to the workflow's summary
python -m coverage xml
diff-cover coverage.xml --markdown-report=coverage.md --fail-under=100 || (cat coverage.md >> $GITHUB_STEP_SUMMARY && exit 1)
- name: Upload HTML report if check failed.
uses: actions/upload-artifact@v3
with:
name: html-report
path: htmlcov
if: ${{ failure() }}
linux:
runs-on: ${{ matrix.platform.runner }}
defaults:
run:
working-directory: bindings/python
strategy:
matrix:
platform:
- runner: ubuntu-latest
target: x86_64
# - runner: ubuntu-latest
# target: x86
# - runner: ubuntu-latest
# target: aarch64
# - runner: ubuntu-latest
# target: armv7
# - runner: ubuntu-latest
# target: s390x
# - runner: ubuntu-latest
# target: ppc64le
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: 3.x
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.platform.target }}
args: --release --out dist --find-interpreter
sccache: 'true'
manylinux: auto
working-directory: bindings/python
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-linux-${{ matrix.platform.target }}
path: bindings/python/dist
- name: pytest
if: ${{ startsWith(matrix.platform.target, 'x86_64') }}
shell: bash
run: |
set -e
python3 -m venv .venv
source .venv/bin/activate
pip install outlines-core --find-links dist --force-reinstall
pip install pytest
pytest
- name: pytest
if: ${{ !startsWith(matrix.platform.target, 'x86') && matrix.platform.target != 'ppc64' }}
uses: uraimo/run-on-arch-action@v2
with:
arch: ${{ matrix.platform.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 pytest
run: |
set -e
cd bindings/python
pip3 install outlines-core --find-links dist --force-reinstall
pytest
# musllinux:
# runs-on: ${{ matrix.platform.runner }}
# defaults:
# run:
# working-directory: bindings/python
# strategy:
# matrix:
# platform:
# - runner: ubuntu-latest
# target: x86_64
# - runner: ubuntu-latest
# target: x86
# - runner: ubuntu-latest
# target: aarch64
# - runner: ubuntu-latest
# target: armv7
# steps:
# - uses: actions/checkout@v4
# - uses: actions/setup-python@v5
# with:
# python-version: 3.x
# - name: Build wheels
# uses: PyO3/maturin-action@v1
# with:
# target: ${{ matrix.platform.target }}
# args: --release --out dist --find-interpreter
# sccache: 'true'
# manylinux: musllinux_1_2
# working-directory: bindings/python
# - name: Upload wheels
# uses: actions/upload-artifact@v4
# with:
# name: wheels-musllinux-${{ matrix.platform.target }}
# path: bindings/python/dist
# - name: pytest
# if: ${{ startsWith(matrix.platform.target, 'x86_64') }}
# uses: addnab/docker-run-action@v3
# with:
# image: alpine:latest
# options: -v ${{ github.workspace }}:/io -w /io/bindings/python
# run: |
# set -e
# apk add py3-pip py3-virtualenv
# python3 -m virtualenv .venv
# source .venv/bin/activate
# pip install outlines-core --no-index --find-links dist --force-reinstall
# pip install pytest
# pytest
# - name: pytest
# if: ${{ !startsWith(matrix.platform.target, 'x86') }}
# uses: uraimo/run-on-arch-action@v2
# with:
# arch: ${{ matrix.platform.target }}
# distro: alpine_latest
# githubToken: ${{ github.token }}
# install: |
# apk add py3-virtualenv
# run: |
# set -e
# cd bindings/python
# python3 -m virtualenv .venv
# source .venv/bin/activate
# pip install pytest
# pip install outlines-core --find-links dist --force-reinstall
# pytest
# windows:
# runs-on: ${{ matrix.platform.runner }}
# defaults:
# run:
# working-directory: bindings/python
# strategy:
# matrix:
# platform:
# - runner: windows-latest
# target: x64
# - runner: windows-latest
# target: x86
# steps:
# - uses: actions/checkout@v4
# - uses: actions/setup-python@v5
# with:
# python-version: 3.x
# architecture: ${{ matrix.platform.target }}
# - name: Build wheels
# uses: PyO3/maturin-action@v1
# with:
# target: ${{ matrix.platform.target }}
# args: --release --out dist --find-interpreter
# sccache: 'true'
# working-directory: bindings/python
# - name: Upload wheels
# uses: actions/upload-artifact@v4
# with:
# name: wheels-windows-${{ matrix.platform.target }}
# path: bindings/python/dist
# - name: pytest
# if: ${{ !startsWith(matrix.platform.target, 'aarch64') }}
# shell: bash
# run: |
# set -e
# python3 -m venv .venv
# source .venv/Scripts/activate
# pip install outlines-core --find-links dist --force-reinstall
# pip install pytest
# pytest
# macos:
# runs-on: ${{ matrix.platform.runner }}
# defaults:
# run:
# working-directory: bindings/python
# strategy:
# matrix:
# platform:
# - runner: macos-12
# target: x86_64
# - runner: macos-14
# target: aarch64
# steps:
# - uses: actions/checkout@v4
# - uses: actions/setup-python@v5
# with:
# python-version: 3.x
# - name: Build wheels
# uses: PyO3/maturin-action@v1
# with:
# target: ${{ matrix.platform.target }}
# args: --release --out dist --find-interpreter
# sccache: 'true'
# working-directory: bindings/python
# - name: Upload wheels
# uses: actions/upload-artifact@v4
# with:
# name: wheels-macos-${{ matrix.platform.target }}
# path: bindings/python/dist
# - name: pytest
# run: |
# set -e
# python3 -m venv .venv
# source .venv/bin/activate
# pip install outlines-core --find-links dist --force-reinstall
# pip install pytest
# pytest
# sdist:
# runs-on: ubuntu-latest
# defaults:
# run:
# working-directory: bindings/python
# steps:
# - uses: actions/checkout@v4
# - name: Build sdist
# uses: PyO3/maturin-action@v1
# with:
# command: sdist
# args: --out dist
# working-directory: bindings/python
# - name: Upload sdist
# uses: actions/upload-artifact@v4
# with:
# name: wheels-sdist
# path: bindings/python/dist
# release:
# name: Release
# runs-on: ubuntu-latest
# if: "startsWith(github.ref, 'refs/tags/')"
# needs: [linux, musllinux, windows, macos, sdist]
# steps:
# - uses: actions/download-artifact@v4
# - name: Publish to PyPI
# uses: PyO3/maturin-action@v1
# env:
# PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
# with:
# command: upload
# args: --non-interactive --skip-existing wheels-*/*