Skip to content

fix: run release job only for production tags (exclude *-test) #4

fix: run release job only for production tags (exclude *-test)

fix: run release job only for production tags (exclude *-test) #4

Workflow file for this run

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 }}