mirror of
https://github.com/Alex38Lyon/Synthese-PSM_LARRA.git
synced 2026-09-30 07:21:55 +00:00
Updated workflow to check for changes in both SHP and SQL files. Adjusted conditions for executing subsequent steps based on changes detected.
516 lines
19 KiB
YAML
516 lines
19 KiB
YAML
name: ScriptPython
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
paths:
|
|
- 'Outputs/SHP/*.shp'
|
|
- 'Outputs/DB_Synthese-PSM_LARRA.sql'
|
|
workflow_dispatch:
|
|
permissions:
|
|
contents: write
|
|
concurrency:
|
|
group: pyThtoQgis
|
|
cancel-in-progress: false
|
|
jobs:
|
|
ScriptPython:
|
|
runs-on: ubuntu-24.04
|
|
steps:
|
|
# ============================================================
|
|
# 1. Checkout
|
|
# ============================================================
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v6
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
# ============================================================
|
|
# 2. Vérification des fichiers SHP et SQL modifiés
|
|
# ou lancement manuel
|
|
# ============================================================
|
|
- name: Check SHP and SQL changes
|
|
id: changed
|
|
shell: bash
|
|
run: |
|
|
echo "========================================"
|
|
echo "VÉRIFICATION DES MODIFICATIONS"
|
|
echo "========================================"
|
|
|
|
# --------------------------------------------------------
|
|
# Lancement manuel
|
|
# --------------------------------------------------------
|
|
if [ "$GITHUB_EVENT_NAME" = "workflow_dispatch" ]; then
|
|
echo "Workflow lancé manuellement."
|
|
echo "changed=true" >> "$GITHUB_OUTPUT"
|
|
echo "manual=true" >> "$GITHUB_OUTPUT"
|
|
echo "shp=true" >> "$GITHUB_OUTPUT"
|
|
echo "sql=true" >> "$GITHUB_OUTPUT"
|
|
exit 0
|
|
fi
|
|
|
|
echo "========================================"
|
|
echo "Recherche des fichiers modifiés"
|
|
echo "========================================"
|
|
|
|
# --------------------------------------------------------
|
|
# SHP ajoutés ou modifiés
|
|
# --------------------------------------------------------
|
|
SHP_FILES=$(git diff-tree \
|
|
--no-commit-id \
|
|
--name-only \
|
|
--diff-filter=AM \
|
|
-r \
|
|
"$GITHUB_SHA" \
|
|
-- 'Outputs/SHP/*.shp')
|
|
|
|
# --------------------------------------------------------
|
|
# SQL ajouté ou modifié
|
|
# --------------------------------------------------------
|
|
SQL_FILE="Outputs/DB_Synthese-PSM_LARRA.sql"
|
|
SQL_CHANGED=$(git diff-tree \
|
|
--no-commit-id \
|
|
--name-only \
|
|
--diff-filter=AM \
|
|
-r \
|
|
"$GITHUB_SHA" \
|
|
-- "$SQL_FILE")
|
|
|
|
# --------------------------------------------------------
|
|
# Affichage
|
|
# --------------------------------------------------------
|
|
echo ""
|
|
echo "SHP ajoutés/modifiés :"
|
|
if [ -n "$SHP_FILES" ]; then
|
|
echo "$SHP_FILES"
|
|
echo "shp=true" >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo "Aucun"
|
|
echo "shp=false" >> "$GITHUB_OUTPUT"
|
|
fi
|
|
|
|
echo ""
|
|
echo "SQL ajouté/modifié :"
|
|
if [ -n "$SQL_CHANGED" ]; then
|
|
echo "$SQL_CHANGED"
|
|
echo "sql=true" >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo "Aucun"
|
|
echo "sql=false" >> "$GITHUB_OUTPUT"
|
|
fi
|
|
|
|
# --------------------------------------------------------
|
|
# Décision de poursuivre
|
|
# --------------------------------------------------------
|
|
if [ -n "$SHP_FILES" ] || [ -n "$SQL_CHANGED" ]; then
|
|
echo ""
|
|
echo "SHP ou SQL ajouté/modifié : CONTINUER"
|
|
echo "changed=true" >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo ""
|
|
echo "Aucun SHP ni SQL ajouté/modifié."
|
|
echo "changed=false" >> "$GITHUB_OUTPUT"
|
|
fi
|
|
|
|
echo "manual=false" >> "$GITHUB_OUTPUT"
|
|
|
|
# ============================================================
|
|
# 3.1 Arrêt si aucun SHP/SQL et pas de lancement manuel
|
|
# ============================================================
|
|
- name: Stop if no SHP or SQL changes
|
|
if: steps.changed.outputs.changed != 'true'
|
|
shell: bash
|
|
run: |
|
|
echo "Aucun SHP ou SQL ajouté/modifié."
|
|
echo "Arrêt du workflow."
|
|
|
|
# ============================================================
|
|
# 3.2 Vérification de la base SQL
|
|
# ============================================================
|
|
- name: Check SQL database
|
|
if: steps.changed.outputs.changed == '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"
|
|
|
|
# ============================================================
|
|
# 4. Micromamba
|
|
# IMPORTANT :
|
|
# PAS de GDAL ici.
|
|
# GDAL sera fourni par notre package précompilé.
|
|
# ============================================================
|
|
- name: Setup Micromamba
|
|
if: steps.changed.outputs.shp == 'true' || steps.changed.outputs.manual == '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' || steps.changed.outputs.manual == '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' || steps.changed.outputs.manual == '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' || steps.changed.outputs.manual == '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' || steps.changed.outputs.manual == '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' || steps.changed.outputs.manual == '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' || steps.changed.outputs.manual == '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' || steps.changed.outputs.sql == 'true' || steps.changed.outputs.manual == 'true'
|
|
shell: bash -el {0}
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
pip install alive-progress
|
|
pip install pandas
|
|
pip install matplotlib
|
|
|
|
# ============================================================
|
|
# 12. Affichage des SHP
|
|
# ============================================================
|
|
- name: List SHP input files
|
|
if: steps.changed.outputs.shp == 'true' || steps.changed.outputs.manual == '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' || steps.changed.outputs.manual == 'true'
|
|
shell: bash -el {0}
|
|
run: |
|
|
set -e
|
|
echo "========================================"
|
|
echo "pyThtoQgis"
|
|
echo "========================================"
|
|
cd Scripts/pyThtoQgis
|
|
python pyThtoQgis.py --folder "../../Outputs/SHP/"
|
|
|
|
# ============================================================
|
|
# 14. Exécution pyThStat
|
|
# ============================================================
|
|
- name: Run pyThStat
|
|
if: steps.changed.outputs.shp == 'true' || steps.changed.outputs.manual == 'true'
|
|
shell: bash -el {0}
|
|
run: |
|
|
set -e
|
|
echo "========================================"
|
|
echo "pyThStat"
|
|
echo "========================================"
|
|
ls -l
|
|
cd Scripts/pyThStat
|
|
echo "========================================"
|
|
ls -l
|
|
python pythStat.py --file "../../Outputs/DB_Synthese-PSM_LARRA.sql"
|
|
|
|
# ============================================================
|
|
# 15. Fichiers produits
|
|
# ============================================================
|
|
- name: Show generated files
|
|
if: steps.changed.outputs.shp == 'true' || steps.changed.outputs.sql == 'true' || steps.changed.outputs.manual == 'true'
|
|
shell: bash
|
|
run: |
|
|
echo "========================================"
|
|
echo "GENERATED FILES"
|
|
echo "========================================"
|
|
git status --short
|
|
echo ""
|
|
git diff --stat
|
|
|
|
# ============================================================
|
|
# 16. Commit
|
|
# ============================================================
|
|
- name: Commit generated files
|
|
if: steps.changed.outputs.shp == 'true' || steps.changed.outputs.sql == 'true' || steps.changed.outputs.manual == 'true'
|
|
uses: stefanzweifel/git-auto-commit-action@v7
|
|
with:
|
|
commit_message: "Auto-generate outputs from ScriptPython"
|
|
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>"
|