Workflow update #2
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
name: Python | |
on: | |
push: | |
branches: | |
- main | |
release: | |
types: [published] | |
pull_request: | |
branches: | |
- "**" | |
concurrency: | |
# SHA is added to the end if on `main` to let all main workflows run | |
group: ${{ github.ref }}-${{ github.workflow }}-${{ github.event_name }}-${{ (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release/') || startsWith(github.ref, 'refs/heads/long_lived/')) && github.sha || '' }} | |
cancel-in-progress: true | |
permissions: | |
id-token: write | |
contents: read | |
jobs: | |
build-wheel: | |
name: Build wheel (${{ matrix.os.name }} ${{ matrix.python.major-dot-minor }} ${{ matrix.arch.name }}) | |
runs-on: ${{ matrix.os.runs-on[matrix.arch.matrix] }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: | |
- name: macOS | |
matrix: macos | |
runs-on: | |
arm: [macOS, ARM64] | |
intel: [macos-12] | |
- name: Ubuntu | |
matrix: ubuntu | |
runs-on: | |
arm: [Linux, ARM64] | |
intel: [ubuntu-latest] | |
- name: Windows | |
matrix: windows | |
runs-on: | |
intel: [windows-latest] | |
python: | |
- major-dot-minor: "3.8" | |
cibw-build: "cp38-*" | |
by-arch: | |
arm: | |
manylinux-version: 2_28 | |
docker-url: ghcr.io/chia-network/build-images/centos-pypa-rust-aarch64 | |
rustup-target: aarch64-unknown-linux-musl | |
intel: | |
manylinux-version: 2_28 | |
docker-url: ghcr.io/chia-network/build-images/centos-pypa-rust-x86_64 | |
rustup-target: x86_64-unknown-linux-musl | |
matrix: "3.8" | |
- major-dot-minor: "3.9" | |
cibw-build: "cp39-*" | |
by-arch: | |
arm: | |
manylinux-version: 2_28 | |
docker-url: ghcr.io/chia-network/build-images/centos-pypa-rust-aarch64 | |
rustup-target: aarch64-unknown-linux-musl | |
intel: | |
manylinux-version: 2_28 | |
docker-url: ghcr.io/chia-network/build-images/centos-pypa-rust-x86_64 | |
rustup-target: x86_64-unknown-linux-musl | |
matrix: "3.9" | |
- major-dot-minor: "3.10" | |
cibw-build: "cp310-*" | |
by-arch: | |
arm: | |
manylinux-version: 2_28 | |
docker-url: ghcr.io/chia-network/build-images/centos-pypa-rust-aarch64 | |
rustup-target: aarch64-unknown-linux-musl | |
intel: | |
manylinux-version: 2_28 | |
docker-url: ghcr.io/chia-network/build-images/centos-pypa-rust-x86_64 | |
rustup-target: x86_64-unknown-linux-musl | |
matrix: "3.10" | |
- major-dot-minor: "3.11" | |
cibw-build: "cp311-*" | |
by-arch: | |
arm: | |
manylinux-version: 2_28 | |
docker-url: ghcr.io/chia-network/build-images/centos-pypa-rust-aarch64 | |
rustup-target: aarch64-unknown-linux-musl | |
intel: | |
manylinux-version: 2_28 | |
docker-url: ghcr.io/chia-network/build-images/centos-pypa-rust-x86_64 | |
rustup-target: x86_64-unknown-linux-musl | |
matrix: "3.11" | |
- major-dot-minor: "3.12" | |
cibw-build: "cp312-*" | |
by-arch: | |
arm: | |
manylinux-version: 2_28 | |
docker-url: ghcr.io/chia-network/build-images/centos-pypa-rust-aarch64 | |
rustup-target: aarch64-unknown-linux-musl | |
intel: | |
manylinux-version: 2_28 | |
docker-url: ghcr.io/chia-network/build-images/centos-pypa-rust-x86_64 | |
rustup-target: x86_64-unknown-linux-musl | |
matrix: "3.12" | |
arch: | |
- name: ARM | |
matrix: arm | |
- name: Intel | |
matrix: intel | |
exclude: | |
# Only partial entries are required here by GitHub Actions so generally I | |
# only specify the `matrix:` entry. The super linter complains so for now | |
# all entries are included to avoid that. Reported at | |
# https://github.com/github/super-linter/issues/3016 | |
- os: | |
name: Windows | |
matrix: windows | |
runs-on: | |
intel: [windows-latest] | |
arch: | |
name: ARM | |
matrix: arm | |
steps: | |
- name: Clean workspace | |
uses: Chia-Network/actions/clean-workspace@main | |
- uses: actions/checkout@v4 | |
- uses: Chia-Network/actions/setup-python@main | |
with: | |
python-version: ${{ matrix.python.major-dot-minor }} | |
- name: Set up Rust | |
uses: dtolnay/rust-toolchain@stable | |
- name: Install dependencies | |
run: pip install maturin | |
- name: Build MacOS wheel (Python ${{ matrix.python }}) | |
if: matrix.os.matrix == 'macos' | |
env: | |
MACOSX_DEPLOYMENT_TARGET: "11.0" | |
run: | | |
python${{ matrix.python.major-dot-minor }} -m venv venv | |
. venv/bin/activate | |
maturin build -i python --release -m wheel/Cargo.toml | |
- name: Build Linux wheel (Python ${{ matrix.python }}) | |
if: matrix.os.matrix == 'ubuntu' | |
run: | | |
docker run --rm --pull always \ | |
-v ${{ github.workspace }}:/ws --workdir=/ws \ | |
${{ matrix.python.by-arch[matrix.arch.matrix].docker-url }} \ | |
bash -exc '\ | |
yum -y install openssl-devel && \ | |
source $HOME/.cargo/env && \ | |
rustup target add ${{ matrix.python.by-arch[matrix.arch.matrix].rustup-target }} && \ | |
python${{ matrix.python.major-dot-minor }} -m venv /venv && \ | |
. /venv/bin/activate && \ | |
pip install --upgrade pip && \ | |
pip install maturin && \ | |
CC=gcc maturin build --release --manylinux ${{ matrix.python.by-arch[matrix.arch.matrix].manylinux-version }} -m wheel/Cargo.toml \ | |
' | |
- name: Build Windows wheel (Python ${{ matrix.python }}) | |
if: matrix.os.matrix == 'windows' | |
env: | |
CC: "clang" | |
CFLAGS: "-D__BLST_PORTABLE__" | |
run: | | |
py -${{ matrix.python.major-dot-minor }} -m venv venv | |
. .\venv\Scripts\Activate.ps1 | |
maturin build -i python --release -m wheel/Cargo.toml | |
- uses: Chia-Network/actions/create-venv@main | |
id: create-venv | |
- uses: Chia-Network/actions/activate-venv@main | |
with: | |
directories: ${{ steps.create-venv.outputs.activate-venv-directories }} | |
- name: Install wheel | |
run: | | |
pip install --no-index --find-links target/wheels/ chia_rs | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: packages-${{ matrix.os.name }}-${{ matrix.python.major-dot-minor }}-${{ matrix.arch.name }} | |
path: ./target/wheels/ | |
check-typestubs: | |
name: Check chia_rs.pyi | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: Chia-Network/actions/setup-python@main | |
- name: check generated chia_rs.pyi | |
run: | | |
python wheel/generate_type_stubs.py | |
git diff --exit-code | |
build-sdist: | |
name: Build sdist (${{ matrix.os.name }} ${{ matrix.python.major-dot-minor }} ${{ matrix.arch.name }}) | |
runs-on: ${{ matrix.os.runs-on[matrix.arch.matrix] }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: | |
- name: Ubuntu | |
matrix: ubuntu | |
runs-on: | |
arm: [Linux, ARM64] | |
intel: [ubuntu-latest] | |
python: | |
- major-dot-minor: "3.8" | |
matrix: "3.8" | |
arch: | |
- name: Intel | |
matrix: intel | |
steps: | |
- name: Clean workspace | |
uses: Chia-Network/actions/clean-workspace@main | |
- uses: actions/checkout@v4 | |
- uses: Chia-Network/actions/setup-python@main | |
with: | |
python-version: ${{ matrix.python.major-dot-minor }} | |
- name: Build source distribution | |
run: | | |
pip install maturin | |
maturin sdist -m wheel/Cargo.toml | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: packages-sdist-${{ matrix.os.name }}-${{ matrix.python.major-dot-minor }}-${{ matrix.arch.name }} | |
path: ./target/wheels/ | |
lint: | |
name: Lint | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: chia-network/actions/setup-python@main | |
name: Install Python 3.12 | |
with: | |
python-version: 3.12 | |
- name: Install dependencies | |
run: pip install mypy black | |
- name: python mypy | |
run: mypy --ignore-missing-imports tests | |
- name: python black | |
run: | | |
black --check tests | |
black --check wheel/generate_type_stubs.py | |
unit-tests: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [macos-latest, ubuntu-latest, windows-latest] | |
python-version: ["3.8", "3.9", "3.10", "3.11"] | |
name: Tests (${{ matrix.os.name }} ${{ matrix.python-version }}) | |
steps: | |
# The test files are read verbatim, making it problematic if git is | |
# allowed to insert \r when checking out files. | |
- name: Disable git autocrlf | |
run: git config --global core.autocrlf false | |
- uses: actions/checkout@v4 | |
- name: Set up Rust | |
uses: dtolnay/rust-toolchain@stable | |
- name: Pytest | |
if: matrix.os == 'ubuntu-latest' | |
run: | | |
python -m venv venv | |
source venv/bin/activate | |
pip install clvm-tools colorama maturin pytest pytest-xdist chia-blockchain==2.1.2 clvm==0.9.8 | |
maturin develop --release -m wheel/Cargo.toml | |
pytest tests | |
generator-benchmarks: | |
name: Benchmark generators | |
runs-on: benchmark | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: ["3.10", "3.11"] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: chia-network/actions/setup-python@main | |
name: Install Python ${{ matrix.python-version }} | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Set up rust | |
uses: dtolnay/rust-toolchain@stable | |
- name: setup venv | |
run: python -m venv venv | |
- uses: chia-network/actions/activate-venv@main | |
- name: Install dependencies | |
run: pip install maturin colorama clvm_tools | |
- name: Build | |
run: maturin develop --release -m wheel/Cargo.toml | |
- name: test generators | |
run: | | |
cd tests | |
./test-generators.py | |
- name: Run cost checks | |
run: | | |
cd tests | |
./generate-programs.py | |
./run-programs.py | |
upload: | |
name: Upload to PyPI - ${{ matrix.os.name }} ${{ matrix.python.major-dot-minor }} ${{ matrix.arch.name }} | |
runs-on: ${{ matrix.os.runs-on[matrix.arch.matrix] }} | |
needs: | |
- build-wheel | |
- build-sdist | |
- unit-tests | |
- check-typestubs | |
strategy: | |
fail-fast: false | |
matrix: | |
os: | |
- name: Ubuntu | |
matrix: ubuntu | |
runs-on: | |
arm: [Linux, ARM64] | |
intel: [ubuntu-latest] | |
python: | |
- major-dot-minor: "3.9" | |
matrix: "3.9" | |
arch: | |
- name: Intel | |
matrix: intel | |
steps: | |
- name: Clean workspace | |
uses: Chia-Network/actions/clean-workspace@main | |
- uses: actions/checkout@v4 | |
- uses: Chia-Network/actions/setup-python@main | |
with: | |
python-version: ${{ matrix.python.major-dot-minor }} | |
- name: Download artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
merge-multiple: true | |
pattern: packages-* | |
path: ./dist | |
- name: Set Env | |
uses: Chia-Network/actions/setjobenv@main | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: publish (PyPi) | |
if: env.RELEASE == 'true' | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
packages-dir: dist/ | |
skip-existing: true | |
- name: publish (Test PyPi) | |
if: env.PRE_RELEASE == 'true' | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
repository-url: https://test.pypi.org/legacy/ | |
packages-dir: dist/ | |
skip-existing: true |