Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Build and Publish
name: Release

on:
push:
Expand Down Expand Up @@ -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
Expand All @@ -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/*
Loading