---
spec:

  # Variables d'environements attendues
  # $PRIVATE_DEPLOY_KEY : La clé de déploiement

  inputs:
    # Paramètres optionnels
    pandocker_tag:
      type: string
      description: la version de pandocker à utiliser
      default: stable
    top_dir:
      description: >
          Dossier dans lequel le Makefile est lancé
          (doit être surchargé pour bridoulou uniquement)
      default: .

---


variables:
  RSYNC: rsync --archive --verbose
  PORTAL_BUILD_DIR: $[[ inputs.top_dir ]]/_site

portal:
  stage: build
  needs:
    - build:dalidoc
  image:
    # Pandoc est nécessaire ici pour transformer le markdown
    name: dalibo/pandocker:$[[ inputs.pandocker_tag ]]
    entrypoint: [""]
  before_script:
    #
    # dalidoc 5.1 n'a plus besoin de poetry MAIS...
    # Les dépots qui utilisent dalidoc 5.0 pointent encore sur la branche `main`
    #
    - uv tool install poetry
    - poetry --version
  script:
    - make -C $[[ inputs.top_dir ]] portal
  artifacts:
    paths:
      - ${PORTAL_BUILD_DIR}
    expire_in: 1 day

##
## Attention ! il y a un seul portail par client sur `validdelivery` !
## Sachant que chaque `git push` va déclencher le job `valid:delivery_portal`,
## cela signifie que le portail sur `validdelivery` est celui de la dernière
## MR modifiée.
## Si vous travaillez sur 2 MR en parallèle pour le même client, cela peut
## entrainer pas mal de confusion !
##
validdelivery-portal:
  stage: deploy
  needs:
    - portal
  image: dalibo/buildpack:rockylinux9
  script:
    # Annuler le job si la clé est absente
    - test "x$PRIVATE_DEPLOY_KEY" == "x" && (echo '$PRIVATE_DEPLOY_KEY est absente'; exit 1)
    # Annuler si l'artefact est absent
    - test -d "${PORTAL_BUILD_DIR}" || (echo "Le portail généré est absent"; exit 1)
    # Installer la clé
    - eval $(ssh-agent -s)
    - ssh-add <(echo "$PRIVATE_DEPLOY_KEY")
    - mkdir -p ~/.ssh
    - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
    # Publier
    # Le service validdelivery.dalibo.com est hébergé sur labopackaging
    - DOMAIN=gitlab-ci@labopackaging.priv.dalibo.net
    - DEST=/var/www/validdelivery.dalibo.com/${CI_PROJECT_PATH}
    - ssh ${DOMAIN} "mkdir -p ${DEST}"
    - ${RSYNC} --delete ${PORTAL_BUILD_DIR}/* ${DOMAIN}:${DEST}/portal/
    - ${RSYNC} --delete ${PORTAL_BUILD_DIR}/redirect.html ${DOMAIN}:${DEST}/index.html
  environment:
    name: validdelivery-portal
    url: https://validdelivery.dalibo.com/${CI_PROJECT_PATH}/

##
## Attention ! il y a un seul portail par client sur `delivery` !
##
## Sachant que chaque `git tag` va déclencher le job `prod:delivery_portal`,
## cela signifie que le portail sur `delivery` est celui de la dernière
## livraison.
## Les clients ne pourront pas accéder au portail d'une version antérieure !
##
delivery-portal:
  stage: deploy
  rules:
    # Publier uniquement lorsqu'un tag est poussé sur le dépot
    - if: $CI_COMMIT_TAG
  needs:
    - portal
  image: dalibo/buildpack:rockylinux9
  script:
    # Annuler le job si la clé est absente
    - test "x$PRIVATE_DEPLOY_KEY" == "x" && (echo '$PRIVATE_DEPLOY_KEY est absente'; exit 1)
    # Annuler si l'artefact est absent
    - test -d "${PORTAL_BUILD_DIR}" || (echo "Le portail généré est absent"; exit 1)
    # Installer la clé
    - eval $(ssh-agent -s)
    - ssh-add <(echo "$PRIVATE_DEPLOY_KEY")
    - mkdir -p ~/.ssh
    - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
    # Publier
    # Le service delivery.dalibo.com est hébergé sur packaging
    - DOMAIN=gitlab-ci@packaging.prod.dalibo.net
    - DEST=/var/www/delivery.dalibo.com/${CI_PROJECT_PATH}
    - ssh ${DOMAIN} "mkdir -p ${DEST}"
    - ${RSYNC} --delete ${PORTAL_BUILD_DIR}/* ${DOMAIN}:${DEST}/portal/
    - ${RSYNC} --delete ${PORTAL_BUILD_DIR}/redirect.html ${DOMAIN}:${DEST}/index.html
  environment:
    name: delivery-portal
    url: https://delivery.dalibo.com/${CI_PROJECT_PATH}/
