name: Integration

on:
  push:
  pull_request:

defaults:
  run:
    shell: bash

jobs:

  tests:
    name: Tests
    runs-on: Ubuntu-20.04

    strategy:
      matrix:
        php: ['7.2', '8.0']

    services:
      postgres:
        image: postgres:9.6-alpine
        ports:
          - 5432:5432
        env:
          POSTGRES_PASSWORD: 'password'
      ldap:
        image: bitnami/openldap
        ports:
          - 3389:3389
        env:
          LDAP_ADMIN_USERNAME: admin
          LDAP_ADMIN_PASSWORD: symfony
          LDAP_ROOT: dc=symfony,dc=com
          LDAP_PORT_NUMBER: 3389
          LDAP_USERS: a
          LDAP_PASSWORDS: a
      redis:
        image: redis:6.0.0
        ports:
          - 6379:6379
      redis-cluster:
        image: grokzen/redis-cluster:5.0.4
        ports:
          - 7000:7000
          - 7001:7001
          - 7002:7002
          - 7003:7003
          - 7004:7004
          - 7005:7005
          - 7006:7006
        env:
          STANDALONE: 1
      redis-sentinel:
        image: bitnami/redis-sentinel:6.0
        ports:
          - 26379:26379
        env:
          REDIS_MASTER_HOST: redis
          REDIS_MASTER_SET: redis_sentinel
          REDIS_SENTINEL_QUORUM: 1
      memcached:
        image: memcached:1.6.5
        ports:
          - 11211:11211
      rabbitmq:
        image: rabbitmq:3.8.3
        ports:
          - 5672:5672
      mongodb:
        image: mongo
        ports:
          - 27017:27017
      couchbase:
        image: couchbase:6.5.1
        ports:
          - 8091:8091
          - 8092:8092
          - 8093:8093
          - 8094:8094
          - 11210:11210
      sqs:
        image: asyncaws/testing-sqs
        ports:
          - 9494:9494
      zookeeper:
        image: wurstmeister/zookeeper:3.4.6
      kafka:
        image: wurstmeister/kafka:2.12-2.4.1
        ports:
          - 9092:9092
        env:
          KAFKA_AUTO_CREATE_TOPICS_ENABLE: false
          KAFKA_CREATE_TOPICS: 'test-topic:1:1:compact'
          KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1
          KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
          KAFKA_ADVERTISED_PORT: 9092

    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Install system dependencies
        run: |
          echo "::group::apt-get update"
          sudo apt-get update
          echo "::endgroup::"

          echo "::group::install tools & libraries"
          sudo apt-get install librdkafka-dev
          echo "::endgroup::"

      - name: Configure Couchbase
        run: |
          curl -s -u 'username=Administrator&password=111111' -X POST http://localhost:8091/node/controller/setupServices -d 'services=kv%2Cn1ql%2Cindex%2Cfts'
          curl -s -X POST http://localhost:8091/settings/web -d 'username=Administrator&password=111111&port=SAME'
          curl -s -u Administrator:111111 -X POST http://localhost:8091/pools/default/buckets -d 'ramQuotaMB=100&bucketType=ephemeral&name=cache'
          curl -s -u Administrator:111111 -X POST  http://localhost:8091/pools/default -d 'memoryQuota=256'

      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          coverage: "none"
          extensions: "json,couchbase,memcached,mongodb,redis,rdkafka,xsl,ldap"
          ini-values: date.timezone=Europe/Paris,memory_limit=-1,default_socket_timeout=10,session.gc_probability=0,apc.enable_cli=1,zend.assertions=1
          php-version: "${{ matrix.php }}"
          tools: pecl

      - name: Display versions
        run: |
          php -r 'foreach (get_loaded_extensions() as $extension) echo $extension . " " . phpversion($extension) . PHP_EOL;'
          php -i

      - name: Load fixtures
        uses: docker://bitnami/openldap
        with:
          entrypoint: /bin/bash
          args: -c "(/opt/bitnami/openldap/bin/ldapwhoami -H ldap://ldap:3389 -D cn=admin,dc=symfony,dc=com -w symfony||sleep 5) && /opt/bitnami/openldap/bin/ldapadd -H ldap://ldap:3389 -D cn=admin,dc=symfony,dc=com -w symfony -f src/Symfony/Component/Ldap/Tests/Fixtures/data/fixtures.ldif && /opt/bitnami/openldap/bin/ldapdelete -H ldap://ldap:3389 -D cn=admin,dc=symfony,dc=com -w symfony cn=a,ou=users,dc=symfony,dc=com"

      - name: Install dependencies
        run: |
          COMPOSER_HOME="$(composer config home)"
          ([ -d "$COMPOSER_HOME" ] || mkdir "$COMPOSER_HOME") && cp .github/composer-config.json "$COMPOSER_HOME/config.json"
          export COMPOSER_ROOT_VERSION=$(grep ' VERSION = ' src/Symfony/Component/HttpKernel/Kernel.php | grep -P -o '[0-9]+\.[0-9]+').x-dev
          echo COMPOSER_ROOT_VERSION=$COMPOSER_ROOT_VERSION >> $GITHUB_ENV

          echo "::group::composer update"
          composer require --dev --no-update mongodb/mongodb:@stable
          composer update --no-progress --ansi
          echo "::endgroup::"

          echo "::group::install phpunit"
          ./phpunit install
          echo "::endgroup::"

      - name: Run tests
        run: ./phpunit --group integration -v
        env:
          REDIS_HOST: localhost
          REDIS_CLUSTER_HOSTS: 'localhost:7000 localhost:7001 localhost:7002 localhost:7003 localhost:7004 localhost:7005'
          REDIS_SENTINEL_HOSTS: 'localhost:26379'
          REDIS_SENTINEL_SERVICE: redis_sentinel
          MESSENGER_REDIS_DSN: redis://127.0.0.1:7006/messages
          MESSENGER_AMQP_DSN: amqp://localhost/%2f/messages
          MESSENGER_SQS_DSN: "sqs://localhost:9494/messages?sslmode=disable&poll_timeout=0.01"
          MESSENGER_SQS_FIFO_QUEUE_DSN: "sqs://localhost:9494/messages.fifo?sslmode=disable&poll_timeout=0.01"
          MEMCACHED_HOST: localhost
          LDAP_HOST: localhost
          LDAP_PORT: 3389
          MONGODB_HOST: localhost
          KAFKA_BROKER: 127.0.0.1:9092
          POSTGRES_HOST: localhost

      #- name: Run HTTP push tests
      #  if: matrix.php == '8.0'
      #  run: |
      #    [ -d .phpunit ] && mv .phpunit .phpunit.bak
      #    wget -q https://github.com/symfony/binary-utils/releases/download/v0.1/vulcain_0.1.3_Linux_x86_64.tar.gz -O - | tar xz && mv vulcain /usr/local/bin
      #    docker run --rm -e COMPOSER_ROOT_VERSION -v $(pwd):/app -v $(which composer):/usr/local/bin/composer -v $(which vulcain):/usr/local/bin/vulcain -w /app php:8.0-alpine ./phpunit src/Symfony/Component/HttpClient/Tests/CurlHttpClientTest.php --filter testHttp2Push
      #    sudo rm -rf .phpunit
      #    [ -d .phpunit.bak ] && mv .phpunit.bak .phpunit
