name: Unit-tests D-in-D

on:
  workflow_call:
    inputs:
      freeswitch_ref:
        description: 'FreeSWITCH repository ref'
        required: false
        type: string
      sofia-sip_ref:
        description: 'Sofia-Sip repository ref'
        required: false
        type: string

env:
  MAX_CONTAINERS: 8
  NUM_CPU_PER_CONTAINER: 1
  DOCKER_BUILD_SUMMARY: false
  DOCKER_BUILD_CHECKS_ANNOTATIONS: false
  DOCKER_BUILD_RECORD_UPLOAD: false

jobs:
  unit-tests:
    runs-on: ubuntu-latest
    container:
      image: signalwire/freeswitch-public-ci-base:bookworm-amd64
      options: --privileged
    env:
      DEBIAN_FRONTEND: noninteractive
      ASAN_OPTIONS: log_path=stdout:disable_coredump=0:unmap_shadow_on_exit=1:fast_unwind_on_malloc=0

    steps:
      - name: Checkout Sofia-Sip (via ref)
        if: inputs.sofia-sip_ref != ''
        uses: actions/checkout@v4
        with:
          repository: freeswitch/sofia-sip
          ref: ${{ inputs.sofia-sip_ref }}
          path: sofia-sip

      - name: Checkout Sofia-Sip
        if: inputs.sofia-sip_ref == ''
        uses: actions/checkout@v4
        with:
          repository: freeswitch/sofia-sip
          path: sofia-sip

      - name: Checkout FreeSWITCH (via ref)
        if: inputs.freeswitch_ref != ''
        uses: actions/checkout@v4
        with:
          ref: ${{ inputs.freeswitch_ref }}
          path: freeswitch

      - name: Checkout FreeSWITCH
        if: inputs.freeswitch_ref == ''
        uses: actions/checkout@v4
        with:
          path: freeswitch

      - name: Run Unit-Test containers and collect artifacts
        id: unit_tests
        shell: bash
        run: |
          echo "logs_path=${GITHUB_WORKSPACE}/freeswitch/tests/unit/logs" >> $GITHUB_OUTPUT

          "${GITHUB_WORKSPACE}/freeswitch/tests/unit/run-tests-docker.sh" \
            --base-image signalwire/freeswitch-public-ci-base:bookworm-amd64 \
            --cpus ${{ env.NUM_CPU_PER_CONTAINER }} \
            --image-tag ci.local \
            --max-containers ${{ env.MAX_CONTAINERS }} \
            --output-dir "${GITHUB_WORKSPACE}/freeswitch/tests/unit/logs" \
            --sofia-sip-path "${GITHUB_WORKSPACE}/sofia-sip" \
            --freeswitch-path "${GITHUB_WORKSPACE}/freeswitch"

          test -d "/cores" && ls -lah /cores

          cd "${GITHUB_WORKSPACE}/freeswitch/tests/unit/" && \
          ./collect-test-logs.sh --dir logs --print

      - name: Upload Unit-Test logs
        if: failure()
        uses: actions/upload-artifact@v4
        with:
          name: test-results-${{ github.sha }}-${{ github.run_number }}
          path: ${{ steps.unit_tests.outputs.logs_path }}
          if-no-files-found: ignore
          compression-level: 9

      - name: Notify run tests result to slack
        if: |
          failure() &&
          github.event_name == 'push' &&
          (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/v1.10')
        uses: signalwire/actions-template/.github/actions/slack@main
        with:
          CHANNEL: ${{ secrets.SLACK_DEVOPS_CI_CHANNEL }}
          MESSAGE: Unit-Tests ${{ github.repository }} > <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|${{ github.run_id }}>. Some tests are failing.
        env:
          SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}