Files
Synthese-PSM_LARRA/.github/workflows/ScriptPython.yml
T
Alex38Lyon 441f416f4c Modify GitHub Actions to include SQL file checks
Updated workflow to check for changes in both SHP and SQL files. Adjusted conditions for executing subsequent steps based on changes detected.
2026-09-26 10:20:10 +02:00

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>"