Publish nostr-protocol to PyPI #65
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Publish nostr-protocol to PyPI | |
on: | |
workflow_dispatch: | |
inputs: | |
dry-run: | |
description: "Compile without publish to PyPI" | |
type: boolean | |
default: false | |
required: true | |
jobs: | |
build-linux-x86_64: | |
name: "Build manylinux_2_28_x86_64 wheel" | |
runs-on: ubuntu-20.04 | |
strategy: | |
matrix: | |
python: | |
- cp39-cp39 | |
- cp310-cp310 | |
- cp311-cp311 | |
- cp312-cp312 | |
defaults: | |
run: | |
working-directory: bindings/nostr-ffi/bindings-python | |
container: | |
image: quay.io/pypa/manylinux_2_28_x86_64 | |
env: | |
PYBIN: "/opt/python/${{ matrix.python }}/bin" | |
steps: | |
- name: "Checkout" | |
uses: actions/checkout@v3 | |
# Needed because inside container | |
- name: "Setup Rust" | |
uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: stable | |
- name: "Generate nostr.py and binaries" | |
run: bash ./scripts/generate-linux-x86_64.sh | |
- name: "Build wheel" | |
run: ${PYBIN}/python setup.py bdist_wheel --plat-name manylinux_2_28_x86_64 --verbose | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: nostr_protocol-manylinux_2_28_x86_64-${{ matrix.python }} | |
path: /home/runner/work/nostr/nostr/bindings/nostr-ffi/bindings-python/dist/*.whl | |
build-linux-aarch64: | |
name: "Build manylinux_2_31 aarch64 wheel" | |
runs-on: ubuntu-20.04 | |
strategy: | |
matrix: | |
python: ["3.9", "3.10", "3.11", "3.12"] | |
defaults: | |
run: | |
working-directory: bindings/nostr-ffi/bindings-python | |
steps: | |
- name: "Checkout" | |
uses: actions/checkout@v3 | |
- name: "Setup Python" | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python }} | |
- name: Install gcc-aarch64-linux-gnu | |
run: | | |
sudo apt-get update -y | |
sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu | |
- name: "Generate nostr.py and binaries" | |
run: bash ./scripts/generate-linux-aarch64.sh | |
- name: "Build wheel" | |
run: python3 setup.py bdist_wheel --plat-name manylinux_2_31_aarch64 --verbose | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: nostr_protocol-manylinux_2_31_aarch64-${{ matrix.python }} | |
path: /home/runner/work/nostr/nostr/bindings/nostr-ffi/bindings-python/dist/*.whl | |
build-macos-arm64: | |
name: "Build macOS arm64 wheel" | |
runs-on: macos-13 | |
defaults: | |
run: | |
working-directory: bindings/nostr-ffi/bindings-python | |
strategy: | |
matrix: | |
python: ["3.9", "3.10", "3.11", "3.12"] | |
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 nostr.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@v4 | |
with: | |
name: nostr_protocol-macos-arm64-${{ matrix.python }} | |
path: /Users/runner/work/nostr/nostr/bindings/nostr-ffi/bindings-python/dist/*.whl | |
build-macos-x86_64: | |
name: "Build macOS x86_64 wheel" | |
runs-on: macos-13 | |
defaults: | |
run: | |
working-directory: bindings/nostr-ffi/bindings-python | |
strategy: | |
matrix: | |
python: ["3.9", "3.10", "3.11", "3.12"] | |
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 nostr.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@v4 | |
with: | |
name: nostr_protocol-macos-x86_64-${{ matrix.python }} | |
path: /Users/runner/work/nostr/nostr/bindings/nostr-ffi/bindings-python/dist/*.whl | |
build-windows: | |
name: "Build Windows wheel" | |
runs-on: windows-2022 | |
defaults: | |
run: | |
working-directory: bindings/nostr-ffi/bindings-python | |
strategy: | |
matrix: | |
python: ["3.9", "3.10", "3.11", "3.12"] | |
steps: | |
- name: "Checkout" | |
uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python }} | |
- name: "Generate nostr.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@v4 | |
with: | |
name: nostr_protocol-win-${{ matrix.python }} | |
path: D:\a\nostr\nostr\bindings\nostr-ffi\bindings-python\dist\*.whl | |
publish-pypi: | |
name: "Publish on PyPI" | |
runs-on: ubuntu-20.04 | |
defaults: | |
run: | |
working-directory: bindings/nostr-ffi/bindings-python | |
needs: [build-linux-x86_64, build-linux-aarch64, build-macos-arm64, build-macos-x86_64, build-windows] | |
if: github.event.inputs.dry-run == 'false' | |
steps: | |
- name: "Checkout" | |
uses: actions/checkout@v3 | |
- name: "Download artifacts in dist/ directory" | |
uses: actions/download-artifact@v4 | |
with: | |
path: dist/ | |
- name: "Publish on PyPI" | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
user: __token__ | |
password: ${{ secrets.PYPI_API_TOKEN }} | |
packages-dir: dist/*/ |