#
#  Copyright (c) 2021, The OpenThread Authors.
#  All rights reserved.
#
#  Redistribution and use in source and binary forms, with or without
#  modification, are permitted provided that the following conditions are met:
#  1. Redistributions of source code must retain the above copyright
#     notice, this list of conditions and the following disclaimer.
#  2. Redistributions in binary form must reproduce the above copyright
#     notice, this list of conditions and the following disclaimer in the
#     documentation and/or other materials provided with the distribution.
#  3. Neither the name of the copyright holder nor the
#     names of its contributors may be used to endorse or promote products
#     derived from this software without specific prior written permission.
#
#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
#  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
#  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
#  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
#  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
#  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
#  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
#  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
#  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
#  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
#  POSSIBILITY OF SUCH DAMAGE.
#

name: Border Router

on: [push, pull_request]

jobs:

  cancel-previous-runs:
    runs-on: ubuntu-20.04
    steps:
    - uses: rokroskar/workflow-run-cleanup-action@master
      env:
        GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
      if: "github.ref != 'refs/heads/main'"

  backbone-router:
    runs-on: ubuntu-20.04
    env:
      REFERENCE_DEVICE: 1
      VIRTUAL_TIME: 0
      PACKET_VERIFICATION: 1
      THREAD_VERSION: 1.2
      INTER_OP: 1
      COVERAGE: 1
      MULTIPLY: 1
      PYTHONUNBUFFERED: 1
      VERBOSE: 1
      # The Border Routing and DUA feature can coexist, but current wireshark
      # packet verification can't handle it because of the order of context ID
      # of OMR prefix and Domain prefix is not deterministic.
      BORDER_ROUTING: 0
    steps:
    - uses: actions/checkout@v2
      with:
        submodules: true
    - name: Get Border Router Test ID
      id: unique_action_id
      env:
        GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
      run: |
        ./script/git-tool clone https://github.com/openthread/ot-br-posix.git --depth 1 "/tmp/otbr_unique_action_id"
        echo ::set-output  name=id::${GITHUB_WORKFLOW}-${GITHUB_JOB}-${GITHUB_RUN_ID}-$(cd /tmp/otbr_unique_action_id/ && git rev-parse HEAD)
    - name: Check cached result
      id: check_cache_result
      uses: actions/cache@v2
      with:
        path: |
          _test_complete_
        key: "_test_complete_${{ steps.unique_action_id.outputs.id }}"
    - name: Build OTBR Docker
      if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
      env:
        GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
      run: |
        ./script/test build_otbr_docker
    - name: Bootstrap
      if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
      run: |
        sudo rm /etc/apt/sources.list.d/* && sudo apt-get update
        sudo apt-get --no-install-recommends install -y python3-setuptools python3-wheel ninja-build socat lcov
        python3 -m pip install -r tests/scripts/thread-cert/requirements.txt
    - name: Build
      if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
      run: |
        ./script/test build
    - name: Get Thread-Wireshark
      if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
      run: |
        ./script/test get_thread_wireshark
    - name: Run
      if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
      run: |
        export CI_ENV="$(bash <(curl -s https://codecov.io/env)) -e GITHUB_ACTIONS -e COVERAGE"
        echo "CI_ENV=${CI_ENV}"
        sudo -E ./script/test cert_suite ./tests/scripts/thread-cert/backbone/*.py || (sudo chmod a+r *.log *.json *.pcap && false)
    - uses: actions/upload-artifact@v2
      if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
      with:
        name: cov-thread-1-2-backbone-docker
        path: /tmp/coverage/
    - uses: actions/upload-artifact@v2
      if: ${{ failure() && steps.check_cache_result.outputs.cache-hit != 'true' }}
      with:
        name: thread-1-2-backbone-results
        path: |
          *.pcap
          *.json
          *.log
          coredump_*
          otbr-agent_*
    - name: Generate Coverage
      if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
      run: |
        ./script/test generate_coverage gcc
    - uses: actions/upload-artifact@v2
      if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
      with:
        name: cov-thread-1-2-backbone
        path: tmp/coverage.info
    - name: Cache test result
      if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
      run: |
        mkdir _test_complete_

  thread-border-router:
    runs-on: ubuntu-20.04
    strategy:
      fail-fast: false
      matrix:
        include:
          - otbr_mdns: "mDNSResponder"
            otbr_trel: 0
            cert_scripts: ./tests/scripts/thread-cert/border_router/*.py
            packet_verification: 1
            description: ""
          - otbr_mdns: "mDNSResponder"
            otbr_trel: 1
            cert_scripts: ./tests/scripts/thread-cert/border_router/*.py
            packet_verification: 2
            description: ""
          - otbr_mdns: "mDNSResponder"
            otbr_trel: 0
            cert_scripts: ./tests/scripts/thread-cert/border_router/MATN/*.py
            packet_verification: 1
            description: "MATN"
          - otbr_mdns: "avahi"
            otbr_trel: 0
            cert_scripts: ./tests/scripts/thread-cert/border_router/*.py
            packet_verification: 1
            description: ""
          - otbr_mdns: "avahi"
            otbr_trel: 1
            cert_scripts: ./tests/scripts/thread-cert/border_router/*.py
            packet_verification: 2
            description: ""
    name: BR ${{ matrix.description }} (${{ matrix.otbr_mdns }}, TREL=${{matrix.otbr_trel}})
    env:
      REFERENCE_DEVICE: 1
      VIRTUAL_TIME: 0
      PACKET_VERIFICATION: ${{ matrix.packet_verification }}
      THREAD_VERSION: 1.2
      INTER_OP: 1
      COVERAGE: 1
      MULTIPLY: 1
      OTBR_MDNS: ${{ matrix.otbr_mdns }}
      PYTHONUNBUFFERED: 1
      VERBOSE: 1
      BORDER_ROUTING: 1
      MAX_JOBS: 3
    steps:
    - uses: actions/checkout@v2
    - name: Get Border Router Test ID
      id: unique_action_id
      env:
        GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
      run: |
        ./script/git-tool clone https://github.com/openthread/ot-br-posix.git --depth 1 "/tmp/otbr_unique_action_id"
        echo ::set-output  name=id::${GITHUB_WORKFLOW}-${GITHUB_JOB}-${GITHUB_RUN_ID}-$(cd /tmp/otbr_unique_action_id/ && git rev-parse HEAD)-${{matrix.otbr_mdns}}-trel${{matrix.otbr_trel}}
    - name: Check cached result
      id: check_cache_result
      uses: actions/cache@v2
      with:
        path: |
          _test_complete_
        key: "_test_complete_${{ steps.unique_action_id.outputs.id }}"
    - name: Build OTBR Docker
      if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
      env:
        GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
        TREL: ${{ matrix.otbr_trel }}
      run: |
        ./script/test build_otbr_docker
    - name: Bootstrap
      if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
      run: |
        sudo rm /etc/apt/sources.list.d/* && sudo apt-get update
        sudo apt-get --no-install-recommends install -y python3-setuptools python3-wheel ninja-build socat lcov
        python3 -m pip install -r tests/scripts/thread-cert/requirements.txt
    - name: Build
      if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
      run: |
        ./script/test build
    - name: Get Thread-Wireshark
      if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
      run: |
        ./script/test get_thread_wireshark
    - name: Run
      if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
      run: |
        export CI_ENV="$(bash <(curl -s https://codecov.io/env)) -e GITHUB_ACTIONS -e COVERAGE"
        echo "CI_ENV=${CI_ENV}"
        sudo -E ./script/test cert_suite ${{ matrix.cert_scripts }} || (sudo chmod a+r *.log *.json *.pcap && false)
    - uses: actions/upload-artifact@v2
      if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
      with:
        name: cov-thread-border-router-docker
        path: /tmp/coverage/
    - uses: actions/upload-artifact@v2
      if: ${{ failure() && steps.check_cache_result.outputs.cache-hit != 'true' }}
      with:
        name: thread-border-router-results
        path: |
          *.pcap
          *.json
          *.log
          coredump_*
          otbr-agent_*
    - name: Generate Coverage
      if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
      run: |
        ./script/test generate_coverage gcc
    - uses: actions/upload-artifact@v2
      if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
      with:
        name: cov-thread-border-router
        path: tmp/coverage.info
    - name: Cache test result
      if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
      run: |
        mkdir _test_complete_

  upload-coverage:
    needs:
    - backbone-router
    - thread-border-router
    runs-on: ubuntu-20.04
    steps:
    - uses: actions/checkout@v2
      with:
        submodules: true
    - name: Bootstrap
      run: |
        sudo apt-get --no-install-recommends install -y lcov
    - uses: actions/download-artifact@v2
      with:
        path: coverage/
    - name: Combine Coverage
      continue-on-error: true
      run: |
        script/test combine_coverage
    - name: Upload Coverage
      continue-on-error: true
      uses: codecov/codecov-action@v1
      with:
        files: final.info
        fail_ci_if_error: true

  delete-coverage-artifacts:
    needs: upload-coverage
    if: always()
    runs-on: ubuntu-20.04
    steps:
    - uses: geekyeggo/delete-artifact@1-glob-support
      with:
        name: cov-*
        useGlob: true
