name: Publish bdkpython to 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-wheels: name: "Build Manylinux 2014 x86_64 wheel" runs-on: ubuntu-20.04 defaults: run: working-directory: bdk-python 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/) - cp38-cp38 - cp39-cp39 - cp310-cp310 steps: - name: "Checkout" uses: actions/checkout@v3 with: submodules: true # TODO 2: Other CI workflows use explicit Rust compiler versions, I think we should do the same here - uses: actions-rs/toolchain@v1 with: toolchain: stable - 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_17_x86_64 --verbose - uses: actions/upload-artifact@v3 with: name: bdkpython-manylinux2014-x86_64-${{ matrix.python }} path: /home/runner/work/bdk-ffi/bdk-ffi/bdk-python/dist/*.whl build-macos-arm64-wheels: name: "Build macOS arm64 wheel" runs-on: macos-13 defaults: run: working-directory: bdk-python strategy: matrix: python: - "3.8" - "3.9" - "3.10" steps: - name: "Checkout" uses: actions/checkout@v3 with: submodules: true - 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 - name: "Upload artifacts" uses: actions/upload-artifact@v3 with: name: bdkpython-macos-arm64-${{ matrix.python }} path: /Users/runner/work/bdk-ffi/bdk-ffi/bdk-python/dist/*.whl build-macos-x86_64-wheels: name: "Build macOS x86_64 wheel" runs-on: macos-13 defaults: run: working-directory: bdk-python strategy: matrix: python: - "3.8" - "3.9" - "3.10" steps: - name: "Checkout" uses: actions/checkout@v3 with: submodules: true - name: "Install Python" 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: "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_x86_64 --verbose - uses: actions/upload-artifact@v3 with: name: bdkpython-macos-x86_64-${{ matrix.python }} path: /Users/runner/work/bdk-ffi/bdk-ffi/bdk-python/dist/*.whl build-windows-wheels: name: "Build Windows wheel" runs-on: windows-2022 defaults: run: working-directory: bdk-python strategy: matrix: python: - "3.8" - "3.9" - "3.10" steps: - name: "Checkout" uses: actions/checkout@v3 with: submodules: true - 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 artifacts" uses: actions/upload-artifact@v3 with: name: bdkpython-win-${{ matrix.python }} path: D:\a\bdk-ffi\bdk-ffi\bdk-python\dist\*.whl publish-pypi: name: "Publish on PyPI" runs-on: ubuntu-20.04 defaults: run: working-directory: bdk-python needs: [build-manylinux2014-x86_64-wheels, build-macos-arm64-wheels, build-macos-x86_64-wheels, build-windows-wheels] steps: - name: "Checkout" uses: actions/checkout@v3 - name: "Download artifacts in dist/ directory" uses: actions/download-artifact@v3 with: path: dist/ # - 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/*/