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_*"