name: Publish to PyPI on: release: types: [published] workflow_dispatch: inputs: version: description: 'Version to publish (e.g., 2.0.8)' required: true jobs: build: name: Build Wheel runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install Rust toolchain uses: dtolnay/rust-toolchain@stable - name: Install Python (for PyO3) uses: actions/setup-python@v5 with: python-version: "3.12" - name: Cache cargo registry uses: actions/cache@v4 with: path: | ~/.cargo/registry ~/.cargo/git target key: ${{ runner.os }}-publish-${{ hashFiles('**/Cargo.lock') }} restore-keys: | ${{ runner.os }}-publish- - name: Install maturin run: pip install maturin - name: Build wheel run: maturin build --release -m crates/justapi-py/Cargo.toml -o wheels/ - name: Verify wheel run: | pip install wheels/*.whl --break-system-packages python -c "import justapi; print(f'JustAPI installed successfully')" - name: Upload wheel artifact uses: actions/upload-artifact@v4 with: name: wheels path: wheels/*.whl publish-pypi: name: Publish to PyPI runs-on: ubuntu-latest needs: [build] environment: pypi permissions: id-token: write steps: - name: Download wheel artifact uses: actions/download-artifact@v4 with: name: wheels path: wheels/ - name: Publish to PyPI uses: pypa/gh-action-pypi-publish@release/v1 with: packages-dir: wheels/ create-github-release: name: Create GitHub Release runs-on: ubuntu-latest needs: [publish-pypi] permissions: contents: write steps: - uses: actions/checkout@v4 - name: Download wheel artifact uses: actions/download-artifact@v4 with: name: wheels path: wheels/ - name: Create GitHub Release uses: softprops/action-gh-release@v2 with: files: wheels/*.whl generate_release_notes: true