# 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 - BouffaloLab

on:
  push:
    branches:
      - master
      - 'v*-branch'
  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:
  bouffalolab:
    name: Bouffalo Lab

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

    container:
      image: ghcr.io/project-chip/chip-build-bouffalolab: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: bouffalolab
          extra-submodule-parameters: " --recursive"
      - name: Set up environment for size reports
        uses: ./.github/actions/setup-size-reports
        if: ${{ !env.ACT }}
        with:
          gh-context: ${{ toJson(github) }}
      - name: Build example BL602 Lighting App
        run: |
          ./scripts/run_in_build_env.sh \
            "./scripts/build/build_examples.py \
              --target bouffalolab-bl602dk-light-mfd-littlefs-rpc-115200 \
              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 \
              bl602 bl602+mfd+littlefs+rpc lighting-app \
              out/artifacts/bouffalolab-bl602dk-light-mfd-littlefs-rpc-115200/chip-bl602-lighting-example.out \
              /tmp/bloat_reports/
      - name: Clean out build output
        run: rm -rf ./out

      - name: Build example BL702 Lighting App
        run: |
          ./scripts/run_in_build_env.sh \
            "./scripts/build/build_examples.py \
              --target bouffalolab-bl706dk-light-ethernet-easyflash \
              --target bouffalolab-bl706dk-light-wifi-littlefs \
              --target bouffalolab-bl706dk-light-mfd-rpc-littlefs-115200 \
              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 \
              bl702 bl702+eth lighting-app \
              out/artifacts/bouffalolab-bl706dk-light-ethernet-easyflash/chip-bl702-lighting-example.out \
              /tmp/bloat_reports/
          .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
              bl702 bl702+wifi lighting-app \
              out/artifacts/bouffalolab-bl706dk-light-wifi-littlefs/chip-bl702-lighting-example.out \
              /tmp/bloat_reports/
          .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
              bl702 bl706+mfd+rpc+littlefs lighting-app \
              out/artifacts/bouffalolab-bl706dk-light-mfd-rpc-littlefs-115200/chip-bl702-lighting-example.out \
              /tmp/bloat_reports/
      - name: Clean out build output
        run: rm -rf ./out

      - name: Build example BL702L Lighting App
        timeout-minutes: 30
        run: |
          ./scripts/run_in_build_env.sh \
            "./scripts/build/build_examples.py \
              --target bouffalolab-bl704ldk-light-mfd-littlefs \
              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 \
              bl702l bl702l+mfd+littlefs lighting-app \
              out/artifacts/bouffalolab-bl704ldk-light-mfd-littlefs/chip-bl702l-lighting-example.out \
              /tmp/bloat_reports/
      - 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: BouffaloLab