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

env:
    CHIP_NO_LOG_TIMESTAMPS: true

jobs:
    mbedos:
        name: Mbed OS examples building

        env:
            PLATFORM_NAME: mbed
            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.7.3
            volumes:
                - "/tmp/bloat_reports:/tmp/bloat_reports"

        steps:
            - name: Checkout
              uses: actions/checkout@v3
            - name: Checkout submodules & Bootstrap
              uses: ./.github/actions/checkout-submodules-and-bootstrap
              with:
                platform: mbed

            - name: Set up environment for size reports
              uses: ./.github/actions/setup-size-reports
              if: ${{ !env.ACT }}
              with:
                gh-context: ${{ toJson(github) }}

            - name: Build lock-app example
              run: |
                  ./scripts/run_in_build_env.sh \
                    "./scripts/build/build_examples.py \
                      --target $PLATFORM_NAME-$APP_TARGET-lock-$APP_PROFILE \
                      build \
                    "
                  .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                    $PLATFORM_NAME $APP_TARGET lock-app-$APP_PROFILE \
                    out/$PLATFORM_NAME-$APP_TARGET-lock-$APP_PROFILE/chip-mbed-lock-app-example.elf \
                    /tmp/bloat_reports/
                  rm -rf ./out

            - name: Build lighting-app example
              if: github.event_name == 'push'
              run: |
                  ./scripts/run_in_build_env.sh \
                    "./scripts/build/build_examples.py \
                      --target $PLATFORM_NAME-$APP_TARGET-light-$APP_PROFILE \
                      build \
                    "
                  .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                    $PLATFORM_NAME $APP_TARGET lighting-app-$APP_PROFILE \
                    out/$PLATFORM_NAME-$APP_TARGET-light-$APP_PROFILE/chip-mbed-lighting-app-example.elf \
                    /tmp/bloat_reports/
                  rm -rf ./out

            - name: Build pigweed-app example
              if: github.event_name == 'push'
              run: |
                  ./scripts/run_in_build_env.sh \
                    "./scripts/build/build_examples.py \
                      --target $PLATFORM_NAME-$APP_TARGET-pigweed-$APP_PROFILE \
                      build \
                    "
                  .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                    $PLATFORM_NAME $APP_TARGET pigweed-app-$APP_PROFILE \
                    out/$PLATFORM_NAME-$APP_TARGET-pigweed-$APP_PROFILE/chip-mbed-pigweed-app-example.elf \
                    /tmp/bloat_reports/
                  rm -rf ./out

            - name: Build all-clusters-app example
              if: github.event_name == 'push'
              run: |
                  ./scripts/run_in_build_env.sh \
                    "./scripts/build/build_examples.py \
                      --target $PLATFORM_NAME-$APP_TARGET-all-clusters-$APP_PROFILE \
                      build \
                    "
                  .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                    $PLATFORM_NAME $APP_TARGET all-clusters-app-$APP_PROFILE \
                    out/$PLATFORM_NAME-$APP_TARGET-all-clusters-$APP_PROFILE/chip-mbed-all-clusters-app-example.elf \
                    /tmp/bloat_reports/
                  rm -rf ./out

            - name: Build all-clusters-minimal-app example
              if: github.event_name == 'push'
              run: |
                  ./scripts/run_in_build_env.sh \
                    "./scripts/build/build_examples.py \
                      --target $PLATFORM_NAME-$APP_TARGET-all-clusters-minimal-$APP_PROFILE \
                      build \
                    "
                  .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                    $PLATFORM_NAME $APP_TARGET all-clusters-minimal-app-$APP_PROFILE \
                    out/$PLATFORM_NAME-$APP_TARGET-all-clusters-minimal-$APP_PROFILE/chip-mbed-all-clusters-minimal-app-example.elf \
                    /tmp/bloat_reports/
                  rm -rf ./out

            - name: Build shell example
              if: github.event_name == 'push'
              run: |
                  ./scripts/run_in_build_env.sh \
                    "./scripts/build/build_examples.py \
                      --target $PLATFORM_NAME-$APP_TARGET-shell-$APP_PROFILE \
                      build \
                    "
                  .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                    $PLATFORM_NAME $APP_TARGET shell-app-$APP_PROFILE \
                    out/$PLATFORM_NAME-$APP_TARGET-shell-$APP_PROFILE/chip-mbed-shell-example.elf \
                    /tmp/bloat_reports/
                  rm -rf ./out

            - name: Build ota-requestor-app example
              if: github.event_name == 'push'
              run: |
                  ./scripts/run_in_build_env.sh \
                    "./scripts/build/build_examples.py \
                      --target $PLATFORM_NAME-$APP_TARGET-ota-requestor-$APP_PROFILE \
                      build \
                    "
                  .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                    $PLATFORM_NAME $APP_TARGET ota-requestor-app-$APP_PROFILE \
                    out/$PLATFORM_NAME-$APP_TARGET-ota-requestor-$APP_PROFILE/chip-mbed-ota-requestor-app-example.elf \
                    /tmp/bloat_reports/
                  rm -rf ./out

            - name: Build unit tests
              # Temporarily disable build due to running out of flash space
              if: false
              run: scripts/tests/mbed/mbed_unit_tests.sh -b=$APP_TARGET -p=$APP_PROFILE

            - name: Uploading Size Reports
              uses: ./.github/actions/upload-size-reports
              if: ${{ !env.ACT }}
              with:
                platform-name: Mbed
