MAINT: drop Python 3.8 support #691
Workflow file for this run
This file contains 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: Release | |
on: | |
push: | |
branches: | |
- main # just build the sdist & wheel, skip release | |
tags: | |
- "v*" | |
pull_request: # also build on PRs touching files that affect building sdist / wheels | |
paths: | |
- ".github/workflows/release.yml" | |
- "ci/**" | |
- "MANIFEST.in" | |
- "pyproject.toml" | |
- "setup.py" | |
workflow_dispatch: | |
# cancel running jobs on new commit to PR | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
jobs: | |
build-sdist: | |
name: Build pyogrio sdist | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout source | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.x" | |
- name: Build a source tarball | |
run: | | |
python -m pip install --upgrade pip | |
python -m pip install build setuptools | |
python -m build --sdist | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: pyogrio-sdist | |
path: ./dist/*.tar.gz | |
retention-days: 5 | |
compression-level: 0 | |
test-sdist: | |
name: Test sdist | |
needs: [build-sdist] | |
runs-on: ubuntu-latest | |
container: | |
image: "ghcr.io/osgeo/gdal:ubuntu-small-3.9.2" | |
steps: | |
- name: Install packages | |
run: | | |
apt-get update && apt-get install -y build-essential python3-dev | |
- name: Create virtual environment | |
# install uv and use it to create a virtual environment, then add it to | |
# environment variables so that it is automatically activated and can be | |
# used for tests below | |
run: | | |
curl -LsSf https://astral.sh/uv/install.sh | sh | |
. $HOME/.cargo/env | |
uv venv .venv | |
echo "VIRTUAL_ENV=.venv" >> $GITHUB_ENV | |
echo "$PWD/.venv/bin" >> $GITHUB_PATH | |
- name: Download sdist from artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: pyogrio-sdist | |
path: wheelhouse | |
- name: Build from sdist and install test dependencies | |
shell: bash | |
run: | | |
uv pip install --no-cache wheelhouse/*.tar.gz | |
uv pip install pytest pandas pyproj shapely>=2 | |
uv pip install --no-deps geopandas | |
uv pip list | |
- name: Run tests | |
shell: bash | |
# virtual environment is automatically activated | |
run: | | |
cd .. | |
uv run python -c "import pyogrio; print(f'GDAL version: {pyogrio.__gdal_version__}\nGEOS version: {pyogrio.__gdal_geos_version__}')" | |
uv run python -m pytest --pyargs pyogrio.tests -v | |
build-wheels-linux: | |
name: Build wheels on Linux | |
runs-on: "ubuntu-latest" | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
# use manylinux2014 for older glibc platforms until discontinued | |
- wheel_name: "pyogrio-wheel-linux-manylinux2014_x86_64" | |
container: "ci/manylinux2014_x86_64-vcpkg-gdal.Dockerfile" | |
# use manylinux_2_28 for any platforms with glibc>=2.28 | |
- wheel_name: "pyogrio-wheel-linux-manylinux_2_28_x86_64" | |
container: "ci/manylinux_2_28_x86_64-vcpkg-gdal.Dockerfile" | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Set up Docker Buildx | |
id: buildx | |
uses: docker/setup-buildx-action@v3 | |
with: | |
install: true | |
buildkitd-flags: --debug | |
- name: Build Docker image with vcpkg and gdal | |
# using build-push-action (without push) to make use of cache arguments | |
uses: docker/build-push-action@v6 | |
with: | |
context: . | |
file: ${{ matrix.container }} | |
tags: manylinux-vcpkg-gdal:latest | |
push: false | |
load: true | |
cache-from: type=gha | |
cache-to: type=gha,mode=max | |
env: | |
BUILDKIT_PROGRESS: plain | |
- name: Build wheels | |
uses: pypa/[email protected] | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ matrix.wheel_name }} | |
path: ./wheelhouse/*.whl | |
compression-level: 0 | |
build-wheels-mac-win: | |
name: Build wheels on ${{ matrix.os }} (${{ matrix.arch }}) | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- os: "macos-12" | |
triplet: "x64-osx-dynamic-release" | |
arch: x86_64 | |
vcpkg_cache: "/Users/runner/.cache/vcpkg/archives" | |
vcpkg_logs: "/usr/local/share/vcpkg/buildtrees/**/*.log" | |
- os: "macos-12" | |
triplet: "arm64-osx-dynamic-release" | |
arch: arm64 | |
vcpkg_cache: "/Users/runner/.cache/vcpkg/archives" | |
vcpkg_logs: "/usr/local/share/vcpkg/buildtrees/**/*.log" | |
- os: "windows-2019" | |
triplet: "x64-windows-dynamic-release" | |
arch: AMD64 | |
# windows requires windows-specific paths | |
vcpkg_cache: "c:\\vcpkg\\installed" | |
vcpkg_logs: "c:\\vcpkg\\buildtrees\\**\\*.log" | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Cache vcpkg | |
uses: actions/cache@v4 | |
id: vcpkgcache | |
with: | |
path: | | |
${{ matrix.vcpkg_cache }} | |
# bump the last digit to avoid using previous build cache | |
key: ${{ matrix.os }}-${{ matrix.arch }}-vcpkg-gdal3.9.2-cache0 | |
# MacOS build requires aclocal, which is part of automake, but appears | |
# to be missing in default image | |
- name: Reinstall automake | |
if: runner.os == 'macOS' | |
run: | | |
brew reinstall automake | |
echo $(which aclocal) | |
- name: Checkout specific version of vcpkg | |
shell: bash | |
run: | | |
cd $VCPKG_INSTALLATION_ROOT | |
# on mac the clone is not clean, otherwise git pull fails | |
git reset --hard | |
# pull specific commit with desired GDAL version | |
git pull | |
git checkout 73794ce5f63fd138fab999a22959ca7c6305d93c | |
- name: Install GDAL | |
env: | |
VCPKG_DEFAULT_TRIPLET: ${{ matrix.triplet }} | |
shell: bash | |
run: | | |
vcpkg install --overlay-triplets=./ci/custom-triplets --feature-flags="versions,manifests" --x-manifest-root=./ci --x-install-root=$VCPKG_INSTALLATION_ROOT/installed | |
vcpkg list | |
- name: Upload vcpkg build logs | |
if: ${{ failure() }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: pyogrio-vcpkg-logs-${{ matrix.triplet }} | |
path: ${{ matrix.vcpkg_logs }} | |
- name: Build wheels | |
uses: pypa/[email protected] | |
env: | |
# CIBW needs to know triplet for the correct install path | |
VCPKG_DEFAULT_TRIPLET: ${{ matrix.triplet }} | |
CIBW_ARCHS: ${{ matrix.arch }} | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: pyogrio-wheel-${{ matrix.triplet }} | |
path: ./wheelhouse/*.whl | |
compression-level: 0 | |
test-wheels: | |
name: Test wheels on ${{ matrix.os }} (Python ${{ matrix.python-version }}) | |
needs: [build-wheels-linux, build-wheels-mac-win] | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: | |
[ | |
"ubuntu-latest", | |
"ubuntu-20.04", | |
"windows-latest", | |
"macos-12", | |
"macos-latest", | |
] | |
python-version: ["3.9", "3.10", "3.11", "3.12"] | |
include: | |
- os: "ubuntu-latest" | |
artifact: pyogrio-wheel-linux-manylinux2014_x86_64 | |
- os: "ubuntu-latest" | |
artifact: pyogrio-wheel-linux-manylinux_2_28_x86_64 | |
- os: "ubuntu-20.04" | |
artifact: pyogrio-wheel-linux-manylinux_2_28_x86_64 | |
- os: "windows-latest" | |
artifact: pyogrio-wheel-x64-windows-dynamic-release | |
- os: "macos-12" | |
artifact: pyogrio-wheel-x64-osx-dynamic-release | |
- os: "macos-latest" | |
artifact: pyogrio-wheel-arm64-osx-dynamic-release | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
allow-prereleases: true | |
- name: Create virtual environment (Linux / MacOS) | |
# install uv and use it to create a virtual environment, then add it to | |
# environment variables so that it is automatically activated and can be | |
# used for tests below | |
if: ${{ runner.os != 'Windows' }} | |
shell: bash | |
run: | | |
curl -LsSf https://astral.sh/uv/install.sh | sh | |
. $HOME/.cargo/env | |
uv venv .venv | |
echo "VIRTUAL_ENV=.venv" >> $GITHUB_ENV | |
echo "$PWD/.venv/bin" >> $GITHUB_PATH | |
- name: Create virtual environment (Windows) | |
if: ${{ runner.os == 'Windows' }} | |
run: | | |
irm https://astral.sh/uv/install.ps1 | iex | |
uv venv .venv | |
"VIRTUAL_ENV=.venv" | Out-File -FilePath $env:GITHUB_ENV -Append | |
"$PWD/.venv/Scripts" | Out-File -FilePath $env:GITHUB_PATH -Append | |
- name: Download wheels from artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: ${{ matrix.artifact }} | |
path: wheelhouse | |
- name: Install dependencies and pyogrio wheel | |
shell: bash | |
run: | | |
uv pip install -r ci/requirements-wheel-test.txt | |
uv pip install --no-cache --pre --no-index --find-links wheelhouse pyogrio | |
if [ ${{ matrix.python-version }} != "3.12" ]; then | |
uv pip install --no-deps geopandas | |
fi | |
uv pip list | |
- name: Run tests | |
shell: bash | |
# virtual environment is automatically activated | |
run: | | |
cd .. | |
uv run python -c "import pyogrio; print(f'GDAL version: {pyogrio.__gdal_version__}\nGEOS version: {pyogrio.__gdal_geos_version__}')" | |
uv run python -m pytest --pyargs pyogrio.tests -v | |
publish: | |
name: Publish pyogrio to GitHub / PyPI | |
needs: [test-sdist, test-wheels] | |
runs-on: ubuntu-latest | |
environment: | |
name: pypi | |
url: https://pypi.org/p/pyogrio | |
permissions: | |
id-token: write # IMPORTANT: this permission is mandatory for trusted publishing to PyPI | |
contents: write # this permission is required for the Github release action | |
# release on every tag | |
if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags/') | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
pattern: pyogrio-* | |
path: dist | |
merge-multiple: true | |
- name: Publish distribution to PyPI | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
- name: Create GitHub Release | |
id: create_release | |
uses: softprops/action-gh-release@v2 | |
with: | |
name: Version ${{ github.ref_name }} | |
tag_name: ${{ github.ref }} | |
draft: false | |
prerelease: false | |
files: dist/*.tar.gz | |
token: ${{ secrets.GITHUB_TOKEN }} |