Skip to content

Add CI test workflow #2

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
146 changes: 146 additions & 0 deletions .github/workflows/test-python.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
name: Test Python
on: [workflow_dispatch, push, pull_request]

permissions: {}

jobs:
build-manylinux_2_28-x86_64-wheels:
name: "Build and test Manylinux 2.28 x86_64 wheels"
runs-on: ubuntu-24.04
container:
image: quay.io/pypa/manylinux_2_28_x86_64
env:
PLAT: manylinux_2_28_x86_64
PYBIN: "/opt/python/${{ matrix.python }}/bin"

strategy:
matrix:
python:
- cp313-cp313
steps:
- name: "Checkout"
uses: actions/checkout@v4
with:
submodules: true
persist-credentials: false

- name: "Install Rust 1.84.1"
uses: actions-rs/toolchain@v1
with:
toolchain: 1.84.1

- name: "Generate bdk.py and binaries"
run: bash ./scripts/generate-linux.sh

- name: "Build wheel"
# Specifying the plat-name argument is necessary to build a wheel with the correct name,
# see issue #350 for more information
run: ${PYBIN}/python setup.py bdist_wheel --plat-name manylinux_2_28_x86_64 --verbose

- name: "Install wheel"
run: ${PYBIN}/pip install ./dist/*.whl

- name: "Run tests"
run: ${PYBIN}/python -m unittest discover --start "./tests/" --pattern "test_offline_*.py" --verbose

- name: "Upload artifact test"
uses: actions/upload-artifact@v4
with:
name: bdkpython-manylinux_2_28_x86_64-${{ matrix.python }}
path: /home/runner/work/bdkpython/bdkpython/dist/*.whl

build-macos-arm64-wheels:
name: "Build and test macOS arm64 wheels"
runs-on: macos-14

strategy:
matrix:
python:
- "3.13"
steps:
- name: "Checkout"
uses: actions/checkout@v4
with:
submodules: true
persist-credentials: false

- name: "Install Python"
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python }}

- name: "Generate bdk.py and binaries"
run: bash ./scripts/generate-macos-arm64.sh

- name: "Build wheel"
# Specifying the plat-name argument is necessary to build a wheel with the correct name,
# see issue #350 for more information
run: python3 setup.py bdist_wheel --plat-name macosx_11_0_arm64 --verbose

# You can't install the arm64 wheel on the CI, so we skip these steps and simply test that the wheel builds
# The above comment is not true anymore, so let's try running the tests with the code block below
- name: "Install wheel and run tests"
run: |
pip3 install ./dist/*.whl
python3 -m unittest discover --start "./tests/" --pattern "test_offline_*.py" --verbose

- name: "Upload artifact test"
uses: actions/upload-artifact@v4
with:
name: bdkpython-macos-arm64-${{ matrix.python }}
path: /Users/runner/work/bdkpython/bdkpython/dist/*.whl

build-windows-wheels:
name: "Build and test Windows wheels"
runs-on: windows-2022

strategy:
matrix:
python:
- "3.13"
steps:
- name: "Checkout"
uses: actions/checkout@v4
with:
submodules: true
persist-credentials: false

- name: "Install Python"
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python }}

- name: "Generate bdk.py and binaries"
run: bash ./scripts/generate-windows.sh

- name: "Build wheel"
run: python setup.py bdist_wheel --verbose

- name: "Upload artifact test"
uses: actions/upload-artifact@v4
with:
name: bdkpython-windows-${{ matrix.python }}
path: D:\a\bdkpython\bdkpython\dist\*.whl

- name: "Install dependencies"
run: Get-ChildItem 'D:\a\bdk-ffi\bdk-ffi\bdk-python\dist\*.whl' | ForEach-Object {pip install $_.FullName}
shell: powershell

- name: "Run tests"
run: python -m unittest discover --start "./tests/" --pattern "test_offline_*.py" --verbose

ruff:
name: "Lint tests"
runs-on: ubuntu-24.04
steps:
- name: "Checkout"
uses: actions/checkout@v4
with:
submodules: true
persist-credentials: false

- name: "Install Ruff"
run: curl -LsSf https://astral.sh/ruff/install.sh | sh

- name: "Lint test targets"
run: ruff check ./tests/