# this file is not designed to be run directly
# instead, use the docker-compose.<os>.<swift> files
# eg docker-compose -f docker/docker-compose.yaml -f docker/docker-compose.1604.41.yaml run test
version: "3"

services:

  runtime-setup:
    image: swift-nio:default
    build:
      context: .
      dockerfile: Dockerfile

  common: &common
    image: swift-nio:default
    depends_on: [runtime-setup]
    volumes:
      - ~/.ssh:/root/.ssh
      - ..:/code:z
    working_dir: /code
    cap_drop:
      - CAP_NET_RAW
      - CAP_NET_BIND_SERVICE

  soundness:
    <<: *common
    command: /bin/bash -xcl "swift -version && uname -a && ./scripts/soundness.sh"

  unit-tests:
    <<: *common
    command: /bin/bash -xcl "swift $${SWIFT_TEST_VERB-test} -Xswiftc -warnings-as-errors"

  integration-tests:
    <<: *common
    command: /bin/bash -xcl "./scripts/integration_tests.sh $${INTEGRATION_TESTS_ARG-}"

  test:
    <<: *common
    command: /bin/bash -xcl "swift $${SWIFT_TEST_VERB-test} -Xswiftc -warnings-as-errors $${SANITIZER_ARG-} && ./scripts/integration_tests.sh $${INTEGRATION_TESTS_ARG-}"

  performance-test:
    <<: *common
    command: /bin/bash -xcl "swift build -c release -Xswiftc -Xllvm -Xswiftc -align-all-functions=5 -Xswiftc -Xllvm -Xswiftc -align-all-blocks=5 && ./.build/release/NIOPerformanceTester"

  # util

  shell:
    <<: *common
    entrypoint: /bin/bash

  # samples

  echo:
    <<: *common
    tty: true
    ports:
      - "9999:9999"
    command: /bin/bash -xcl "swift run NIOEchoServer 0.0.0.0 9999"

  http:
    <<: *common
    tty: true
    ports:
      - "8888:8888"
    command: /bin/bash -xcl "swift run NIOHTTP1Server 0.0.0.0 8888"
