Skip to content
Merged
Changes from 5 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
283 changes: 283 additions & 0 deletions .github/workflows/test-bdk-ffi-latest.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,283 @@
name: Test on BDK-FFI Latest Commit

on:
workflow_dispatch:
repository_dispatch:
types: [ trigger-bdk-python-test ]

permissions: {}

jobs:
test-bdk-ffi-latest-manylinux_2_28-x86_64-wheels:
name: "Build and run unittest on Manylinux 2.28 x86_64 wheels against the latest commit on bdk-ffi"
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:
- cp310-cp310
- cp311-cp311
- cp312-cp312
- cp313-cp313
steps:
- name: "Checkout"
uses: actions/checkout@v4
with:
submodules: recursive
persist-credentials: false
fetch-depth: 0

- name: "Configure Git safe directory"
run: git config --global --add safe.directory /__w/bdk-python/bdk-python

- name: "Update bdk-ffi submodule to latest"
run: |
cd ./bdk-ffi/ \
&& git fetch origin \
&& git checkout master \
&& git pull origin master \
&& echo "Testing commit: $(git log -1 --pretty=format:'%h %s (author: %cn)')"

- name: "Cache"
uses: actions/cache@v3
with:
path: |
~/.cargo/registry
~/.cargo/git
./target
key: ${{ runner.os }}-${{ hashFiles('**/Cargo.toml','**/Cargo.lock') }}

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

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is an old and deprecated action. You can instead use

- name: "Set up Rust"
  uses: actions-rust-lang/setup-rust-toolchain@v1

which should automatically pick up the rust-toolchain.toml file and grab our desired compiler version.

Copy link
Contributor Author

@mg-twentyone mg-twentyone Oct 2, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a valid alternative. However, at the moment the library has an issue in handling the rust_src_dir flag, which we need to specify the path where to find the toml file (inside the submodule).
I created a PR to fix it. While waiting for the fix, we can use it setting a static toolchain version value.


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

- name: "Install build"
run: ${PYBIN}/pip install build

- name: "Build wheel"
run: ${PYBIN}/python -m build --wheel --config-setting=--build-option=--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/bdk-python/bdk-python/dist/*.whl

test-bdk-ffi-latest-macos-arm64-wheels:
name: "Build and run unittest on macOS arm64 wheels against the latest commit on bdk-ffi"
runs-on: macos-14
strategy:
matrix:
python:
- "3.10"
- "3.11"
- "3.12"
- "3.13"
steps:
- name: "Checkout"
uses: actions/checkout@v4
with:
submodules: recursive
persist-credentials: false
fetch-depth: 0

- name: "Update bdk-ffi submodule to latest"
run: |
cd ./bdk-ffi/ \
&& git fetch origin \
&& git checkout master \
&& git pull origin master \
&& echo "Testing commit: $(git log -1 --pretty=format:'%h %s (author: %cn)')"

- name: "Cache"
uses: actions/cache@v3
with:
path: |
~/.cargo/registry
~/.cargo/git
./target
key: ${{ runner.os }}-${{ hashFiles('**/Cargo.toml','**/Cargo.lock') }}

- 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: "Install build"
run: pip3 install build

- 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 -m build --wheel --config-setting=--build-option=--plat-name=macosx_11_0_arm64 --verbose

- name: "Install wheel"
run: pip3 install ./dist/*.whl

- name: "Run tests"
run: 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/bdk-python/bdk-python/dist/*.whl

test-bdk-ffi-latest-macos-x86_64-wheels:
name: "Build and run unittest on macOS x86_64 wheels against the latest commit on bdk-ffi"
runs-on: macos-15-intel
strategy:
matrix:
python:
- "3.10"
- "3.11"
- "3.12"
- "3.13"
steps:
- name: "Checkout"
uses: actions/checkout@v4
with:
submodules: recursive
persist-credentials: false
fetch-depth: 0

- name: "Update bdk-ffi submodule to latest"
run: |
cd ./bdk-ffi/ \
&& git fetch origin \
&& git checkout master \
&& git pull origin master \
&& echo "Testing commit: $(git log -1 --pretty=format:'%h %s (author: %cn)')"

- name: "Cache"
uses: actions/cache@v3
with:
path: |
~/.cargo/registry
~/.cargo/git
./target
key: ${{ runner.os }}-${{ hashFiles('**/Cargo.toml','**/Cargo.lock') }}

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

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

- name: "Install build"
run: pip3 install build

- name: "Build wheel"
run: python3 -m build --wheel --config-setting=--build-option=--plat-name=macosx_11_0_x86_64 --verbose

- name: "Install wheel"
run: pip3 install ./dist/*.whl

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

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

test-bdk-ffi-latest-windows-wheels:
name: "Build and run unittest on Windows wheels against the latest commit on bdk-ffi"
runs-on: windows-2022
strategy:
matrix:
python:
- "3.10"
- "3.11"
- "3.12"
- "3.13"
steps:
- name: "Checkout"
uses: actions/checkout@v4
with:
submodules: recursive
persist-credentials: false
fetch-depth: 0

- name: "Update bdk-ffi submodule to latest"
run: |
cd ./bdk-ffi/;
git fetch origin;
git checkout master;
git pull origin master;
echo "Testing commit: $(git log -1 --pretty=format:'%h %s (author: %cn)')"

- name: "Cache"
uses: actions/cache@v3
with:
path: |
~/.cargo/registry
~/.cargo/git
./target
key: ${{ runner.os }}-${{ hashFiles('**/Cargo.toml','**/Cargo.lock') }}

- 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: "Install build"
run: pip install build

- name: "Build wheel"
run: python -m build --wheel --verbose

- name: "Upload artifact test"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure we need to upload these artifacts for the jobs. Did you have a use for them in mind?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My initial idea was to reuse the built wheel distributions, sharing them with the publishing workflow that could exclusively handle the upload.
However, currently, the publish workflow executes the build (I assume the publication is managed manually), so right now it’s useless, we can eliminate the artifacts’ upload from this workflow.

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

- name: "Install dependencies"
run: Get-ChildItem 'D:\a\bdk-python\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: recursive
persist-credentials: false
fetch-depth: 0

- name: "Configure Git safe directory"
run: git config --global --add safe.directory /__w/bdk-python/bdk-python

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

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