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