# 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: Cirque

on:
  push:
  pull_request:
  workflow_dispatch:

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:
    cirque:
        name: Cirque
        timeout-minutes: 60
        
        env:
            DOCKER_RUN_VERSION: 0.5.23
            GITHUB_CACHE_PATH: /tmp/cirque-cache/

        runs-on: ubuntu-latest
        if: github.actor != 'restyled-io[bot]'

# need to run with privilege, which isn't supported by job.XXX.contaner
#  https://github.com/actions/container-action/issues/2
#         container:
#             image: connectedhomeip/chip-build-cirque:0.5.23
#             volumes:
#                 - "/tmp:/tmp"
#                 - "/dev/pts:/dev/pts"
#             env:
#                 LOG_DIR: /tmp/cirque_test_output/
#                 CLEANUP_DOCKER_FOR_CI: 1
#             options: "--privileged"

        steps:
            - name: Checkout
              uses: actions/checkout@v2
              with:
                  submodules: true

            - name: Get cirque cache key
              id: cirque-key
              run: |
                echo "::set-output name=val::$(scripts/tests/cirque_tests.sh cachekeyhash)"

            - name: Cache
              uses: actions/cache@v2
              if: ${{ !env.ACT }}
              id: cache
              with:
                  path: ${{ env.GITHUB_CACHE_PATH }}
                  key: ${{ runner.os }}-cirque-${{ steps.cirque-key.outputs.val }}
                  restore-keys: |
                    ${{ runner.os }}-cirque-

            - name: Bootstrap
              timeout-minutes: 10
              run: |
                  integrations/docker/images/chip-build-cirque/run.sh \
                    --env GITHUB_ACTION_RUN=1 \
                    --env GITHUB_CACHE_PATH=${{ env.GITHUB_CACHE_PATH }} \
                    --volume /tmp:/tmp \
                    -- scripts/build/gn_bootstrap.sh

            - name: Cirque Bootstrap
              timeout-minutes: 15
              run: |
                  integrations/docker/images/chip-build-cirque/run.sh \
                    --env GITHUB_ACTION_RUN=1 \
                    --env GITHUB_CACHE_PATH=${{ env.GITHUB_CACHE_PATH }} \
                    --volume /tmp:/tmp \
                    -- scripts/tests/cirque_tests.sh bootstrap
            - name: Artifact suffix
              id: outsuffix
              uses: haya14busa/action-cond@v1.0.0
              if: ${{ !env.ACT }}
              with:
                  cond: ${{ github.event.pull_request.number == '' }}
                  if_true: "${{ github.sha }}"
                  if_false: "pull-${{ github.event.pull_request.number }}"
            - name: Build Binaries
              timeout-minutes: 15
              run: |
                  integrations/docker/images/chip-build-cirque/run.sh \
                    --env GITHUB_ACTION_RUN=1 \
                    --env GITHUB_CACHE_PATH=${{ env.GITHUB_CACHE_PATH }} \
                    --volume /tmp:/tmp \
                    -- ./gn_build.sh \
                    chip_build_tests=false \
                    enable_host_gcc_build=true \
                    enable_host_gcc_mbedtls_build=false \
                    enable_host_clang_build = false
            - name: Run Tests
              timeout-minutes: 25
              run: |
                  integrations/docker/images/chip-build-cirque/run.sh \
                     --env LOG_DIR=/tmp/cirque_test_output \
                     --env CLEANUP_DOCKER_FOR_CI=1 \
                     --env GITHUB_ACTION_RUN=1 \
                     --privileged \
                     --volume /tmp:/tmp \
                     --volume /dev/pts:/dev/pts \
                     -- scripts/tests/cirque_tests.sh run_all_tests
            - name: Uploading Binaries
              uses: actions/upload-artifact@v2
              if: ${{ always() }} && ${{ !env.ACT }}
              with:
                  name:
                      cirque_log-${{steps.outsuffix.outputs.value}}-logs
                  path: /tmp/cirque_test_output/
