fix: run release job only for production tags (exclude *-test) #4
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI/CD | |
| on: | |
| push: | |
| branches: [main] | |
| tags: | |
| - "v*" | |
| - "*-test" | |
| pull_request: | |
| branches: [main] | |
| workflow_dispatch: | |
| inputs: | |
| test_release_version: | |
| description: "Version for TestPyPI (e.g. 0.1.6)" | |
| required: false | |
| type: string | |
| release_version: | |
| description: "Version for PyPI release (e.g. 0.1.5)" | |
| required: false | |
| type: string | |
| env: | |
| UV_VERSION: "latest" | |
| PYTHON_VERSION: "3.11" | |
| jobs: | |
| # Lint, typecheck, test (all branches / PRs) | |
| ci: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ env.PYTHON_VERSION }} | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v4 | |
| with: | |
| version: ${{ env.UV_VERSION }} | |
| - name: Install dependencies | |
| run: uv sync --dev | |
| - name: Ruff (check + format) | |
| run: | | |
| uv run ruff check . | |
| uv run ruff format --check . | |
| - name: Mypy | |
| run: uv run mypy pearsonify | |
| - name: Tests | |
| run: uv run python -m pytest tests/ -v | |
| # --- Test-release: TestPyPI (tag *-test or workflow_dispatch) --- | |
| test-release: | |
| needs: ci | |
| if: | | |
| startsWith(github.ref, 'refs/tags/') && endsWith(github.ref, '-test') || | |
| github.event_name == 'workflow_dispatch' && github.event.inputs.test_release_version != '' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ env.PYTHON_VERSION }} | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v4 | |
| with: | |
| version: ${{ env.UV_VERSION }} | |
| - name: Install build | |
| run: uv tool install build | |
| - name: Build | |
| run: uv tool run --from build pyproject-build | |
| - name: Publish to TestPyPI | |
| uses: pypa/gh-action-pypi-publish@release/v1 | |
| with: | |
| password: ${{ secrets.TEST_PYPI_API_TOKEN }} | |
| repository-url: https://test.pypi.org/legacy/ | |
| # Release: PyPI + GitHub Release (tag v* but NOT *-test, or workflow_dispatch) | |
| release: | |
| needs: ci | |
| if: | | |
| (startsWith(github.ref, 'refs/tags/v') && !endsWith(github.ref, '-test')) || | |
| (github.event_name == 'workflow_dispatch' && github.event.inputs.release_version != '') | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ env.PYTHON_VERSION }} | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v4 | |
| with: | |
| version: ${{ env.UV_VERSION }} | |
| - name: Install build | |
| run: uv tool install build | |
| - name: Build | |
| run: uv tool run --from build pyproject-build | |
| - name: Publish to PyPI | |
| uses: pypa/gh-action-pypi-publish@release/v1 | |
| with: | |
| password: ${{ secrets.PYPI_API_TOKEN }} | |
| - name: Get version | |
| id: ver | |
| run: | | |
| if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then | |
| echo "tag=v${{ github.event.inputs.release_version }}" >> $GITHUB_OUTPUT | |
| else | |
| echo "tag=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT | |
| fi | |
| - name: Create GitHub Release | |
| uses: ncipollo/release-action@v1 | |
| with: | |
| tag: ${{ steps.ver.outputs.tag }} | |
| name: Release ${{ steps.ver.outputs.tag }} | |
| body: "See repository for changes and installation instructions." | |
| draft: false | |
| token: ${{ secrets.GITHUB_TOKEN }} |