Files
Alex38Lyon b9776e2a33 Include commit date in ScriptPython workflow
Add commit date to GitHub Actions output for auto-commit.
2026-09-26 21:02:56 +02:00

524 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 "========================================"
# Date et heure du commit
COMMIT_DATE=$(date '+%Y-%m-%d %H:%M:%S')
echo "commit_date=$COMMIT_DATE" >> "$GITHUB_OUTPUT"
echo "Date du commit : $COMMIT_DATE"
# --------------------------------------------------------
# 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
env:
COMMIT_DATE: ${{ steps.changed.outputs.commit_date }}
with:
commit_message: "Auto-generate outputs from ScriptPython - ${{ env.COMMIT_DATE }}"
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>"