Skip to content

Fix ci.yml ignore-paths #3

Fix ci.yml ignore-paths

Fix ci.yml ignore-paths #3

Workflow file for this run

name: release
on:
push:
tags:
- 'v[0-9]+.[0-9]+.[0-9]+'
- 'v[0-9]+.[0-9]+.[0-9]+a[0-9]+'
- 'v[0-9]+.[0-9]+.[0-9]+b[0-9]+'
- 'v[0-9]+.[0-9]+.[0-9]+rc[0-9]+'
jobs:
details:
runs-on: ubuntu-latest
outputs:
tag_version: ${{ steps.release.outputs.tag_version }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Extract tag details
id: release
run: |
if [[ "${{ github.ref_type }}" = "tag" ]]; then
TAG_VERSION=${GITHUB_REF#refs/tags/v}
echo "tag_version=$TAG_VERSION" >> "$GITHUB_OUTPUT"
echo "Tag version is $TAG_VERSION"
else
echo "No tag found"
exit 1
fi
check-version:
needs: details
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.13'
- name: Fetch info from PyPI
run: |
response=$(curl -s https://pypi.org/pypi/thevenin/json || echo "{}")
latest_pypi_version=$(echo "$response" | jq -r '.releases | keys | .[]' | sort -rV | head -n 1)
if [[ -z "$latest_pypi_version" ]]; then
echo "Package not found on PyPI."
latest_pypi_version="0.0.0"
fi
echo "Latest version on PyPI: $latest_pypi_version"
echo "latest_pypi_version=$latest_pypi_version" >> $GITHUB_ENV
- name: Compare version against PyPI and exit if not newer
run: |
TAG_VERSION=${{ needs.details.outputs.tag_version }}
PYPI_VERSION=$latest_pypi_version
TAG_BASE=${TAG_VERSION%%[a-z]}
PYPI_BASE=${PYPI_VERSION%%[a-z]}
TAG_SUFFIX=${TAG_VERSION#$TAG_BASE}
PYPI_SUFFIX=${PYPI_VERSION#$PYPI_BASE}
suffix_count=0
[[ -n "$TAG_SUFFIX" ]] && ((suffix_count++))
[[ -n "$PYPI_SUFFIX" ]] && ((suffix_count++))
if [[ "$TAG_VERSION" == "$PYPI_VERSION" ]]; then
echo "The tag $TAG_VERSION matches the PyPI version $PYPI_VERSION."
exit 1
elif [[ "$suffix_count" == 1 && "$TAG_BASE" == "$PYPI_BASE" ]]; then
if [[ -n "$PYPI_SUFFIX" ]]; then
echo "The tag $TAG_VERSION is newer than PyPI $PYPI_VERSION."
else
echo "The tag $TAG_VERSION is older than PyPI $PYPI_VERSION."
exit 1
fi
else
newest=$(printf "%s\n%s" "$TAG_VERSION" "$PYPI_VERSION" | sort -V | tail -n 1)
if [[ "$TAG_VERSION" == "$newest" ]]; then
echo "The tag $TAG_VERSION is newer than PyPI $PYPI_VERSION."
else
echo "The tag $TAG_VERSION is older than PyPI $PYPI_VERSION."
exit 1
fi
fi
- name: Verify tag and pyproject.toml versions match
run: |
python -m pip install --upgrade pip
pip install .
PKG_VERSION=$(python -c "import thevenin; print(thevenin.__version__)")
TAG_VERSION=${{ needs.details.outputs.tag_version }}
if [[ "$PKG_VERSION" != "$TAG_VERSION" ]]; then
echo "Version mismatch: setup.py has $PKG_VERSION, but tag is $TAG_VERSION."
exit 1
else
echo "Package and tag versions match: $PKG_VERSION == $TAG_VERSION."
fi
build-and-test:
name: (build ubuntu-latest, 3.13)
needs: [details, check-version]
runs-on: ubuntu-latest
defaults:
run:
shell: bash -l {0}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.13'
- name: Install build
run: pip install build
- name: Build distributions
run: python -m build
- name: Upload
uses: actions/upload-artifact@v4
with:
name: builds
path: dist/*
pypi-publish:
name: Upload to PyPI
needs: build-and-test
runs-on: ubuntu-latest
steps:
- name: Download artifacts
uses: actions/download-artifact@v4
with:
path: dist/
pattern: builds*
merge-multiple: true
- name: Check files
run: ls dist
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.13'
- name: Install twine
run: pip install twine
- name: Check builds and upload to PyPI
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
run: |
twine check dist/*
twine upload dist/*