10.03 — Workflows ocarina-example#

Voir aussi ../07-ocarina-example/11-ci.md

Vue d’ensemble#

WorkflowTriggerOSEffetNote
main_ci.ymlpush/PR main, dispatchubuntu + windows × py 3.14make check-coding-style (mypy + ruff).Gate PR rapide
dev_ci.ymlpush dev, dispatchubuntu × py 3.14IdemPour branches dev
e2e.ymlworkflow_dispatch (env OC)ubuntu + service Redis + Firefox + geckodriver 0.35.0Run complet de la suite + upload .screenshots/ .ocarina_logs/ .reports/Manuel uniquement

vs ocarina/main_ci.yml#

Aspectocarina/main_ci.ymlocarina-example/main_ci.yml
Tests unitairesOui (pytest + cram)Non
Allure historyOuiNon
GitHub Pages deployOui (Allure report)Non
Matrice OSOui (ubuntu + windows)Oui (idem)
Matrice PythonOptionnel (3.14 ou 3.14+3.15)Non (3.14 seul)

ocarina se teste (tests unitaires) en CI. ocarina-example n’est soumis qu’à des tests statiques en CI ; ses tests dynamiques (e2e) sont déclenchés à la demande via e2e.yml.

Le service Redis sidecar#

services:
  redis:
    image: redis:8.8.0
    ports: [6379:6379]
    options: >-
      --health-cmd "redis-cli ping"
      --health-interval 10s
      --health-timeout 5s
      --health-retries 5

GitHub Actions “spins” un container Redis en parallèle du job. Accessible sur localhost:6379. Healthcheck redis-cli ping.

Les tests peuvent donc utiliser Redis pour les locks distribués (OTP_SEND_LOCK_KEY) sans avoir à provisionner un Redis externe.

environment: OC#

e2e:
  runs-on: ubuntu-latest
  environment: OC
  • Contient les secrets : IGOR_API_KEY, DASH_USERNAME, DASH_PASSWORD.
  • Peut requérir une approbation manuelle avant de lancer (utile si on consomme du quota).

L’utilisateur qui dispatch le workflow doit avoir accès à l’environment OC.

Artefacts#

- name: Upload artifacts
  if: always()
  uses: actions/upload-artifact@v4
  with:
    name: e2e-traces
    path: |
      .screenshots/
      .ocarina_logs/
      .reports/

if: always() : upload même si le run fail. Pour pouvoir inspecter pourquoi ça a fail.

  1. .screenshots/ : toutes les captures d’écran.
  2. .ocarina_logs/ : arbre de logs cycle/campaign/suite/test.log.
  3. .reports/ : sorties des plugins (DOCX + JSON).

cache venv hashé sur pyproject#

- uses: actions/cache@v5
  with:
    path: .venv
    key: venv-${{ runner.os }}-py-${{ hashFiles('pyproject.toml') }}

hashFiles('pyproject.toml') : si pyproject.toml change (nouvelle dep, version bumpée), la cache key change → cache miss → réinstall propre.

Setup Firefox#

- name: Setup Firefox
  uses: browser-actions/setup-firefox@<commit-sha>

Action publique qui installe Firefox version matching le geckodriver téléchargé.

Le version pinning par SHA est utilisé partout pour toutes actions non-officielles (non préfixées par actions/) pour mitiger les risques de Supply Chain Attack.