# 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:
        branches-ignore:
            - 'dependabot/**'
    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:47
            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
