Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
278249d
feat: add new build_formations.sh script for unified PDF generation
pguinet Sep 10, 2025
c06b50b
refactor: update build scripts to use new unified generation approach
pguinet Sep 10, 2025
02bb469
refactor: simplify GitHub Actions workflow for unified PDF generation
pguinet Sep 10, 2025
ca000b1
fix: update config.sh permissions for proper execution
pguinet Sep 10, 2025
9e62143
docs: update CLAUDE.md with PDF generation specifications
pguinet Sep 10, 2025
fd248fe
feat: add formation_template.tex for PDF generation
pguinet Sep 10, 2025
9c99af9
feat: create comprehensive GitHub Actions workflows for PDF generation
pguinet Sep 10, 2025
386d5fe
feat: uniformiser l'utilisation du template LaTeX formation_template.tex
pguinet Sep 10, 2025
9bea52b
fix: corriger génération modules individuels et améliorer robustesse
pguinet Sep 10, 2025
c5fe5bb
fix: corriger génération complète des modules individuels
pguinet Sep 10, 2025
8a3cda4
fix: résoudre erreur LaTeX GitHub Actions et génération complète PDFs
pguinet Sep 11, 2025
b8942df
feat: ajouter script CI robuste et diagnostics pour résoudre erreurs …
pguinet Sep 11, 2025
152644a
fix: résoudre exit code 1 après génération module 1 dans GitHub Actions
pguinet Sep 11, 2025
84db35d
fix: corriger formation accélérée - ajouter contenu réel des chapitres
pguinet Sep 11, 2025
48f0b4e
fix: résoudre conflit workflows GitHub Actions - séparer test et prod…
pguinet Sep 11, 2025
865df03
cleanup: supprimer 23 fichiers obsolètes et scripts de debug temporaires
pguinet Sep 11, 2025
4cb8928
docs: mettre à jour CONTRIBUTING.md avec la structure actuelle des mo…
pguinet Sep 11, 2025
a43414b
docs: mettre à jour CLAUDE.md avec l'état actuel du projet
pguinet Sep 11, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
170 changes: 73 additions & 97 deletions .github/workflows/build-pdfs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,6 @@ on:
- 'travaux_pratiques/**'
- 'scripts/**'
- '.github/workflows/build-pdfs.yml'
pull_request:
branches: [ master, main ]
paths:
- 'supports/**'
- 'travaux_pratiques/**'
- 'scripts/**'
workflow_dispatch: # Permet de déclencher manuellement

jobs:
Expand All @@ -23,11 +17,11 @@ jobs:
contents: write # Nécessaire pour créer des releases
actions: read # Lire les actions
packages: read # Lire les packages (pour les images Docker si besoin)

steps:
- name: 📥 Checkout repository
uses: actions/checkout@v4

- name: 🛠️ Install LaTeX and dependencies
run: |
sudo apt-get update
Expand All @@ -38,92 +32,74 @@ jobs:
texlive-fonts-recommended \
texlive-lang-french \
texlive-xetex \
texlive-fonts-extra \
texlive-science \
ghostscript

- name: ✅ Verify installations
run: |
pandoc --version
pdflatex --version
gs --version
echo "📋 Testing French support..."
pdflatex -interaction=nonstopmode <<< '\documentclass{article}\usepackage[french]{babel}\usepackage[utf8]{inputenc}\begin{document}Test français: é à ç\end{document}' && echo "✅ French support OK" || echo "❌ French support failed"

- name: 📁 Create build directories
run: |
mkdir -p build/formations
mkdir -p build/modules_base
mkdir -p build/modules_additionnels
chmod +x scripts/*.sh

- name: 🔨 Build Git module PDF
run: |
echo "🔨 Building Git module..."
./scripts/build_git_module.sh || echo "⚠️ Git module build failed"

- name: 🐳 Build Docker module PDF
run: |
echo "🐳 Building Docker module..."
./scripts/build_docker_module.sh || echo "⚠️ Docker module build failed"

- name: 📚 Build complete formation PDF
run: |
echo "📚 Building complete formation..."
./scripts/build_formation_complete.sh complete || echo "⚠️ Complete formation build failed"

- name: ⚡ Build accelerated formation PDF
run: |
echo "⚡ Building accelerated formation..."
./scripts/build_formation_complete.sh acceleree || echo "⚠️ Accelerated formation build failed"

- name: 📖 Build base modules only PDF
run: |
echo "📖 Building base modules only..."
./scripts/build_formation_complete.sh modules-only || echo "⚠️ Base modules build failed"

- name: 📚 Build all additional modules

- name: 📚 Build all formations and modules
run: |
echo "📚 Building all additional modules..."
./scripts/build_modules_additionnels.sh || echo "⚠️ Some modules failed"

echo "📚 Building all formations and modules..."
./scripts/build_formations.sh || {
echo "⚠️ Main script failed, trying CI-optimized script..."
./scripts/build_formations_ci.sh || echo "⚠️ Both scripts failed"
}

- name: 📊 List generated files
run: |
echo "📊 Generated PDFs:"
find build/ -name "*.pdf" -exec ls -lh {} \; || echo "No PDFs found"
- name: 📤 Upload PDFs as artifacts

- name: 📤 Upload all PDFs as artifacts
uses: actions/upload-artifact@v4
if: always() # Upload même si certains builds ont échoué
with:
name: formation-linux-pdfs-${{ github.sha }}
path: |
build/**/*.pdf
retention-days: 90
- name: 📤 Upload formation complète

