include:
  - project: nosana-ci/tools/cicd/gitlab-ci
    file: templates/semver.yml
  - project: nosana-ci/tools/cicd/gitlab-ci
    file: templates/cacheflush.yml

variables:
  NODE_VERSION: 22
  OUTPUT_DIR: .output/public
  PURGE_FILE: purge.json

.npm:
  image: node:$NODE_VERSION
  cache:
    key:
      files:
        - examples/browser/package-lock.json
    paths:
      - examples/browser/node_modules
      - examples/browser/.npm

build:
  extends: .npm
  stage: build
  before_script:
    - cd examples/browser
  script: npm ci --cache .npm --prefer-offline
  rules:
    - if: $CI_MERGE_REQUEST_ID                                          # merge requests
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH                       # main
    - if: $DEPLOYMENT_BRANCH && $CI_COMMIT_BRANCH == $DEPLOYMENT_BRANCH # optional deployment branch

pages:
  extends: .npm
  stage: deploy
  before_script:
    - cd examples/browser
  script:
    - NODE_OPTIONS=--max_old_space_size=25384 npm run generate
    - |
      if [ -z ${SKIP_CACHEFLUSH} ] && [ -n ${FQDN} ]
      then
        apt update
        apt install -y jq
        find $OUTPUT_DIR -type f | sed "s/${OUTPUT_DIR//\//\\/}/https:\/\/$FQDN/g" | jq -R -s -c 'split("\n")[:-1]' > ../../$PURGE_FILE
      fi
    - mv $OUTPUT_DIR ../../public
  artifacts:
    paths:
      - public
      - $PURGE_FILE
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $AUTO_DEPLOY != null # main
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $AUTO_DEPLOY == null # main
      when: manual
    - if: $DEPLOYMENT_BRANCH && $CI_COMMIT_BRANCH == $DEPLOYMENT_BRANCH && $AUTO_DEPLOY != null # deployment branch
    - if: $DEPLOYMENT_BRANCH && $CI_COMMIT_BRANCH == $DEPLOYMENT_BRANCH && $AUTO_DEPLOY == null # deployment branch
      when: manual

release:
  extends: .release
  stage: .post
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH                       # main
    - if: $DEPLOYMENT_BRANCH && $CI_COMMIT_BRANCH == $DEPLOYMENT_BRANCH # optional deployment branch

gitlab-release:
  extends: .gitlab-release
  stage: .post

cacheflush:
  extends: .cacheflush
  stage: .post
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH                       # main
    - if: $DEPLOYMENT_BRANCH && $CI_COMMIT_BRANCH == $DEPLOYMENT_BRANCH # optional deployment branch


