Files
d4c-datapkg-orthoimagery/docker/python/build.sh
T
2026-09-14 16:17:18 -04:00

49 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# Stage 2: Python (uv venv with rioxarray/rasterio/xarray/dask/numpy) on top of
# the stage-1 GDAL + ECW + MrSID image. Requires stage 1 to exist locally:
# docker/gdal/build.sh
#
# Result: ${IMAGE}:${TAG} (default dataforcanada/gdal-ecw-mrsid-python:3.13.3)
#
# Usage:
# docker/python/build.sh
# GDAL_VERSION=3.13.4 docker/python/build.sh # after building stage 1 for it
# USER_UID=$(id -u) USER_GID=$(id -g) docker/python/build.sh
#
# The build itself runs verify-gdal-drivers as its last step, so a successful
# build already implies: ECW + MrSID in gdalinfo --formats, rasterio linked to
# GDAL ${GDAL_VERSION}, and ECW + MrSID in rasterio.Env().drivers().
#
set -euo pipefail
GDAL_VERSION="${GDAL_VERSION:-3.13.3}"
GDAL_IMAGE="${GDAL_IMAGE:-dataforcanada/gdal-ecw-mrsid}"
IMAGE="${IMAGE:-dataforcanada/gdal-ecw-mrsid-python}"
TAG="${TAG:-${GDAL_VERSION}}"
USER_UID="${USER_UID:-1000}"
USER_GID="${USER_GID:-${USER_UID}}"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PLATFORM=linux/amd64
die() { echo "ERROR: $*" >&2; exit 1; }
docker image inspect "${GDAL_IMAGE}:${GDAL_VERSION}" >/dev/null 2>&1 \
|| die "base image ${GDAL_IMAGE}:${GDAL_VERSION} not found locally — run docker/gdal/build.sh first"
echo ">>> Building ${IMAGE}:${TAG} FROM ${GDAL_IMAGE}:${GDAL_VERSION}"
docker buildx build \
--platform "${PLATFORM}" \
--build-arg GDAL_VERSION="${GDAL_VERSION}" \
--build-arg GDAL_IMAGE="${GDAL_IMAGE}" \
--build-arg USER_UID="${USER_UID}" \
--build-arg USER_GID="${USER_GID}" \
--tag "${IMAGE}:${TAG}" \
--load \
"${SCRIPT_DIR}"
# Re-run the assertions against the finished image, as the runtime user.
echo ">>> Verifying ${IMAGE}:${TAG}"
docker run --rm --platform "${PLATFORM}" "${IMAGE}:${TAG}" verify-gdal-drivers --expect-gdal "${GDAL_VERSION}"
echo ">>> OK: ${IMAGE}:${TAG}"