Skip to content

🚀 pre-release (#66) #286

🚀 pre-release (#66)

🚀 pre-release (#66) #286

name: CI tsdownsample
on:
pull_request: {}
push:
branches:
- main
tags:
- '**'
defaults:
run:
shell: bash
jobs:
Lint_and_Check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install Rust toolchain
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: nightly
components: clippy, rustfmt
- name: Setup Rust
run: |
rustup update nightly --no-self-update
rustup default nightly
- name: Cache rust
uses: Swatinem/rust-cache@v2
- run: pip install -r tests/requirements-linting.txt
- run: pip freeze
- run: make lint # Lint Python & Rust
- run: make mypy # Type check Python
Test:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: ['windows-latest', 'macOS-latest', 'ubuntu-latest']
rust: ['nightly'] # ['stable', 'beta']
python-version: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12']
env:
PYTHON: ${{ matrix.python-version }}
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- run: pip install -r tests/requirements.txt
- name: Install Rust toolchain
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: nightly
components: clippy, rustfmt
- name: Setup Rust
run: |
rustup update nightly --no-self-update
rustup default nightly
- name: Cache rust
uses: Swatinem/rust-cache@v2
- name: install develop version
run: make install
- run: pip install -r tests/requirements.txt
- run: pip freeze
- run: make test # Test Python
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
Build:
# Perhaps smth more in line with this https://github.com/messense/crfs-rs/blob/main/.github/workflows/Python.yml
name: build on ${{ matrix.os }} (${{ matrix.target }} - ${{ matrix.manylinux || 'auto' }})
# only run on push to main and on release
if: "success() && (startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/main' || contains(github.event.pull_request.labels.*.name, 'Full Build'))"
strategy:
fail-fast: false
matrix:
os: [ubuntu, macos, windows]
target: [x86_64, aarch64]
manylinux: [auto]
include:
- os: windows
ls: dir
- os: windows
ls: dir
target: i686
python-architecture: x86
- os: macos
target: aarch64
- os: ubuntu
target: i686
# GCC 4.8.5 in manylinux2014 container doesn't support c11 atomic
# we use manylinux_2_24 container for aarch64 and armv7 targets instead,
- os: ubuntu
target: aarch64
container: messense/manylinux_2_24-cross:aarch64
- os: ubuntu
target: armv7
container: messense/manylinux_2_24-cross:armv7
- os: ubuntu
target: ppc64le
container: messense/manylinux_2_24-cross:ppc64le
- os: ubuntu
target: s390x
container: messense/manylinux_2_24-cross:s390x
# musllinux
- os: ubuntu
target: x86_64
manylinux: musllinux_1_1
- os: ubuntu
target: aarch64
manylinux: musllinux_1_1
exclude:
# this fails
- os: windows
target: aarch64
runs-on: ${{ matrix.os }}-latest
steps:
- uses: actions/checkout@v3
- name: set up python
uses: actions/setup-python@v4
# with:
# python-version: '3.11'
# architecture: ${{ matrix.python-architecture || 'x64' }}
- name: build sdist
if: ${{ matrix.os == 'ubuntu' && matrix.target == 'x86_64' && matrix.manylinux == 'auto' }}
uses: PyO3/maturin-action@v1
with:
command: sdist
args: --out dist
- name: build wheels
uses: PyO3/maturin-action@v1
with:
rust-toolchain: nightly
target: ${{ matrix.target }}
manylinux: ${{ matrix.manylinux || 'auto' }}
container: ${{ matrix.container }}
args: --release --out dist --interpreter ${{ matrix.interpreter || '3.7 3.8 3.9 3.10 3.11 3.12' }}
- run: ${{ matrix.ls || 'ls -lh' }} dist/
- uses: actions/upload-artifact@v3
with:
name: pypi_files
path: dist
Release:
needs: [Lint_and_Check, Test, Build]
if: "success() && startsWith(github.ref, 'refs/tags/')"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: set up python
uses: actions/setup-python@v4
# with:
# python-version: '3.10'
- run: pip install -U twine
- name: get dist artifacts
uses: actions/download-artifact@v3
with:
name: pypi_files
path: dist
- run: twine check dist/*
- name: upload to pypi
run: twine upload dist/*
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.pypi_token }}
# https://github.com/samuelcolvin/rtoml/blob/main/.github/workflows/ci.yml
# https://github.com/messense/rjmespath-py/blob/main/.github/workflows/CI.yml