- name: 📤 Upload formation accélérée
uses: actions/upload-artifact@v4
if: always()
with:
name: formation-complete-pdf
path: build/formation_linux_complete.pdf
name: formation-acceleree-pdf
path: build/formations/formation_acceleree.pdf
retention-days: 90
if-no-files-found: warn
- name: 📤 Upload formation accélérée

- name: 📤 Upload formation longue
uses: actions/upload-artifact@v4
if: always()
with:
name: formation-acceleree-pdf
path: build/formation_linux_acceleree.pdf
name: formation-longue-pdf
path: build/formations/formation_longue.pdf
retention-days: 90
if-no-files-found: warn
- name: 📤 Upload modules de base

- name: 📤 Upload modules de base individuels
uses: actions/upload-artifact@v4
if: always()
with:
name: formation-modules-base-pdf
path: build/formation_linux_modules_seuls.pdf
name: modules-base-individuels-pdf
path: build/modules_base/*.pdf
retention-days: 90
if-no-files-found: warn

- name: 📤 Upload Git module PDF
uses: actions/upload-artifact@v4
if: always()
Expand All @@ -132,94 +108,94 @@ jobs:
path: build/modules_additionnels/module_additionnel_git.pdf
retention-days: 90
if-no-files-found: warn

- name: 📤 Upload Docker module PDF
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v4
if: always()
with:
name: module-docker-pdf
path: build/modules_additionnels/module_additionnel_docker.pdf
retention-days: 90
if-no-files-found: warn

- name: 📋 Build summary
if: always()
run: |
echo "## 📚 Build Summary" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY

# Formation complète
if [ -f "build/formation_linux_complete.pdf" ]; then
size_complete=$(du -h build/formation_linux_complete.pdf | cut -f1)
echo "✅ **Formation complète** : $size_complete" >> $GITHUB_STEP_SUMMARY
else
echo "❌ **Formation complète** : Failed to build" >> $GITHUB_STEP_SUMMARY
fi


# Formation accélérée
if [ -f "build/formation_linux_acceleree.pdf" ]; then
size_acceleree=$(du -h build/formation_linux_acceleree.pdf | cut -f1)
if [ -f "build/formations/formation_acceleree.pdf" ]; then
size_acceleree=$(du -h build/formations/formation_acceleree.pdf | cut -f1)
echo "✅ **Formation accélérée** : $size_acceleree" >> $GITHUB_STEP_SUMMARY
else
echo "❌ **Formation accélérée** : Failed to build" >> $GITHUB_STEP_SUMMARY
fi
# Modules de base seulement
if [ -f "build/formation_linux_modules_seuls.pdf" ]; then
size_modules=$(du -h build/formation_linux_modules_seuls.pdf | cut -f1)
echo "✅ **Modules de base** : $size_modules" >> $GITHUB_STEP_SUMMARY

# Formation longue
if [ -f "build/formations/formation_longue.pdf" ]; then
size_longue=$(du -h build/formations/formation_longue.pdf | cut -f1)
echo "✅ **Formation longue** : $size_longue" >> $GITHUB_STEP_SUMMARY
else
echo "❌ **Modules de base** : Failed to build" >> $GITHUB_STEP_SUMMARY
echo "❌ **Formation longue** : Failed to build" >> $GITHUB_STEP_SUMMARY
fi


# Modules de base individuels
modules_count=$(find build/modules_base/ -name "*.pdf" 2>/dev/null | wc -l || echo "0")
if [ "$modules_count" -gt 0 ]; then
echo "✅ **Modules de base individuels** : $modules_count modules générés" >> $GITHUB_STEP_SUMMARY
else
echo "❌ **Modules de base individuels** : Failed to build" >> $GITHUB_STEP_SUMMARY
fi

# Modules additionnels
if [ -f "build/modules_additionnels/module_additionnel_git.pdf" ]; then
size_git=$(du -h build/modules_additionnels/module_additionnel_git.pdf | cut -f1)
echo "✅ **Module Git** : $size_git" >> $GITHUB_STEP_SUMMARY
else
echo "❌ **Module Git** : Failed to build" >> $GITHUB_STEP_SUMMARY
fi

if [ -f "build/modules_additionnels/module_additionnel_docker.pdf" ]; then
size_docker=$(du -h build/modules_additionnels/module_additionnel_docker.pdf | cut -f1)
echo "✅ **Module Docker** : $size_docker" >> $GITHUB_STEP_SUMMARY
else
echo "❌ **Module Docker** : Failed to build" >> $GITHUB_STEP_SUMMARY
fi

echo "" >> $GITHUB_STEP_SUMMARY
echo "📥 **Artifacts disponibles :**" >> $GITHUB_STEP_SUMMARY
echo "- \`formation-linux-pdfs-${{ github.sha }}\` - Tous les PDFs" >> $GITHUB_STEP_SUMMARY
echo "- \`formation-complete-pdf\` - Formation complète" >> $GITHUB_STEP_SUMMARY
echo "- \`formation-acceleree-pdf\` - Formation accélérée" >> $GITHUB_STEP_SUMMARY
echo "- \`formation-modules-base-pdf\` - Modules de base" >> $GITHUB_STEP_SUMMARY
echo "- \`module-git-pdf\` - Module Git uniquement" >> $GITHUB_STEP_SUMMARY
echo "- \`formation-acceleree-pdf\` - Formation accélérée (8h)" >> $GITHUB_STEP_SUMMARY
echo "- \`formation-longue-pdf\` - Formation longue (37h30)" >> $GITHUB_STEP_SUMMARY
echo "- \`modules-base-individuels-pdf\` - 8 modules de base séparés" >> $GITHUB_STEP_SUMMARY
echo "- \`module-git-pdf\` - Module Git uniquement" >> $GITHUB_STEP_SUMMARY
echo "- \`module-docker-pdf\` - Module Docker uniquement" >> $GITHUB_STEP_SUMMARY

# Job optionnel pour créer une release automatique
create-release:
needs: build-pdfs
runs-on: ubuntu-latest
permissions:
contents: write # Nécessaire pour créer des releases
actions: read # Lire les actions
if: github.ref == 'refs/heads/master' && github.event_name == 'push'
if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main' && github.event_name == 'push'

steps:
- name: 📥 Checkout repository
uses: actions/checkout@v4

- name: 📥 Download all artifacts
uses: actions/download-artifact@v4
with:
pattern: "*-pdf*"
path: ./pdfs

- name: 📋 List downloaded files
run: |
echo "📋 Downloaded PDFs:"
find ./pdfs -name "*.pdf" -exec ls -lh {} \; || echo "⚠️ Aucun PDF trouvé"

- name: ✅ Verify PDFs exist
run: |
if find ./pdfs -name "*.pdf" | head -1 | grep -q .; then
Expand All @@ -229,7 +205,7 @@ jobs:
echo "❌ No PDFs found, skipping release"
echo "PDF_EXISTS=false" >> $GITHUB_ENV
fi

- name: 🏷️ Create Release
if: success() && env.PDF_EXISTS == 'true'
uses: softprops/action-gh-release@v2
Expand All @@ -239,20 +215,20 @@ jobs:
name: "Formation Linux - Build ${{ github.run_number }}"
body: |
## 📚 Formation Linux - PDFs automatiques

**Commit:** `${{ github.sha }}`
**Branche:** `${{ github.ref_name }}`
**Date:** ${{ github.event.head_commit.timestamp }}

### 📄 Modules disponibles :
- **Module Git** : Contrôle de version (6-8h)
- **Module Git** : Contrôle de version (6-8h)
- **Module Docker** : Conteneurisation (12-15h)

### 🚀 Utilisation :
1. Télécharger les PDFs depuis les assets ci-dessous
2. Consulter la [documentation](https://github.com/${{ github.repository }}) pour les prérequis
3. Suivre les modules dans l'ordre recommandé

---
🤖 Build automatique via GitHub Actions
files: |
Expand All @@ -263,17 +239,17 @@ jobs:
generate_release_notes: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: 📋 Release Status
if: always()
run: |
echo "## 🏷️ Release Information" >> $GITHUB_STEP_SUMMARY
if [ "${{ env.PDF_EXISTS }}" = "true" ]; then
echo "✅ **PDFs disponibles** pour release" >> $GITHUB_STEP_SUMMARY
else
echo "❌ **Aucun PDF** généré pour cette release" >> $GITHUB_STEP_SUMMARY
echo "❌ **Aucun PDF** généré pour cette release" >> $GITHUB_STEP_SUMMARY
fi

echo "" >> $GITHUB_STEP_SUMMARY
echo "**Alternative :** Les PDFs sont toujours disponibles via les artifacts du build principal." >> $GITHUB_STEP_SUMMARY
echo "Aller dans [Actions](/${{ github.repository }}/actions) → Build #${{ github.run_number }} → Artifacts" >> $GITHUB_STEP_SUMMARY
Loading