diff --git a/.github/workflows/test-bdk-ffi-latest.yaml b/.github/workflows/test-bdk-ffi-latest.yaml new file mode 100644 index 0000000..3a628b1 --- /dev/null +++ b/.github/workflows/test-bdk-ffi-latest.yaml @@ -0,0 +1,259 @@ +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: "Setup Rust" + uses: actions-rust-lang/setup-rust-toolchain@v1.15.0 + with: + toolchain: 1.85.1 + + - 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 + + 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 + + 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 + + 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: "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/ \ No newline at end of file