# WARNING: This is a CI docker-compose file used for building
# and testing of the entire app, it should not be used for production.
# This is a base compose file, it should be extended with a
# docker-compose.ci.*.yml file
services:
  fullstack:
    image: "${IMAGE}:${BRANCH_LOWER}-ci-${BUILD_NUMBER}"
    environment:
      TZ: "${TZ:-Australia/Brisbane}"
      DEBUG: "true"
      CI: "true"
      FORCE_COLOR: 1
      # Required for DNS Certificate provisioning in CI
      LE_SERVER: "https://ca.internal/acme/acme/directory"
      REQUESTS_CA_BUNDLE: "/etc/ssl/certs/NginxProxyManager.crt"
    volumes:
      - "npm_data_ci:/data"
      - "npm_le_ci:/etc/letsencrypt"
      - "./dev/letsencrypt.ini:/etc/letsencrypt.ini:ro"
      - "./dev/resolv.conf:/etc/resolv.conf:ro"
      - "/etc/localtime:/etc/localtime:ro"
    healthcheck:
      test: ["CMD", "/usr/bin/check-health"]
      interval: 10s
      timeout: 3s
    expose:
      - "80/tcp"
      - "81/tcp"
      - "443/tcp"
      - "1500/tcp"
      - "1501/tcp"
      - "1502/tcp"
      - "1503/tcp"
    networks:
      fulltest:
        aliases:
          - website1.example.com
          - website2.example.com
          - website3.example.com

  stepca:
    image: jc21/testca
    volumes:
      - "./dev/resolv.conf:/etc/resolv.conf:ro"
      - "/etc/localtime:/etc/localtime:ro"
    networks:
      fulltest:
        aliases:
          - ca.internal

  pdns:
    image: pschiffe/pdns-mysql:4.8
    volumes:
      - "/etc/localtime:/etc/localtime:ro"
    environment:
      PDNS_master: "yes"
      PDNS_api: "yes"
      PDNS_api_key: "npm"
      PDNS_webserver: "yes"
      PDNS_webserver_address: "0.0.0.0"
      PDNS_webserver_password: "npm"
      PDNS_webserver-allow-from: "127.0.0.0/8,192.0.0.0/8,10.0.0.0/8,172.0.0.0/8"
      PDNS_version_string: "anonymous"
      PDNS_default_ttl: 1500
      PDNS_allow_axfr_ips: "127.0.0.0/8,192.0.0.0/8,10.0.0.0/8,172.0.0.0/8"
      PDNS_gmysql_host: pdns-db
      PDNS_gmysql_port: 3306
      PDNS_gmysql_user: pdns
      PDNS_gmysql_password: pdns
      PDNS_gmysql_dbname: pdns
    depends_on:
      - pdns-db
    networks:
      fulltest:
        aliases:
          - ns1.pdns
          - ns2.pdns

  pdns-db:
    image: mariadb
    environment:
      MYSQL_ROOT_PASSWORD: "pdns"
      MYSQL_DATABASE: "pdns"
      MYSQL_USER: "pdns"
      MYSQL_PASSWORD: "pdns"
    volumes:
      - "pdns_mysql_vol:/var/lib/mysql"
      - "/etc/localtime:/etc/localtime:ro"
      - "./dev/pdns-db.sql:/docker-entrypoint-initdb.d/01_init.sql:ro"
    networks:
      - fulltest

  dnsrouter:
    image: jc21/dnsrouter
    volumes:
      - ./dev/dnsrouter-config.json.tmp:/dnsrouter-config.json:ro
    networks:
      - fulltest

  cypress:
    image: "${IMAGE}-cypress:ci-${BUILD_NUMBER}"
    build:
      context: ../
      dockerfile: test/cypress/Dockerfile
    environment:
      HTTP_PROXY: "squid:3128"
      HTTPS_PROXY: "squid:3128"
    volumes:
      - "cypress_logs:/test/results"
      - "./dev/resolv.conf:/etc/resolv.conf:ro"
      - "/etc/localtime:/etc/localtime:ro"
    command: cypress run --browser chrome --config-file=cypress/config/ci.js
    networks:
      - fulltest

  squid:
    image: ubuntu/squid
    volumes:
      - "./dev/squid.conf:/etc/squid/squid.conf:ro"
      - "./dev/resolv.conf:/etc/resolv.conf:ro"
      - "/etc/localtime:/etc/localtime:ro"
    networks:
      - fulltest

volumes:
  cypress_logs:
  npm_data_ci:
  npm_le_ci:
  pdns_mysql_vol:

networks:
  fulltest:
    name: "npm-${BRANCH_LOWER}-ci-${BUILD_NUMBER}"
