# Copyright (c) 2020 Project CHIP Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

name: Unit / Integration Tests

on:
    push:
    pull_request:
    merge_group:

concurrency:
    group: ${{ github.ref }}-${{ github.workflow }}-${{ (github.event_name == 'pull_request' && github.event.number) || (github.event_name == 'workflow_dispatch' && github.run_number) || github.sha }}
    cancel-in-progress: true

jobs:
    unit_tests:
        name: Unit / Integration Tests
        timeout-minutes: 60
        if: github.actor != 'restyled-io[bot]'

        strategy:
            matrix:
                type: [main, clang, mbedtls, rotating_device_id]
        env:
            BUILD_TYPE: ${{ matrix.type }}

        runs-on: ubuntu-latest

        container:
            image: connectedhomeip/chip-build:0.7.3
            volumes:
                - "/tmp/log_output:/tmp/test_logs"
            options: --privileged --sysctl "net.ipv6.conf.all.disable_ipv6=0 net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1"

        steps:
            - uses: Wandalen/wretry.action@v1.0.36
              name: Checkout
              with:
                  action: actions/checkout@v3
                  with: |
                      token: ${{ github.token }}
                  attempt_limit: 3
                  attempt_delay: 2000
            - name: Checkout submodules
              run: scripts/checkout_submodules.py --allow-changing-global-git-config --shallow --platform linux
            - name: Bootstrap
              timeout-minutes: 10
              run: |
                  mkdir -p /tmp/log_output ;
                  bash scripts/bootstrap.sh ;
            - name: Uploading bootstrap logs
              uses: actions/upload-artifact@v3
              if: ${{ always() && !env.ACT }}
              with:
                  name: bootstrap-logs
                  path: |
                      .environment/gn_out/.ninja_log
                      .environment/pigweed-venv/*.log
            - name: Artifact suffix
              id: outsuffix
              uses: haya14busa/action-cond@v1
              if: ${{ !env.ACT }}
              with:
                  cond: ${{ github.event.pull_request.number == '' }}
                  if_true: "${{ github.sha }}"
                  if_false: "pull-${{ github.event.pull_request.number }}"
            - name: Setup Build
              # TODO: If rotating_device_id is ever removed/combined, we have to cover boringssl otherwise
              run: |
                  case $BUILD_TYPE in
                     "main") GN_ARGS='';;
                     "clang") GN_ARGS='is_clang=true';;
                     "mbedtls") GN_ARGS='chip_crypto="mbedtls"';;
                     "rotating_device_id") GN_ARGS='chip_crypto="boringssl" chip_enable_rotating_device_id=true';;
                     *) ;;
                  esac

                  scripts/build/gn_gen.sh --args="$GN_ARGS"
            - name: Run Build
              timeout-minutes: 30
              run: scripts/run_in_build_env.sh "ninja -C out/$BUILD_TYPE"
            - name: Run Tests
              timeout-minutes: 30
              run: scripts/tests/gn_tests.sh
            # TODO Log Upload https://github.com/project-chip/connectedhomeip/issues/2227
            # TODO https://github.com/project-chip/connectedhomeip/issues/1512
            # - name: Run Code Coverage
            #   if: ${{ contains('main', env.BUILD_TYPE) }}
            #   run: scripts/tools/codecoverage.sh
            # - name: Upload Code Coverage
            #   if: ${{ contains('main', env.BUILD_TYPE) }}
            #   run: bash <(curl -s https://codecov.io/bash)
