Pourquoi CI/CD pour une séquence ?
Une séquence AutomationSequence est un fichier JSON — versionnable dans Git comme n'importe quel code. Intégrer la validation, les tests et le packaging dans un pipeline GitHub Actions garantit que chaque modification est testée avant déploiement et que le package distribué aux utilisateurs est toujours à jour.
Versionner une séquence d'automatisation dans Git sans pipeline CI/CD, c'est versionner du code sans tests. La régression peut rester invisible pendant des semaines.
Structure du dépôt
sequences/
├── .github/
│ └── workflows/
│ └── build-and-deploy.yml
├── sequences/
│ ├── export_mensuel.json
│ └── audit_chronotime.json
├── templates/
│ └── rapport_mensuel.docx
├── keys/
│ └── public.pem # clé publique uniquement dans le repo
├── tests/
│ └── test_sequences.py
└── requirements.txt
Le workflow GitHub Actions
# .github/workflows/build-and-deploy.yml
name: Build & Deploy Sequences
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test-and-build:
runs-on: windows-latest # Windows pour l'export EXE
steps:
- uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with: {{python-version: '3.12'}}
- name: Install dependencies
run: pip install automation-sequence[full] -r requirements.txt
- name: Validate sequences (dry-run)
run: |
automation-sequence validate sequences/export_mensuel.json
automation-sequence validate sequences/audit_chronotime.json
- name: Run unit tests
run: python -m pytest tests/ -v
- name: Export EXE standalone
run: |
automation-sequence export sequences/export_mensuel.json ^
--output dist/export_mensuel.exe ^
--encrypt --key-vault ${{{{ secrets.VAULT_PASSWORD }}}}
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: sequences-package
path: dist/
retention-days: 30
Tests unitaires Phase 14
AutomationSequence V8 Phase 14 introduit un framework de tests unitaires pour les séquences. Chaque action peut être mockée et le contexte simulé :
# tests/test_sequences.py
from automation_sequence.testing import SequenceTestRunner, MockContext
class TestExportMensuel:
def test_requete_oracle_retourne_donnees(self):
ctx = MockContext()
ctx.mock_action("oracle_query", returns={"rows": SAMPLE_DATA})
runner = SequenceTestRunner("sequences/export_mensuel.json")
result = runner.run_until("file_write_csv", context=ctx)
assert result.vars["sejours"] == SAMPLE_DATA
assert result.status == "paused"
def test_alerte_si_donnees_vides(self):
ctx = MockContext()
ctx.mock_action("oracle_query", returns={"rows": []})
runner = SequenceTestRunner("sequences/export_mensuel.json")
result = runner.run(context=ctx)
assert "smtp_send" in result.executed_actions
assert "anormalement faibles" in result.smtp_subjects[0]
Export EXE standalone
L'export EXE bundle la séquence chiffrée, le moteur AutomationSequence et toutes les dépendances dans un seul exécutable Windows. L'utilisateur final n'a besoin ni de Python ni d'AutomationSequence installé :
# Export en ligne de commande
automation-sequence export sequences/export_mensuel.json ^
--output dist/export_mensuel_v1.2.exe ^
--encrypt ^
--key-vault %VAULT_PASSWORD% ^
--include-templates templates/ ^
--icon assets/icon.ico ^
--version 1.2.0
# L'EXE produit :
# - Déchiffre la séquence en mémoire au démarrage
# - Exécute sans aucune dépendance externe
# - Compatible EDR (signable avec Authenticode)
Gestion des secrets GitHub
# Secrets à configurer dans GitHub Settings → Secrets
VAULT_PASSWORD # mot de passe du vault AutomationSequence
ORACLE_DSN # DSN Oracle (injecté à la volée, jamais dans le JSON)
SMTP_PASSWORD # mot de passe SMTP
SCCM_DEPLOY_TOKEN # token de déploiement SCCM
# Dans le workflow — injection via variable d'environnement
- name: Inject secrets into vault
run: |
automation-sequence vault add ORACLE_DSN "${{ secrets.ORACLE_DSN }}"
automation-sequence vault add SMTP_PASSWORD "${{ secrets.SMTP_PASSWORD }}"
env:
AS_VAULT_PASSWORD: ${{ secrets.VAULT_PASSWORD }}
Déploiement SCCM
Une fois l'EXE produit et signé, le déploiement sur le parc se fait via SCCM (System Center Configuration Manager) ou Intune :
# Étape post-build : déployer via SCCM API
- name: Deploy to SCCM
if: github.ref == 'refs/heads/main'
run: |
curl -X POST "${{ secrets.SCCM_URL }}/api/v1/deploy" ^
-H "Authorization: Bearer ${{ secrets.SCCM_DEPLOY_TOKEN }}" ^
-F "package=@dist/export_mensuel_v1.2.exe" ^
-F "collection=CHU_DSN_Postes" ^
-F "schedule=immediate"
Conclusion
Intégrer AutomationSequence V8 dans GitHub Actions apporte les bénéfices du CI/CD au monde des séquences d'automatisation : validation automatique, tests unitaires avec mocks, export EXE reproductible et déploiement SCCM automatisé sur tag. La séquence JSON devient un artefact de production aussi rigoureusement testé qu'une application classique.