From 7f05f8970c2a3648af8d1220c8e159c47da33c16 Mon Sep 17 00:00:00 2001 From: Brendan Collins Date: Sat, 21 Feb 2026 21:39:06 -0800 Subject: [PATCH] replace build_wheels with release workflow using PYPI_TOKEN - Publish to PyPI using PYPI_TOKEN secret instead of trusted publishing - Create GitHub Release with auto-generated release notes - Attach wheel and sdist to the release --- .../{build_wheels.yml => release.yml} | 96 +++++++------------ 1 file changed, 36 insertions(+), 60 deletions(-) rename .github/workflows/{build_wheels.yml => release.yml} (50%) diff --git a/.github/workflows/build_wheels.yml b/.github/workflows/release.yml similarity index 50% rename from .github/workflows/build_wheels.yml rename to .github/workflows/release.yml index c73507b..7faa005 100644 --- a/.github/workflows/build_wheels.yml +++ b/.github/workflows/release.yml @@ -1,4 +1,4 @@ -name: Build and Publish +name: Release on: push: @@ -28,30 +28,17 @@ jobs: python -m pip install build twine - name: Build wheel and sdist - run: | - python -m build + run: python -m build - name: Check distributions - run: | - twine check dist/* - - - name: List built files - run: | - ls -la dist/ - - - name: Upload wheel artifact - uses: actions/upload-artifact@v4 - with: - name: wheel - path: dist/*.whl + run: twine check dist/* - - name: Upload sdist artifact + - name: Upload dist artifacts uses: actions/upload-artifact@v4 with: - name: sdist - path: dist/*.tar.gz + name: dist + path: dist/ - # Optional: test the built wheel installs correctly test-wheel: name: Test wheel installation needs: build @@ -63,72 +50,61 @@ jobs: with: python-version: "3.12" - - name: Download wheel + - name: Download dist uses: actions/download-artifact@v4 with: - name: wheel + name: dist path: dist/ - name: Install wheel and verify contents run: | - # Install without importing (rtxpy requires cupy/GPU at import time) python -m pip install dist/*.whl --no-deps python -m pip install numpy - - # Verify the package files are installed correctly python -c " - import importlib.util - import os - - # Find where rtxpy was installed + import importlib.util, os spec = importlib.util.find_spec('rtxpy') assert spec is not None, 'rtxpy package not found' pkg_dir = os.path.dirname(spec.origin) - print(f'Package installed at: {pkg_dir}') - - # Check that required files exist - init_path = os.path.join(pkg_dir, '__init__.py') - rtx_path = os.path.join(pkg_dir, 'rtx.py') - ptx_path = os.path.join(pkg_dir, 'kernel.ptx') - - assert os.path.exists(init_path), f'__init__.py not found' - assert os.path.exists(rtx_path), f'rtx.py not found' - assert os.path.exists(ptx_path), f'kernel.ptx not found' - - print('All required files present:') - print(f' - __init__.py') - print(f' - rtx.py') - print(f' - kernel.ptx') - print('Wheel installation test PASSED!') + for f in ('__init__.py', 'rtx.py', 'kernel.ptx'): + assert os.path.exists(os.path.join(pkg_dir, f)), f'{f} not found' + print('Wheel installation test PASSED') " - # Publish to PyPI (only on tag push, not workflow_dispatch) - publish: + publish-pypi: name: Publish to PyPI needs: [build, test-wheel] runs-on: ubuntu-latest if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') - # Required for trusted publishing to PyPI - permissions: - id-token: write - - environment: - name: pypi - url: https://pypi.org/project/rtxpy/ - steps: - - name: Download wheel + - name: Download dist uses: actions/download-artifact@v4 with: - name: wheel + name: dist path: dist/ - - name: Download sdist + - name: Publish to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + password: ${{ secrets.PYPI_TOKEN }} + + github-release: + name: Create GitHub Release + needs: [build, test-wheel, publish-pypi] + runs-on: ubuntu-latest + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') + permissions: + contents: write + + steps: + - name: Download dist uses: actions/download-artifact@v4 with: - name: sdist + name: dist path: dist/ - - name: Publish to PyPI - uses: pypa/gh-action-pypi-publish@release/v1 + - name: Create GitHub Release + uses: softprops/action-gh-release@v2 + with: + generate_release_notes: true + files: dist/*