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

on:
    push:
        branches-ignore:
            - 'dependabot/**'
    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:
    qpg:
        name: QPG

        env:
            BUILD_TYPE: gn_qpg

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

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

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

            - name: Build QPG6105 example apps
              run: |
                  ./scripts/run_in_build_env.sh \
                     "./scripts/build/build_examples.py \
                        --enable-flashbundle \
                        --target qpg-qpg6105-lock \
                        --target qpg-qpg6105-light \
                        --target qpg-qpg6105-light-switch \
                        --target qpg-qpg6105-thermostat \
                        build \
                        --copy-artifacts-to out/artifacts \
                     "
            - name: Build Matter SDK library
              run: |
                  config/qpg/chip-gn/build.sh

            - name: Prepare some bloat report from the previous builds
              run: |
                  .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                    qpg qpg6105+debug lighting-app \
                    out/qpg-qpg6105-light/chip-qpg6105-lighting-example.out \
                    /tmp/bloat_reports/
                  .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                    qpg qpg6105+debug lock-app \
                    out/qpg-qpg6105-lock/chip-qpg6105-lock-example.out \
                    /tmp/bloat_reports/
            - name: Uploading Size Reports
              uses: ./.github/actions/upload-size-reports
              if: ${{ !env.ACT }}
              with:
                platform-name: QPG
