# 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: ghcr.io/project-chip/chip-build-mbed-os:26
            volumes:
                - "/tmp/bloat_reports:/tmp/bloat_reports"

        steps:
            - name: Checkout
              uses: actions/checkout@v4
            - 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
