Files
Synthese-PSM_LARRA/.github/workflows/pyThtoQgis-2.yml
T

468 lines
12 KiB
YAML

name: pyThtoQgis
on:
push:
branches:
- main
paths:
- 'Outputs/SHP/*.shp'
workflow_dispatch:
permissions:
contents: write
concurrency:
group: pyThtoQgis
cancel-in-progress: false
jobs:
pyThtoQgis:
runs-on: ubuntu-latest
steps:
# ============================================================
# 1. Récupération du dépôt
# ============================================================
- name: Checkout repository
uses: actions/checkout@v5
with:
fetch-depth: 0
# ============================================================
# 2. Vérification du type de modification
#
# Le workflow est déclenché par *.shp mais GitHub déclenche
# également l'action lorsqu'un SHP est supprimé.
#
# On ne continue que si au moins un SHP a été AJOUTÉ ou MODIFIÉ.
# ============================================================
- name: Check SHP changes
id: changed
shell: bash
run: |
echo "========================================"
echo "Recherche des SHP ajoutés/modifiés"
echo "========================================"
SHP_FILES=$(git diff-tree \
--no-commit-id \
--name-only \
--diff-filter=AM \
-r \
"$GITHUB_SHA" \
-- 'Outputs/SHP/*.shp')
echo "Fichiers SHP ajoutés/modifiés :"
echo "$SHP_FILES"
if [ -n "$SHP_FILES" ]; then
echo "shp=true" >> "$GITHUB_OUTPUT"
else
echo "shp=false" >> "$GITHUB_OUTPUT"
fi
# ============================================================
# 3. Arrêt si aucun SHP ajouté/modifié
# ============================================================
- name: Stop if no SHP added or modified
if: steps.changed.outputs.shp != 'true'
shell: bash
run: |
echo "Aucun fichier SHP ajouté ou modifié."
echo "Le workflow s'arrête."
# ============================================================
# 4. Installation de Micromamba
# ============================================================
- name: Setup Micromamba
if: steps.changed.outputs.shp == 'true'
uses: mamba-org/setup-micromamba@v3
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
# ============================================================
# 5. Informations environnement
# ============================================================
- name: Environment information
if: steps.changed.outputs.shp == 'true'
shell: bash -el {0}
run: |
echo "========================================"
echo "Python"
echo "========================================"
python --version
which python
echo "========================================"
echo "Conda"
echo "========================================"
echo "CONDA_PREFIX=$CONDA_PREFIX"
echo "========================================"
echo "Packages"
echo "========================================"
conda list | grep -E \
"python|numpy|gdal|geos|sfcgal|proj|sqlite|cmake"
# ============================================================
# 6. Vérification SFCGAL
# ============================================================
- name: Check SFCGAL
if: steps.changed.outputs.shp == 'true'
shell: bash -el {0}
run: |
echo "========================================"
echo "SFCGAL"
echo "========================================"
sfcgal-config --version || true
echo ""
echo "Bibliothèques SFCGAL :"
find "$CONDA_PREFIX" \
\( -iname "*sfcgal*.so*" -o -iname "*SFCGAL*.so*" \) \
-print
# ============================================================
# 7. Compilation de GDAL avec SFCGAL
# ============================================================
- name: Build GDAL with SFCGAL
if: steps.changed.outputs.shp == 'true'
shell: bash -el {0}
run: |
set -e
GDAL_VERSION=3.13.3
echo "========================================"
echo "Compilation GDAL $GDAL_VERSION"
echo "========================================"
cd "$RUNNER_TEMP"
git clone \
--depth 1 \
--branch "v${GDAL_VERSION}" \
https://github.com/OSGeo/gdal.git
cd gdal
mkdir build
cd build
echo "========================================"
echo "Configuration CMake"
echo "========================================"
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
echo "========================================"
echo "Compilation"
echo "========================================"
ninja -j"$(nproc)"
echo "========================================"
echo "Installation"
echo "========================================"
ninja install
# ============================================================
# 8. Vérification GDAL
# ============================================================
- name: Check GDAL
if: steps.changed.outputs.shp == 'true'
shell: bash -el {0}
run: |
echo "========================================"
echo "GDAL"
echo "========================================"
which gdalinfo
gdalinfo --version
echo ""
echo "GDAL Python :"
python - <<'PY'
from osgeo import gdal
print(gdal.VersionInfo("--version"))
print()
print(gdal.VersionInfo("--build-info"))
PY
# ============================================================
# 9. Vérification liaison GDAL / SFCGAL / GEOS
# ============================================================
- name: Check GDAL SFCGAL linkage
if: steps.changed.outputs.shp == 'true'
shell: bash -el {0}
run: |
echo "========================================"
echo "GDAL / SFCGAL linkage"
echo "========================================"
echo ""
echo "libgdal :"
find "$CONDA_PREFIX/lib" \
-maxdepth 1 \
-name "libgdal.so*" \
-print
echo ""
echo "Dépendances libgdal :"
ldd "$CONDA_PREFIX/lib/libgdal.so" \
| grep -Ei "sfcgal|geos" || true
# ============================================================
# 10. Test SFCGAL via OGR
# ============================================================
- name: Test SFCGAL via OGR
if: steps.changed.outputs.shp == 'true'
shell: bash -el {0}
run: |
python - <<'PY'
from osgeo import ogr
from osgeo import gdal
print("========================================")
print("Test SFCGAL via OGR")
print("========================================")
print("GDAL :", gdal.VersionInfo("--version"))
# --------------------------------------------------------
# Création d'une géométrie 3D
# --------------------------------------------------------
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()
)
)
try:
valid = geom.IsValid()
print(
"IsValid() :",
valid
)
except Exception as e:
print(
"IsValid() ERROR :",
e
)
raise
print()
print("Test SFCGAL terminé avec succès.")
# ============================================================
# 11. Installation des dépendances Python du projet
# ============================================================
- name: Install Python dependencies
if: steps.changed.outputs.shp == 'true'
shell: bash -el {0}
run: |
python -m pip install --upgrade pip
pip install \
alive-progress
# ============================================================
# 12. Affichage des SHP à traiter
# ============================================================
- name: List SHP input files
if: steps.changed.outputs.shp == 'true'
shell: bash -el {0}
run: |
echo "========================================"
echo "Fichiers SHP"
echo "========================================"
find Outputs/SHP \
-maxdepth 1 \
-type f \
-name "*.shp" \
-print
# ============================================================
# 13. Exécution de pyThtoQgis
# ============================================================
- name: Run pyThtoQgis
if: steps.changed.outputs.shp == 'true'
shell: bash -el {0}
run: |
echo "========================================"
echo "Exécution pyThtoQgis"
echo "========================================"
cd Scripts/pyThtoQgis
python pyThtoQgis.py \
--folder "../../Outputs/SHP/"
# ============================================================
# 14. Affichage des fichiers produits
# ============================================================
- name: Show generated files
if: steps.changed.outputs.shp == 'true'
shell: bash
run: |
echo "========================================"
echo "Fichiers générés / modifiés"
echo "========================================"
git status --short
echo ""
echo "========================================"
echo "Différence Git"
echo "========================================"
git diff --stat
# ============================================================
# 15. Commit des fichiers produits
# ============================================================
- name: Commit generated files
if: steps.changed.outputs.shp == 'true'
uses: stefanzweifel/git-auto-commit-action@v7
with:
commit_message: "Auto-generate outputs from SHP"
commit_user_name: "github-actions[bot]"
commit_user_email: "41898282+github-actions[bot]@users.noreply.github.com"
commit_author: "github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>"