name: CI
on:
release:
types: [created]
push:
schedule:
- cron: "20 23 * * 4"
jobs:
lint:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v1
- name: Install latest nightly
uses: actions-rs/toolchain@v1
with:
toolchain: nightly
override: true
- name: Lint with rustfmt
uses: actions-rs/cargo@v1
with:
command: fmt
- name: Lint with clippy
uses: actions-rs/cargo@v1
with:
command: clippy
args: --all-targets --all-features
- name: Test with cargo
uses: actions-rs/cargo@v1.0.1
with:
command: test
toolchain: nightly
build:
runs-on: ${{ matrix.os }}
needs: lint
strategy:
fail-fast: false
matrix:
python-version: [3.5, 3.6, 3.7, 3.8]
os: [ubuntu-latest, macos-latest, windows-latest]
exclude:
- os: windows-latest
python-version: 3.5
steps:
- name: Checkout
uses: actions/checkout@v1
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v1
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install poetry
poetry install
- name: Install latest nightly
uses: actions-rs/toolchain@v1
with:
toolchain: nightly
override: true
- name: Build Python package
run: poetry run maturin develop --release
- name: pytest
run: poetry run pytest tests
- name: Benchmark
run: poetry run pytest benchmarks --compare
rust-publish:
if: startsWith(github.ref, 'refs/tags/')
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions-rs/toolchain@v1
with:
toolchain: nightly
override: true
- name: Publish on crates.io
run: |
cargo login ${{ secrets.CARGO }}
cargo publish
python-publish:
needs: build
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
python-version: [3.5, 3.6, 3.7, 3.8]
os: [ubuntu-latest, macos-latest, windows-latest]
exclude:
- os: windows-latest
python-version: 3.5
steps:
- uses: actions/checkout@v1
- uses: actions/setup-python@v1
with:
python-version: ${{ matrix.python-version }}
- name: Install latest nightly
uses: actions-rs/toolchain@v1
with:
toolchain: nightly
override: true
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install poetry
poetry install
- name: Build Python package
run: poetry run maturin build --release --no-sdist --strip --interpreter python${{matrix.python_version}}
- name: List wheels
if: matrix.os == 'windows-latest'
run: dir target\wheels\
- name: List wheels
if: matrix.os != 'windows-latest'
run: find ./target/wheels/
- name: Install wheels
if: matrix.os == 'windows-latest'
run: pip install --find-links=target\wheels hyperjson
- name: Install wheels
if: matrix.os != 'windows-latest'
run: pip install target/wheels/hyperjson*.whl
- name: Release
uses: softprops/action-gh-release@v1
if: startsWith(github.ref, 'refs/tags/')
with:
files: target/wheels/hyperjson*.whl
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: PyPi publish
if: startsWith(github.ref, 'refs/tags/')
env:
MATURIN_PASSWORD: ${{ secrets.PYPI }}
run: poetry run maturin publish --username __token__