From 3555eac98de07622ff77dcddd54a1d2be86dc472 Mon Sep 17 00:00:00 2001 From: Alex38Lyon <55714436+Alex38Lyon@users.noreply.github.com> Date: Fri, 25 Sep 2026 18:41:24 +0200 Subject: [PATCH] Add GitHub Actions workflow for SHP processing --- .github/workflows/ScriptPython.yml | 702 +++++++++++++++++++++++++++++ 1 file changed, 702 insertions(+) create mode 100644 .github/workflows/ScriptPython.yml diff --git a/.github/workflows/ScriptPython.yml b/.github/workflows/ScriptPython.yml new file mode 100644 index 0000000..7a74600 --- /dev/null +++ b/.github/workflows/ScriptPython.yml @@ -0,0 +1,702 @@ +name: ScriptPython + +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-24.04 + + steps: + + + # ============================================================ + # 1. Checkout + # ============================================================ + + - name: Checkout repository + uses: actions/checkout@v6 + with: + fetch-depth: 0 + + + # ============================================================ + # 2. Vérification SHP + # ============================================================ + + - name: Check SHP changes + id: changed + shell: bash + run: | + + SHP_FILES=$(git diff-tree \ + --no-commit-id \ + --name-only \ + --diff-filter=AM \ + -r \ + "$GITHUB_SHA" \ + -- 'Outputs/SHP/*.shp') + + + echo "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 suppression uniquement + # ============================================================ + + - name: Stop if no SHP added or modified + if: steps.changed.outputs.shp != 'true' + shell: bash + run: | + + echo "Aucun SHP ajouté ou modifié." + echo "Arrêt du workflow." + + + # ============================================================ + # 4. Micromamba + # + # IMPORTANT : + # PAS de GDAL ici. + # + # GDAL sera fourni par notre package précompilé. + # ============================================================ + + - name: Setup Micromamba + if: steps.changed.outputs.shp == 'true' + 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 + + 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 "ENVIRONMENT" + echo "========================================" + + echo "CONDA_PREFIX=$CONDA_PREFIX" + + python --version + + echo "" + + conda list | grep -E \ + "python|numpy|sfcgal|geos|proj|sqlite" + + + # ============================================================ + # 6. Téléchargement package GDAL + # ============================================================ + + - name: Download GDAL + SFCGAL package + if: steps.changed.outputs.shp == 'true' + shell: bash -el {0} + env: + GH_TOKEN: ${{ github.token }} + run: | + + set -e + + GDAL_VERSION=3.13.3 + + PACKAGE_NAME="gdal-${GDAL_VERSION}-sfcgal-2.2-geos-3.14.1-ubuntu-24.04" + + TAG="gdal-sfcgal-${GDAL_VERSION}" + + + echo "========================================" + echo "GDAL PACKAGE" + echo "========================================" + + echo "Release : $TAG" + echo "Package : $PACKAGE_NAME" + + + gh release download "$TAG" \ + --repo "$GITHUB_REPOSITORY" \ + --pattern "${PACKAGE_NAME}.tar.gz" \ + --dir "$RUNNER_TEMP" + + + echo "" + + echo "Package téléchargé :" + + ls -lh \ + "$RUNNER_TEMP/${PACKAGE_NAME}.tar.gz" + + + # ============================================================ + # 7. Installation package GDAL + # ============================================================ + + - name: Installation GDAL package + if: steps.changed.outputs.shp == 'true' + shell: bash -el {0} + run: | + + set -e + + GDAL_VERSION=3.13.3 + + PACKAGE_NAME="gdal-${GDAL_VERSION}-sfcgal-2.2-geos-3.14.1-ubuntu-24.04" + + PACKAGE="$RUNNER_TEMP/${PACKAGE_NAME}.tar.gz" + + EXTRACT_DIR="$RUNNER_TEMP/gdal-extract" + + + echo "========================================" + echo "INSTALLATION GDAL" + echo "========================================" + + + # ======================================================== + # Vérification du package + # ======================================================== + + if [ ! -f "$PACKAGE" ]; then + + echo "ERREUR : package introuvable :" + echo "$PACKAGE" + + exit 1 + + fi + + + # ======================================================== + # Extraction + # ======================================================== + + rm -rf "$EXTRACT_DIR" + + mkdir -p "$EXTRACT_DIR" + + + tar \ + -xzf \ + "$PACKAGE" \ + -C "$EXTRACT_DIR" + + + # ======================================================== + # Affichage STRUCTURE REELLE + # ======================================================== + + echo "" + + echo "========================================" + echo "STRUCTURE DU PACKAGE" + echo "========================================" + + + find "$EXTRACT_DIR" \ + -maxdepth 6 \ + -print \ + | sort + + + # ======================================================== + # Répertoire racine + # ======================================================== + + GDAL_DIR="$EXTRACT_DIR/$PACKAGE_NAME" + + + if [ ! -d "$GDAL_DIR" ]; then + + echo "" + echo "ERREUR : répertoire package absent :" + echo "$GDAL_DIR" + + exit 1 + + fi + + + echo "" + + echo "GDAL_DIR :" + echo "$GDAL_DIR" + + + # ======================================================== + # Vérification structure attendue + # ======================================================== + + echo "" + + echo "========================================" + echo "VERIFICATION" + echo "========================================" + + + if [ ! -d "$GDAL_DIR/bin" ]; then + + echo "ERREUR : bin/ absent" + + exit 1 + + fi + + + if [ ! -d "$GDAL_DIR/lib" ]; then + + echo "ERREUR : lib/ absent" + + exit 1 + + fi + + + # ======================================================== + # Installation BIN + # ======================================================== + + echo "" + + echo "Installation bin/..." + + + cp -av \ + "$GDAL_DIR/bin/." \ + "$CONDA_PREFIX/bin/" + + + # ======================================================== + # Installation LIB + # ======================================================== + + echo "" + + echo "Installation lib/..." + + + cp -av \ + "$GDAL_DIR/lib/." \ + "$CONDA_PREFIX/lib/" + + + # ======================================================== + # Installation SHARE + # ======================================================== + + if [ -d "$GDAL_DIR/share" ]; then + + echo "" + + echo "Installation share/..." + + + cp -av \ + "$GDAL_DIR/share/." \ + "$CONDA_PREFIX/share/" + + fi + + + # ======================================================== + # Vérification GDAL + # ======================================================== + + echo "" + + echo "========================================" + echo "VERIFICATION GDAL" + echo "========================================" + + + echo "" + + echo "gdalinfo :" + + which gdalinfo + + gdalinfo --version + + + echo "" + + echo "GDAL Python :" + + + python - <<'PY' + + from osgeo import gdal + from osgeo import ogr + + print("GDAL :", gdal.VersionInfo("--version")) + + print("OGR drivers :", ogr.GetDriverCount()) + + PY + + + echo "" + + echo "========================================" + echo "GDAL INSTALLE" + echo "========================================" + + + # ============================================================ + # 8. Vérification GDAL + # ============================================================ + + - name: Check GDAL + if: steps.changed.outputs.shp == 'true' + shell: bash -el {0} + run: | + + set -e + + echo "========================================" + echo "GDAL" + echo "========================================" + + + which gdalinfo + + gdalinfo --version + + + echo "" + + echo "Python GDAL :" + + + python - <<'PY' + + from osgeo import gdal + + print( + gdal.VersionInfo("--version") + ) + + print() + + print( + gdal.VersionInfo("--build-info") + ) + + PY + + + # ============================================================ + # 9. Vérification SFCGAL + # ============================================================ + + - name: Check SFCGAL linkage + if: steps.changed.outputs.shp == 'true' + shell: bash -el {0} + run: | + + set -e + + echo "========================================" + echo "GDAL / SFCGAL" + echo "========================================" + + + ldd "$CONDA_PREFIX/lib/libgdal.so" \ + | grep -Ei "sfcgal|geos" + + + # ============================================================ + # 10. Test SFCGAL + # ============================================================ + + - 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") + 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 + + + # ============================================================ + # 11. Dépendances Python + # ============================================================ + + - 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 + # ============================================================ + + - name: List SHP input files + if: steps.changed.outputs.shp == 'true' + shell: bash -el {0} + run: | + + echo "========================================" + echo "SHP INPUT" + echo "========================================" + + + find Outputs/SHP \ + -maxdepth 1 \ + -type f \ + -name "*.shp" \ + -print + + + # ============================================================ + # 13. Exécution pyThtoQgis + # ============================================================ + + - name: Run pyThtoQgis + if: steps.changed.outputs.shp == 'true' + shell: bash -el {0} + run: | + + set -e + + echo "========================================" + echo "pyThtoQgis" + echo "========================================" + + + cd Scripts/pyThtoQgis + + + python pyThtoQgis.py \ + --folder "../../Outputs/SHP/" + + + # ============================================================ + # 14. Vérification base SQL + # ============================================================ + + - name: Check SQL database + if: steps.changed.outputs.shp == 'true' + shell: bash -el {0} + run: | + + set -e + + echo "========================================" + echo "CHECK DATABASE" + echo "========================================" + + + SQL_FILE="Outputs/DB_Synthese-PSM_LARRA.sql" + + + if [ ! -f "$SQL_FILE" ]; then + + echo "ERREUR : fichier SQL introuvable :" + echo "$SQL_FILE" + + exit 1 + + fi + + + echo "Base SQL trouvée :" + ls -lh "$SQL_FILE" + + + # ============================================================ + # 15. Exécution pyThStat + # ============================================================ + + - name: Run pyThStat + if: steps.changed.outputs.shp == 'true' + shell: bash -el {0} + run: | + + set -e + + echo "========================================" + echo "pyThStat" + echo "========================================" + + + cd Scripts/pyThStat + + + python pyThStat.py \ + --file "../../Outputs/DB_Synthese-PSM_LARRA.sql" + + + # ============================================================ + # 16. Fichiers produits + # ============================================================ + + - name: Show generated files + if: steps.changed.outputs.shp == 'true' + shell: bash + run: | + + echo "========================================" + echo "GENERATED FILES" + echo "========================================" + + + git status --short + + + echo "" + + git diff --stat + + + # ============================================================ + # 17. Commit + # ============================================================ + + - 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>"