Skip to content

Commit

Permalink
BLD/RLS: Update wheels to include GDAL 3.9.2 and add manylinux_2_28 w…
Browse files Browse the repository at this point in the history
…heels (#466)
  • Loading branch information
brendan-ward committed Sep 5, 2024
1 parent 412a441 commit a5fccad
Show file tree
Hide file tree
Showing 11 changed files with 159 additions and 62 deletions.
2 changes: 1 addition & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
- run:
name: Build the Linux aarch64 wheels.
command: |
python3 -m pip install --user cibuildwheel==2.17.0
python3 -m pip install --user cibuildwheel==2.20.0
python3 -m cibuildwheel --output-dir wheelhouse
- run:
name: Test the wheels
Expand Down
8 changes: 6 additions & 2 deletions .github/workflows/docker-gdal.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,9 @@ jobs:
fail-fast: false
matrix:
container:
- "ghcr.io/osgeo/gdal:ubuntu-small-latest" # >= python 3.10.6
- "ghcr.io/osgeo/gdal:ubuntu-small-3.8.3" # python 3.10.12
- "ghcr.io/osgeo/gdal:ubuntu-small-latest" # >= python 3.12.3
- "ghcr.io/osgeo/gdal:ubuntu-small-3.9.2" # python 3.12.3
- "ghcr.io/osgeo/gdal:ubuntu-small-3.8.5" # python 3.10.12
- "ghcr.io/osgeo/gdal:ubuntu-small-3.7.3" # python 3.10.12
- "ghcr.io/osgeo/gdal:ubuntu-small-3.6.4" # python 3.10.6
- "osgeo/gdal:ubuntu-small-3.5.3" # python 3.8.10
Expand All @@ -38,6 +39,9 @@ jobs:
- uses: actions/checkout@v4

- 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
Expand Down
113 changes: 84 additions & 29 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,36 +54,60 @@ jobs:
needs: [build-sdist]
runs-on: ubuntu-latest
container:
image: "ghcr.io/osgeo/gdal:ubuntu-small-3.8.5"
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: Install pip
run: |
apt-get update && apt-get install -y python3-pip
- name: Build from sdist and install test dependencies
shell: bash
run: |
python3 -m pip install --no-cache-dir wheelhouse/*.tar.gz
python3 -m pip install --no-cache-dir pytest pandas pyproj shapely>=2
python3 -m pip install --no-cache-dir --no-deps geopandas
python3 -m pip list
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 ..
python3 -m pytest --pyargs pyogrio.tests -v
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-20.04"
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
Expand All @@ -103,7 +127,7 @@ jobs:
uses: docker/build-push-action@v6
with:
context: .
file: ci/manylinux2014_x86_64-vcpkg-gdal.Dockerfile
file: ${{ matrix.container }}
tags: manylinux-vcpkg-gdal:latest
push: false
load: true
Expand All @@ -117,7 +141,7 @@ jobs:

- uses: actions/upload-artifact@v4
with:
name: pyogrio-wheel-linux
name: ${{ matrix.wheel_name }}
path: ./wheelhouse/*.whl
compression-level: 0

Expand All @@ -129,7 +153,7 @@ jobs:
matrix:
include:
- os: "macos-12"
triplet: "x64-osx-dynamic"
triplet: "x64-osx-dynamic-release"
arch: x86_64
vcpkg_cache: "/Users/runner/.cache/vcpkg/archives"
vcpkg_logs: "/usr/local/share/vcpkg/buildtrees/**/*.log"
Expand Down Expand Up @@ -160,7 +184,7 @@ jobs:
path: |
${{ matrix.vcpkg_cache }}
# bump the last digit to avoid using previous build cache
key: ${{ matrix.os }}-${{ matrix.arch }}-vcpkg-gdal3.8.5-cache0
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
Expand All @@ -176,9 +200,9 @@ jobs:
cd $VCPKG_INSTALLATION_ROOT
# on mac the clone is not clean, otherwise git pull fails
git reset --hard
# pull latest version to ensure the required commit with GDAL 3.8 is available
# pull specific commit with desired GDAL version
git pull
git checkout 4f4a1821b2e8c7a2863e4df65a4d514f84144049
git checkout 73794ce5f63fd138fab999a22959ca7c6305d93c
- name: Install GDAL
env:
Expand Down Expand Up @@ -215,17 +239,28 @@ jobs:
strategy:
fail-fast: false
matrix:
os: ["ubuntu-20.04", "windows-latest", "macos-12", "macos-latest"]
os:
[
"ubuntu-latest",
"ubuntu-20.04",
"windows-latest",
"macos-12",
"macos-latest",
]
python-version: ["3.8", "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
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
artifact: pyogrio-wheel-x64-osx-dynamic-release
- os: "macos-latest"
artifact: pyogrio-wheel-x64-osx-dynamic
artifact: pyogrio-wheel-arm64-osx-dynamic-release

steps:
- name: Checkout
Expand All @@ -236,8 +271,27 @@ jobs:
with:
python-version: ${{ matrix.python-version }}
allow-prereleases: true
cache: "pip"
cache-dependency-path: "ci/requirements-wheel-test.txt"

- 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
Expand All @@ -248,19 +302,20 @@ jobs:
- name: Install dependencies and pyogrio wheel
shell: bash
run: |
python -m pip install -r ci/requirements-wheel-test.txt
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
python -m pip install --no-deps geopandas
uv pip install --no-deps geopandas
fi
python -m pip install --pre --find-links wheelhouse pyogrio
python -m pip list
uv pip list
- name: Run tests
shell: bash
# virtual environment is automatically activated
run: |
cd ..
python -c "import pyogrio; print(f'GDAL version: {pyogrio.__gdal_version__}\nGEOS version: {pyogrio.__gdal_geos_version__}')"
python -m pytest --pyargs pyogrio.tests -v
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
Expand Down
17 changes: 9 additions & 8 deletions CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
# CHANGELOG

## 0.9.1 (yyyy-mm-dd)
## 0.10.0 (yyyy-mm-dd)

### Bug fixes

- Silence warning from `write_dataframe` with `GeoSeries.notna()` (#435).
- Enable mask & bbox filter when geometry column not read (#431).
- Raise NotImplmentedError when user attempts to write to an open file handle (#442).
- Prevent seek on read from compressed inputs (#443).

### Packaging

Expand All @@ -10,13 +17,7 @@
packages if needed: more info [here](https://gdal.org/download.html#conda).
This also leads to `pyproj` becoming an optional dependency; you will need
to install `pyproj` in order to support spatial reference systems (#452).

### Bug fixes

- Silence warning from `write_dataframe` with `GeoSeries.notna()` (#435).
- Enable mask & bbox filter when geometry column not read (#431).
- Raise NotImplmentedError when user attempts to write to an open file handle (#442).
- Prevent seek on read from compressed inputs (#443).
- The GDAL library included in the wheels is updated from 3.8.5 to GDAL 3.9.2 (#466).

## 0.9.0 (2024-06-17)

Expand Down
File renamed without changes.
File renamed without changes.
10 changes: 5 additions & 5 deletions ci/manylinux2014_x86_64-vcpkg-gdal.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,16 @@ FROM quay.io/pypa/manylinux2014_x86_64:2024-08-12-7fde9b1
# building openssl needs IPC-Cmd (https://github.com/microsoft/vcpkg/issues/24988)
RUN yum install -y curl unzip zip tar perl-IPC-Cmd

# require python >= 3.7 (python 3.6 is default on base image) for meson
# require python >= 3.7 (python 3.6 is default on base image) for meson
RUN ln -s /opt/python/cp38-cp38/bin/python3 /usr/bin/python3

RUN git clone https://github.com/Microsoft/vcpkg.git /opt/vcpkg && \
git -C /opt/vcpkg checkout 4f4a1821b2e8c7a2863e4df65a4d514f84144049
git -C /opt/vcpkg checkout 73794ce5f63fd138fab999a22959ca7c6305d93c

ENV VCPKG_INSTALLATION_ROOT="/opt/vcpkg"
ENV PATH="${PATH}:/opt/vcpkg"

ENV VCPKG_DEFAULT_TRIPLET="x64-linux-dynamic"
ENV VCPKG_DEFAULT_TRIPLET="x64-linux-dynamic-release"

# mkdir & touch -> workaround for https://github.com/microsoft/vcpkg/issues/27786
RUN bootstrap-vcpkg.sh && \
Expand All @@ -21,11 +21,11 @@ RUN bootstrap-vcpkg.sh && \
vcpkg integrate install && \
vcpkg integrate bash

COPY ci/custom-triplets/x64-linux-dynamic.cmake opt/vcpkg/custom-triplets/x64-linux-dynamic.cmake
COPY ci/custom-triplets/x64-linux-dynamic-release.cmake opt/vcpkg/custom-triplets/x64-linux-dynamic-release.cmake
COPY ci/vcpkg-custom-ports/ opt/vcpkg/custom-ports/
COPY ci/vcpkg.json opt/vcpkg/

ENV LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/opt/vcpkg/installed/x64-linux-dynamic/lib"
ENV LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/opt/vcpkg/installed/x64-linux-dynamic-release/lib"
RUN vcpkg install --overlay-triplets=opt/vcpkg/custom-triplets \
--overlay-ports=opt/vcpkg/custom-ports \
--feature-flags="versions,manifests" \
Expand Down
4 changes: 1 addition & 3 deletions ci/manylinux_2_28_aarch64-vcpkg-gdal.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ FROM quay.io/pypa/manylinux_2_28_aarch64:2024-08-12-7fde9b1
RUN dnf -y install curl zip unzip tar ninja-build perl-IPC-Cmd

RUN git clone https://github.com/Microsoft/vcpkg.git /opt/vcpkg && \
git -C /opt/vcpkg checkout 4f4a1821b2e8c7a2863e4df65a4d514f84144049
git -C /opt/vcpkg checkout 73794ce5f63fd138fab999a22959ca7c6305d93c

ENV VCPKG_INSTALLATION_ROOT="/opt/vcpkg"
ENV PATH="${PATH}:/opt/vcpkg"
Expand All @@ -24,7 +24,6 @@ RUN bootstrap-vcpkg.sh && \
vcpkg integrate bash

COPY ci/custom-triplets/arm64-linux-dynamic-release.cmake opt/vcpkg/custom-triplets/arm64-linux-dynamic-release.cmake
COPY ci/vcpkg-custom-ports/ opt/vcpkg/custom-ports/
COPY ci/vcpkg.json opt/vcpkg/

# temporary workaround for https://github.com/microsoft/vcpkg/issues/36094
Expand All @@ -33,7 +32,6 @@ RUN git -C /opt/vcpkg apply vcpkg_linux_crosscompiling.patch

ENV LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/opt/vcpkg/installed/arm64-linux-dynamic-release/lib"
RUN vcpkg install --overlay-triplets=opt/vcpkg/custom-triplets \
--overlay-ports=opt/vcpkg/custom-ports \
--feature-flags="versions,manifests" \
--x-manifest-root=opt/vcpkg \
--x-install-root=opt/vcpkg/installed && \
Expand Down
33 changes: 33 additions & 0 deletions ci/manylinux_2_28_x86_64-vcpkg-gdal.Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
FROM quay.io/pypa/manylinux_2_28_x86_64:2024-08-12-7fde9b1

# building openssl needs IPC-Cmd (https://github.com/microsoft/vcpkg/issues/24988)
RUN dnf -y install curl zip unzip tar ninja-build perl-IPC-Cmd

RUN git clone https://github.com/Microsoft/vcpkg.git /opt/vcpkg && \
git -C /opt/vcpkg checkout 73794ce5f63fd138fab999a22959ca7c6305d93c

ENV VCPKG_INSTALLATION_ROOT="/opt/vcpkg"
ENV PATH="${PATH}:/opt/vcpkg"

ENV VCPKG_DEFAULT_TRIPLET="x64-linux-dynamic-release"

# mkdir & touch -> workaround for https://github.com/microsoft/vcpkg/issues/27786
RUN bootstrap-vcpkg.sh && \
mkdir -p /root/.vcpkg/ $HOME/.vcpkg && \
touch /root/.vcpkg/vcpkg.path.txt $HOME/.vcpkg/vcpkg.path.txt && \
vcpkg integrate install && \
vcpkg integrate bash

COPY ci/custom-triplets/x64-linux-dynamic-release.cmake opt/vcpkg/custom-triplets/x64-linux-dynamic-release.cmake
COPY ci/vcpkg.json opt/vcpkg/

ENV LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/opt/vcpkg/installed/x64-linux-dynamic-release/lib"
RUN vcpkg install --overlay-triplets=opt/vcpkg/custom-triplets \
--feature-flags="versions,manifests" \
--x-manifest-root=opt/vcpkg \
--x-install-root=opt/vcpkg/installed && \
vcpkg list

# setting git safe directory is required for properly building wheels when
# git >= 2.35.3
RUN git config --global --add safe.directory "*"
4 changes: 2 additions & 2 deletions ci/vcpkg.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
{
"name": "pyogrio",
"version": "0.8.0",
"version": "0.10.0",
"dependencies": [
{
"name": "gdal",
"default-features": false,
"features": ["recommended-features", "curl", "geos", "iconv"]
}
],
"builtin-baseline": "4f4a1821b2e8c7a2863e4df65a4d514f84144049"
"builtin-baseline": "73794ce5f63fd138fab999a22959ca7c6305d93c"
}
Loading

0 comments on commit a5fccad

Please sign in to comment.