env:
  GITHUB_TOKEN: VAULT[development/github/token/${CIRRUS_REPO_OWNER}-${CIRRUS_REPO_NAME}-ro token]
  SONAR_HOST_URL: VAULT[development/kv/data/next data.url]
  SONAR_TOKEN: VAULT[development/kv/data/next data.token]
  SONAR_SCANNER_VERSION: 5.0.1.3006
  SONAR_SCANNER_HOME: ${HOME}/.sonar/sonar-scanner-${SONAR_SCANNER_VERSION}-linux
  PATH: ${SONAR_SCANNER_HOME}/bin:$PATH
  # Need to clone full depth to track the changed files: for SQ analysis and for validation tasks
  CIRRUS_CLONE_DEPTH: 0
  # Use bash (instead of sh on linux or cmd.exe on windows)
  CIRRUS_SHELL: bash
  BASE_BRANCH: ${CIRRUS_BASE_BRANCH}
  DEFAULT_BRANCH: ${CIRRUS_DEFAULT_BRANCH}


container_definition: &CONTAINER_DEFINITION
  cluster_name: ${CIRRUS_CLUSTER_NAME}
  builder_role: cirrus-builder
  builder_image: docker-builder-v*
  builder_instance_type: t3.small
  builder_subnet_id: ${CIRRUS_AWS_SUBNET}
  region: eu-central-1
  namespace: default
  use_in_memory_disk: true

setup_sonar_scanner: &SETUP_SONAR_SCANNER
  setup_sonar_scanner_script:
    - apt update -y && apt upgrade -y && apt update -y && apt install -y unzip
    - curl --create-dirs -sSLo $HOME/.sonar/sonar-scanner.zip https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-$SONAR_SCANNER_VERSION-linux.zip
    - unzip -o $HOME/.sonar/sonar-scanner.zip -d $HOME/.sonar/

tooling_tests_task:
  eks_container:
    <<: *CONTAINER_DEFINITION
    dockerfile: ci/Dockerfile
    cpu: 1
    memory: 2G
  env:
    PYTHONPATH: .
  install_dependencies_script:
    - ci/install_rspec_tools_dependencies.sh
  tests_script:
    - bash ci/fetch_branches.sh
    - cd rspec-tools
    - pipenv run pytest --cov=rspec_tools --cov-report=xml
  <<: *SETUP_SONAR_SCANNER
  analyze_script:
    - cd rspec-tools
    - sonar-scanner


frontend_tests_task:
  eks_container:
    <<: *CONTAINER_DEFINITION
    dockerfile: ci/frontend-tests-dockerfile
    cpu: 1
    memory: 3G
  node_modules_cache:
    folder: frontend/node_modules
    reupload_on_changes: false # since there is a fingerprint script
    fingerprint_script:
      - echo $CIRRUS_OS
      - node --version
      - cat frontend/package-lock.json
    populate_script:
      - cd frontend
      - npm install
  tests_script:
    - bash ci/fetch_branches.sh
    - cd frontend
    - npm run build
    - npm test -- --detectOpenHandles --coverage .
  <<: *SETUP_SONAR_SCANNER
  analyze_script:
    - cd frontend
    - sonar-scanner

validate_ci_tests_task:
  skip: "!changesInclude('ci_tests/**', 'ci/**')"
  eks_container:
    <<: *CONTAINER_DEFINITION
    dockerfile: ci/Dockerfile
    cpu: 1
    memory: 2G
  ci_tests_script:
    - ./ci_tests/asciidoc_validation/run_tests.sh

validate_rules_task:
  eks_container:
    <<: *CONTAINER_DEFINITION
    dockerfile: ci/Dockerfile
    cpu: 1
    memory: 2G
  metadata_validation_script:
    - ./ci/validate_metadata.sh
  file_extensions_validation_script:
    - ./ci/validate_file_extensions.sh
  asciidoc_validation_script:
    - ./ci/validate_asciidoc.sh

validate_links_task:
  timeout_in: 120m
  execution_lock: RSPEC_validate_links
  eks_container:
    <<: *CONTAINER_DEFINITION
    dockerfile: ci/Dockerfile
    cpu: 1
    memory: 2G
  env:
    LINK_CACHE_NAME: link-probing-status
    LINK_CACHE_PATH: /root/link-probing-history.cache
  cache_download_script:
    - bash ci/cirrus-cache.sh download ${LINK_CACHE_NAME} ${LINK_CACHE_PATH}
    - md5sum /root/link-probing-history.cache/link_probes.history || true
  tests_script:
    - ./ci/validate_links.sh ${LINK_CACHE_PATH}
  always:
    cache_upload_script:
      - md5sum /root/link-probing-history.cache/link_probes.history || true
      - bash ci/cirrus-cache.sh upload ${LINK_CACHE_NAME} ${LINK_CACHE_PATH}

all_required_checks_task:
  depends_on:
    - tooling_tests
    - frontend_tests
    - validate_rules
    - validate_ci_tests
  eks_container:
    <<: *CONTAINER_DEFINITION
    dockerfile: ci/Dockerfile
    cpu: 1
    memory: 1G
  clone_script:
    - echo 'This is a dummy task used to wait on other tasks. Clone is not necessary.'
  print_message_script:
    - echo 'All required checks have passed'