Skip to content

Merge pull request #3 from carp-dk/main-refc #1

Merge pull request #3 from carp-dk/main-refc

Merge pull request #3 from carp-dk/main-refc #1

Workflow file for this run

name: release
on:
push:
tags:
- "**"
concurrency:
group: release-${{ github.ref }}
cancel-in-progress: false
jobs:
validate_tag:
runs-on: ubuntu-latest
outputs:
version: ${{ steps.version.outputs.version }}
tag: ${{ steps.version.outputs.tag }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.13"
- id: version
name: Validate tag against package version
run: |
version=$(python - <<'PY'
import pathlib
import tomllib
project = tomllib.loads(pathlib.Path("pyproject.toml").read_text())
print(project["project"]["version"])
PY
)
tag="${GITHUB_REF_NAME}"
if [ "${tag}" != "${version}" ] && [ "${tag}" != "v${version}" ]; then
echo "Tag ${tag} does not match package version ${version}." >&2
exit 1
fi
echo "version=${version}" >> "${GITHUB_OUTPUT}"
echo "tag=${tag}" >> "${GITHUB_OUTPUT}"
test:
needs: validate_tag
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.11", "3.12", "3.13"]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install -e .
python -m pip install pytest pytest-cov pandas pyarrow folium matplotlib
- name: Run tests
run: pytest --cov=src/carp --cov-branch --cov-fail-under=100
quality:
needs: validate_tag
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.13"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install -e .
python -m pip install pytest pytest-cov mypy ruff sphinx sphinx-rtd-theme pandas pyarrow folium matplotlib
- name: Lint
run: ruff check src examples tests docs
- name: Type check
run: mypy src/carp
- name: Build docs
run: sphinx-build -W -b html docs docs/_build/html
build:
needs: [test, quality]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.13"
- name: Build distributions
run: |
python -m pip install --upgrade pip
python -m pip install build twine
python -m build
python -m twine check dist/*
- uses: actions/upload-artifact@v4
with:
name: python-package-distributions
path: dist/
publish_pypi:
needs: build
runs-on: ubuntu-latest
environment:
name: pypi
permissions:
id-token: write
steps:
- uses: actions/download-artifact@v4
with:
name: python-package-distributions
path: dist/
- uses: pypa/gh-action-pypi-publish@release/v1
publish_github:
needs: [validate_tag, publish_pypi]
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/download-artifact@v4
with:
name: python-package-distributions
path: dist/
- name: Generate checksums
run: shasum -a 256 dist/* > dist/SHA256SUMS.txt
- uses: softprops/action-gh-release@v2
with:
name: Release ${{ needs.validate_tag.outputs.tag }}
tag_name: ${{ needs.validate_tag.outputs.tag }}
generate_release_notes: true
files: dist/*