Aller au contenu principal

Patterns

Pipeline CI/CD pour intégration e-invoicing

Tests sandbox automatisés avant déploiement production

Toute intégration Scell.io doit passer par un pipeline CI à 4 étages : (1) lint + typecheck, (2) tests unitaires (mocks SDK), (3) tests d'intégration en environnement sandbox avec clé `sk_test_*` réelle (création facture Factur-X, validation EN 16931, signature SES, vérification webhook), (4) déploiement production conditionné à 100% des tests verts. Le sandbox Scell.io (`https://api.scell.io` avec clés `sk_test_*`) est une DB isolée (`pgsql_sandbox`) qui accepte les mêmes payloads qu'en prod sans facturation réelle. Pattern obligatoire : un secret CI distinct pour la clé sandbox (jamais la clé live). Le pipeline doit aussi valider la conformité du XML généré contre le schéma EN 16931 via xsd-validator ou Schematron. Échec d'un test sandbox = blocage du merge en main, sans exception.

À retenir

  • 4 étages : lint → unit → sandbox integration → deploy
  • Sandbox Scell.io : sk_test_* sur api.scell.io, DB isolée
  • Secret CI distinct pour sandbox (GitHub Secrets / Vault)
  • Validation XML EN 16931 obligatoire (xsd ou Schematron)
  • Échec sandbox test = blocage merge sans exception

Exemple de code

# .github/workflows/scell-integration.yml
name: Scell.io Integration CI
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: pnpm/action-setup@v3
      - run: pnpm install --frozen-lockfile
      - run: pnpm lint && pnpm typecheck
      - run: pnpm test:unit
      - name: Sandbox integration tests
        env:
          SCELL_API_KEY: ${{ secrets.SCELL_SANDBOX_KEY }} # sk_test_*
          SCELL_API_URL: https://api.scell.io/api/v1
        run: pnpm test:integration
      - name: Validate EN 16931 XML
        run: pnpm exec xsd-validator schemas/EN16931.xsd output/*.xml
  deploy:
    needs: test
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      - run: echo "Deploy to prod with sk_live_*"

Voir aussi

Vos préférences cookies

Nous utilisons des cookies pour améliorer votre expérience. Les cookies essentiels sont toujours actifs. Politique cookies.