# Copyright (c) 2021 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: Build example - Mbed OS

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:
    mbedos:
        name: Mbed OS examples building
        timeout-minutes: 200

        env:
            BUILD_TYPE: mbedos
            APP_PROFILE: release
            APP_TARGET: CY8CPROTO_062_4343W

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

        container:
            image: connectedhomeip/chip-build-mbed-os:0.5.56
            volumes:
                - "/tmp/bloat_reports:/tmp/bloat_reports"

        steps:
            - uses: Wandalen/wretry.action@v1.0.11
              name: Checkout
              with:
                  action: actions/checkout@v3
                  with: |
                      submodules: true
                      token: ${{ github.token }}
                  attempt_limit: 3
                  attempt_delay: 2000

            - name: Detect changed paths
              uses: dorny/paths-filter@v2
              id: changed_paths
              with:
                  filters: |
                      mbed:
                        - '**/mbed/**'
                      pigweedapp:
                        - 'examples/pigweed-app/mbed/**'

            - name: Set up environment for size reports
              if: ${{ !env.ACT }}
              env:
                  GH_CONTEXT: ${{ toJson(github) }}
              run: scripts/tools/memory/gh_sizes_environment.py "${GH_CONTEXT}"

            - name: Bootstrap
              timeout-minutes: 10
              run: scripts/build/gn_bootstrap.sh

            - name: Uploading bootstrap logs
              uses: actions/upload-artifact@v2
              if: ${{ always() }} && ${{ !env.ACT }}
              with:
                  name: bootstrap-logs
                  path: |
                      .environment/gn_out/.ninja_log
                      .environment/pigweed-venv/*.log

            - name: Build lock-app example
              timeout-minutes: 20
              run: |
                  scripts/examples/mbed_example.sh -a=lock-app -b=$APP_TARGET -p=$APP_PROFILE
                  .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                    mbed $APP_TARGET+$APP_PROFILE lock-app \
                    examples/lock-app/mbed/build-CY8CPROTO_062_4343W/release/chip-mbed-lock-app-example.elf \
                    /tmp/bloat_reports/

            - name: Build lighting-app example
              if: github.event_name == 'push' || steps.changed_paths.outputs.mbed == 'true'
              timeout-minutes: 20
              run: |
                  scripts/examples/mbed_example.sh -a=lighting-app -b=$APP_TARGET -p=$APP_PROFILE
                  .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                    mbed $APP_TARGET+$APP_PROFILE lighting-app \
                    examples/lighting-app/mbed/build-CY8CPROTO_062_4343W/release/chip-mbed-lighting-app-example.elf \
                    /tmp/bloat_reports/

            - name: Build pigweed-app example
              if: github.event_name == 'push' || steps.changed_paths.outputs.pigweedapp == 'true'
              timeout-minutes: 20
              run: |
                  scripts/examples/mbed_example.sh -a=pigweed-app -b=$APP_TARGET -p=$APP_PROFILE
                  .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                    mbed $APP_TARGET+$APP_PROFILE pigweed-app \
                    examples/pigweed-app/mbed/build-CY8CPROTO_062_4343W/release/chip-mbed-pigweed-app-example.elf \
                    /tmp/bloat_reports/

            - name: Build all-clusters-app example
              if: github.event_name == 'push' || steps.changed_paths.outputs.mbed == 'true'
              timeout-minutes: 20
              run: |
                  scripts/examples/mbed_example.sh -a=all-clusters-app -b=$APP_TARGET -p=$APP_PROFILE
                  .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                    mbed $APP_TARGET+$APP_PROFILE all-clusters-app \
                    examples/all-clusters-app/mbed/build-CY8CPROTO_062_4343W/release/chip-mbed-all-clusters-app-example.elf \
                    /tmp/bloat_reports/

            - name: Build shell example
              if: github.event_name == 'push' || steps.changed_paths.outputs.mbed == 'true'
              timeout-minutes: 20
              run: |
                  scripts/examples/mbed_example.sh -a=shell -b=$APP_TARGET -p=$APP_PROFILE
                  .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                    mbed $APP_TARGET+$APP_PROFILE shell \
                    examples/shell/mbed/build-CY8CPROTO_062_4343W/release/chip-mbed-shell-example.elf \
                    /tmp/bloat_reports/

            - name: Build ota-requestor-app example
              if: github.event_name == 'push' || steps.changed_paths.outputs.mbed == 'true'
              timeout-minutes: 20
              run: |
                  scripts/examples/mbed_example.sh -a=ota-requestor-app -b=$APP_TARGET -p=$APP_PROFILE
                  .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                    mbed $APP_TARGET+$APP_PROFILE shell \
                    examples/ota-requestor-app/mbed/build-CY8CPROTO_062_4343W/release/chip-mbed-ota-requestor-app-example.elf \
                    /tmp/bloat_reports/
            
            - name: Build unit tests
              # Temporarily disable build due to running out of flash space
              if: false
              timeout-minutes: 20
              run: scripts/tests/mbed/mbed_unit_tests.sh -b=$APP_TARGET -p=$APP_PROFILE

            - name: Uploading Size Reports
              uses: actions/upload-artifact@v2
              if: ${{ !env.ACT }}
              with:
                  name: Size,Mbed-Examples,${{ env.GH_EVENT_PR }},${{ env.GH_EVENT_HASH }},${{ env.GH_EVENT_PARENT }},${{ github.event_name }}
                  path: |
                      /tmp/bloat_reports/
