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.

⚙️
PRODUIT LIÉ
AutomationSequence V8.0
← Article précédent Article suivant →