BOVO Digital
BOVO Digital
Automatisation8 min de lecture

Automatiser sa Checklist de Release avec n8n et GitHub Actions (Guide 2026)

La fuite de Claude Code aurait pu être évitée avec une simple automatisation. Voici comment construire un pipeline de release sécurisé qui scanne vos bundles, détecte les fichiers sensibles et bloque les publications dangereuses — avec n8n et GitHub Actions.

William Aklamavo

William Aklamavo

31 mars 2026

Automatiser sa Checklist de Release avec n8n et GitHub Actions (Guide 2026)

Automatiser sa Checklist de Release avec n8n et GitHub Actions

La fuite du code source de Claude Code (31 mars 2026) avait une cause simple : un fichier .map oublié dans le bundle de production. Une automatisation basique l'aurait détecté.

Voici comment construire ce système.

Le problème des releases manuelles

Chaque équipe a une checklist de release. La plupart du temps, elle est dans la tête du dev principal, ou dans un doc Notion que personne ne lit.

Résultat : les oublis se produisent au pire moment — juste avant le push en production.

Architecture du pipeline

Code push → GitHub Actions → Scan sécurité → Build → Validation bundle → Publish
                                    ↓                        ↓
                              Alerte Slack           Blocage si .map détecté

1. GitHub Action : Scan pré-publish

Créez .github/workflows/pre-publish-check.yml :

name: Pre-publish Security Scan

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  security-scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Install dependencies
        run: npm ci
      
      - name: Build
        run: npm run build
      
      - name: Scan for source maps in dist
        run: |
          if find dist -name "*.map" | grep -q .; then
            echo "❌ Source maps trouvées dans dist/ — publication bloquée"
            find dist -name "*.map"
            exit 1
          fi
          echo "✅ Aucun fichier .map dans le bundle de production"
      
      - name: Scan for sensitive files
        run: |
          PATTERNS=(".env" "*.key" "*.pem" "secrets" "credentials")
          for pattern in "${PATTERNS[@]}"; do
            if find dist -name "$pattern" | grep -q .; then
              echo "❌ Fichier sensible détecté : $pattern"
              exit 1
            fi
          done
          echo "✅ Aucun fichier sensible détecté"
      
      - name: Check bundle size
        run: |
          SIZE=$(du -sh dist | cut -f1)
          echo "📦 Taille du bundle : $SIZE"
          # Alerte si > 50 Mo (signe potentiel d'inclusion accidentelle)
          SIZE_MB=$(du -sm dist | cut -f1)
          if [ $SIZE_MB -gt 50 ]; then
            echo "⚠️ Bundle anormalement large : ${SIZE_MB} Mo — vérification manuelle requise"
            exit 1
          fi

2. Hook n8n : Notification en cas de blocage

Quand la GitHub Action échoue, vous voulez une alerte immédiate — pas un email perdu dans votre inbox.

Workflow n8n github-action-failure-alert :

Webhook GitHub (workflow_run failed)
  → Extract data (repo, branch, error message)
  → Slack notification #alerts-devops
  → Créer ticket Notion "Action requise"
  → Email au tech lead

Configuration du webhook GitHub :

  1. Repo → Settings → Webhooks → Add webhook
  2. Payload URL : https://votre-n8n.com/webhook/github-actions
  3. Content type : application/json
  4. Events : Workflow runs

3. .npmignore : La dernière ligne de défense

Même avec tous les checks, votre .npmignore doit être explicite :

# .npmignore
**/*.map
**/*.map.js
.env*
*.key
*.pem
test/
tests/
__tests__/
*.test.ts
*.spec.ts
.github/
scripts/
docs/
CHANGELOG.md

4. pre-publish hook dans package.json

{
  "scripts": {
    "prepublishOnly": "npm run build && npm run security-check",
    "security-check": "node scripts/check-bundle.js"
  }
}

scripts/check-bundle.js :

const fs = require('fs');
const path = require('path');

function scanDir(dir, patterns) {
  const files = fs.readdirSync(dir, { recursive: true });
  const dangerous = files.filter(f => patterns.some(p => f.endsWith(p)));
  
  if (dangerous.length > 0) {
    console.error('❌ Fichiers dangereux dans le bundle :');
    dangerous.forEach(f => console.error('  -', f));
    process.exit(1);
  }
  console.log('✅ Bundle propre — aucun fichier sensible');
}

scanDir('./dist', ['.map', '.env', '.key', '.pem']);

Résultat

Avec ce pipeline :

  • Chaque push est scanné automatiquement
  • Les fichiers .map en production sont détectés et bloquent la publication
  • L'équipe est alertée instantanément via Slack
  • Le bundle est audité à chaque release

Le tout en ~2h de setup. C'est le type d'automatisation qui coûte peu à mettre en place et évite des catastrophes comme celle d'Anthropic.


Vous voulez qu'on construise ce pipeline pour votre projet ?

Prendre rendez-vous →

Étiquettes

#n8n#GitHub Actions#Sécurité#DevSecOps#npm#Pipeline CI/CD#Automatisation
William Aklamavo

William Aklamavo

Expert en développement web et automatisation, passionné par l'innovation technologique et l'entrepreneuriat digital.