name: External Server Tests

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

concurrency:
  group: external-${{ github.head_ref || github.ref }}
  cancel-in-progress: true

permissions:
  contents: read

jobs:
  test-external-standalone:
    runs-on: ubuntu-latest
    if: github.event_name != 'schedule' || github.repository == 'valkey-io/valkey'
    timeout-minutes: 1440
    steps:
      - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
      - name: Build
        run: make SERVER_CFLAGS=-Werror
      - name: Start valkey-server
        run: |
          ./src/valkey-server --daemonize yes --save "" --logfile external-server.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 server log
        if: ${{ failure() }}
        uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
        with:
          name: test-external-standalone-log
          path: external-server.log

  test-external-cluster:
    runs-on: ubuntu-latest
    if: github.event_name != 'schedule' || github.repository == 'valkey-io/valkey'
    timeout-minutes: 1440
    steps:
      - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
      - name: Build
        run: make SERVER_CFLAGS=-Werror
      - name: Start valkey-server
        run: |
          ./src/valkey-server --cluster-enabled yes --daemonize yes --save "" --logfile external-server.log \
            --enable-protected-configs yes --enable-debug-command yes --enable-module-command yes
      - name: Create a single node cluster
        run: ./src/valkey-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 server log
        if: ${{ failure() }}
        uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
        with:
          name: test-external-cluster-log
          path: external-server.log

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