name: Daily

on:
  pull_request:
    branches:
      # any PR to a release branch.
      - '[0-9].[0-9]'
  schedule:
    - cron: '0 0 * * *'

jobs:

  test-ubuntu-jemalloc:
    runs-on: ubuntu-latest
    if: github.repository == 'redis/redis'
    timeout-minutes: 14400
    steps:
    - uses: actions/checkout@v2
    - name: make
      run: make
    - name: test
      run: |
        sudo apt-get install tcl8.6
        ./runtest --accurate --verbose
    - name: module api test
      run: ./runtest-moduleapi --verbose
    - name: sentinel tests
      run: ./runtest-sentinel
    - name: cluster tests
      run: ./runtest-cluster

  test-ubuntu-libc-malloc:
    runs-on: ubuntu-latest
    if: github.repository == 'redis/redis'
    timeout-minutes: 14400
    steps:
    - uses: actions/checkout@v2
    - name: make
      run: make MALLOC=libc
    - name: test
      run: |
        sudo apt-get install tcl8.6
        ./runtest --accurate --verbose
    - name: module api test
      run: ./runtest-moduleapi --verbose
    - name: sentinel tests
      run: ./runtest-sentinel
    - name: cluster tests
      run: ./runtest-cluster

  test-ubuntu-32bit:
    runs-on: ubuntu-latest
    if: github.repository == 'redis/redis'
    timeout-minutes: 14400
    steps:
    - uses: actions/checkout@v2
    - name: make
      run: |
        sudo apt-get update && sudo apt-get install libc6-dev-i386
        make 32bit
    - name: test
      run: |
        sudo apt-get install tcl8.6
        ./runtest --accurate --verbose
    - name: module api test
      run: |
        make -C tests/modules 32bit # the script below doesn't have an argument, we must build manually ahead of time
        ./runtest-moduleapi --verbose
    - name: sentinel tests
      run: ./runtest-sentinel
    - name: cluster tests
      run: ./runtest-cluster

  test-ubuntu-tls:
    runs-on: ubuntu-latest
    if: github.repository == 'redis/redis'
    timeout-minutes: 14400
    steps:
    - uses: actions/checkout@v2
    - name: make
      run: |
        make BUILD_TLS=yes
    - name: test
      run: |
        sudo apt-get install tcl8.6 tcl-tls
        ./utils/gen-test-certs.sh
        ./runtest --accurate --verbose --tls
        ./runtest --accurate --verbose
    - name: module api test
      run: |
        ./runtest-moduleapi --verbose --tls
        ./runtest-moduleapi --verbose
    - name: sentinel tests
      run: |
        ./runtest-sentinel --tls
        ./runtest-sentinel
    - name: cluster tests
      run: |
        ./runtest-cluster --tls
        ./runtest-cluster

  test-valgrind:
    runs-on: ubuntu-latest
    if: github.repository == 'redis/redis'
    timeout-minutes: 14400
    steps:
    - uses: actions/checkout@v2
    - name: make
      run: make valgrind
    - name: test
      run: |
        sudo apt-get update
        sudo apt-get install tcl8.6 valgrind -y
        ./runtest --valgrind --verbose --clients 1
    - name: module api test
      run: ./runtest-moduleapi --valgrind --verbose --clients 1

  test-centos7-jemalloc:
    runs-on: ubuntu-latest
    if: github.repository == 'redis/redis'
    container: centos:7
    timeout-minutes: 14400
    steps:
    - uses: actions/checkout@v2
    - name: make
      run: |
        yum -y install centos-release-scl
        yum -y install devtoolset-7
        scl enable devtoolset-7 "make"
    - name: test
      run: |
        yum -y install tcl
        ./runtest --accurate --verbose
    - name: module api test
      run: ./runtest-moduleapi --verbose
    - name: sentinel tests
      run: ./runtest-sentinel
    - name: cluster tests
      run: ./runtest-cluster

  test-centos7-tls:
    runs-on: ubuntu-latest
    if: github.repository == 'redis/redis'
    container: centos:7
    timeout-minutes: 14400
    steps:
    - uses: actions/checkout@v2
    - name: make
      run: |
        yum -y install centos-release-scl epel-release
        yum -y install devtoolset-7 openssl-devel openssl
        scl enable devtoolset-7 "make BUILD_TLS=yes"
    - name: test
      run: |
        yum -y install tcl tcltls
        ./utils/gen-test-certs.sh
        ./runtest --accurate --verbose --tls
        ./runtest --accurate --verbose
    - name: module api test
      run: |
        ./runtest-moduleapi --verbose --tls
        ./runtest-moduleapi --verbose
    - name: sentinel tests
      run: |
        ./runtest-sentinel --tls
        ./runtest-sentinel
    - name: cluster tests
      run: |
        ./runtest-cluster --tls
        ./runtest-cluster

  test-macos-latest:
    runs-on: macos-latest
    if: github.repository == 'redis/redis'
    timeout-minutes: 14400
    steps:
    - uses: actions/checkout@v2
    - name: make
      run: make
    - name: test
      run: |
        ./runtest --accurate --verbose --no-latency
    - name: module api test
      run: ./runtest-moduleapi --verbose
    - name: sentinel tests
      run: ./runtest-sentinel
    - name: cluster tests
      run: ./runtest-cluster

  test-alpine-jemalloc:
    runs-on: ubuntu-latest
    if: github.repository == 'redis/redis'
    container: alpine:latest
    steps:
    - uses: actions/checkout@v2
    - name: make
      run: |
          apk add build-base
          make REDIS_CFLAGS='-Werror'
    - name: test
      run: |
        apk add tcl procps
        ./runtest --accurate --verbose
    - name: module api test
      run: ./runtest-moduleapi --verbose
    - name: sentinel tests
      run: ./runtest-sentinel
    - name: cluster tests
      run: ./runtest-cluster

  test-alpine-libc-malloc:
    runs-on: ubuntu-latest
    if: github.repository == 'redis/redis'
    container: alpine:latest
    steps:
    - uses: actions/checkout@v2
    - name: make
      run: |
          apk add build-base
          make REDIS_CFLAGS='-Werror' USE_JEMALLOC=no
    - name: test
      run: |
        apk add tcl procps
        ./runtest --accurate --verbose
    - name: module api test
      run: ./runtest-moduleapi --verbose
    - name: sentinel tests
      run: ./runtest-sentinel
    - name: cluster tests
      run: ./runtest-cluster
