# 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.6.06
            volumes:
                - "/tmp/bloat_reports:/tmp/bloat_reports"

        steps:
            - uses: Wandalen/wretry.action@v1.0.15
              name: Checkout
              with:
                  action: actions/checkout@v3
                  with: |
                      token: ${{ github.token }}
                  attempt_limit: 3
                  attempt_delay: 2000
            - name: Checkout submodules
              run: scripts/checkout_submodules.py --shallow --platform mbed

            - 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 all-clusters-minimal-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-minimal-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-minimal-app \
                    examples/all-clusters-minimal-app/mbed/build-CY8CPROTO_062_4343W/release/chip-mbed-all-clusters-minimal-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/
