mirror of
https://github.com/Alex38Lyon/Synthese-PSM_LARRA.git
synced 2026-09-30 07:21:55 +00:00
Add GitHub Actions workflow to build GDAL with SFCGAL
This workflow builds GDAL with SFCGAL support on Ubuntu 24.04, including setup, configuration, compilation, and packaging steps.
This commit is contained in:
@@ -0,0 +1,484 @@
|
|||||||
|
name: Build GDAL + SFCGAL
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
|
||||||
|
build-gdal:
|
||||||
|
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
|
||||||
|
env:
|
||||||
|
GDAL_VERSION: 3.13.3
|
||||||
|
SFCGAL_VERSION: 2.2
|
||||||
|
GEOS_VERSION: 3.14.1
|
||||||
|
PYTHON_VERSION: 3.12
|
||||||
|
|
||||||
|
steps:
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# 1. Checkout
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# 2. Micromamba
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
- name: Setup Micromamba
|
||||||
|
uses: mamba-org/setup-micromamba@v3.2.1
|
||||||
|
with:
|
||||||
|
|
||||||
|
environment-name: pyThtoQgis
|
||||||
|
|
||||||
|
create-args: >-
|
||||||
|
python=3.12
|
||||||
|
numpy
|
||||||
|
sfcgal=2.2
|
||||||
|
geos
|
||||||
|
proj
|
||||||
|
sqlite
|
||||||
|
libtiff
|
||||||
|
libjpeg-turbo
|
||||||
|
libpng
|
||||||
|
zlib
|
||||||
|
curl
|
||||||
|
openssl
|
||||||
|
swig
|
||||||
|
cmake
|
||||||
|
ninja
|
||||||
|
pkg-config
|
||||||
|
|
||||||
|
init-shell: bash
|
||||||
|
|
||||||
|
cache-environment: true
|
||||||
|
cache-downloads: true
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# 3. Informations environnement
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
- name: Environment information
|
||||||
|
shell: bash -el {0}
|
||||||
|
run: |
|
||||||
|
|
||||||
|
echo "========================================"
|
||||||
|
echo "ENVIRONMENT"
|
||||||
|
echo "========================================"
|
||||||
|
|
||||||
|
echo "CONDA_PREFIX=$CONDA_PREFIX"
|
||||||
|
|
||||||
|
python --version
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Packages :"
|
||||||
|
|
||||||
|
conda list | grep -E \
|
||||||
|
"python|numpy|sfcgal|geos|proj|sqlite"
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# 4. Vérification SFCGAL
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
- name: Check SFCGAL
|
||||||
|
shell: bash -el {0}
|
||||||
|
run: |
|
||||||
|
|
||||||
|
echo "========================================"
|
||||||
|
echo "SFCGAL"
|
||||||
|
echo "========================================"
|
||||||
|
|
||||||
|
sfcgal-config --version || true
|
||||||
|
|
||||||
|
find "$CONDA_PREFIX" \
|
||||||
|
\( -iname "*sfcgal*.so*" -o -iname "*SFCGAL*.so*" \) \
|
||||||
|
-print
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# 5. Téléchargement GDAL
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
- name: Download GDAL
|
||||||
|
shell: bash -el {0}
|
||||||
|
run: |
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
cd "$RUNNER_TEMP"
|
||||||
|
|
||||||
|
git clone \
|
||||||
|
--depth 1 \
|
||||||
|
--branch "v${GDAL_VERSION}" \
|
||||||
|
https://github.com/OSGeo/gdal.git
|
||||||
|
|
||||||
|
cd gdal
|
||||||
|
|
||||||
|
mkdir build
|
||||||
|
|
||||||
|
cd build
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# 6. Configuration CMake
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
- name: Configure GDAL
|
||||||
|
shell: bash -el {0}
|
||||||
|
working-directory: ${{ runner.temp }}/gdal/build
|
||||||
|
run: |
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
cmake .. \
|
||||||
|
-GNinja \
|
||||||
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
|
-DCMAKE_INSTALL_PREFIX="$CONDA_PREFIX" \
|
||||||
|
-DCMAKE_PREFIX_PATH="$CONDA_PREFIX" \
|
||||||
|
-DCMAKE_LIBRARY_PATH="$CONDA_PREFIX/lib" \
|
||||||
|
-DCMAKE_INCLUDE_PATH="$CONDA_PREFIX/include" \
|
||||||
|
-DCMAKE_INSTALL_RPATH="$CONDA_PREFIX/lib" \
|
||||||
|
-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \
|
||||||
|
-DGDAL_USE_SFCGAL=ON \
|
||||||
|
-DGDAL_USE_GEOS=ON \
|
||||||
|
-DGDAL_USE_PROJ=ON \
|
||||||
|
-DGDAL_USE_SQLITE3=ON \
|
||||||
|
-DGDAL_USE_CURL=ON \
|
||||||
|
-DGDAL_BUILD_OPTIONAL_DRIVERS=ON \
|
||||||
|
-DBUILD_PYTHON_BINDINGS=ON
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# 7. Compilation
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
- name: Build GDAL
|
||||||
|
shell: bash -el {0}
|
||||||
|
working-directory: ${{ runner.temp }}/gdal/build
|
||||||
|
run: |
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
echo "========================================"
|
||||||
|
echo "BUILD GDAL"
|
||||||
|
echo "========================================"
|
||||||
|
|
||||||
|
ninja -j"$(nproc)"
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# 8. Installation
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
- name: Install GDAL
|
||||||
|
shell: bash -el {0}
|
||||||
|
working-directory: ${{ runner.temp }}/gdal/build
|
||||||
|
run: |
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
ninja install
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# 9. Vérification GDAL
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
- name: Check GDAL
|
||||||
|
shell: bash -el {0}
|
||||||
|
run: |
|
||||||
|
|
||||||
|
echo "========================================"
|
||||||
|
echo "GDAL"
|
||||||
|
echo "========================================"
|
||||||
|
|
||||||
|
gdalinfo --version
|
||||||
|
|
||||||
|
python - <<'PY'
|
||||||
|
|
||||||
|
from osgeo import gdal
|
||||||
|
|
||||||
|
print("GDAL Python:")
|
||||||
|
print(gdal.VersionInfo("--version"))
|
||||||
|
|
||||||
|
print()
|
||||||
|
print("Build info:")
|
||||||
|
print(gdal.VersionInfo("--build-info"))
|
||||||
|
|
||||||
|
PY
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# 10. Vérification liaison SFCGAL
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
- name: Check GDAL SFCGAL linkage
|
||||||
|
shell: bash -el {0}
|
||||||
|
run: |
|
||||||
|
|
||||||
|
echo "========================================"
|
||||||
|
echo "GDAL / SFCGAL"
|
||||||
|
echo "========================================"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "libgdal :"
|
||||||
|
|
||||||
|
ls -lh "$CONDA_PREFIX"/lib/libgdal.so*
|
||||||
|
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Dépendances :"
|
||||||
|
|
||||||
|
ldd "$CONDA_PREFIX/lib/libgdal.so" \
|
||||||
|
| grep -Ei "sfcgal|geos"
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# 11. Test SFCGAL
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
- name: Test SFCGAL via OGR
|
||||||
|
shell: bash -el {0}
|
||||||
|
run: |
|
||||||
|
|
||||||
|
python - <<'PY'
|
||||||
|
|
||||||
|
from osgeo import ogr
|
||||||
|
from osgeo import gdal
|
||||||
|
|
||||||
|
print("========================================")
|
||||||
|
print("TEST SFCGAL")
|
||||||
|
print("========================================")
|
||||||
|
|
||||||
|
print(gdal.VersionInfo("--version"))
|
||||||
|
|
||||||
|
wkt = """
|
||||||
|
POLYHEDRALSURFACE Z (
|
||||||
|
(
|
||||||
|
(0 0 0,
|
||||||
|
10 0 0,
|
||||||
|
10 10 0,
|
||||||
|
0 10 0,
|
||||||
|
0 0 0)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
"""
|
||||||
|
|
||||||
|
geom = ogr.CreateGeometryFromWkt(wkt)
|
||||||
|
|
||||||
|
if geom is None:
|
||||||
|
raise RuntimeError(
|
||||||
|
"Impossible de créer la géométrie 3D"
|
||||||
|
)
|
||||||
|
|
||||||
|
print("Type :", geom.GetGeometryName())
|
||||||
|
print("Geometry type :", geom.GetGeometryType())
|
||||||
|
print("Has Z :", ogr.GT_HasZ(geom.GetGeometryType()))
|
||||||
|
|
||||||
|
valid = geom.IsValid()
|
||||||
|
|
||||||
|
print("IsValid() :", valid)
|
||||||
|
|
||||||
|
print()
|
||||||
|
print("SFCGAL accessible par OGR : OK")
|
||||||
|
|
||||||
|
PY
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# 12. Création du package GDAL
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
- name: Create GDAL package
|
||||||
|
shell: bash -el {0}
|
||||||
|
run: |
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
PACKAGE_NAME="gdal-${GDAL_VERSION}-sfcgal-${SFCGAL_VERSION}-geos-${GEOS_VERSION}-ubuntu-24.04"
|
||||||
|
|
||||||
|
PACKAGE_DIR="$RUNNER_TEMP/$PACKAGE_NAME"
|
||||||
|
|
||||||
|
mkdir -p "$PACKAGE_DIR"
|
||||||
|
|
||||||
|
|
||||||
|
echo "========================================"
|
||||||
|
echo "Création du package"
|
||||||
|
echo "========================================"
|
||||||
|
|
||||||
|
|
||||||
|
# --------------------------------------------------------
|
||||||
|
# GDAL executables
|
||||||
|
# --------------------------------------------------------
|
||||||
|
|
||||||
|
cp -a \
|
||||||
|
"$CONDA_PREFIX"/bin/gdal* \
|
||||||
|
"$PACKAGE_DIR/"
|
||||||
|
|
||||||
|
|
||||||
|
# --------------------------------------------------------
|
||||||
|
# GDAL library
|
||||||
|
# --------------------------------------------------------
|
||||||
|
|
||||||
|
cp -a \
|
||||||
|
"$CONDA_PREFIX"/lib/libgdal.so* \
|
||||||
|
"$PACKAGE_DIR/"
|
||||||
|
|
||||||
|
|
||||||
|
# --------------------------------------------------------
|
||||||
|
# Python bindings
|
||||||
|
# --------------------------------------------------------
|
||||||
|
|
||||||
|
cp -a \
|
||||||
|
"$CONDA_PREFIX"/lib/python${PYTHON_VERSION}/site-packages/osgeo \
|
||||||
|
"$PACKAGE_DIR/"
|
||||||
|
|
||||||
|
|
||||||
|
# --------------------------------------------------------
|
||||||
|
# GDAL headers
|
||||||
|
# --------------------------------------------------------
|
||||||
|
|
||||||
|
cp -a \
|
||||||
|
"$CONDA_PREFIX"/include/gdal \
|
||||||
|
"$PACKAGE_DIR/"
|
||||||
|
|
||||||
|
|
||||||
|
# --------------------------------------------------------
|
||||||
|
# GDAL data
|
||||||
|
# --------------------------------------------------------
|
||||||
|
|
||||||
|
cp -a \
|
||||||
|
"$CONDA_PREFIX"/share/gdal \
|
||||||
|
"$PACKAGE_DIR/"
|
||||||
|
|
||||||
|
|
||||||
|
# --------------------------------------------------------
|
||||||
|
# Informations package
|
||||||
|
# --------------------------------------------------------
|
||||||
|
|
||||||
|
cat > "$PACKAGE_DIR/VERSION.txt" <<EOF
|
||||||
|
GDAL=${GDAL_VERSION}
|
||||||
|
SFCGAL=${SFCGAL_VERSION}
|
||||||
|
GEOS=${GEOS_VERSION}
|
||||||
|
Python=${PYTHON_VERSION}
|
||||||
|
OS=ubuntu-24.04
|
||||||
|
Build=GDAL_USE_SFCGAL=ON
|
||||||
|
EOF
|
||||||
|
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Contenu :"
|
||||||
|
|
||||||
|
find "$PACKAGE_DIR" -maxdepth 2 -type f | sort
|
||||||
|
|
||||||
|
|
||||||
|
# --------------------------------------------------------
|
||||||
|
# Compression
|
||||||
|
# --------------------------------------------------------
|
||||||
|
|
||||||
|
cd "$RUNNER_TEMP"
|
||||||
|
|
||||||
|
tar \
|
||||||
|
-czf \
|
||||||
|
"${PACKAGE_NAME}.tar.gz" \
|
||||||
|
"$PACKAGE_NAME"
|
||||||
|
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Package créé :"
|
||||||
|
|
||||||
|
ls -lh \
|
||||||
|
"${PACKAGE_NAME}.tar.gz"
|
||||||
|
|
||||||
|
|
||||||
|
echo \
|
||||||
|
"PACKAGE_NAME=${PACKAGE_NAME}" \
|
||||||
|
>> "$GITHUB_ENV"
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# 13. Test du package
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
- name: Test package
|
||||||
|
shell: bash -el {0}
|
||||||
|
run: |
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
cd "$RUNNER_TEMP"
|
||||||
|
|
||||||
|
mkdir test-package
|
||||||
|
|
||||||
|
tar \
|
||||||
|
-xzf \
|
||||||
|
"${PACKAGE_NAME}.tar.gz" \
|
||||||
|
-C test-package
|
||||||
|
|
||||||
|
echo "Package testé :"
|
||||||
|
|
||||||
|
find test-package \
|
||||||
|
-maxdepth 2 \
|
||||||
|
-type f | sort
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# 14. Publication Release
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
- name: Publish GDAL package
|
||||||
|
shell: bash
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ github.token }}
|
||||||
|
run: |
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
TAG="gdal-sfcgal-${GDAL_VERSION}"
|
||||||
|
|
||||||
|
PACKAGE="${RUNNER_TEMP}/${PACKAGE_NAME}.tar.gz"
|
||||||
|
|
||||||
|
|
||||||
|
echo "========================================"
|
||||||
|
echo "Publication"
|
||||||
|
echo "========================================"
|
||||||
|
|
||||||
|
echo "Tag : $TAG"
|
||||||
|
echo "Package : $PACKAGE"
|
||||||
|
|
||||||
|
|
||||||
|
# --------------------------------------------------------
|
||||||
|
# Suppression éventuelle de l'ancienne release
|
||||||
|
# --------------------------------------------------------
|
||||||
|
|
||||||
|
if gh release view "$TAG" >/dev/null 2>&1; then
|
||||||
|
|
||||||
|
echo "Release existante : suppression"
|
||||||
|
|
||||||
|
gh release delete "$TAG" \
|
||||||
|
--yes \
|
||||||
|
--cleanup-tag
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# --------------------------------------------------------
|
||||||
|
# Création de la Release
|
||||||
|
# --------------------------------------------------------
|
||||||
|
|
||||||
|
gh release create "$TAG" \
|
||||||
|
"$PACKAGE" \
|
||||||
|
--title "GDAL ${GDAL_VERSION} + SFCGAL ${SFCGAL_VERSION}" \
|
||||||
|
--notes "GDAL ${GDAL_VERSION} compiled with SFCGAL ${SFCGAL_VERSION} and GEOS ${GEOS_VERSION} for pyThtoQgis." \
|
||||||
|
--latest=false
|
||||||
Reference in New Issue
Block a user