name: Publish Python Package on: release: types: [created] permissions: contents: read jobs: test: runs-on: ubuntu-latest strategy: matrix: python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] steps: - uses: actions/checkout@v4 - uses: astral-sh/setup-uv@v1 with: version: "latest" - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: uv sync --all-extras -p ${{ matrix.python-version }} - name: Run unit tests run: uv run tox -e py${{ matrix.python-version }} - name: Run Style Checks run: uv run tox -e style build: runs-on: ubuntu-latest needs: [test] steps: - uses: actions/checkout@v4 - uses: astral-sh/setup-uv@v1 with: version: "latest" - name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.12' - name: Install dependencies run: uv sync --all-extras -p 3.12 - name: Build run: uv build - name: Store the distribution packages uses: actions/upload-artifact@v4 with: name: python-packages path: dist/ publish: name: Publish to PyPI runs-on: ubuntu-latest if: startsWith(github.ref, 'refs/tags/') needs: [build] environment: release permissions: id-token: write steps: - name: Download distribution packages uses: actions/download-artifact@v4 with: name: python-packages path: dist/ - name: Publish to PyPI uses: pypa/gh-action-pypi-publish@release/v1