diff --git a/.github/workflows/publish-pypi.yml b/.github/workflows/publish-pypi.yml new file mode 100644 index 0000000..50d2f51 --- /dev/null +++ b/.github/workflows/publish-pypi.yml @@ -0,0 +1,62 @@ +name: Publish PyPI + +on: + workflow_dispatch: + inputs: + tag: + description: 'Git tag to publish (e.g. v0.1.0-alpha.5)' + required: true + +jobs: + publish: + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - uses: actions/checkout@v4 + with: + ref: refs/tags/${{ inputs.tag }} + + - uses: actions/setup-python@v5 + with: + python-version: '3.12' + + - name: Install twine + run: pip install "twine>=5,<6" + + - name: Download Python artifacts from GitHub release + run: | + mkdir -p dist + gh release download "${{ inputs.tag }}" \ + --pattern 'quicknode_sdk-*.whl' \ + --dir dist + gh release download "${{ inputs.tag }}" \ + --pattern 'quicknode_sdk-*.tar.gz' \ + --dir dist + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Verify required wheels + sdist are present + run: | + wheel_count=$(ls dist/quicknode_sdk-*.whl 2>/dev/null | wc -l) + sdist_count=$(ls dist/quicknode_sdk-*.tar.gz 2>/dev/null | wc -l) + echo "Found $wheel_count wheels and $sdist_count sdist(s)" + if [ "$wheel_count" -ne 16 ]; then + echo "Expected 16 wheels (4 python versions × 4 linux targets), got $wheel_count" + ls -la dist/ + exit 1 + fi + if [ "$sdist_count" -ne 1 ]; then + echo "Expected 1 sdist, got $sdist_count" + ls -la dist/ + exit 1 + fi + + - name: Check distributions with twine + run: twine check dist/* + + - name: Publish to PyPI + env: + TWINE_USERNAME: __token__ + TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }} + run: twine upload --non-interactive dist/* diff --git a/crates/python/pyproject.toml b/crates/python/pyproject.toml index a067af1..6fe7df3 100644 --- a/crates/python/pyproject.toml +++ b/crates/python/pyproject.toml @@ -1,5 +1,5 @@ [project] -name = "sdk" +name = "quicknode-sdk" [tool.maturin] module-name = "sdk._core" diff --git a/pyproject.toml b/pyproject.toml index 0ebfd1e..297df8f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,12 +3,31 @@ requires = ["maturin>=1.5,<2.0"] build-backend = "maturin" [project] -name = "sdk" -version = "0.1.0" +name = "quicknode-sdk" +version = "0.1.0a6" description = "Quicknode SDK" readme = "README.md" -requires-python = ">=3.8" +requires-python = ">=3.11" license = { text = "MIT" } +authors = [{ name = "John Mitsch", email = "john@quicknode.com" }] +keywords = ["quicknode", "blockchain", "sdk", "web3", "ethereum", "solana"] +classifiers = [ + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Operating System :: POSIX :: Linux", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Rust", + "Topic :: Software Development :: Libraries :: Python Modules", +] + +[project.urls] +Homepage = "https://github.com/quiknode-labs/sdk" +Repository = "https://github.com/quiknode-labs/sdk" +Issues = "https://github.com/quiknode-labs/sdk/issues" [tool.maturin] manifest-path = "crates/python/Cargo.toml" diff --git a/uv.lock b/uv.lock index 778b372..1c7dd82 100644 --- a/uv.lock +++ b/uv.lock @@ -1,8 +1,8 @@ version = 1 revision = 3 -requires-python = ">=3.8" +requires-python = ">=3.11" [[package]] -name = "sdk" -version = "0.1.0" +name = "quicknode-sdk" +version = "0.1.0a6" source = { editable = "." }