# Copyright (c) 2020 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 - EFR32

on:
  push:
    branches:
      - master
      - 'v*-branch'
  pull_request:
  merge_group:

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:
  efr32:
    name: EFR32

    env:
      SILABS_BOARD: BRD4187C
      BUILD_TYPE: gn_efr32

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

    container:
      image: ghcr.io/project-chip/chip-build-efr32:81
      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: silabs_docker

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

      - name: Test SLC gen
        timeout-minutes: 30
        run: |
          scripts/examples/gn_silabs_example.sh examples/lighting-app/silabs ./out/light-app BRD4187C --slc_generate --docker
          rm -rf ./out/
      - name: Build some BRD4187C variants (1)
        run: |
          ./scripts/run_in_build_env.sh \
             "./scripts/build/build_examples.py \
                --enable-flashbundle \
                --target efr32-brd4187c-thermostat-openthread-mtd \
                --target efr32-brd4187c-air-quality-sensor-app-openthread-mtd \
                --target efr32-brd4187c-switch-shell-use-ot-coap-lib \
                --target efr32-brd4187c-unit-test \
                build \
                --copy-artifacts-to out/artifacts \
             "
      - name: Clean out build output
        run: rm -rf ./out
      - name: Build some BRD4187C variants (2)
        run: |
          ./scripts/run_in_build_env.sh \
             "./scripts/build/build_examples.py \
                --enable-flashbundle \
                --target efr32-brd4187c-light-use-ot-lib \
                --target efr32-brd4187c-pump \
                --target efr32-brd4187c-lock-shell-heap-monitoring \
                build \
                --copy-artifacts-to out/artifacts \
             "
      - name: Clean out build output
        run: rm -rf ./out
      - name: Build BRD4187C variants (3)
        run: |
          ./scripts/run_in_build_env.sh \
             "./scripts/build/build_examples.py \
                --enable-flashbundle \
                --target efr32-brd4187c-window-covering-additional-data-advertising \
                --target efr32-brd4187c-light-rpc \
                build \
                --copy-artifacts-to out/artifacts \
             "
      - name: Prepare some bloat report from the previous builds
        run: |
          .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
             efr32 BRD4187C lighting-app \
             out/efr32-brd4187c-light-rpc/matter-silabs-lighting-example.out \
             /tmp/bloat_reports/
          .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py  \
             efr32 BRD4187C window-app \
             out/efr32-brd4187c-window-covering-additional-data-advertising/matter-silabs-window-example.out \
             /tmp/bloat_reports/
      - name: Clean out build output
        run: rm -rf ./out
      - name: Build BRD4338A WiFi Soc variants
        run: |
          ./scripts/run_in_build_env.sh \
             "./scripts/build/build_examples.py \
                --enable-flashbundle \
                --target efr32-brd4338a-light-skip-rps-generation \
                --target efr32-brd4338a-lock-skip-rps-generation \
                build \
                --copy-artifacts-to out/artifacts \
             "
      - name: Prepare bloat report for brd4338a lock app
        run: |
          .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
            efr32 BRD4338a lock-app \
            out/efr32-brd4338a-lock-skip-rps-generation/matter-silabs-lock-example.out \
            /tmp/bloat_reports/
      - name: Clean out build output
        run: rm -rf ./out
      - name: Build BRD2605A WiFi Soc variants
        run: |
          ./scripts/run_in_build_env.sh \
             "./scripts/build/build_examples.py \
                --enable-flashbundle \
                --target efr32-brd2605a-light-skip-rps-generation \
                --target efr32-brd2605a-lock-skip-rps-generation \
                build \
                --copy-artifacts-to out/artifacts \
             "
      - name: Prepare bloat report for brd2605a lock app
        run: |
          .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
            efr32 BRD2605a lock-app \
            out/efr32-brd2605a-lock-skip-rps-generation/matter-silabs-lock-example.out \
            /tmp/bloat_reports/
      - name: Clean out build output
        run: rm -rf ./out
      - name: Build EFR32 with WiFi NCP
        run: |
          ./scripts/run_in_build_env.sh \
            "./scripts/build/build_examples.py \
                --enable-flashbundle \
                --target efr32-brd4187c-lock-wifi-siwx917 \
                --target efr32-brd4187c-light-wifi-rs9116 \
                --target efr32-brd4187c-lock-wifi-wf200 \
                build \
                --copy-artifacts-to out/artifacts \
            "
      - name: Clean out build output
        run: rm -rf ./out
      - name: Uploading Size Reports
        uses: ./.github/actions/upload-size-reports
        if: ${{ !env.ACT }}
        with:
          platform-name: EFR32
