# Définition des étapes du pipeline
stages:
  - build    # Étape de construction
  - test     # Étape de test
  - doc      # Étape de documentation
  - deploy   # Étape de déploiement

# Configuration du cache pour les environnements virtuels
cache:
  paths:
    - .venv  # Chemin du cache pour les environnements virtuels


build-job:
  image: python:3.11-alpine  # Image Docker utilisée
  stage: build               # Étape du pipeline
  variables:
    POETRY_VIRTUALENVS_PATH: $CI_PROJECT_DIR/.venv  # Chemin de l'environnement virtuel
  before_script:
    - apk add git            # Installer Git
    - apk add pipx           # Installer pipx
    - pipx install poetry    # Installer Poetry
    - export PATH="/root/.local/bin:$PATH"  # Ajouter pipx au PATH
    - poetry config virtualenvs.in-project true  # Configurer Poetry pour utiliser un environnement virtuel dans le projet
  script:
    - poetry install  # Installer les dépendances du projet

test-job:
  stage: test                # Étape du pipeline
  image: python:3.11-alpine  # Image Docker utilisée
  variables:
    POETRY_VIRTUALENVS_PATH: $CI_PROJECT_DIR/.venv  # Chemin de l'environnement virtuel
  dependencies:
    - build-job              # Dépendance du job de build
  before_script:
    - apk add git            # Installer Git
    - apk add pipx           # Installer pipx
    - pipx install poetry    # Installer Poetry
    - export PATH="/root/.local/bin:$PATH"  # Ajouter pipx au PATH
    - source $CI_PROJECT_DIR/.venv/bin/activate  # Activer l'environnement virtuel
    - poetry config virtualenvs.in-project true  # Configurer Poetry pour utiliser un environnement virtuel dans le projet
  script:
    - poetry run pytest --junitxml=report.xml  # Exécuter les tests unitaires et générer un rapport JUnit
  artifacts:
    when: always
    reports:
      junit: report.xml  # Sauvegarder le rapport JUnit
    expire_in: 1 day


doc-job:
  stage: doc                 # Étape du pipeline
  image: python:3.11-alpine  # Image Docker utilisée
  variables:
    POETRY_VIRTUALENVS_PATH: $CI_PROJECT_DIR/.venv  # Chemin de l'environnement virtuel
  dependencies:
    - build-job              # Dépendance du job de build
  before_script:
    - apk add git            # Installer Git
    - apk add pipx           # Installer pipx
    - apk add make           # Installer Make
    - pipx install poetry    # Installer Poetry
    - export PATH="/root/.local/bin:$PATH"  # Ajouter pipx au PATH
    - source $CI_PROJECT_DIR/.venv/bin/activate  # Activer l'environnement virtuel
    - poetry config virtualenvs.in-project true  # Configurer Poetry pour utiliser un environnement virtuel dans le projet
  script:
    - cd docs                # Changer de répertoire vers le dossier de documentation
    - /usr/bin/make html     # Générer la documentation HTML
    - /bin/mv _build/html ../public  # Déplacer la documentation générée vers le répertoire public
  artifacts:
    paths:
      - public               # Sauvegarder le répertoire public
    expire_in: 1 day
  pages: true
  only:
    - main                   # Exécuter ce job uniquement sur la branche principale


docker-job:
  stage: deploy             # Étape du pipeline
  dependencies:
    - test-job              # Dépendance du job de test
  image:
    name: gcr.io/kaniko-project/executor:v1.23.2-debug  # Image Docker utilisée
    entrypoint: [ "" ]        # Entrypoint vide pour exécuter des commandes personnalisées
  script:
    - /kaniko/executor
      --context "${CI_PROJECT_DIR}"
      --dockerfile "${CI_PROJECT_DIR}/Dockerfile"
      --no-push
  rules:
    - if: $CI_COMMIT_TAG     # Exécuter ce job uniquement si un tag de commit est présent

pages:
  stage: deploy
  script:
  - echo 'Nothing to do...'
  artifacts:
    paths:
    - public
    expire_in: 1 day
  rules:
    - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
