Skip to content
This repository has been archived by the owner on Sep 14, 2023. It is now read-only.

CI

CI #305

Workflow file for this run

name: CI
on:
release:
types: [created]
push:
schedule:
# Runs every Thursday at 20:23 GMT to avoid bit rot
- 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
components: rustfmt, clippy
- 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, 3.9]
os: [ubuntu-latest, macos-latest, windows-latest]
exclude:
# There is a known issue where Python C extensions
# can not be built on Python 3.5 on Windows.
# https://github.com/actions/virtual-environments/issues/34
# Therefore, ujson can't be compiled and the build would fail.
- 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
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python
- name: Add poetry to path
if: matrix.os != 'windows-latest'
run: echo "${HOME}/.poetry/bin" >> $GITHUB_PATH
- name: Add poetry to path
if: matrix.os == 'windows-latest'
run: echo "${HOME}/.poetry/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
- name: Install package deps
run: |
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, 3.9]
os: [ubuntu-latest, macos-latest, windows-latest]
exclude:
# There is a known issue where Python C extensions
# can not be built on Python 3.5 on Windows.
# https://github.com/actions/virtual-environments/issues/34
# Therefore, ujson can't be compiled and the build would fail.
- 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/
# Note: Windows doesn't support glob
# https://stackoverflow.com/a/52481267/270334
- 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: github.event_name == 'release' && github.event.action == 'created'
env:
MATURIN_PASSWORD: ${{ secrets.PYPI }}
run: poetry run maturin publish --username __token__