diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 24c75c7..e4e8293 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,5 +1,5 @@ +name: Build wheels on: [push, pull_request] -name: Build and publish wheels # We use manylinux2014 because older CentOS versions used by 2010 and 1 have a very old glibc version, which # makes it very hard to use GitHub's javascript actions (checkout, upload-artifact, etc). @@ -107,36 +107,3 @@ jobs: with: name: bdkpython-win-${{ matrix.python }} path: dist/*.whl - - publish-pypi: - name: 'Publish on PyPI' - if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') - runs-on: ubuntu-latest - needs: [build-manylinux2014-x86_64-wheel, build-macos-universal-wheel, build-windows-wheel] - # needs: [build-macos-universal-wheel] - steps: - - name: Checkout - uses: actions/checkout@v2 - - - name: 'Download artifacts in dist/ directory' - uses: actions/download-artifact@v2 - with: - path: dist/ - - # - name: Display structure of downloaded files - # run: ls -R - - # - name: 'Publish on test PyPI' - # uses: pypa/gh-action-pypi-publish@release/v1 - # with: - # user: __token__ - # password: ${{ secrets.TEST_PYPI_API_TOKEN }} - # repository_url: https://test.pypi.org/legacy/ - # packages_dir: dist/*/ - - - name: 'Publish on PyPI' - uses: pypa/gh-action-pypi-publish@release/v1 - with: - user: __token__ - password: ${{ secrets.PYPI_API_TOKEN }} - packages_dir: dist/*/ \ No newline at end of file diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..aeb16e6 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,141 @@ +name: Build and publish wheels on PyPI +on: [workflow_dispatch] + +# We use manylinux2014 because older CentOS versions used by 2010 and 1 have a very old glibc version, which +# makes it very hard to use GitHub's javascript actions (checkout, upload-artifact, etc). +# They mount their own nodejs interpreter inside your container, but since that's not statically linked it +# tries to load glibc and fails because it requires a more recent version. + +jobs: + build-manylinux2014-x86_64-wheel: + name: 'Build Manylinux 2014 x86_64 wheel' + runs-on: ubuntu-latest + container: + image: quay.io/pypa/manylinux2014_x86_64 + env: + PLAT: manylinux2014_x86_64 + PYBIN: '/opt/python/${{ matrix.python }}/bin' + strategy: + matrix: + python: # Update this list whenever the docker image is updated (check /opt/python/) + - cp36-cp36m + - cp37-cp37m + - cp38-cp38 + - cp39-cp39 + - cp310-cp310 + - pp37-pypy37_pp73 + - pp38-pypy38_pp73 + steps: + - name: checkout + uses: actions/checkout@v2 + with: + submodules: true + - uses: actions-rs/toolchain@v1 + with: + toolchain: stable + - name: install requirements + run: ${PYBIN}/pip install -r requirements.txt + - name: generate bindings + run: bash generate.sh + - name: build wheel + run: ${PYBIN}/pip wheel . --no-deps -w /tmp/wheelhouse + - name: repair wheel + run: auditwheel repair /tmp/wheelhouse/* --plat "$PLAT" -w /tmp/wheelhouse-repaired + - uses: actions/upload-artifact@v2 + with: + name: bdkpython-manylinux2014-x86_64-${{ matrix.python }} + path: /tmp/wheelhouse-repaired/*.whl + + build-macos-universal-wheel: + name: 'Build macOS universal wheel' + runs-on: macos-latest + strategy: + matrix: + python: + - '3.7' + - '3.8' + - '3.9' + - '3.10' + steps: + - uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python }} + - run: python3 --version + - name: checkout + uses: actions/checkout@v2 + with: + submodules: true + - run: rustup target add aarch64-apple-darwin + - run: pip3 install --user -r requirements.txt + - run: pip3 install --user wheel + - run: bash generate.sh + - name: build wheel + env: + ARCHFLAGS: "-arch x86_64 -arch arm64" + run: python3 setup.py -v bdist_wheel + - uses: actions/upload-artifact@v2 + with: + name: bdkpython-macos-${{ matrix.python }} + path: dist/*.whl + + build-windows-wheel: + name: 'Build windows wheel' + runs-on: windows-latest + strategy: + matrix: + python: + - '3.7' + - '3.8' + - '3.9' + - '3.10' + steps: + - uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python }} + - run: python --version + - name: checkout + uses: actions/checkout@v2 + with: + submodules: true + - run: pip install --user -r requirements.txt + - run: ./generate.sh + shell: bash + - run: pip install --user wheel + - name: build wheel + run: python setup.py -v bdist_wheel + - uses: actions/upload-artifact@v2 + with: + name: bdkpython-win-${{ matrix.python }} + path: dist/*.whl + + publish-pypi: + name: 'Publish on PyPI' + runs-on: ubuntu-latest + needs: [build-manylinux2014-x86_64-wheel, build-macos-universal-wheel, build-windows-wheel] + # needs: [build-macos-universal-wheel] + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: 'Download artifacts in dist/ directory' + uses: actions/download-artifact@v2 + with: + path: dist/ + + # - name: Display structure of downloaded files + # run: ls -R + + # - name: 'Publish on test PyPI' + # uses: pypa/gh-action-pypi-publish@release/v1 + # with: + # user: __token__ + # password: ${{ secrets.TEST_PYPI_API_TOKEN }} + # repository_url: https://test.pypi.org/legacy/ + # packages_dir: dist/*/ + + - name: 'Publish on PyPI' + uses: pypa/gh-action-pypi-publish@release/v1 + with: + user: __token__ + password: ${{ secrets.PYPI_API_TOKEN }} + packages_dir: dist/*/ \ No newline at end of file diff --git a/.gitignore b/.gitignore index 511e251..726b07a 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ libbdkffi.dylib *.swp src/bdkpython/bdk.py +src/bdkpython/*.so *.whl build/ diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index a263f19..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,37 +0,0 @@ -# Changelog -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog], and this project adheres to [Semantic Versioning]. - -## [Unreleased] - -## [0.0.5-0.1.0] -### Added -- Community related files (bug report, feature request, and pull request templates) -- Changelog -- MIT and Apache 2.0 licenses -- Update BDK to version `0.19.0` -- Add `BumpFeeTxBuilder` to bump the fee on an unconfirmed tx created by the Wallet -- Add `Blockchain.broadcast` function (does not return anything) -- Add TxBuilder for creating new spending `PartiallySignedBitcoinTransaction` -- Add TxBuilder `add_recipient`, `fee_rate`, and `finish` functions -- Add TxBuilder `drain_wallet` and `drain_to` functions -- Update generate cli tool to generate all binding languages and rename to bdk-ffi-bindgen -- Add sqlite database support -- Fix memory database configuration enum, remove junk field -- Remove hard coded sync progress value (was always returning 21.0) - -## [0.0.1-0.0.5] -### Added -- Readme -- Rust binary to build -- CI workflow for tessting PRs -- Publishing workflow using GitHub Actions -- Basic examples -- Release on PyPI - -[Keep a Changelog]: https://keepachangelog.com/en/1.0.0/ -[Semantic Versioning]: https://semver.org/spec/v2.0.0.html -[unreleased]: https://github.com/bitcoindevkit/bdk-python/compare/v0.0.5...HEAD -[0.0.1-0.0.5]: https://github.com/bitcoindevkit/bdk-python/compare/58f189f987cc644a1d86e965623c8f50904588ad...v0.0.5 -[0.0.5-0.1.0]: https://github.com/bitcoindevkit/bdk-python/compare/v0.0.5...v0.1.0 \ No newline at end of file diff --git a/README.md b/README.md index 96ad34b..5d55c92 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,11 @@ # bdk-python + +⚠️⚠️ The code in this repository has been moved to [bdk-ffi](https://github.com/bitcoindevkit/bdk-ffi), and development is continuing there. This repository is now considered an archive, and will not accept new pull requests or issues. ⚠️⚠️ + +
+
+
+ The Python language bindings for the [bitcoindevkit](https://github.com/bitcoindevkit). See the [package on PyPI](https://pypi.org/project/bdkpython/). @@ -23,7 +30,7 @@ python -m unittest --verbose tests/test_bdk.py ## Build the package ```shell -# Install dependecies +# Install dependencies pip install --requirement requirements.txt # Generate the bindings first @@ -34,6 +41,19 @@ python3 setup.py --verbose bdist_wheel ```
+## Run tox to build and test locally +```shell +# install dev requirements +pip install --requirement requirements-dev.txt + +# build bindings glue code (located at ./src/bdkpython/bdk.py) +source ./generate.sh + +# build and test +tox -vv +``` +
+ ## Install locally ```shell pip install ./dist/bdkpython--py3-none-any.whl diff --git a/bdk-ffi b/bdk-ffi index 80ed21e..0648075 160000 --- a/bdk-ffi +++ b/bdk-ffi @@ -1 +1 @@ -Subproject commit 80ed21e4c9e61d6224e074258229a4d6da6cc049 +Subproject commit 0648075555b86365e2408fab484782a2b793b545 diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..2012f16 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,7 @@ +[build-system] +requires = ["setuptools", "wheel", "setuptools-rust"] + +[tool.pytest.ini_options] +pythonpath = [ + "." +] \ No newline at end of file diff --git a/requirements-dev.txt b/requirements-dev.txt new file mode 100644 index 0000000..b95a8a8 --- /dev/null +++ b/requirements-dev.txt @@ -0,0 +1,2 @@ +pytest==7.1.2 +tox==3.25.1 diff --git a/setup.py b/setup.py index 25e6e03..8462a6a 100644 --- a/setup.py +++ b/setup.py @@ -48,19 +48,19 @@ # print wallet balance wallet.sync(blockchain, None) balance = wallet.get_balance() -print(f"Wallet balance is: {balance}") +print(f"Wallet balance is: {balance.total}") """ rust_ext = RustExtension( - "bdkpython.bdkffi", + target="bdkpython.bdkffi", path="./bdk-ffi/Cargo.toml", binding=Binding.NoBinding, ) setup( name='bdkpython', - version='0.2.0.dev0', - description="The Python language bindings for the Bitcoin Dev Kit", + version='0.6.0.dev0', + description="The Python language bindings for the Bitcoin Development Kit", long_description=LONG_DESCRIPTION, long_description_content_type='text/markdown', rust_extensions=[rust_ext], diff --git a/tests/test_bdk.py b/tests/test_bdk.py index b667b30..e546592 100644 --- a/tests/test_bdk.py +++ b/tests/test_bdk.py @@ -38,8 +38,8 @@ def test_wallet_balance(self): ) wallet.sync(blockchain, None) balance = wallet.get_balance() - # print(f"Balance is {balance} sat") - assert balance > 0, "Balance is 0, send testnet coins to tb1qzg4mckdh50nwdm9hkzq06528rsu73hjxxzem3e" + # print(f"Balance is {balance.total} sat") + assert balance.total > 0, "Balance is 0, send testnet coins to tb1qzg4mckdh50nwdm9hkzq06528rsu73hjxxzem3e" if __name__ == '__main__': diff --git a/tox.ini b/tox.ini index 95f6045..c01a149 100644 --- a/tox.ini +++ b/tox.ini @@ -1,10 +1,16 @@ [tox] envlist = + py38 py39 + [testenv] -deps = - pytest - bdk +usedevelop=true +deps = + -rrequirements.txt + -rrequirements-dev.txt commands = + python3 setup.py -v build + python3 setup.py -v install pytest --verbose --override-ini console_output_style=count + python3 setup.py --verbose bdist_wheel