name: External Server Tests

on:
    pull_request:
    push:
    schedule:
      - cron: '0 0 * * *'

jobs:
  test-external-standalone:
    runs-on: ubuntu-latest
    if: github.event_name != 'schedule' || github.repository == 'redis/redis'
    timeout-minutes: 360
    steps:
    - uses: actions/checkout@v6
    - name: Build
      run: make REDIS_CFLAGS=-Werror
    - name: Start redis-server
      run: |
        ./src/redis-server --daemonize yes --save "" --logfile external-redis.log \
          --enable-protected-configs yes --enable-debug-command yes --enable-module-command yes
    - name: Run external test
      run: |
          ./runtest \
            --host 127.0.0.1 --port 6379 \
            --verbose \
            --tags -slow
    - name: Archive redis log
      if: ${{ failure() }}
      uses: actions/upload-artifact@v7
      with:
        name: test-external-redis-log
        path: external-redis.log

  test-external-cluster:
    runs-on: ubuntu-latest
    if: github.event_name != 'schedule' || github.repository == 'redis/redis'
    timeout-minutes: 360
    steps:
    - uses: actions/checkout@v6
    - name: Build
      run: make REDIS_CFLAGS=-Werror
    - name: Start redis-server
      run: |
        ./src/redis-server --cluster-enabled yes --daemonize yes --save "" --logfile external-redis-cluster.log \
          --enable-protected-configs yes --enable-debug-command yes --enable-module-command yes
    - name: Create a single node cluster
      run: ./src/redis-cli cluster addslots $(for slot in {0..16383}; do echo $slot; done); sleep 5
    - name: Run external test
      run: |
          ./runtest \
            --host 127.0.0.1 --port 6379 \
            --verbose \
            --cluster-mode \
            --tags -slow
    - name: Archive redis log
      if: ${{ failure() }}
      uses: actions/upload-artifact@v7
      with:
        name: test-external-cluster-log
        path: external-redis-cluster.log

  test-external-nodebug:
    runs-on: ubuntu-latest
    if: github.event_name != 'schedule' || github.repository == 'redis/redis'
    timeout-minutes: 360
    steps:
      - uses: actions/checkout@v6
      - name: Build
        run: make REDIS_CFLAGS=-Werror
      - name: Start redis-server
        run: |
          ./src/redis-server --daemonize yes --save "" --logfile external-redis-nodebug.log
      - name: Run external test
        run: |
          ./runtest \
            --host 127.0.0.1 --port 6379 \
            --verbose \
            --tags "-slow -needs:debug"
      - name: Archive redis log
        if: ${{ failure() }}
        uses: actions/upload-artifact@v7
        with:
          name: test-external-redis-nodebug-log
          path: external-redis-nodebug.log
