Refactor GitHub Actions workflow for ScriptPython

This commit is contained in:
Alex38Lyon
2026-09-25 19:23:52 +02:00
committed by GitHub
parent f469640cdc
commit 76e012ae1a
+8 -252
View File
@@ -1,54 +1,35 @@
name: ScriptPython name: ScriptPython
on: on:
push: push:
branches: branches:
- main - main
paths: paths:
- 'Outputs/SHP/*.shp' - 'Outputs/SHP/*.shp'
workflow_dispatch: workflow_dispatch:
permissions: permissions:
contents: write contents: write
concurrency: concurrency:
group: pyThtoQgis group: pyThtoQgis
cancel-in-progress: false cancel-in-progress: false
jobs: jobs:
ScriptPython:
pyThtoQgis:
runs-on: ubuntu-24.04 runs-on: ubuntu-24.04
steps: steps:
# ============================================================ # ============================================================
# 1. Checkout # 1. Checkout
# ============================================================ # ============================================================
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v6 uses: actions/checkout@v6
with: with:
fetch-depth: 0 fetch-depth: 0
# ============================================================ # ============================================================
# 2. Vérification SHP # 2. Vérification SHP
# ============================================================ # ============================================================
- name: Check SHP changes - name: Check SHP changes
id: changed id: changed
shell: bash shell: bash
run: | run: |
SHP_FILES=$(git diff-tree \ SHP_FILES=$(git diff-tree \
--no-commit-id \ --no-commit-id \
--name-only \ --name-only \
@@ -57,47 +38,36 @@ jobs:
"$GITHUB_SHA" \ "$GITHUB_SHA" \
-- 'Outputs/SHP/*.shp') -- 'Outputs/SHP/*.shp')
echo "SHP ajoutés/modifiés :" echo "SHP ajoutés/modifiés :"
echo "$SHP_FILES" echo "$SHP_FILES"
if [ -n "$SHP_FILES" ]; then if [ -n "$SHP_FILES" ]; then
echo "shp=true" >> "$GITHUB_OUTPUT" echo "shp=true" >> "$GITHUB_OUTPUT"
else else
echo "shp=false" >> "$GITHUB_OUTPUT" echo "shp=false" >> "$GITHUB_OUTPUT"
fi fi
# ============================================================ # ============================================================
# 3. Arrêt si suppression uniquement # 3. Arrêt si suppression uniquement
# ============================================================ # ============================================================
- name: Stop if no SHP added or modified - name: Stop if no SHP added or modified
if: steps.changed.outputs.shp != 'true' if: steps.changed.outputs.shp != 'true'
shell: bash shell: bash
run: | run: |
echo "Aucun SHP ajouté ou modifié." echo "Aucun SHP ajouté ou modifié."
echo "Arrêt du workflow." echo "Arrêt du workflow."
# ============================================================ # ============================================================
# 4. Micromamba # 4. Micromamba
#
# IMPORTANT : # IMPORTANT :
# PAS de GDAL ici. # PAS de GDAL ici.
#
# GDAL sera fourni par notre package précompilé. # GDAL sera fourni par notre package précompilé.
# ============================================================ # ============================================================
- name: Setup Micromamba - name: Setup Micromamba
if: steps.changed.outputs.shp == 'true' if: steps.changed.outputs.shp == 'true'
uses: mamba-org/setup-micromamba@v3.2.1 uses: mamba-org/setup-micromamba@v3.2.1
with: with:
environment-name: pyThtoQgis environment-name: pyThtoQgis
create-args: >- create-args: >-
python=3.12 python=3.12
numpy numpy
@@ -111,380 +81,242 @@ jobs:
zlib zlib
curl curl
openssl openssl
init-shell: bash init-shell: bash
cache-environment: true cache-environment: true
cache-downloads: true cache-downloads: true
# ============================================================ # ============================================================
# 5. Informations environnement # 5. Informations environnement
# ============================================================ # ============================================================
- name: Environment information - name: Environment information
if: steps.changed.outputs.shp == 'true' if: steps.changed.outputs.shp == 'true'
shell: bash -el {0} shell: bash -el {0}
run: | run: |
echo "========================================" echo "========================================"
echo "ENVIRONMENT" echo "ENVIRONMENT"
echo "========================================" echo "========================================"
echo "CONDA_PREFIX=$CONDA_PREFIX" echo "CONDA_PREFIX=$CONDA_PREFIX"
python --version python --version
echo "" echo ""
conda list | grep -E \ conda list | grep -E \
"python|numpy|sfcgal|geos|proj|sqlite" "python|numpy|sfcgal|geos|proj|sqlite"
# ============================================================ # ============================================================
# 6. Téléchargement package GDAL # 6. Téléchargement package GDAL
# ============================================================ # ============================================================
- name: Download GDAL + SFCGAL package - name: Download GDAL + SFCGAL package
if: steps.changed.outputs.shp == 'true' if: steps.changed.outputs.shp == 'true'
shell: bash -el {0} shell: bash -el {0}
env: env:
GH_TOKEN: ${{ github.token }} GH_TOKEN: ${{ github.token }}
run: | run: |
set -e set -e
GDAL_VERSION=3.13.3 GDAL_VERSION=3.13.3
PACKAGE_NAME="gdal-${GDAL_VERSION}-sfcgal-2.2-geos-3.14.1-ubuntu-24.04" PACKAGE_NAME="gdal-${GDAL_VERSION}-sfcgal-2.2-geos-3.14.1-ubuntu-24.04"
TAG="gdal-sfcgal-${GDAL_VERSION}" TAG="gdal-sfcgal-${GDAL_VERSION}"
echo "========================================" echo "========================================"
echo "GDAL PACKAGE" echo "GDAL PACKAGE"
echo "========================================" echo "========================================"
echo "Release : $TAG" echo "Release : $TAG"
echo "Package : $PACKAGE_NAME" echo "Package : $PACKAGE_NAME"
gh release download "$TAG" \ gh release download "$TAG" \
--repo "$GITHUB_REPOSITORY" \ --repo "$GITHUB_REPOSITORY" \
--pattern "${PACKAGE_NAME}.tar.gz" \ --pattern "${PACKAGE_NAME}.tar.gz" \
--dir "$RUNNER_TEMP" --dir "$RUNNER_TEMP"
echo "" echo ""
echo "Package téléchargé :" echo "Package téléchargé :"
ls -lh \ ls -lh \
"$RUNNER_TEMP/${PACKAGE_NAME}.tar.gz" "$RUNNER_TEMP/${PACKAGE_NAME}.tar.gz"
# ============================================================ # ============================================================
# 7. Installation package GDAL # 7. Installation package GDAL
# ============================================================ # ============================================================
- name: Installation GDAL package - name: Installation GDAL package
if: steps.changed.outputs.shp == 'true' if: steps.changed.outputs.shp == 'true'
shell: bash -el {0} shell: bash -el {0}
run: | run: |
set -e set -e
GDAL_VERSION=3.13.3 GDAL_VERSION=3.13.3
PACKAGE_NAME="gdal-${GDAL_VERSION}-sfcgal-2.2-geos-3.14.1-ubuntu-24.04" PACKAGE_NAME="gdal-${GDAL_VERSION}-sfcgal-2.2-geos-3.14.1-ubuntu-24.04"
PACKAGE="$RUNNER_TEMP/${PACKAGE_NAME}.tar.gz" PACKAGE="$RUNNER_TEMP/${PACKAGE_NAME}.tar.gz"
EXTRACT_DIR="$RUNNER_TEMP/gdal-extract" EXTRACT_DIR="$RUNNER_TEMP/gdal-extract"
echo "========================================" echo "========================================"
echo "INSTALLATION GDAL" echo "INSTALLATION GDAL"
echo "========================================" echo "========================================"
# ======================================================== # ========================================================
# Vérification du package # Vérification du package
# ======================================================== # ========================================================
if [ ! -f "$PACKAGE" ]; then if [ ! -f "$PACKAGE" ]; then
echo "ERREUR : package introuvable :" echo "ERREUR : package introuvable :"
echo "$PACKAGE" echo "$PACKAGE"
exit 1 exit 1
fi fi
# ======================================================== # ========================================================
# Extraction # Extraction
# ======================================================== # ========================================================
rm -rf "$EXTRACT_DIR" rm -rf "$EXTRACT_DIR"
mkdir -p "$EXTRACT_DIR" mkdir -p "$EXTRACT_DIR"
tar \ tar \
-xzf \ -xzf \
"$PACKAGE" \ "$PACKAGE" \
-C "$EXTRACT_DIR" -C "$EXTRACT_DIR"
# ======================================================== # ========================================================
# Affichage STRUCTURE REELLE # Affichage STRUCTURE REELLE
# ======================================================== # ========================================================
echo "" echo ""
echo "========================================" echo "========================================"
echo "STRUCTURE DU PACKAGE" echo "STRUCTURE DU PACKAGE"
echo "========================================" echo "========================================"
find "$EXTRACT_DIR" \ find "$EXTRACT_DIR" \
-maxdepth 6 \ -maxdepth 6 \
-print \ -print \
| sort | sort
# ======================================================== # ========================================================
# Répertoire racine # Répertoire racine
# ======================================================== # ========================================================
GDAL_DIR="$EXTRACT_DIR/$PACKAGE_NAME" GDAL_DIR="$EXTRACT_DIR/$PACKAGE_NAME"
if [ ! -d "$GDAL_DIR" ]; then if [ ! -d "$GDAL_DIR" ]; then
echo "" echo ""
echo "ERREUR : répertoire package absent :" echo "ERREUR : répertoire package absent :"
echo "$GDAL_DIR" echo "$GDAL_DIR"
exit 1 exit 1
fi fi
echo "" echo ""
echo "GDAL_DIR :" echo "GDAL_DIR :"
echo "$GDAL_DIR" echo "$GDAL_DIR"
# ======================================================== # ========================================================
# Vérification structure attendue # Vérification structure attendue
# ======================================================== # ========================================================
echo "" echo ""
echo "========================================" echo "========================================"
echo "VERIFICATION" echo "VERIFICATION"
echo "========================================" echo "========================================"
if [ ! -d "$GDAL_DIR/bin" ]; then if [ ! -d "$GDAL_DIR/bin" ]; then
echo "ERREUR : bin/ absent" echo "ERREUR : bin/ absent"
exit 1 exit 1
fi fi
if [ ! -d "$GDAL_DIR/lib" ]; then if [ ! -d "$GDAL_DIR/lib" ]; then
echo "ERREUR : lib/ absent" echo "ERREUR : lib/ absent"
exit 1 exit 1
fi fi
# ======================================================== # ========================================================
# Installation BIN # Installation BIN
# ======================================================== # ========================================================
echo "" echo ""
echo "Installation bin/..." echo "Installation bin/..."
cp -av \ cp -av \
"$GDAL_DIR/bin/." \ "$GDAL_DIR/bin/." \
"$CONDA_PREFIX/bin/" "$CONDA_PREFIX/bin/"
# ======================================================== # ========================================================
# Installation LIB # Installation LIB
# ======================================================== # ========================================================
echo "" echo ""
echo "Installation lib/..." echo "Installation lib/..."
cp -av \ cp -av \
"$GDAL_DIR/lib/." \ "$GDAL_DIR/lib/." \
"$CONDA_PREFIX/lib/" "$CONDA_PREFIX/lib/"
# ======================================================== # ========================================================
# Installation SHARE # Installation SHARE
# ======================================================== # ========================================================
if [ -d "$GDAL_DIR/share" ]; then if [ -d "$GDAL_DIR/share" ]; then
echo "" echo ""
echo "Installation share/..." echo "Installation share/..."
cp -av \ cp -av \
"$GDAL_DIR/share/." \ "$GDAL_DIR/share/." \
"$CONDA_PREFIX/share/" "$CONDA_PREFIX/share/"
fi fi
# ======================================================== # ========================================================
# Vérification GDAL # Vérification GDAL
# ======================================================== # ========================================================
echo "" echo ""
echo "========================================" echo "========================================"
echo "VERIFICATION GDAL" echo "VERIFICATION GDAL"
echo "========================================" echo "========================================"
echo "" echo ""
echo "gdalinfo :" echo "gdalinfo :"
which gdalinfo which gdalinfo
gdalinfo --version gdalinfo --version
echo "" echo ""
echo "GDAL Python :" echo "GDAL Python :"
python - <<'PY' python - <<'PY'
from osgeo import gdal from osgeo import gdal
from osgeo import ogr from osgeo import ogr
print("GDAL :", gdal.VersionInfo("--version")) print("GDAL :", gdal.VersionInfo("--version"))
print("OGR drivers :", ogr.GetDriverCount()) print("OGR drivers :", ogr.GetDriverCount())
PY PY
echo "" echo ""
echo "========================================" echo "========================================"
echo "GDAL INSTALLE" echo "GDAL INSTALLE"
echo "========================================" echo "========================================"
# ============================================================ # ============================================================
# 8. Vérification GDAL # 8. Vérification GDAL
# ============================================================ # ============================================================
- name: Check GDAL - name: Check GDAL
if: steps.changed.outputs.shp == 'true' if: steps.changed.outputs.shp == 'true'
shell: bash -el {0} shell: bash -el {0}
run: | run: |
set -e set -e
echo "========================================" echo "========================================"
echo "GDAL" echo "GDAL"
echo "========================================" echo "========================================"
which gdalinfo which gdalinfo
gdalinfo --version gdalinfo --version
echo "" echo ""
echo "Python GDAL :" echo "Python GDAL :"
python - <<'PY' python - <<'PY'
from osgeo import gdal from osgeo import gdal
print( print(
gdal.VersionInfo("--version") gdal.VersionInfo("--version")
) )
print() print()
print( print(
gdal.VersionInfo("--build-info") gdal.VersionInfo("--build-info")
) )
PY PY
# ============================================================ # ============================================================
# 9. Vérification SFCGAL # 9. Vérification SFCGAL
# ============================================================ # ============================================================
- name: Check SFCGAL linkage - name: Check SFCGAL linkage
if: steps.changed.outputs.shp == 'true' if: steps.changed.outputs.shp == 'true'
shell: bash -el {0} shell: bash -el {0}
run: | run: |
set -e set -e
echo "========================================" echo "========================================"
echo "GDAL / SFCGAL" echo "GDAL / SFCGAL"
echo "========================================" echo "========================================"
ldd "$CONDA_PREFIX/lib/libgdal.so" \ ldd "$CONDA_PREFIX/lib/libgdal.so" \
| grep -Ei "sfcgal|geos" | grep -Ei "sfcgal|geos"
# ============================================================ # ============================================================
# 10. Test SFCGAL # 10. Test SFCGAL
# ============================================================ # ============================================================
- name: Test SFCGAL via OGR - name: Test SFCGAL via OGR
if: steps.changed.outputs.shp == 'true' if: steps.changed.outputs.shp == 'true'
shell: bash -el {0} shell: bash -el {0}
run: | run: |
python - <<'PY' python - <<'PY'
from osgeo import ogr from osgeo import ogr
from osgeo import gdal from osgeo import gdal
print("========================================") print("========================================")
print("TEST SFCGAL") print("TEST SFCGAL")
print("========================================") print("========================================")
print(gdal.VersionInfo("--version"))
print(
gdal.VersionInfo("--version")
)
wkt = """ wkt = """
POLYHEDRALSURFACE Z ( POLYHEDRALSURFACE Z (
( (
@@ -496,165 +328,95 @@ jobs:
) )
) )
""" """
geom = ogr.CreateGeometryFromWkt(wkt) geom = ogr.CreateGeometryFromWkt(wkt)
if geom is None: if geom is None:
raise RuntimeError( raise RuntimeError(
"Impossible de créer la géométrie 3D" "Impossible de créer la géométrie 3D"
) )
print("Type :", geom.GetGeometryName())
print("Geometry type :", geom.GetGeometryType())
print( print("Has Z :", ogr.GT_HasZ(geom.GetGeometryType()))
"Type :",
geom.GetGeometryName()
)
print(
"Geometry type :",
geom.GetGeometryType()
)
print(
"Has Z :",
ogr.GT_HasZ(
geom.GetGeometryType()
)
)
valid = geom.IsValid() valid = geom.IsValid()
print("IsValid() :", valid)
print(
"IsValid() :",
valid
)
print() print()
print("SFCGAL accessible par OGR : OK")
print(
"SFCGAL accessible par OGR : OK"
)
PY PY
# ============================================================ # ============================================================
# 11. Dépendances Python # 11. Dépendances Python
# ============================================================ # ============================================================
- name: Install Python dependencies - name: Install Python dependencies
if: steps.changed.outputs.shp == 'true' if: steps.changed.outputs.shp == 'true'
shell: bash -el {0} shell: bash -el {0}
run: | run: |
python -m pip install --upgrade pip python -m pip install --upgrade pip
pip install \ pip install \
alive-progress alive-progress
# ============================================================ # ============================================================
# 12. Affichage des SHP # 12. Affichage des SHP
# ============================================================ # ============================================================
- name: List SHP input files - name: List SHP input files
if: steps.changed.outputs.shp == 'true' if: steps.changed.outputs.shp == 'true'
shell: bash -el {0} shell: bash -el {0}
run: | run: |
echo "========================================" echo "========================================"
echo "SHP INPUT" echo "SHP INPUT"
echo "========================================" echo "========================================"
find Outputs/SHP \ find Outputs/SHP \
-maxdepth 1 \ -maxdepth 1 \
-type f \ -type f \
-name "*.shp" \ -name "*.shp" \
-print -print
# ============================================================ # ============================================================
# 13. Exécution pyThtoQgis # 13. Exécution pyThtoQgis
# ============================================================ # ============================================================
- name: Run pyThtoQgis - name: Run pyThtoQgis
if: steps.changed.outputs.shp == 'true' if: steps.changed.outputs.shp == 'true'
shell: bash -el {0} shell: bash -el {0}
run: | run: |
set -e set -e
echo "========================================" echo "========================================"
echo "pyThtoQgis" echo "pyThtoQgis"
echo "========================================" echo "========================================"
cd Scripts/pyThtoQgis cd Scripts/pyThtoQgis
python pyThtoQgis.py \ python pyThtoQgis.py \
--folder "../../Outputs/SHP/" --folder "../../Outputs/SHP/"
# ============================================================ # ============================================================
# 14. Vérification base SQL # 14. Vérification base SQL
# ============================================================ # ============================================================
- name: Check SQL database - name: Check SQL database
if: steps.changed.outputs.shp == 'true' if: steps.changed.outputs.shp == 'true'
shell: bash -el {0} shell: bash -el {0}
run: | run: |
set -e set -e
echo "========================================" echo "========================================"
echo "CHECK DATABASE" echo "CHECK DATABASE"
echo "========================================" echo "========================================"
SQL_FILE="Outputs/DB_Synthese-PSM_LARRA.sql" SQL_FILE="Outputs/DB_Synthese-PSM_LARRA.sql"
if [ ! -f "$SQL_FILE" ]; then if [ ! -f "$SQL_FILE" ]; then
echo "ERREUR : fichier SQL introuvable :" echo "ERREUR : fichier SQL introuvable :"
echo "$SQL_FILE" echo "$SQL_FILE"
exit 1 exit 1
fi fi
echo "Base SQL trouvée :" echo "Base SQL trouvée :"
ls -lh "$SQL_FILE" ls -lh "$SQL_FILE"
# ============================================================ # ============================================================
# 15. Exécution pyThStat # 15. Exécution pyThStat
# ============================================================ # ============================================================
# ============================================================ # ============================================================
# Recherche pyThStat.py # Recherche pyThStat.py
# ============================================================ # ============================================================
- name: Find pyThStat.py - name: Find pyThStat.py
if: steps.changed.outputs.shp == 'true' if: steps.changed.outputs.shp == 'true'
shell: bash shell: bash
run: | run: |
echo "========================================" echo "========================================"
echo "RECHERCHE pyThStat.py" echo "RECHERCHE pyThStat.py"
echo "========================================" echo "========================================"
find . \ find . \
-type f \ -type f \
-name "pyThStat.py" \ -name "pyThStat.py" \
@@ -664,21 +426,15 @@ jobs:
if: steps.changed.outputs.shp == 'true' if: steps.changed.outputs.shp == 'true'
shell: bash -el {0} shell: bash -el {0}
run: | run: |
set -e set -e
echo "========================================" echo "========================================"
echo "pyThStat" echo "pyThStat"
echo "========================================" echo "========================================"
cd ..
cd Scripts/pyThStat cd Scripts/pyThStat
python pyThStat.py \ python pyThStat.py \
--file "../../Outputs/DB_Synthese-PSM_LARRA.sql" --file "../../Outputs/DB_Synthese-PSM_LARRA.sql"
# ============================================================ # ============================================================
# 16. Fichiers produits # 16. Fichiers produits
# ============================================================ # ============================================================