image: docker:20.10@sha256:2967f0819c84dd589ed0a023b9d25dcfe7a3c123d5bf784ffbb77edf55335f0c

include:
  - local: '.gitlab-ci-template.yml'
  - local: 'main-website/.gitlab-ci.yml'
  - local: 'lawfirm-demos/.gitlab-ci.yml'

stages:
  - build
  - dockerize
  - deploy
  - sync

variables:
  CI_REGISTRY_IMAGE: $CI_REGISTRY/$CI_PROJECT_PATH
  PROJECT_NAME: $CI_PROJECT_NAME
  TAG: $CI_COMMIT_REF_SLUG
  NEXT_PUBLIC_ENV: "production"

cache:
  key: ${CI_COMMIT_REF_SLUG}
  paths:
    - node_modules/
    - .next/cache/

.deploy_production_rule: &deploy_production_rule
  - if: $CI_COMMIT_BRANCH == "production"
    when: manual
    allow_failure: true

docker_openresty:
  stage: dockerize
  extends: .docker-build-template
  variables:
    IMAGE_NAME: openresty
    WORKDIR_PATH: ./
    DOCKERFILE_PATH: Dockerfile-openresty

sync_dev_branch:
  stage: sync
  image: node:22@sha256:f6b9c31ace05502dd98ef777aaa20464362435dcc5e312b0e213121dcf7d8b95
  rules:
    - if: '$CI_COMMIT_BRANCH == "production"'
  before_script:
    - git config --global user.email "gitlab-ci@rhein-software.dev"
    - git config --global user.name "GitLab CI"
  script:
    - git remote set-url origin "https://oauth2:${CI_JOB_TOKEN}@${CI_SERVER_HOST}/${CI_PROJECT_PATH}.git"
    - git checkout dev
    - git pull origin dev
    - git merge --no-ff origin/production
    - git push origin dev

deploy_dev:
  extends: .deploy-template
  variables:
    TAG: dev
    REMOTE_ENV_PATH: /opt/rheinsw-demo
  rules:
    - if: '$CI_COMMIT_BRANCH == "dev" || $CI_COMMIT_BRANCH == "pipeline"'

deploy_prod:
  extends: .deploy-template
  variables:
    TAG: production
    REMOTE_ENV_PATH: /opt/rheinsw-demo
  rules: *deploy_production_rule