name: Build and test
on: [push, pull_request]

jobs:
  ubuntu:
    name: Ubuntu
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
        with:
          repository: ${{ env.GITHUB_REPOSITORY }}
          ref: ${{ env.GITHUB_HEAD_REF }}

      - name: Install dependencies
        run: |
          sudo add-apt-repository -y ppa:chris-lea/redis-server
          sudo apt-get update
          sudo apt-get install -y redis-server valgrind libevent-dev
      
      - name: Build using cmake
        env: 
          EXTRA_CMAKE_OPTS: -DENABLE_EXAMPLES:BOOL=ON -DENABLE_SSL:BOOL=ON -DENABLE_SSL_TESTS:BOOL=ON -DENABLE_ASYNC_TESTS:BOOL=ON
          CFLAGS: -Werror
          CXXFLAGS: -Werror
        run: mkdir build-ubuntu && cd build-ubuntu && cmake ..

      - name: Build using makefile
        run: USE_SSL=1 TEST_ASYNC=1 make

      - name: Run tests
        env:
          SKIPS_AS_FAILS: 1
          TEST_SSL: 1
        run: $GITHUB_WORKSPACE/test.sh

      #      - name: Run tests under valgrind
      #        env:
      #          SKIPS_AS_FAILS: 1
      #          TEST_PREFIX: valgrind --error-exitcode=99 --track-origins=yes --leak-check=full
      #        run: $GITHUB_WORKSPACE/test.sh

  centos7:
    name: CentOS 7
    runs-on: ubuntu-latest
    container: centos:7
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
        with:
          repository: ${{ env.GITHUB_REPOSITORY }}
          ref: ${{ env.GITHUB_HEAD_REF }}

      - name: Install dependencies
        run: |
          yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
          yum -y --enablerepo=remi install redis
          yum -y install gcc gcc-c++ make openssl openssl-devel cmake3 valgrind libevent-devel

      - name: Build using cmake
        env: 
          EXTRA_CMAKE_OPTS: -DENABLE_EXAMPLES:BOOL=ON -DENABLE_SSL:BOOL=ON -DENABLE_SSL_TESTS:BOOL=ON -DENABLE_ASYNC_TESTS:BOOL=ON
          CFLAGS: -Werror
          CXXFLAGS: -Werror
        run: mkdir build-centos7 && cd build-centos7 && cmake3 ..

      - name: Build using Makefile
        run: USE_SSL=1 TEST_ASYNC=1 make

      - name: Run tests
        env:
          SKIPS_AS_FAILS: 1
          TEST_SSL: 1
        run: $GITHUB_WORKSPACE/test.sh

      - name: Run tests under valgrind
        env:
          SKIPS_AS_FAILS: 1
          TEST_SSL: 1
          TEST_PREFIX: valgrind --error-exitcode=99 --track-origins=yes --leak-check=full
        run: $GITHUB_WORKSPACE/test.sh

  centos8:
    name: RockyLinux 8
    runs-on: ubuntu-latest
    container: rockylinux:8
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
        with:
          repository: ${{ env.GITHUB_REPOSITORY }}
          ref: ${{ env.GITHUB_HEAD_REF }}

      - name: Install dependencies
        run: |
          dnf -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
          dnf -y module install redis:remi-6.0
          dnf -y group install "Development Tools"
          dnf -y install openssl-devel cmake valgrind libevent-devel

      - name: Build using cmake
        env: 
          EXTRA_CMAKE_OPTS: -DENABLE_EXAMPLES:BOOL=ON -DENABLE_SSL:BOOL=ON -DENABLE_SSL_TESTS:BOOL=ON -DENABLE_ASYNC_TESTS:BOOL=ON
          CFLAGS: -Werror
          CXXFLAGS: -Werror
        run: mkdir build-centos8 && cd build-centos8 && cmake ..

      - name: Build using Makefile
        run: USE_SSL=1 TEST_ASYNC=1 make

      - name: Run tests
        env:
          SKIPS_AS_FAILS: 1
          TEST_SSL: 1
        run: $GITHUB_WORKSPACE/test.sh

      - name: Run tests under valgrind
        env:
          SKIPS_AS_FAILS: 1
          TEST_SSL: 1
          TEST_PREFIX: valgrind --error-exitcode=99 --track-origins=yes --leak-check=full
        run: $GITHUB_WORKSPACE/test.sh

  freebsd:
    runs-on: macos-10.15
    name:  FreeBSD
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
        with:
          repository: ${{ env.GITHUB_REPOSITORY }}
          ref: ${{ env.GITHUB_HEAD_REF }}

      - name: Build in FreeBSD
        uses: vmactions/freebsd-vm@v0.1.5
        with:
          prepare: pkg install -y gmake cmake
          run: |
            mkdir build && cd build && cmake .. && make && cd ..
            gmake

  macos:
    name: macOS
    runs-on: macos-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
        with:
          repository: ${{ env.GITHUB_REPOSITORY }}
          ref: ${{ env.GITHUB_HEAD_REF }}

      - name: Install dependencies
        run: |
          brew install openssl redis

      - name: Build hiredis
        run: USE_SSL=1 make

      - name: Run tests
        env:
          TEST_SSL: 1
        run: $GITHUB_WORKSPACE/test.sh

  windows:
    name: Windows
    runs-on: windows-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
        with:
          repository: ${{ env.GITHUB_REPOSITORY }}
          ref: ${{ env.GITHUB_HEAD_REF }}

      - name: Install dependencies
        run: |
          choco install -y ninja memurai-developer

      - uses: ilammy/msvc-dev-cmd@v1
      - name: Build hiredis
        run: |
          mkdir build && cd build
          cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Release -DENABLE_EXAMPLES=ON
          ninja -v

      - name: Run tests
        run: |
          ./build/hiredis-test.exe

      - name: Setup cygwin
        uses: egor-tensin/setup-cygwin@v3
        with:
          platform: x64
          packages: make git gcc-core

      - name: Build in cygwin
        env:
          HIREDIS_PATH: ${{ github.workspace }}
        run: |
          build_hiredis() {
              cd $(cygpath -u $HIREDIS_PATH)
              git clean -xfd
              make
          }
          build_hiredis
        shell: C:\tools\cygwin\bin\bash.exe --login --norc -eo pipefail -o igncr '{0}'
