#
#  Copyright (c) 2020, 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: Toranj

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'"

  toranj-ncp:
    name: toranj-ncp-${{ matrix.TORANJ_RADIO }}
    runs-on: ubuntu-18.04
    strategy:
      fail-fast: false
      matrix:
        TORANJ_RADIO: ['15.4', 'trel', 'multi']
    env:
      COVERAGE: 1
      TORANJ_RADIO : ${{ matrix.TORANJ_RADIO }}
    steps:
    - uses: actions/checkout@v2
      with:
        submodules: true
    - name: Bootstrap
      env:
        GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
      run: |
        sudo rm /etc/apt/sources.list.d/* && sudo apt-get update
        sudo apt-get --no-install-recommends install -y dbus libdbus-1-dev
        sudo apt-get --no-install-recommends install -y autoconf-archive
        sudo apt-get --no-install-recommends install -y bsdtar
        sudo apt-get --no-install-recommends install -y libtool
        sudo apt-get --no-install-recommends install -y libglib2.0-dev
        sudo apt-get --no-install-recommends install -y libboost-dev libboost-signals-dev
        sudo apt-get --no-install-recommends install -y lcov

        script/git-tool clone --depth=1 --branch=master https://github.com/openthread/wpantund.git
        cd wpantund
        ./bootstrap.sh
        ./configure
        sudo make -j2
        sudo make install
    - name: Build & Run
      run: |
        top_builddir=$(pwd)/build/toranj ./tests/toranj/start.sh
    - name: Generate Coverage
      if: "matrix.TORANJ_RADIO != 'multi'"
      run: |
        ./script/test generate_coverage gcc
    - uses: actions/upload-artifact@v2
      if: "matrix.TORANJ_RADIO != 'multi'"
      with:
        name: cov-toranj-ncp-${{ matrix.TORANJ_RADIO }}
        path: tmp/coverage.info

  toranj-cli:
    name: toranj-cli-${{ matrix.TORANJ_RADIO }}
    runs-on: ubuntu-18.04
    strategy:
      matrix:
        TORANJ_RADIO: ['15.4']
    env:
      COVERAGE: 1
      TORANJ_RADIO : ${{ matrix.TORANJ_RADIO }}
      TORANJ_CLI: 1
    steps:
    - uses: actions/checkout@v2
      with:
        submodules: true
    - name: Bootstrap
      env:
        GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
      run: |
        sudo rm /etc/apt/sources.list.d/* && sudo apt-get update
        sudo apt-get --no-install-recommends install -y lcov
        python3 -m pip install -r tests/scripts/thread-cert/requirements.txt
    - name: Build & Run
      run: |
        top_builddir=$(pwd)/build/toranj ./tests/toranj/start.sh
    - name: Generate Coverage
      if: "matrix.TORANJ_RADIO != 'multi'"
      run: |
        ./script/test generate_coverage gcc
    - uses: actions/upload-artifact@v2
      if: "matrix.TORANJ_RADIO != 'multi'"
      with:
        name: cov-toranj-cli-${{ matrix.TORANJ_RADIO }}
        path: tmp/coverage.info

  upload-coverage:
    needs:
    - toranj-ncp
    - toranj-cli
    runs-on: ubuntu-18.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
      run: |
        script/test combine_coverage
    - name: Upload Coverage
      uses: codecov/codecov-action@v1
      with:
        files: final.info
        fail_ci_if_error: true

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